vendor: update vendor upspin.io to 2e37c3b, use new dep prune rules

Change-Id: Ibc77a8ae3df26458de8c8d83cd3e7356cff03c89
Reviewed-on: https://upspin-review.googlesource.com/18760
Reviewed-by: Rob Pike <r@golang.org>
diff --git a/Gopkg.lock b/Gopkg.lock
index ee5954f..52db942 100644
--- a/Gopkg.lock
+++ b/Gopkg.lock
@@ -22,30 +22,76 @@
 [[projects]]
   branch = "master"
   name = "golang.org/x/net"
-  packages = ["context","context/ctxhttp","xsrftoken"]
+  packages = [
+    "context",
+    "context/ctxhttp",
+    "xsrftoken"
+  ]
   revision = "4b14673ba32bee7f5ac0f990a48f033919fd418b"
 
 [[projects]]
   branch = "master"
   name = "golang.org/x/oauth2"
-  packages = [".","google","internal","jws","jwt"]
+  packages = [
+    ".",
+    "google",
+    "internal",
+    "jws",
+    "jwt"
+  ]
   revision = "bb50c06baba3d0c76f9d125c0719093e315b5b44"
 
 [[projects]]
   branch = "master"
   name = "golang.org/x/text"
-  packages = ["cases","internal","internal/gen","internal/tag","internal/triegen","internal/ucd","language","runes","secure/bidirule","secure/precis","transform","unicode/bidi","unicode/cldr","unicode/norm","unicode/rangetable","width"]
+  packages = [
+    "cases",
+    "internal",
+    "internal/gen",
+    "internal/tag",
+    "internal/triegen",
+    "internal/ucd",
+    "language",
+    "runes",
+    "secure/bidirule",
+    "secure/precis",
+    "transform",
+    "unicode/bidi",
+    "unicode/cldr",
+    "unicode/norm",
+    "unicode/rangetable",
+    "width"
+  ]
   revision = "6eab0e8f74e86c598ec3b6fad4888e0c11482d48"
 
 [[projects]]
   branch = "master"
   name = "google.golang.org/api"
-  packages = ["compute/v1","gensupport","googleapi","googleapi/internal/uritemplates","iam/v1","servicemanagement/v1","storage/v1"]
+  packages = [
+    "compute/v1",
+    "gensupport",
+    "googleapi",
+    "googleapi/internal/uritemplates",
+    "iam/v1",
+    "servicemanagement/v1",
+    "storage/v1"
+  ]
   revision = "52fedcc3d56e51c5f1a571d48092238ab2746c73"
 
 [[projects]]
   name = "google.golang.org/appengine"
-  packages = [".","internal","internal/app_identity","internal/base","internal/datastore","internal/log","internal/modules","internal/remote_api","internal/urlfetch","urlfetch"]
+  packages = [
+    ".",
+    "internal",
+    "internal/app_identity",
+    "internal/base",
+    "internal/datastore",
+    "internal/log",
+    "internal/modules",
+    "internal/remote_api",
+    "internal/urlfetch",
+    "urlfetch"
+  ]
   revision = "150dc57a1b433e64154302bdc40b6bb8aefa313a"
   version = "v1.0.0"
 
@@ -58,8 +104,57 @@
 [[projects]]
   branch = "master"
   name = "upspin.io"
-  packages = ["access","bind","cache","client","client/clientutil","client/file","cloud/mail","cmd/cacheserver/cacheutil","config","dir/inprocess","dir/remote","dir/unassigned","errors","factotum","flags","key/inprocess","key/keygen","key/proquint","key/remote","key/sha256key","key/transports","key/unassigned","key/usercache","log","metric","pack","pack/ee","pack/eeintegrity","pack/internal","pack/packutil","pack/plain","path","rpc","rpc/local","serverutil","serverutil/signup","shutdown","store/inprocess","store/remote","store/transports","store/unassigned","subcmd","transports","upspin","upspin/proto","user","valid","version"]
-  revision = "93ca68f0c0e2d8f1fb5d2c7a1e0138ef561f3ef3"
+  packages = [
+    "access",
+    "bind",
+    "cache",
+    "client",
+    "client/clientutil",
+    "client/file",
+    "cloud/mail",
+    "cmd/cacheserver/cacheutil",
+    "config",
+    "dir/inprocess",
+    "dir/remote",
+    "dir/unassigned",
+    "errors",
+    "factotum",
+    "flags",
+    "key/inprocess",
+    "key/keygen",
+    "key/proquint",
+    "key/remote",
+    "key/sha256key",
+    "key/transports",
+    "key/unassigned",
+    "key/usercache",
+    "log",
+    "metric",
+    "pack",
+    "pack/ee",
+    "pack/eeintegrity",
+    "pack/internal",
+    "pack/packutil",
+    "pack/plain",
+    "path",
+    "rpc",
+    "rpc/local",
+    "serverutil",
+    "serverutil/signup",
+    "shutdown",
+    "store/inprocess",
+    "store/remote",
+    "store/transports",
+    "store/unassigned",
+    "subcmd",
+    "transports",
+    "upspin",
+    "upspin/proto",
+    "user",
+    "valid",
+    "version"
+  ]
+  revision = "2e37c3b2c427b239f286de76ee3379ece3b2a636"
 
 [solve-meta]
   analyzer-name = "dep"
diff --git a/Gopkg.toml b/Gopkg.toml
index 3e55f69..27194ac 100644
--- a/Gopkg.toml
+++ b/Gopkg.toml
@@ -16,3 +16,9 @@
 [[constraint]]
   branch = "master"
   name = "upspin.io"
+
+[prune]
+  non-go = true
+  unused-packages = true
+  go-tests = true
+
diff --git a/vendor-update.sh b/vendor-update.sh
index 9b85297..9b0c7b8 100755
--- a/vendor-update.sh
+++ b/vendor-update.sh
@@ -5,17 +5,6 @@
 
 # The dep command can be obtained with "go get github.com/golang/dep/cmd/dep".
 
-# Update the upspin.io package.
 dep ensure -update upspin.io
-# Remove any vendored packages we don't use.
-dep prune
-# Delete test files.
-find vendor -name '*_test.go' -delete
-# Delete Google Cloud JSON API schemas.
-find vendor -name '*-api.json' -delete
-# Delete the cacheserver sources, which appear in the vendor directory because
-# we depend on cacheutil (a bug or deficiency in dep).
-find vendor/upspin.io/cmd/cacheserver -type f -depth 1 -delete
-
 git add vendor Gopkg.lock
 git gofmt
diff --git a/vendor/cloud.google.com/go/.travis.yml b/vendor/cloud.google.com/go/.travis.yml
deleted file mode 100644
index 8c769d7..0000000
--- a/vendor/cloud.google.com/go/.travis.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-sudo: false
-language: go
-go:
-- 1.6
-- 1.7
-- 1.8
-install:
-- go get -v cloud.google.com/go/...
-script:
-- openssl aes-256-cbc -K $encrypted_a8b3f4fc85f4_key -iv $encrypted_a8b3f4fc85f4_iv -in key.json.enc -out key.json -d
-- GCLOUD_TESTS_GOLANG_PROJECT_ID="dulcet-port-762" GCLOUD_TESTS_GOLANG_KEY="$(pwd)/key.json"
-  ./run-tests.sh $TRAVIS_COMMIT
-env:
-  matrix:
-    # The GCLOUD_TESTS_API_KEY environment variable.
-    secure: VdldogUOoubQ60LhuHJ+g/aJoBiujkSkWEWl79Zb8cvQorcQbxISS+JsOOp4QkUOU4WwaHAm8/3pIH1QMWOR6O78DaLmDKi5Q4RpkVdCpUXy+OAfQaZIcBsispMrjxLXnqFjo9ELnrArfjoeCTzaX0QTCfwQwVmigC8rR30JBKI=
diff --git a/vendor/cloud.google.com/go/CONTRIBUTING.md b/vendor/cloud.google.com/go/CONTRIBUTING.md
deleted file mode 100644
index f99b50d..0000000
--- a/vendor/cloud.google.com/go/CONTRIBUTING.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# Contributing
-
-1. Sign one of the contributor license agreements below.
-1. `go get golang.org/x/review/git-codereview` to install the code reviewing tool.
-    1. You will need to ensure that your `GOBIN` directory (by default
-       `$GOPATH/bin`) is in your `PATH` so that git can find the command.
-    1. If you would like, you may want to set up aliases for git-codereview,
-       such that `git codereview change` becomes `git change`. See the
-       [godoc](https://godoc.org/golang.org/x/review/git-codereview) for details.
-    1. Should you run into issues with the git-codereview tool, please note
-       that all error messages will assume that you have set up these
-       aliases.
-1. Get the cloud package by running `go get -d cloud.google.com/go`.
-    1. If you have already checked out the source, make sure that the remote git
-       origin is https://code.googlesource.com/gocloud:
-
-            git remote set-url origin https://code.googlesource.com/gocloud
-1. Make sure your auth is configured correctly by visiting
-   https://code.googlesource.com, clicking "Generate Password", and following
-   the directions.
-1. Make changes and create a change by running `git codereview change <name>`,
-provide a commit message, and use `git codereview mail` to create a Gerrit CL.
-1. Keep amending to the change with `git codereview change` and mail as your receive
-feedback. Each new mailed amendment will create a new patch set for your change in Gerrit.
-
-## Integration Tests
-
-In addition to the unit tests, you may run the integration test suite.
-
-To run the integrations tests, creating and configuration of a project in the
-Google Developers Console is required.
-
-After creating a project, you must [create a service account](https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount).
-Ensure the project-level **Owner** [IAM role](console.cloud.google.com/iam-admin/iam/project)
-(or **Editor** and **Logs Configuration Writer** roles) are added to the
-service account.
-
-Once you create a project, set the following environment variables to be able to
-run the against the actual APIs.
-
-- **GCLOUD_TESTS_GOLANG_PROJECT_ID**: Developers Console project's ID (e.g. bamboo-shift-455)
-- **GCLOUD_TESTS_GOLANG_KEY**: The path to the JSON key file.
-- **GCLOUD_TESTS_API_KEY**: Your API key.
-
-Firestore requires a different project and key:
-
-- **GCLOUD_TESTS_GOLANG_FIRESTORE_PROJECT_ID**: Developers Console project's ID
-  supporting Firestore
-- **GCLOUD_TESTS_GOLANG_FIRESTORE_KEY**: The path to the JSON key file.
-
-Install the [gcloud command-line tool][gcloudcli] to your machine and use it
-to create some resources used in integration tests.
-
-From the project's root directory:
-
-``` sh
-# Set the default project in your env.
-$ gcloud config set project $GCLOUD_TESTS_GOLANG_PROJECT_ID
-
-# Authenticate the gcloud tool with your account.
-$ gcloud auth login
-
-# Create the indexes used in the datastore integration tests.
-$ gcloud preview datastore create-indexes datastore/testdata/index.yaml
-
-# Create a Google Cloud storage bucket with the same name as your test project,
-# and with the Stackdriver Logging service account as owner, for the sink
-# integration tests in logging.
-$ gsutil mb gs://$GCLOUD_TESTS_GOLANG_PROJECT_ID
-$ gsutil acl ch -g cloud-logs@google.com:O gs://$GCLOUD_TESTS_GOLANG_PROJECT_ID
-
-# Create a Spanner instance for the spanner integration tests.
-$ gcloud beta spanner instances create go-integration-test --config regional-us-central1 --nodes 1 --description 'Instance for go client test'
-# NOTE: Spanner instances are priced by the node-hour, so you may want to delete
-# the instance after testing with 'gcloud beta spanner instances delete'.
-```
-
-Once you've set the environment variables, you can run the integration tests by
-running:
-
-``` sh
-$ go test -v cloud.google.com/go/...
-```
-
-## Contributor License Agreements
-
-Before we can accept your pull requests you'll need to sign a Contributor
-License Agreement (CLA):
-
-- **If you are an individual writing original source code** and **you own the
-- intellectual property**, then you'll need to sign an [individual CLA][indvcla].
-- **If you work for a company that wants to allow you to contribute your work**,
-then you'll need to sign a [corporate CLA][corpcla].
-
-You can sign these electronically (just scroll to the bottom). After that,
-we'll be able to accept your pull requests.
-
-## Contributor Code of Conduct
-
-As contributors and maintainers of this project,
-and in the interest of fostering an open and welcoming community,
-we pledge to respect all people who contribute through reporting issues,
-posting feature requests, updating documentation,
-submitting pull requests or patches, and other activities.
-
-We are committed to making participation in this project
-a harassment-free experience for everyone,
-regardless of level of experience, gender, gender identity and expression,
-sexual orientation, disability, personal appearance,
-body size, race, ethnicity, age, religion, or nationality.
-
-Examples of unacceptable behavior by participants include:
-
-* The use of sexualized language or imagery
-* Personal attacks
-* Trolling or insulting/derogatory comments
-* Public or private harassment
-* Publishing other's private information,
-such as physical or electronic
-addresses, without explicit permission
-* Other unethical or unprofessional conduct.
-
-Project maintainers have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct.
-By adopting this Code of Conduct,
-project maintainers commit themselves to fairly and consistently
-applying these principles to every aspect of managing this project.
-Project maintainers who do not follow or enforce the Code of Conduct
-may be permanently removed from the project team.
-
-This code of conduct applies both within project spaces and in public spaces
-when an individual is representing the project or its community.
-
-Instances of abusive, harassing, or otherwise unacceptable behavior
-may be reported by opening an issue
-or contacting one or more of the project maintainers.
-
-This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,
-available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)
-
-[gcloudcli]: https://developers.google.com/cloud/sdk/gcloud/
-[indvcla]: https://developers.google.com/open-source/cla/individual
-[corpcla]: https://developers.google.com/open-source/cla/corporate
diff --git a/vendor/cloud.google.com/go/MIGRATION.md b/vendor/cloud.google.com/go/MIGRATION.md
deleted file mode 100644
index 791210d..0000000
--- a/vendor/cloud.google.com/go/MIGRATION.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# Code Changes
-
-## v0.10.0
-
-- pubsub: Replace
-
-    ```
-    sub.ModifyPushConfig(ctx, pubsub.PushConfig{Endpoint: "https://example.com/push"})
-    ```
-
-  with
-
-    ```
-    sub.Update(ctx, pubsub.SubscriptionConfigToUpdate{
-        PushConfig: &pubsub.PushConfig{Endpoint: "https://example.com/push"},
-    })
-    ```
-
-- trace: traceGRPCServerInterceptor will be provided from *trace.Client.
-Given an initialized `*trace.Client` named `tc`, instead of
-
-    ```
-    s := grpc.NewServer(grpc.UnaryInterceptor(trace.GRPCServerInterceptor(tc)))
-    ```
-
-  write
-
-    ```
-    s := grpc.NewServer(grpc.UnaryInterceptor(tc.GRPCServerInterceptor()))
-    ```
-
-- trace trace.GRPCClientInterceptor will also provided from *trace.Client.
-Instead of
-
-    ```
-    conn, err := grpc.Dial(srv.Addr, grpc.WithUnaryInterceptor(trace.GRPCClientInterceptor()))
-    ```
-
-  write
-
-    ```
-    conn, err := grpc.Dial(srv.Addr, grpc.WithUnaryInterceptor(tc.GRPCClientInterceptor()))
-    ```
-
-- trace: We removed the deprecated `trace.EnableGRPCTracing`. Use the gRPC
-interceptor as a dial option as shown below when initializing Cloud package
-clients:
-
-    ```
-    c, err := pubsub.NewClient(ctx, "project-id", option.WithGRPCDialOption(grpc.WithUnaryInterceptor(tc.GRPCClientInterceptor())))
-    if err != nil {
-        ...
-    }
-    ```
diff --git a/vendor/cloud.google.com/go/README.md b/vendor/cloud.google.com/go/README.md
deleted file mode 100644
index 1e0e241..0000000
--- a/vendor/cloud.google.com/go/README.md
+++ /dev/null
@@ -1,514 +0,0 @@
-# Google Cloud Client Libraries for Go
-
-[![GoDoc](https://godoc.org/cloud.google.com/go?status.svg)](https://godoc.org/cloud.google.com/go)
-
-Go packages for [Google Cloud Platform](https://cloud.google.com) services.
-
-``` go
-import "cloud.google.com/go"
-```
-
-To install the packages on your system,
-
-```
-$ go get -u cloud.google.com/go/...
-```
-
-**NOTE:** Some of these packages are under development, and may occasionally
-make backwards-incompatible changes.
-
-**NOTE:** Github repo is a mirror of [https://code.googlesource.com/gocloud](https://code.googlesource.com/gocloud).
-
-  * [News](#news)
-  * [Supported APIs](#supported-apis)
-  * [Go Versions Supported](#go-versions-supported)
-  * [Authorization](#authorization)
-  * [Cloud Datastore](#cloud-datastore-)
-  * [Cloud Storage](#cloud-storage-)
-  * [Cloud Pub/Sub](#cloud-pub-sub-)
-  * [Cloud BigQuery](#cloud-bigquery-)
-  * [Stackdriver Logging](#stackdriver-logging-)
-  * [Cloud Spanner](#cloud-spanner-)
-
-
-## News
-
-*v0.15.0*
-
-_October 3, 2017_
-
-- firestore: beta release. See the
-  [announcement](https://firebase.googleblog.com/2017/10/introducing-cloud-firestore.html).
-
-- errorreporting: The existing package has been redesigned.
-
-- errors: This package has been removed. Use errorreporting.
-
-
-_September 28, 2017_
-
-*v0.14.0*
-
-- bigquery BREAKING CHANGES:
-  - Standard SQL is the default for queries and views.
-  - `Table.Create` takes `TableMetadata` as a second argument, instead of
-    options.
-  - `Dataset.Create` takes `DatasetMetadata` as a second argument.
-  - `DatasetMetadata` field `ID` renamed to `FullID`
-  - `TableMetadata` field `ID` renamed to `FullID`
-
-- Other bigquery changes:
-  - The client will append a random suffix to a provided job ID if you set
-    `AddJobIDSuffix` to true in a job config.
-  - Listing jobs is supported.
-  - Better retry logic.
-
-- vision, language, speech: clients are now stable
-
-- monitoring: client is now beta
-
-- profiler:
-  - Rename InstanceName to Instance, ZoneName to Zone
-  - Auto-detect service name and version on AppEngine.
-
-_September 8, 2017_
-
-*v0.13.0*
-
-- bigquery: UseLegacySQL options for CreateTable and QueryConfig. Use these
-  options to continue using Legacy SQL after the client switches its default
-  to Standard SQL.
-
-- bigquery: Support for updating dataset labels.
-
-- bigquery: Set DatasetIterator.ProjectID to list datasets in a project other
-  than the client's. DatasetsInProject is no longer needed and is deprecated.
-
-- bigtable: Fail ListInstances when any zones fail.
-
-- spanner: support decoding of slices of basic types (e.g. []string, []int64,
-  etc.)
-
-- logging/logadmin: UpdateSink no longer creates a sink if it is missing
-  (actually a change to the underlying service, not the client)
-
-- profiler: Service and ServiceVersion replace Target in Config.
-
-_August 22, 2017_
-
-*v0.12.0*
-
-- pubsub: Subscription.Receive now uses streaming pull.
-
-- pubsub: add Client.TopicInProject to access topics in a different project
-  than the client.
-
-- errors: renamed errorreporting. The errors package will be removed shortly.
-
-- datastore: improved retry behavior.
-
-- bigquery: support updates to dataset metadata, with etags.
-
-- bigquery: add etag support to Table.Update (BREAKING: etag argument added).
-
-- bigquery: generate all job IDs on the client.
-
-- storage: support bucket lifecycle configurations.
-
-
-[Older news](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/old-news.md)
-
-## Supported APIs
-
-Google API                       | Status       | Package
----------------------------------|--------------|-----------------------------------------------------------
-[Datastore][cloud-datastore]     | stable       | [`cloud.google.com/go/datastore`][cloud-datastore-ref]
-[Firestore][cloud-firestore]     | beta         | [`cloud.google.com/go/firestore`][cloud-firestore-ref]
-[Storage][cloud-storage]         | stable       | [`cloud.google.com/go/storage`][cloud-storage-ref]
-[Bigtable][cloud-bigtable]       | beta         | [`cloud.google.com/go/bigtable`][cloud-bigtable-ref]
-[BigQuery][cloud-bigquery]       | beta         | [`cloud.google.com/go/bigquery`][cloud-bigquery-ref]
-[Logging][cloud-logging]         | stable       | [`cloud.google.com/go/logging`][cloud-logging-ref]
-[Monitoring][cloud-monitoring]   | beta         | [`cloud.google.com/go/monitoring/apiv3`][cloud-monitoring-ref]
-[Pub/Sub][cloud-pubsub]          | beta         | [`cloud.google.com/go/pubsub`][cloud-pubsub-ref]
-[Vision][cloud-vision]           | stable       | [`cloud.google.com/go/vision/apiv1`][cloud-vision-ref]
-[Language][cloud-language]       | stable       | [`cloud.google.com/go/language/apiv1`][cloud-language-ref]
-[Speech][cloud-speech]           | stable       | [`cloud.google.com/go/speech/apiv1`][cloud-speech-ref]
-[Spanner][cloud-spanner]         | beta         | [`cloud.google.com/go/spanner`][cloud-spanner-ref]
-[Translation][cloud-translation] | stable       | [`cloud.google.com/go/translate`][cloud-translation-ref]
-[Trace][cloud-trace]             | alpha        | [`cloud.google.com/go/trace`][cloud-trace-ref]
-[Video Intelligence][cloud-video]| beta         | [`cloud.google.com/go/videointelligence/apiv1beta1`][cloud-video-ref]
-[ErrorReporting][cloud-errors]   | alpha        | [`cloud.google.com/go/errorreporting`][cloud-errors-ref]
-
-
-> **Alpha status**: the API is still being actively developed. As a
-> result, it might change in backward-incompatible ways and is not recommended
-> for production use.
->
-> **Beta status**: the API is largely complete, but still has outstanding
-> features and bugs to be addressed. There may be minor backwards-incompatible
-> changes where necessary.
->
-> **Stable status**: the API is mature and ready for production use. We will
-> continue addressing bugs and feature requests.
-
-Documentation and examples are available at
-https://godoc.org/cloud.google.com/go
-
-Visit or join the
-[google-api-go-announce group](https://groups.google.com/forum/#!forum/google-api-go-announce)
-for updates on these packages.
-
-## Go Versions Supported
-
-We support the two most recent major versions of Go. If Google App Engine uses
-an older version, we support that as well. You can see which versions are
-currently supported by looking at the lines following `go:` in
-[`.travis.yml`](.travis.yml).
-
-## Authorization
-
-By default, each API will use [Google Application Default Credentials][default-creds]
-for authorization credentials used in calling the API endpoints. This will allow your
-application to run in many environments without requiring explicit configuration.
-
-[snip]:# (auth)
-```go
-client, err := storage.NewClient(ctx)
-```
-
-To authorize using a
-[JSON key file](https://cloud.google.com/iam/docs/managing-service-account-keys),
-pass
-[`option.WithServiceAccountFile`](https://godoc.org/google.golang.org/api/option#WithServiceAccountFile)
-to the `NewClient` function of the desired package. For example:
-
-[snip]:# (auth-JSON)
-```go
-client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json"))
-```
-
-You can exert more control over authorization by using the
-[`golang.org/x/oauth2`](https://godoc.org/golang.org/x/oauth2) package to
-create an `oauth2.TokenSource`. Then pass
-[`option.WithTokenSource`](https://godoc.org/google.golang.org/api/option#WithTokenSource)
-to the `NewClient` function:
-[snip]:# (auth-ts)
-```go
-tokenSource := ...
-client, err := storage.NewClient(ctx, option.WithTokenSource(tokenSource))
-```
-
-## Cloud Datastore [![GoDoc](https://godoc.org/cloud.google.com/go/datastore?status.svg)](https://godoc.org/cloud.google.com/go/datastore)
-
-- [About Cloud Datastore][cloud-datastore]
-- [Activating the API for your project][cloud-datastore-activation]
-- [API documentation][cloud-datastore-docs]
-- [Go client documentation](https://godoc.org/cloud.google.com/go/datastore)
-- [Complete sample program](https://github.com/GoogleCloudPlatform/golang-samples/tree/master/datastore/tasks)
-
-### Example Usage
-
-First create a `datastore.Client` to use throughout your application:
-
-[snip]:# (datastore-1)
-```go
-client, err := datastore.NewClient(ctx, "my-project-id")
-if err != nil {
-	log.Fatal(err)
-}
-```
-
-Then use that client to interact with the API:
-
-[snip]:# (datastore-2)
-```go
-type Post struct {
-	Title       string
-	Body        string `datastore:",noindex"`
-	PublishedAt time.Time
-}
-keys := []*datastore.Key{
-	datastore.NameKey("Post", "post1", nil),
-	datastore.NameKey("Post", "post2", nil),
-}
-posts := []*Post{
-	{Title: "Post 1", Body: "...", PublishedAt: time.Now()},
-	{Title: "Post 2", Body: "...", PublishedAt: time.Now()},
-}
-if _, err := client.PutMulti(ctx, keys, posts); err != nil {
-	log.Fatal(err)
-}
-```
-
-## Cloud Storage [![GoDoc](https://godoc.org/cloud.google.com/go/storage?status.svg)](https://godoc.org/cloud.google.com/go/storage)
-
-- [About Cloud Storage][cloud-storage]
-- [API documentation][cloud-storage-docs]
-- [Go client documentation](https://godoc.org/cloud.google.com/go/storage)
-- [Complete sample programs](https://github.com/GoogleCloudPlatform/golang-samples/tree/master/storage)
-
-### Example Usage
-
-First create a `storage.Client` to use throughout your application:
-
-[snip]:# (storage-1)
-```go
-client, err := storage.NewClient(ctx)
-if err != nil {
-	log.Fatal(err)
-}
-```
-
-[snip]:# (storage-2)
-```go
-// Read the object1 from bucket.
-rc, err := client.Bucket("bucket").Object("object1").NewReader(ctx)
-if err != nil {
-	log.Fatal(err)
-}
-defer rc.Close()
-body, err := ioutil.ReadAll(rc)
-if err != nil {
-	log.Fatal(err)
-}
-```
-
-## Cloud Pub/Sub [![GoDoc](https://godoc.org/cloud.google.com/go/pubsub?status.svg)](https://godoc.org/cloud.google.com/go/pubsub)
-
-- [About Cloud Pubsub][cloud-pubsub]
-- [API documentation][cloud-pubsub-docs]
-- [Go client documentation](https://godoc.org/cloud.google.com/go/pubsub)
-- [Complete sample programs](https://github.com/GoogleCloudPlatform/golang-samples/tree/master/pubsub)
-
-### Example Usage
-
-First create a `pubsub.Client` to use throughout your application:
-
-[snip]:# (pubsub-1)
-```go
-client, err := pubsub.NewClient(ctx, "project-id")
-if err != nil {
-	log.Fatal(err)
-}
-```
-
-Then use the client to publish and subscribe:
-
-[snip]:# (pubsub-2)
-```go
-// Publish "hello world" on topic1.
-topic := client.Topic("topic1")
-res := topic.Publish(ctx, &pubsub.Message{
-	Data: []byte("hello world"),
-})
-// The publish happens asynchronously.
-// Later, you can get the result from res:
-...
-msgID, err := res.Get(ctx)
-if err != nil {
-	log.Fatal(err)
-}
-
-// Use a callback to receive messages via subscription1.
-sub := client.Subscription("subscription1")
-err = sub.Receive(ctx, func(ctx context.Context, m *pubsub.Message) {
-	fmt.Println(m.Data)
-	m.Ack() // Acknowledge that we've consumed the message.
-})
-if err != nil {
-	log.Println(err)
-}
-```
-
-## Cloud BigQuery [![GoDoc](https://godoc.org/cloud.google.com/go/bigquery?status.svg)](https://godoc.org/cloud.google.com/go/bigquery)
-
-- [About Cloud BigQuery][cloud-bigquery]
-- [API documentation][cloud-bigquery-docs]
-- [Go client documentation][cloud-bigquery-ref]
-- [Complete sample programs](https://github.com/GoogleCloudPlatform/golang-samples/tree/master/bigquery)
-
-### Example Usage
-
-First create a `bigquery.Client` to use throughout your application:
-[snip]:# (bq-1)
-```go
-c, err := bigquery.NewClient(ctx, "my-project-ID")
-if err != nil {
-	// TODO: Handle error.
-}
-```
-
-Then use that client to interact with the API:
-[snip]:# (bq-2)
-```go
-// Construct a query.
-q := c.Query(`
-    SELECT year, SUM(number)
-    FROM [bigquery-public-data:usa_names.usa_1910_2013]
-    WHERE name = "William"
-    GROUP BY year
-    ORDER BY year
-`)
-// Execute the query.
-it, err := q.Read(ctx)
-if err != nil {
-	// TODO: Handle error.
-}
-// Iterate through the results.
-for {
-	var values []bigquery.Value
-	err := it.Next(&values)
-	if err == iterator.Done {
-		break
-	}
-	if err != nil {
-		// TODO: Handle error.
-	}
-	fmt.Println(values)
-}
-```
-
-
-## Stackdriver Logging [![GoDoc](https://godoc.org/cloud.google.com/go/logging?status.svg)](https://godoc.org/cloud.google.com/go/logging)
-
-- [About Stackdriver Logging][cloud-logging]
-- [API documentation][cloud-logging-docs]
-- [Go client documentation][cloud-logging-ref]
-- [Complete sample programs](https://github.com/GoogleCloudPlatform/golang-samples/tree/master/logging)
-
-### Example Usage
-
-First create a `logging.Client` to use throughout your application:
-[snip]:# (logging-1)
-```go
-ctx := context.Background()
-client, err := logging.NewClient(ctx, "my-project")
-if err != nil {
-	// TODO: Handle error.
-}
-```
-
-Usually, you'll want to add log entries to a buffer to be periodically flushed
-(automatically and asynchronously) to the Stackdriver Logging service.
-[snip]:# (logging-2)
-```go
-logger := client.Logger("my-log")
-logger.Log(logging.Entry{Payload: "something happened!"})
-```
-
-Close your client before your program exits, to flush any buffered log entries.
-[snip]:# (logging-3)
-```go
-err = client.Close()
-if err != nil {
-	// TODO: Handle error.
-}
-```
-
-## Cloud Spanner [![GoDoc](https://godoc.org/cloud.google.com/go/spanner?status.svg)](https://godoc.org/cloud.google.com/go/spanner)
-
-- [About Cloud Spanner][cloud-spanner]
-- [API documentation][cloud-spanner-docs]
-- [Go client documentation](https://godoc.org/cloud.google.com/go/spanner)
-
-### Example Usage
-
-First create a `spanner.Client` to use throughout your application:
-
-[snip]:# (spanner-1)
-```go
-client, err := spanner.NewClient(ctx, "projects/P/instances/I/databases/D")
-if err != nil {
-	log.Fatal(err)
-}
-```
-
-[snip]:# (spanner-2)
-```go
-// Simple Reads And Writes
-_, err = client.Apply(ctx, []*spanner.Mutation{
-	spanner.Insert("Users",
-		[]string{"name", "email"},
-		[]interface{}{"alice", "a@example.com"})})
-if err != nil {
-	log.Fatal(err)
-}
-row, err := client.Single().ReadRow(ctx, "Users",
-	spanner.Key{"alice"}, []string{"email"})
-if err != nil {
-	log.Fatal(err)
-}
-```
-
-
-## Contributing
-
-Contributions are welcome. Please, see the
-[CONTRIBUTING](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/CONTRIBUTING.md)
-document for details. We're using Gerrit for our code reviews. Please don't open pull
-requests against this repo, new pull requests will be automatically closed.
-
-Please note that this project is released with a Contributor Code of Conduct.
-By participating in this project you agree to abide by its terms.
-See [Contributor Code of Conduct](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/CONTRIBUTING.md#contributor-code-of-conduct)
-for more information.
-
-[cloud-datastore]: https://cloud.google.com/datastore/
-[cloud-datastore-ref]: https://godoc.org/cloud.google.com/go/datastore
-[cloud-datastore-docs]: https://cloud.google.com/datastore/docs
-[cloud-datastore-activation]: https://cloud.google.com/datastore/docs/activate
-
-[cloud-firestore]: https://cloud.google.com/firestore/
-[cloud-firestore-ref]: https://godoc.org/cloud.google.com/go/firestore
-[cloud-firestore-docs]: https://cloud.google.com/firestore/docs
-[cloud-firestore-activation]: https://cloud.google.com/firestore/docs/activate
-
-[cloud-pubsub]: https://cloud.google.com/pubsub/
-[cloud-pubsub-ref]: https://godoc.org/cloud.google.com/go/pubsub
-[cloud-pubsub-docs]: https://cloud.google.com/pubsub/docs
-
-[cloud-storage]: https://cloud.google.com/storage/
-[cloud-storage-ref]: https://godoc.org/cloud.google.com/go/storage
-[cloud-storage-docs]: https://cloud.google.com/storage/docs
-[cloud-storage-create-bucket]: https://cloud.google.com/storage/docs/cloud-console#_creatingbuckets
-
-[cloud-bigtable]: https://cloud.google.com/bigtable/
-[cloud-bigtable-ref]: https://godoc.org/cloud.google.com/go/bigtable
-
-[cloud-bigquery]: https://cloud.google.com/bigquery/
-[cloud-bigquery-docs]: https://cloud.google.com/bigquery/docs
-[cloud-bigquery-ref]: https://godoc.org/cloud.google.com/go/bigquery
-
-[cloud-logging]: https://cloud.google.com/logging/
-[cloud-logging-docs]: https://cloud.google.com/logging/docs
-[cloud-logging-ref]: https://godoc.org/cloud.google.com/go/logging
-
-[cloud-monitoring]: https://cloud.google.com/monitoring/
-[cloud-monitoring-ref]: https://godoc.org/cloud.google.com/go/monitoring/apiv3
-
-[cloud-vision]: https://cloud.google.com/vision
-[cloud-vision-ref]: https://godoc.org/cloud.google.com/go/vision/apiv1
-
-[cloud-language]: https://cloud.google.com/natural-language
-[cloud-language-ref]: https://godoc.org/cloud.google.com/go/language/apiv1
-
-[cloud-speech]: https://cloud.google.com/speech
-[cloud-speech-ref]: https://godoc.org/cloud.google.com/go/speech/apiv1
-
-[cloud-spanner]: https://cloud.google.com/spanner/
-[cloud-spanner-ref]: https://godoc.org/cloud.google.com/go/spanner
-[cloud-spanner-docs]: https://cloud.google.com/spanner/docs
-
-[cloud-translation]: https://cloud.google.com/translation
-[cloud-translation-ref]: https://godoc.org/cloud.google.com/go/translation
-
-[cloud-trace]: https://cloud.google.com/trace/
-[cloud-trace-ref]: https://godoc.org/cloud.google.com/go/trace
-
-[cloud-video]: https://cloud.google.com/video-intelligence/
-[cloud-video-ref]: https://godoc.org/cloud.google.com/go/videointelligence/apiv1beta1
-
-[cloud-errors]: https://cloud.google.com/error-reporting/
-[cloud-errors-ref]: https://godoc.org/cloud.google.com/go/errorreporting
-
-[default-creds]: https://developers.google.com/identity/protocols/application-default-credentials
diff --git a/vendor/cloud.google.com/go/appveyor.yml b/vendor/cloud.google.com/go/appveyor.yml
deleted file mode 100644
index e66cd00..0000000
--- a/vendor/cloud.google.com/go/appveyor.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-# This file configures AppVeyor (http://www.appveyor.com),
-# a Windows-based CI service similar to Travis.
-
-# Identifier for this run
-version: "{build}"
-
-# Clone the repo into this path, which conforms to the standard
-# Go workspace structure.
-clone_folder: c:\gopath\src\cloud.google.com\go
-
-environment:
-  GOPATH: c:\gopath
-  GCLOUD_TESTS_GOLANG_PROJECT_ID: dulcet-port-762
-  GCLOUD_TESTS_GOLANG_KEY: c:\gopath\src\cloud.google.com\go\key.json
-  KEYFILE_CONTENTS:
-    secure: IvRbDAhM2PIQqzVkjzJ4FjizUvoQ+c3vG/qhJQG+HlZ/L5KEkqLu+x6WjLrExrNMyGku4znB2jmbTrUW3Ob4sGG+R5vvqeQ3YMHCVIkw5CxY+/bUDkW5RZWsVbuCnNa/vKsWmCP+/sZW6ICe29yKJ2ZOb6QaauI4s9R6j+cqBbU9pumMGYFRb0Rw3uUU7DKmVFCy+NjTENZIlDP9rmjANgAzigowJJEb2Tg9sLlQKmQeKiBSRN8lKc5Nq60a+fIzHGKvql4eIitDDDpOpyHv15/Xr1BzFw2yDoiR4X1lng0u7q0X9RgX4VIYa6gT16NXBEmQgbuX8gh7SfPMp9RhiZD9sVUaV+yogEabYpyPnmUURo0hXwkctKaBkQlEmKvjHwF5dvbg8+yqGhwtjAgFNimXG3INrwQsfQsZskkQWanutbJf9xy50GyWWFZZdi0uT4oXP/b5P7aklPXKXsvrJKBh7RjEaqBrhi86IJwOjBspvoR4l2WmcQyxb2xzQS1pjbBJFQfYJJ8+JgsstTL8PBO9d4ybJC0li1Om1qnWxkaewvPxxuoHJ9LpRKof19yRYWBmhTXb2tTASKG/zslvl4fgG4DmQBS93WC7dsiGOhAraGw2eCTgd0lYZOhk1FjWl9TS80aktXxzH/7nTvem5ohm+eDl6O0wnTL4KXjQVNSQ1PyLn4lGRJ5MNGzBTRFWIr2API2rca4Fysyfh/UdmazPGlNbY9JPGqb9+F04QzLfqm+Zz/cHy59E7lOSMBlUI4KD6d6ZNNKNRH+/g9i+fSiyiXKugTfda8KBnWGyPwprxuWGYaiQUGUYOwJY5R6x5c4mjImAB310V+Wo33UbWFJiwxEDsiCNqW1meVkBzt2er26vh4qbgCUIQ3iM3gFPfHgy+QxkmIhic7Q1HYacQElt8AAP41M7cCKWCuZidegP37MBB//mjjiNt047ZSQEvB4tqsX/OvfbByVef+cbtVw9T0yjHvmCdPW1XrhyrCCgclu6oYYdbmc5D7BBDRbjjMWGv6YvceAbfGf6ukdB5PuV+TGEN/FoQ1QTRA6Aqf+3fLMg4mS4oyTfw5xyYNbv3qoyLPrp+BnxI53WB9p0hfMg4n9FD6NntBxjDq+Q3Lk/bjC/Y4MaRWdzbMzF9a0lgGfcw9DURlK5p7uGJC9vg34feNoQprxVEZRQ01cHLeob6eGkYm4HxSRx8JY39Mh+9wzJo+k/aIvFleNC3e35NOrkXr6wb5e42n2DwBdPqdNolTLtLFRglAL1LTpp27UjvjieWJAKfoDTR5CKl01sZqt0wPdLLcvsMj6CiPFmccUIOYeZMe86kLBD61Qa5F1EwkgO3Om2qSjW96FzL4skRc+BmU5RrHlAFSldR1wpUgtkUMv9vH5Cy+UJdcvpZ8KbmhZ2PsjF7ddJ1ve9RAw3cP325AyIMwZ77Ef1mgTM0NJze6eSW1qKlEsgt1FADPyeUu1NQTA2H2dueMPGlArWTSUgyWR9AdfpqouT7eg0JWI5w+yUZZC+/rPglYbt84oLmYpwuli0z8FyEQRPIc3EtkfWIv/yYgDr2TZ0N2KvGfpi/MAUWgxI1gleC2uKgEOEtuJthd3XZjF2NoE7IBqjQOINybcJOjyeB5vRLDY1FLuxYzdg1y1etkV4XQig/vje
-
-install:
-  # Info for debugging.
-  - echo %PATH%
-  - go version
-  - go env
-  - go get -v -d -t ./...
-
-
-# Provide a build script, or AppVeyor will call msbuild.
-build_script:
-  - go install -v ./...
-  - echo %KEYFILE_CONTENTS% > %GCLOUD_TESTS_GOLANG_KEY%
-
-test_script:
-  - go test -v ./...
diff --git a/vendor/cloud.google.com/go/cloud.go b/vendor/cloud.google.com/go/cloud.go
deleted file mode 100644
index 6ba428d..0000000
--- a/vendor/cloud.google.com/go/cloud.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package cloud is the root of the packages used to access Google Cloud
-// Services. See https://godoc.org/cloud.google.com/go for a full list
-// of sub-packages.
-//
-// This package documents how to authorize and authenticate the sub packages.
-package cloud // import "cloud.google.com/go"
diff --git a/vendor/cloud.google.com/go/key.json.enc b/vendor/cloud.google.com/go/key.json.enc
deleted file mode 100644
index a8978a9..0000000
--- a/vendor/cloud.google.com/go/key.json.enc
+++ /dev/null
Binary files differ
diff --git a/vendor/cloud.google.com/go/old-news.md b/vendor/cloud.google.com/go/old-news.md
deleted file mode 100644
index 896980d..0000000
--- a/vendor/cloud.google.com/go/old-news.md
+++ /dev/null
@@ -1,486 +0,0 @@
-_July 31, 2017_
-
-*v0.11.0*
-
-- Clients for spanner, pubsub and video are now in beta.
-
-- New client for DLP.
-
-- spanner: performance and testing improvements.
-
-- storage: requester-pays buckets are supported.
-
-- storage, profiler, bigtable, bigquery: bug fixes and other minor improvements.
-
-- pubsub: bug fixes and other minor improvements
-
-_June 17, 2017_
-
-
-*v0.10.0*
-
-- pubsub: Subscription.ModifyPushConfig replaced with Subscription.Update.
-
-- pubsub: Subscription.Receive now runs concurrently for higher throughput.
-
-- vision: cloud.google.com/go/vision is deprecated. Use
-cloud.google.com/go/vision/apiv1 instead.
-
-- translation: now stable.
-
-- trace: several changes to the surface. See the link below.
-
-[Code changes required from v0.9.0.](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/MIGRATION.md)
-
-
-_March 17, 2017_
-
-Breaking Pubsub changes.
-* Publish is now asynchronous
-([announcement](https://groups.google.com/d/topic/google-api-go-announce/aaqRDIQ3rvU/discussion)).
-* Subscription.Pull replaced by Subscription.Receive, which takes a callback ([announcement](https://groups.google.com/d/topic/google-api-go-announce/8pt6oetAdKc/discussion)).
-* Message.Done replaced with Message.Ack and Message.Nack.
-
-_February 14, 2017_
-
-Release of a client library for Spanner. See
-the
-[blog post](https://cloudplatform.googleblog.com/2017/02/introducing-Cloud-Spanner-a-global-database-service-for-mission-critical-applications.html).
-
-Note that although the Spanner service is beta, the Go client library is alpha.
-
-_December 12, 2016_
-
-Beta release of BigQuery, DataStore, Logging and Storage. See the
-[blog post](https://cloudplatform.googleblog.com/2016/12/announcing-new-google-cloud-client.html).
-
-Also, BigQuery now supports structs. Read a row directly into a struct with
-`RowIterator.Next`, and upload a row directly from a struct with `Uploader.Put`.
-You can also use field tags. See the [package documentation][cloud-bigquery-ref]
-for details.
-
-_December 5, 2016_
-
-More changes to BigQuery:
-
-* The `ValueList` type was removed. It is no longer necessary. Instead of
-   ```go
-   var v ValueList
-   ... it.Next(&v) ..
-   ```
-   use
-
-   ```go
-   var v []Value
-   ... it.Next(&v) ...
-   ```
-
-* Previously, repeatedly calling `RowIterator.Next` on the same `[]Value` or
-  `ValueList` would append to the slice. Now each call resets the size to zero first.
-
-* Schema inference will infer the SQL type BYTES for a struct field of
-  type []byte. Previously it inferred STRING.
-
-* The types `uint`, `uint64` and `uintptr` are no longer supported in schema
-  inference. BigQuery's integer type is INT64, and those types may hold values
-  that are not correctly represented in a 64-bit signed integer.
-
-* The SQL types DATE, TIME and DATETIME are now supported. They correspond to
-  the `Date`, `Time` and `DateTime` types in the new `cloud.google.com/go/civil`
-  package.
-
-_November 17, 2016_
-
-Change to BigQuery: values from INTEGER columns will now be returned as int64,
-not int. This will avoid errors arising from large values on 32-bit systems.
-
-_November 8, 2016_
-
-New datastore feature: datastore now encodes your nested Go structs as Entity values,
-instead of a flattened list of the embedded struct's fields.
-This means that you may now have twice-nested slices, eg.
-```go
-type State struct {
-  Cities  []struct{
-    Populations []int
-  }
-}
-```
-
-See [the announcement](https://groups.google.com/forum/#!topic/google-api-go-announce/79jtrdeuJAg) for
-more details.
-
-_November 8, 2016_
-
-Breaking changes to datastore: contexts no longer hold namespaces; instead you
-must set a key's namespace explicitly. Also, key functions have been changed
-and renamed.
-
-* The WithNamespace function has been removed. To specify a namespace in a Query, use the Query.Namespace method:
-  ```go
-  q := datastore.NewQuery("Kind").Namespace("ns")
-  ```
-
-* All the fields of Key are exported. That means you can construct any Key with a struct literal:
-  ```go
-  k := &Key{Kind: "Kind",  ID: 37, Namespace: "ns"}
-  ```
-
-* As a result of the above, the Key methods Kind, ID, d.Name, Parent, SetParent and Namespace have been removed.
-
-* `NewIncompleteKey` has been removed, replaced by `IncompleteKey`. Replace
-  ```go
-  NewIncompleteKey(ctx, kind, parent)
-  ```
-  with
-  ```go
-  IncompleteKey(kind, parent)
-  ```
-  and if you do use namespaces, make sure you set the namespace on the returned key.
-
-* `NewKey` has been removed, replaced by `NameKey` and `IDKey`. Replace
-  ```go
-  NewKey(ctx, kind, name, 0, parent)
-  NewKey(ctx, kind, "", id, parent)
-  ```
-  with
-  ```go
-  NameKey(kind, name, parent)
-  IDKey(kind, id, parent)
-  ```
-  and if you do use namespaces, make sure you set the namespace on the returned key.
-
-* The `Done` variable has been removed. Replace `datastore.Done` with `iterator.Done`, from the package `google.golang.org/api/iterator`.
-
-* The `Client.Close` method will have a return type of error. It will return the result of closing the underlying gRPC connection.
-
-See [the announcement](https://groups.google.com/forum/#!topic/google-api-go-announce/hqXtM_4Ix-0) for
-more details.
-
-_October 27, 2016_
-
-Breaking change to bigquery: `NewGCSReference` is now a function,
-not a method on `Client`.
-
-New bigquery feature: `Table.LoaderFrom` now accepts a `ReaderSource`, enabling
-loading data into a table from a file or any `io.Reader`.
-
-_October 21, 2016_
-
-Breaking change to pubsub: removed `pubsub.Done`.
-
-Use `iterator.Done` instead, where `iterator` is the package
-`google.golang.org/api/iterator`.
-
-_October 19, 2016_
-
-Breaking changes to cloud.google.com/go/bigquery:
-
-* Client.Table and Client.OpenTable have been removed.
-    Replace
-    ```go
-    client.OpenTable("project", "dataset", "table")
-    ```
-    with
-    ```go
-    client.DatasetInProject("project", "dataset").Table("table")
-    ```
-
-* Client.CreateTable has been removed.
-    Replace
-    ```go
-    client.CreateTable(ctx, "project", "dataset", "table")
-    ```
-    with
-    ```go
-    client.DatasetInProject("project", "dataset").Table("table").Create(ctx)
-    ```
-
-* Dataset.ListTables have been replaced with Dataset.Tables.
-    Replace
-    ```go
-    tables, err := ds.ListTables(ctx)
-    ```
-    with
-    ```go
-    it := ds.Tables(ctx)
-    for {
-        table, err := it.Next()
-        if err == iterator.Done {
-            break
-        }
-        if err != nil {
-            // TODO: Handle error.
-        }
-        // TODO: use table.
-    }
-    ```
-
-* Client.Read has been replaced with Job.Read, Table.Read and Query.Read.
-    Replace
-    ```go
-    it, err := client.Read(ctx, job)
-    ```
-    with
-    ```go
-    it, err := job.Read(ctx)
-    ```
-  and similarly for reading from tables or queries.
-
-* The iterator returned from the Read methods is now named RowIterator. Its
-  behavior is closer to the other iterators in these libraries. It no longer
-  supports the Schema method; see the next item.
-    Replace
-    ```go
-    for it.Next(ctx) {
-        var vals ValueList
-        if err := it.Get(&vals); err != nil {
-            // TODO: Handle error.
-        }
-        // TODO: use vals.
-    }
-    if err := it.Err(); err != nil {
-        // TODO: Handle error.
-    }
-    ```
-    with
-    ```
-    for {
-        var vals ValueList
-        err := it.Next(&vals)
-        if err == iterator.Done {
-            break
-        }
-        if err != nil {
-            // TODO: Handle error.
-        }
-        // TODO: use vals.
-    }
-    ```
-    Instead of the `RecordsPerRequest(n)` option, write
-    ```go
-    it.PageInfo().MaxSize = n
-    ```
-    Instead of the `StartIndex(i)` option, write
-    ```go
-    it.StartIndex = i
-    ```
-
-* ValueLoader.Load now takes a Schema in addition to a slice of Values.
-    Replace
-    ```go
-    func (vl *myValueLoader) Load(v []bigquery.Value)
-    ```
-    with
-    ```go
-    func (vl *myValueLoader) Load(v []bigquery.Value, s bigquery.Schema)
-    ```
-
-
-* Table.Patch is replace by Table.Update.
-    Replace
-    ```go
-    p := table.Patch()
-    p.Description("new description")
-    metadata, err := p.Apply(ctx)
-    ```
-    with
-    ```go
-    metadata, err := table.Update(ctx, bigquery.TableMetadataToUpdate{
-        Description: "new description",
-    })
-    ```
-
-* Client.Copy is replaced by separate methods for each of its four functions.
-  All options have been replaced by struct fields.
-
-  * To load data from Google Cloud Storage into a table, use Table.LoaderFrom.
-
-    Replace
-    ```go
-    client.Copy(ctx, table, gcsRef)
-    ```
-    with
-    ```go
-    table.LoaderFrom(gcsRef).Run(ctx)
-    ```
-    Instead of passing options to Copy, set fields on the Loader:
-    ```go
-    loader := table.LoaderFrom(gcsRef)
-    loader.WriteDisposition = bigquery.WriteTruncate
-    ```
-
-  * To extract data from a table into Google Cloud Storage, use
-    Table.ExtractorTo. Set fields on the returned Extractor instead of
-    passing options.
-
-    Replace
-    ```go
-    client.Copy(ctx, gcsRef, table)
-    ```
-    with
-    ```go
-    table.ExtractorTo(gcsRef).Run(ctx)
-    ```
-
-  * To copy data into a table from one or more other tables, use
-    Table.CopierFrom. Set fields on the returned Copier instead of passing options.
-
-    Replace
-    ```go
-    client.Copy(ctx, dstTable, srcTable)
-    ```
-    with
-    ```go
-    dst.Table.CopierFrom(srcTable).Run(ctx)
-    ```
-
-  * To start a query job, create a Query and call its Run method. Set fields
-  on the query instead of passing options.
-
-    Replace
-    ```go
-    client.Copy(ctx, table, query)
-    ```
-    with
-    ```go
-    query.Run(ctx)
-    ```
-
-* Table.NewUploader has been renamed to Table.Uploader. Instead of options,
-  configure an Uploader by setting its fields.
-    Replace
-    ```go
-    u := table.NewUploader(bigquery.UploadIgnoreUnknownValues())
-    ```
-    with
-    ```go
-    u := table.NewUploader(bigquery.UploadIgnoreUnknownValues())
-    u.IgnoreUnknownValues = true
-    ```
-
-_October 10, 2016_
-
-Breaking changes to cloud.google.com/go/storage:
-
-* AdminClient replaced by methods on Client.
-    Replace
-    ```go
-    adminClient.CreateBucket(ctx, bucketName, attrs)
-    ```
-    with
-    ```go
-    client.Bucket(bucketName).Create(ctx, projectID, attrs)
-    ```
-
-* BucketHandle.List replaced by BucketHandle.Objects.
-    Replace
-    ```go
-    for query != nil {
-        objs, err := bucket.List(d.ctx, query)
-        if err != nil { ... }
-        query = objs.Next
-        for _, obj := range objs.Results {
-            fmt.Println(obj)
-        }
-    }
-    ```
-    with
-    ```go
-    iter := bucket.Objects(d.ctx, query)
-    for {
-        obj, err := iter.Next()
-        if err == iterator.Done {
-            break
-        }
-        if err != nil { ... }
-        fmt.Println(obj)
-    }
-    ```
-    (The `iterator` package is at `google.golang.org/api/iterator`.)
-
-    Replace `Query.Cursor` with `ObjectIterator.PageInfo().Token`.
-    
-    Replace `Query.MaxResults` with `ObjectIterator.PageInfo().MaxSize`.
-
-
-* ObjectHandle.CopyTo replaced by ObjectHandle.CopierFrom.
-    Replace
-    ```go
-    attrs, err := src.CopyTo(ctx, dst, nil)
-    ```
-    with
-    ```go
-    attrs, err := dst.CopierFrom(src).Run(ctx)
-    ```
-
-    Replace
-    ```go
-    attrs, err := src.CopyTo(ctx, dst, &storage.ObjectAttrs{ContextType: "text/html"})
-    ```
-    with
-    ```go
-    c := dst.CopierFrom(src)
-    c.ContextType = "text/html"
-    attrs, err := c.Run(ctx)
-    ```
-
-* ObjectHandle.ComposeFrom replaced by ObjectHandle.ComposerFrom.
-    Replace
-    ```go
-    attrs, err := dst.ComposeFrom(ctx, []*storage.ObjectHandle{src1, src2}, nil)
-    ```
-    with
-    ```go
-    attrs, err := dst.ComposerFrom(src1, src2).Run(ctx)
-    ```
-
-* ObjectHandle.Update's ObjectAttrs argument replaced by ObjectAttrsToUpdate.
-    Replace
-    ```go
-    attrs, err := obj.Update(ctx, &storage.ObjectAttrs{ContextType: "text/html"})
-    ```
-    with
-    ```go
-    attrs, err := obj.Update(ctx, storage.ObjectAttrsToUpdate{ContextType: "text/html"})
-    ```
-
-* ObjectHandle.WithConditions replaced by ObjectHandle.If.
-    Replace
-    ```go
-    obj.WithConditions(storage.Generation(gen), storage.IfMetaGenerationMatch(mgen))
-    ```
-    with
-    ```go
-    obj.Generation(gen).If(storage.Conditions{MetagenerationMatch: mgen})
-    ```
-
-    Replace
-    ```go
-    obj.WithConditions(storage.IfGenerationMatch(0))
-    ```
-    with
-    ```go
-    obj.If(storage.Conditions{DoesNotExist: true})
-    ```
-
-* `storage.Done` replaced by `iterator.Done` (from package `google.golang.org/api/iterator`).
-
-_October 6, 2016_
-
-Package preview/logging deleted. Use logging instead.
-
-_September 27, 2016_
-
-Logging client replaced with preview version (see below).
-
-_September 8, 2016_
-
-* New clients for some of Google's Machine Learning APIs: Vision, Speech, and
-Natural Language.
-
-* Preview version of a new [Stackdriver Logging][cloud-logging] client in
-[`cloud.google.com/go/preview/logging`](https://godoc.org/cloud.google.com/go/preview/logging).
-This client uses gRPC as its transport layer, and supports log reading, sinks
-and metrics. It will replace the current client at `cloud.google.com/go/logging` shortly.
-
diff --git a/vendor/cloud.google.com/go/run-tests.sh b/vendor/cloud.google.com/go/run-tests.sh
deleted file mode 100755
index f47ff50..0000000
--- a/vendor/cloud.google.com/go/run-tests.sh
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/bin/bash
-
-# Selectively run tests for this repo, based on what has changed
-# in a commit. Runs short tests for the whole repo, and full tests
-# for changed directories.
-
-set -e
-
-prefix=cloud.google.com/go
-
-dryrun=false
-if [[ $1 == "-n" ]]; then
-  dryrun=true
-  shift
-fi
-
-if [[ $1 == "" ]]; then
-  echo >&2 "usage: $0 [-n] COMMIT"
-  exit 1
-fi
-
-# Files or directories that cause all tests to run if modified.
-declare -A run_all
-run_all=([.travis.yml]=1 [run-tests.sh]=1)
-
-function run {
-  if $dryrun; then
-    echo $*
-  else
-    (set -x; $*)
-  fi
-}
-
-
-# Find all the packages that have changed in this commit.
-declare -A changed_packages
-
-for f in $(git diff-tree --no-commit-id --name-only -r $1); do
-  if [[ ${run_all[$f]} == 1 ]]; then
-    # This change requires a full test. Do it and exit.
-    run go test -race -v $prefix/...
-    exit
-  fi
-  # Map, e.g., "spanner/client.go" to "$prefix/spanner".
-  d=$(dirname $f)
-  if [[ $d == "." ]]; then
-    pkg=$prefix
-  else
-    pkg=$prefix/$d
-  fi
-  changed_packages[$pkg]=1
-done
-
-echo "changed packages: ${!changed_packages[*]}"
-
-
-# Reports whether its argument, a package name, depends (recursively)
-# on a changed package.
-function depends_on_changed_package {
-  # According to go list, a package does not depend on itself, so
-  # we test that separately.
-  if [[ ${changed_packages[$1]} == 1 ]]; then
-    return 0
-  fi
-  for dep in $(go list -f '{{range .Deps}}{{.}} {{end}}' $1); do
-    if [[ ${changed_packages[$dep]} == 1 ]]; then
-      return 0
-    fi
-  done
-  return 1
-}
-
-# Collect the packages into two separate lists. (It is faster go test a list of
-# packages than to individually go test each one.)
-
-shorts=
-fulls=
-for pkg in $(go list $prefix/...); do      # for each package in the repo
-  if depends_on_changed_package $pkg; then # if it depends on a changed package
-    fulls="$fulls $pkg"                    # run the full test
-  else                                     # otherwise
-    shorts="$shorts $pkg"                  # run the short test
-  fi
-done
-run go test -race -v -short $shorts
-if [[ $fulls != "" ]]; then
-  run go test -race -v $fulls
-fi
diff --git a/vendor/github.com/golang/protobuf/.gitignore b/vendor/github.com/golang/protobuf/.gitignore
deleted file mode 100644
index 8f5b596..0000000
--- a/vendor/github.com/golang/protobuf/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.DS_Store
-*.[568ao]
-*.ao
-*.so
-*.pyc
-._*
-.nfs.*
-[568a].out
-*~
-*.orig
-core
-_obj
-_test
-_testmain.go
-protoc-gen-go/testdata/multi/*.pb.go
-_conformance/_conformance
diff --git a/vendor/github.com/golang/protobuf/.travis.yml b/vendor/github.com/golang/protobuf/.travis.yml
deleted file mode 100644
index 93c6780..0000000
--- a/vendor/github.com/golang/protobuf/.travis.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-sudo: false
-language: go
-go:
-- 1.6.x
-- 1.7.x
-- 1.8.x
-- 1.9.x
-
-install:
-  - go get -v -d -t github.com/golang/protobuf/...
-  - curl -L https://github.com/google/protobuf/releases/download/v3.3.0/protoc-3.3.0-linux-x86_64.zip -o /tmp/protoc.zip
-  - unzip /tmp/protoc.zip -d $HOME/protoc
-
-env:
-  - PATH=$HOME/protoc/bin:$PATH
-
-script:
-  - make all test
diff --git a/vendor/github.com/golang/protobuf/Make.protobuf b/vendor/github.com/golang/protobuf/Make.protobuf
deleted file mode 100644
index 15071de..0000000
--- a/vendor/github.com/golang/protobuf/Make.protobuf
+++ /dev/null
@@ -1,40 +0,0 @@
-# Go support for Protocol Buffers - Google's data interchange format
-#
-# Copyright 2010 The Go Authors.  All rights reserved.
-# https://github.com/golang/protobuf
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#     * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# Includable Makefile to add a rule for generating .pb.go files from .proto files
-# (Google protocol buffer descriptions).
-# Typical use if myproto.proto is a file in package mypackage in this directory:
-#
-#	include $(GOROOT)/src/pkg/github.com/golang/protobuf/Make.protobuf
-
-%.pb.go:	%.proto
-	protoc --go_out=. $<
-
diff --git a/vendor/github.com/golang/protobuf/Makefile b/vendor/github.com/golang/protobuf/Makefile
deleted file mode 100644
index a1421d8..0000000
--- a/vendor/github.com/golang/protobuf/Makefile
+++ /dev/null
@@ -1,55 +0,0 @@
-# Go support for Protocol Buffers - Google's data interchange format
-#
-# Copyright 2010 The Go Authors.  All rights reserved.
-# https://github.com/golang/protobuf
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#     * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-all:	install
-
-install:
-	go install ./proto ./jsonpb ./ptypes
-	go install ./protoc-gen-go
-
-test:
-	go test ./proto ./jsonpb ./ptypes
-	make -C protoc-gen-go/testdata test
-
-clean:
-	go clean ./...
-
-nuke:
-	go clean -i ./...
-
-regenerate:
-	make -C protoc-gen-go/descriptor regenerate
-	make -C protoc-gen-go/plugin regenerate
-	make -C protoc-gen-go/testdata regenerate
-	make -C proto/testdata regenerate
-	make -C jsonpb/jsonpb_test_proto regenerate
-	make -C _conformance regenerate
diff --git a/vendor/github.com/golang/protobuf/README.md b/vendor/github.com/golang/protobuf/README.md
deleted file mode 100644
index 9c4c815..0000000
--- a/vendor/github.com/golang/protobuf/README.md
+++ /dev/null
@@ -1,244 +0,0 @@
-# Go support for Protocol Buffers
-
-[![Build Status](https://travis-ci.org/golang/protobuf.svg?branch=master)](https://travis-ci.org/golang/protobuf)
-[![GoDoc](https://godoc.org/github.com/golang/protobuf?status.svg)](https://godoc.org/github.com/golang/protobuf)
-
-Google's data interchange format.
-Copyright 2010 The Go Authors.
-https://github.com/golang/protobuf
-
-This package and the code it generates requires at least Go 1.4.
-
-This software implements Go bindings for protocol buffers.  For
-information about protocol buffers themselves, see
-	https://developers.google.com/protocol-buffers/
-
-## Installation ##
-
-To use this software, you must:
-- Install the standard C++ implementation of protocol buffers from
-	https://developers.google.com/protocol-buffers/
-- Of course, install the Go compiler and tools from
-	https://golang.org/
-  See
-	https://golang.org/doc/install
-  for details or, if you are using gccgo, follow the instructions at
-	https://golang.org/doc/install/gccgo
-- Grab the code from the repository and install the proto package.
-  The simplest way is to run `go get -u github.com/golang/protobuf/protoc-gen-go`.
-  The compiler plugin, protoc-gen-go, will be installed in $GOBIN,
-  defaulting to $GOPATH/bin.  It must be in your $PATH for the protocol
-  compiler, protoc, to find it.
-
-This software has two parts: a 'protocol compiler plugin' that
-generates Go source files that, once compiled, can access and manage
-protocol buffers; and a library that implements run-time support for
-encoding (marshaling), decoding (unmarshaling), and accessing protocol
-buffers.
-
-There is support for gRPC in Go using protocol buffers.
-See the note at the bottom of this file for details.
-
-There are no insertion points in the plugin.
-
-
-## Using protocol buffers with Go ##
-
-Once the software is installed, there are two steps to using it.
-First you must compile the protocol buffer definitions and then import
-them, with the support library, into your program.
-
-To compile the protocol buffer definition, run protoc with the --go_out
-parameter set to the directory you want to output the Go code to.
-
-	protoc --go_out=. *.proto
-
-The generated files will be suffixed .pb.go.  See the Test code below
-for an example using such a file.
-
-
-The package comment for the proto library contains text describing
-the interface provided in Go for protocol buffers. Here is an edited
-version.
-
-==========
-
-The proto package converts data structures to and from the
-wire format of protocol buffers.  It works in concert with the
-Go source code generated for .proto files by the protocol compiler.
-
-A summary of the properties of the protocol buffer interface
-for a protocol buffer variable v:
-
-  - Names are turned from camel_case to CamelCase for export.
-  - There are no methods on v to set fields; just treat
-  	them as structure fields.
-  - There are getters that return a field's value if set,
-	and return the field's default value if unset.
-	The getters work even if the receiver is a nil message.
-  - The zero value for a struct is its correct initialization state.
-	All desired fields must be set before marshaling.
-  - A Reset() method will restore a protobuf struct to its zero state.
-  - Non-repeated fields are pointers to the values; nil means unset.
-	That is, optional or required field int32 f becomes F *int32.
-  - Repeated fields are slices.
-  - Helper functions are available to aid the setting of fields.
-	Helpers for getting values are superseded by the
-	GetFoo methods and their use is deprecated.
-		msg.Foo = proto.String("hello") // set field
-  - Constants are defined to hold the default values of all fields that
-	have them.  They have the form Default_StructName_FieldName.
-	Because the getter methods handle defaulted values,
-	direct use of these constants should be rare.
-  - Enums are given type names and maps from names to values.
-	Enum values are prefixed with the enum's type name. Enum types have
-	a String method, and a Enum method to assist in message construction.
-  - Nested groups and enums have type names prefixed with the name of
-  	the surrounding message type.
-  - Extensions are given descriptor names that start with E_,
-	followed by an underscore-delimited list of the nested messages
-	that contain it (if any) followed by the CamelCased name of the
-	extension field itself.  HasExtension, ClearExtension, GetExtension
-	and SetExtension are functions for manipulating extensions.
-  - Oneof field sets are given a single field in their message,
-	with distinguished wrapper types for each possible field value.
-  - Marshal and Unmarshal are functions to encode and decode the wire format.
-
-When the .proto file specifies `syntax="proto3"`, there are some differences:
-
-  - Non-repeated fields of non-message type are values instead of pointers.
-  - Enum types do not get an Enum method.
-
-Consider file test.proto, containing
-
-```proto
-	syntax = "proto2";
-	package example;
-	
-	enum FOO { X = 17; };
-	
-	message Test {
-	  required string label = 1;
-	  optional int32 type = 2 [default=77];
-	  repeated int64 reps = 3;
-	  optional group OptionalGroup = 4 {
-	    required string RequiredField = 5;
-	  }
-	}
-```
-
-To create and play with a Test object from the example package,
-
-```go
-	package main
-
-	import (
-		"log"
-
-		"github.com/golang/protobuf/proto"
-		"path/to/example"
-	)
-
-	func main() {
-		test := &example.Test {
-			Label: proto.String("hello"),
-			Type:  proto.Int32(17),
-			Reps:  []int64{1, 2, 3},
-			Optionalgroup: &example.Test_OptionalGroup {
-				RequiredField: proto.String("good bye"),
-			},
-		}
-		data, err := proto.Marshal(test)
-		if err != nil {
-			log.Fatal("marshaling error: ", err)
-		}
-		newTest := &example.Test{}
-		err = proto.Unmarshal(data, newTest)
-		if err != nil {
-			log.Fatal("unmarshaling error: ", err)
-		}
-		// Now test and newTest contain the same data.
-		if test.GetLabel() != newTest.GetLabel() {
-			log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
-		}
-		// etc.
-	}
-```
-
-## Parameters ##
-
-To pass extra parameters to the plugin, use a comma-separated
-parameter list separated from the output directory by a colon:
-
-
-	protoc --go_out=plugins=grpc,import_path=mypackage:. *.proto
-
-
-- `import_prefix=xxx` - a prefix that is added onto the beginning of
-  all imports. Useful for things like generating protos in a
-  subdirectory, or regenerating vendored protobufs in-place.
-- `import_path=foo/bar` - used as the package if no input files
-  declare `go_package`. If it contains slashes, everything up to the
-  rightmost slash is ignored.
-- `plugins=plugin1+plugin2` - specifies the list of sub-plugins to
-  load. The only plugin in this repo is `grpc`.
-- `Mfoo/bar.proto=quux/shme` - declares that foo/bar.proto is
-  associated with Go package quux/shme.  This is subject to the
-  import_prefix parameter.
-
-## gRPC Support ##
-
-If a proto file specifies RPC services, protoc-gen-go can be instructed to
-generate code compatible with gRPC (http://www.grpc.io/). To do this, pass
-the `plugins` parameter to protoc-gen-go; the usual way is to insert it into
-the --go_out argument to protoc:
-
-	protoc --go_out=plugins=grpc:. *.proto
-
-## Compatibility ##
-
-The library and the generated code are expected to be stable over time.
-However, we reserve the right to make breaking changes without notice for the
-following reasons:
-
-- Security. A security issue in the specification or implementation may come to
-  light whose resolution requires breaking compatibility. We reserve the right
-  to address such security issues.
-- Unspecified behavior.  There are some aspects of the Protocol Buffers
-  specification that are undefined.  Programs that depend on such unspecified
-  behavior may break in future releases.
-- Specification errors or changes. If it becomes necessary to address an
-  inconsistency, incompleteness, or change in the Protocol Buffers
-  specification, resolving the issue could affect the meaning or legality of
-  existing programs.  We reserve the right to address such issues, including
-  updating the implementations.
-- Bugs.  If the library has a bug that violates the specification, a program
-  that depends on the buggy behavior may break if the bug is fixed.  We reserve
-  the right to fix such bugs.
-- Adding methods or fields to generated structs.  These may conflict with field
-  names that already exist in a schema, causing applications to break.  When the
-  code generator encounters a field in the schema that would collide with a
-  generated field or method name, the code generator will append an underscore
-  to the generated field or method name.
-- Adding, removing, or changing methods or fields in generated structs that
-  start with `XXX`.  These parts of the generated code are exported out of
-  necessity, but should not be considered part of the public API.
-- Adding, removing, or changing unexported symbols in generated code.
-
-Any breaking changes outside of these will be announced 6 months in advance to
-protobuf@googlegroups.com.
-
-You should, whenever possible, use generated code created by the `protoc-gen-go`
-tool built at the same commit as the `proto` package.  The `proto` package
-declares package-level constants in the form `ProtoPackageIsVersionX`.
-Application code and generated code may depend on one of these constants to
-ensure that compilation will fail if the available version of the proto library
-is too old.  Whenever we make a change to the generated code that requires newer
-library support, in the same commit we will increment the version number of the
-generated code and declare a new package-level constant whose name incorporates
-the latest version number.  Removing a compatibility constant is considered a
-breaking change and would be subject to the announcement policy stated above.
-
-The `protoc-gen-go/generator` package exposes a plugin interface,
-which is used by the gRPC code generation. This interface is not
-supported and is subject to incompatible changes without notice.
diff --git a/vendor/github.com/golang/protobuf/proto/Makefile b/vendor/github.com/golang/protobuf/proto/Makefile
deleted file mode 100644
index e2e0651..0000000
--- a/vendor/github.com/golang/protobuf/proto/Makefile
+++ /dev/null
@@ -1,43 +0,0 @@
-# Go support for Protocol Buffers - Google's data interchange format
-#
-# Copyright 2010 The Go Authors.  All rights reserved.
-# https://github.com/golang/protobuf
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#     * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-install:
-	go install
-
-test: install generate-test-pbs
-	go test
-
-
-generate-test-pbs:
-	make install
-	make -C testdata
-	protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata,Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any:. proto3_proto/proto3.proto
-	make
diff --git a/vendor/golang.org/x/crypto/.gitattributes b/vendor/golang.org/x/crypto/.gitattributes
deleted file mode 100644
index d2f212e..0000000
--- a/vendor/golang.org/x/crypto/.gitattributes
+++ /dev/null
@@ -1,10 +0,0 @@
-# Treat all files in this repo as binary, with no git magic updating
-# line endings. Windows users contributing to Go will need to use a
-# modern version of git and editors capable of LF line endings.
-#
-# We'll prevent accidental CRLF line endings from entering the repo
-# via the git-review gofmt checks.
-#
-# See golang.org/issue/9281
-
-* -text
diff --git a/vendor/golang.org/x/crypto/.gitignore b/vendor/golang.org/x/crypto/.gitignore
deleted file mode 100644
index 8339fd6..0000000
--- a/vendor/golang.org/x/crypto/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# Add no patterns to .hgignore except for files generated by the build.
-last-change
diff --git a/vendor/golang.org/x/crypto/CONTRIBUTING.md b/vendor/golang.org/x/crypto/CONTRIBUTING.md
deleted file mode 100644
index 88dff59..0000000
--- a/vendor/golang.org/x/crypto/CONTRIBUTING.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Contributing to Go
-
-Go is an open source project.
-
-It is the work of hundreds of contributors. We appreciate your help!
-
-
-## Filing issues
-
-When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions:
-
-1. What version of Go are you using (`go version`)?
-2. What operating system and processor architecture are you using?
-3. What did you do?
-4. What did you expect to see?
-5. What did you see instead?
-
-General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker.
-The gophers there will answer or ask you to file an issue if you've tripped over a bug.
-
-## Contributing code
-
-Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html)
-before sending patches.
-
-**We do not accept GitHub pull requests**
-(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review).
-
-Unless otherwise noted, the Go source files are distributed under
-the BSD-style license found in the LICENSE file.
-
diff --git a/vendor/golang.org/x/crypto/README.md b/vendor/golang.org/x/crypto/README.md
deleted file mode 100644
index c9d6fec..0000000
--- a/vendor/golang.org/x/crypto/README.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Go Cryptography
-
-This repository holds supplementary Go cryptography libraries.
-
-## Download/Install
-
-The easiest way to install is to run `go get -u golang.org/x/crypto/...`. You
-can also manually git clone the repository to `$GOPATH/src/golang.org/x/crypto`.
-
-## Report Issues / Send Patches
-
-This repository uses Gerrit for code changes. To learn how to submit changes to
-this repository, see https://golang.org/doc/contribute.html.
-
-The main issue tracker for the crypto repository is located at
-https://github.com/golang/go/issues. Prefix your issue with "x/crypto:" in the
-subject line, so it is easy to find.
-
-Note that contributions to the cryptography package receive additional scrutiny
-due to their sensitive nature. Patches may take longer than normal to receive
-feedback.
diff --git a/vendor/golang.org/x/crypto/codereview.cfg b/vendor/golang.org/x/crypto/codereview.cfg
deleted file mode 100644
index 3f8b14b..0000000
--- a/vendor/golang.org/x/crypto/codereview.cfg
+++ /dev/null
@@ -1 +0,0 @@
-issuerepo: golang/go
diff --git a/vendor/golang.org/x/net/.gitattributes b/vendor/golang.org/x/net/.gitattributes
deleted file mode 100644
index d2f212e..0000000
--- a/vendor/golang.org/x/net/.gitattributes
+++ /dev/null
@@ -1,10 +0,0 @@
-# Treat all files in this repo as binary, with no git magic updating
-# line endings. Windows users contributing to Go will need to use a
-# modern version of git and editors capable of LF line endings.
-#
-# We'll prevent accidental CRLF line endings from entering the repo
-# via the git-review gofmt checks.
-#
-# See golang.org/issue/9281
-
-* -text
diff --git a/vendor/golang.org/x/net/.gitignore b/vendor/golang.org/x/net/.gitignore
deleted file mode 100644
index 8339fd6..0000000
--- a/vendor/golang.org/x/net/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# Add no patterns to .hgignore except for files generated by the build.
-last-change
diff --git a/vendor/golang.org/x/net/CONTRIBUTING.md b/vendor/golang.org/x/net/CONTRIBUTING.md
deleted file mode 100644
index 88dff59..0000000
--- a/vendor/golang.org/x/net/CONTRIBUTING.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Contributing to Go
-
-Go is an open source project.
-
-It is the work of hundreds of contributors. We appreciate your help!
-
-
-## Filing issues
-
-When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions:
-
-1. What version of Go are you using (`go version`)?
-2. What operating system and processor architecture are you using?
-3. What did you do?
-4. What did you expect to see?
-5. What did you see instead?
-
-General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker.
-The gophers there will answer or ask you to file an issue if you've tripped over a bug.
-
-## Contributing code
-
-Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html)
-before sending patches.
-
-**We do not accept GitHub pull requests**
-(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review).
-
-Unless otherwise noted, the Go source files are distributed under
-the BSD-style license found in the LICENSE file.
-
diff --git a/vendor/golang.org/x/net/README.md b/vendor/golang.org/x/net/README.md
deleted file mode 100644
index 00a9b6e..0000000
--- a/vendor/golang.org/x/net/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Go Networking
-
-This repository holds supplementary Go networking libraries.
-
-## Download/Install
-
-The easiest way to install is to run `go get -u golang.org/x/net`. You can
-also manually git clone the repository to `$GOPATH/src/golang.org/x/net`.
-
-## Report Issues / Send Patches
-
-This repository uses Gerrit for code changes. To learn how to submit
-changes to this repository, see https://golang.org/doc/contribute.html.
-The main issue tracker for the net repository is located at
-https://github.com/golang/go/issues. Prefix your issue with "x/net:" in the
-subject line, so it is easy to find.
diff --git a/vendor/golang.org/x/net/codereview.cfg b/vendor/golang.org/x/net/codereview.cfg
deleted file mode 100644
index 3f8b14b..0000000
--- a/vendor/golang.org/x/net/codereview.cfg
+++ /dev/null
@@ -1 +0,0 @@
-issuerepo: golang/go
diff --git a/vendor/golang.org/x/oauth2/.travis.yml b/vendor/golang.org/x/oauth2/.travis.yml
deleted file mode 100644
index fa139db..0000000
--- a/vendor/golang.org/x/oauth2/.travis.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-language: go
-
-go:
-  - tip
-
-install:
-  - export GOPATH="$HOME/gopath"
-  - mkdir -p "$GOPATH/src/golang.org/x"
-  - mv "$TRAVIS_BUILD_DIR" "$GOPATH/src/golang.org/x/oauth2"
-  - go get -v -t -d golang.org/x/oauth2/...
-
-script:
-  - go test -v golang.org/x/oauth2/...
diff --git a/vendor/golang.org/x/oauth2/CONTRIBUTING.md b/vendor/golang.org/x/oauth2/CONTRIBUTING.md
deleted file mode 100644
index 46aa2b1..0000000
--- a/vendor/golang.org/x/oauth2/CONTRIBUTING.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Contributing to Go
-
-Go is an open source project.
-
-It is the work of hundreds of contributors. We appreciate your help!
-
-
-## Filing issues
-
-When [filing an issue](https://github.com/golang/oauth2/issues), make sure to answer these five questions:
-
-1. What version of Go are you using (`go version`)?
-2. What operating system and processor architecture are you using?
-3. What did you do?
-4. What did you expect to see?
-5. What did you see instead?
-
-General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker.
-The gophers there will answer or ask you to file an issue if you've tripped over a bug.
-
-## Contributing code
-
-Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html)
-before sending patches.
-
-**We do not accept GitHub pull requests**
-(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review).
-
-Unless otherwise noted, the Go source files are distributed under
-the BSD-style license found in the LICENSE file.
-
diff --git a/vendor/golang.org/x/oauth2/README.md b/vendor/golang.org/x/oauth2/README.md
deleted file mode 100644
index eb8dcee..0000000
--- a/vendor/golang.org/x/oauth2/README.md
+++ /dev/null
@@ -1,77 +0,0 @@
-# OAuth2 for Go
-
-[![Build Status](https://travis-ci.org/golang/oauth2.svg?branch=master)](https://travis-ci.org/golang/oauth2)
-[![GoDoc](https://godoc.org/golang.org/x/oauth2?status.svg)](https://godoc.org/golang.org/x/oauth2)
-
-oauth2 package contains a client implementation for OAuth 2.0 spec.
-
-## Installation
-
-~~~~
-go get golang.org/x/oauth2
-~~~~
-
-Or you can manually git clone the repository to
-`$(go env GOPATH)/src/golang.org/x/oauth2`.
-
-See godoc for further documentation and examples.
-
-* [godoc.org/golang.org/x/oauth2](http://godoc.org/golang.org/x/oauth2)
-* [godoc.org/golang.org/x/oauth2/google](http://godoc.org/golang.org/x/oauth2/google)
-
-
-## App Engine
-
-In change 96e89be (March 2015), we removed the `oauth2.Context2` type in favor
-of the [`context.Context`](https://golang.org/x/net/context#Context) type from
-the `golang.org/x/net/context` package
-
-This means it's no longer possible to use the "Classic App Engine"
-`appengine.Context` type with the `oauth2` package. (You're using
-Classic App Engine if you import the package `"appengine"`.)
-
-To work around this, you may use the new `"google.golang.org/appengine"`
-package. This package has almost the same API as the `"appengine"` package,
-but it can be fetched with `go get` and used on "Managed VMs" and well as
-Classic App Engine.
-
-See the [new `appengine` package's readme](https://github.com/golang/appengine#updating-a-go-app-engine-app)
-for information on updating your app.
-
-If you don't want to update your entire app to use the new App Engine packages,
-you may use both sets of packages in parallel, using only the new packages
-with the `oauth2` package.
-
-```go
-import (
-	"golang.org/x/net/context"
-	"golang.org/x/oauth2"
-	"golang.org/x/oauth2/google"
-	newappengine "google.golang.org/appengine"
-	newurlfetch "google.golang.org/appengine/urlfetch"
-
-	"appengine"
-)
-
-func handler(w http.ResponseWriter, r *http.Request) {
-	var c appengine.Context = appengine.NewContext(r)
-	c.Infof("Logging a message with the old package")
-
-	var ctx context.Context = newappengine.NewContext(r)
-	client := &http.Client{
-		Transport: &oauth2.Transport{
-			Source: google.AppEngineTokenSource(ctx, "scope"),
-			Base:   &newurlfetch.Transport{Context: ctx},
-		},
-	}
-	client.Get("...")
-}
-```
-
-## Report Issues / Send Patches
-
-This repository uses Gerrit for code changes. To learn how to submit changes to
-this repository, see https://golang.org/doc/contribute.html.
-
-The main issue tracker for the oauth2 repository is located at
-https://github.com/golang/oauth2/issues.
diff --git a/vendor/golang.org/x/text/.gitattributes b/vendor/golang.org/x/text/.gitattributes
deleted file mode 100644
index d2f212e..0000000
--- a/vendor/golang.org/x/text/.gitattributes
+++ /dev/null
@@ -1,10 +0,0 @@
-# Treat all files in this repo as binary, with no git magic updating
-# line endings. Windows users contributing to Go will need to use a
-# modern version of git and editors capable of LF line endings.
-#
-# We'll prevent accidental CRLF line endings from entering the repo
-# via the git-review gofmt checks.
-#
-# See golang.org/issue/9281
-
-* -text
diff --git a/vendor/golang.org/x/text/.gitignore b/vendor/golang.org/x/text/.gitignore
deleted file mode 100644
index b2de568..0000000
--- a/vendor/golang.org/x/text/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-# Add no patterns to .gitignore except for files generated by the build.
-last-change
-/DATA
-# This file is rather large and the tests really only need to be run
-# after generation.
-/unicode/norm/data_test.go
\ No newline at end of file
diff --git a/vendor/golang.org/x/text/CONTRIBUTING.md b/vendor/golang.org/x/text/CONTRIBUTING.md
deleted file mode 100644
index 88dff59..0000000
--- a/vendor/golang.org/x/text/CONTRIBUTING.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Contributing to Go
-
-Go is an open source project.
-
-It is the work of hundreds of contributors. We appreciate your help!
-
-
-## Filing issues
-
-When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions:
-
-1. What version of Go are you using (`go version`)?
-2. What operating system and processor architecture are you using?
-3. What did you do?
-4. What did you expect to see?
-5. What did you see instead?
-
-General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker.
-The gophers there will answer or ask you to file an issue if you've tripped over a bug.
-
-## Contributing code
-
-Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html)
-before sending patches.
-
-**We do not accept GitHub pull requests**
-(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review).
-
-Unless otherwise noted, the Go source files are distributed under
-the BSD-style license found in the LICENSE file.
-
diff --git a/vendor/golang.org/x/text/README.md b/vendor/golang.org/x/text/README.md
deleted file mode 100644
index 75e29bc..0000000
--- a/vendor/golang.org/x/text/README.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# Go Text
-
-This repository holds supplementary Go libraries for text processing, many involving Unicode.
-
-## Semantic Versioning
-This repo uses Semantic versioning (http://semver.org/), so
-1. MAJOR version when you make incompatible API changes,
-1. MINOR version when you add functionality in a backwards-compatible manner,
-   and
-1. PATCH version when you make backwards-compatible bug fixes.
-
-A Unicode major and minor version bump is mapped to a major version bump in
-x/text.
-A path version bump in Unicode is mapped to a minor version bump in x/text.
-Note that, consistent with the definitions in semver, until version 1.0.0 of
-x/text is reached, the minor version is considered a major version.
-So going from 0.1.0 to 0.2.0 is considered to be a major version bump.
-
-A major new CLDR version is mapped to a minor version increase in x/text.
-Any other new CLDR version is mapped to a patch version increase in x/text.
-
-## Download/Install
-
-The easiest way to install is to run `go get -u golang.org/x/text`. You can
-also manually git clone the repository to `$GOPATH/src/golang.org/x/text`.
-
-## Contribute
-To submit changes to this repository, see http://golang.org/doc/contribute.html.
-
-To generate the tables in this repository (except for the encoding tables),
-run go generate from this directory. By default tables are generated for the
-Unicode version in core and the CLDR version defined in
-golang.org/x/text/unicode/cldr.
-
-Running go generate will as a side effect create a DATA subdirectory in this
-directory, which holds all files that are used as a source for generating the
-tables. This directory will also serve as a cache.
-
-## Testing
-Run
-
-    go test ./...
-
-from this directory to run all tests. Add the "-tags icu" flag to also run
-ICU conformance tests (if available). This requires that you have the correct
-ICU version installed on your system.
-
-TODO:
-- updating unversioned source files.
-
-## Generating Tables
-
-To generate the tables in this repository (except for the encoding
-tables), run `go generate` from this directory. By default tables are
-generated for the Unicode version in core and the CLDR version defined in
-golang.org/x/text/unicode/cldr.
-
-Running go generate will as a side effect create a DATA subdirectory in this
-directory which holds all files that are used as a source for generating the
-tables. This directory will also serve as a cache.
-
-## Versions
-To update a Unicode version run
-
-    UNICODE_VERSION=x.x.x go generate
-
-where `x.x.x` must correspond to a directory in http://www.unicode.org/Public/.
-If this version is newer than the version in core it will also update the
-relevant packages there. The idna package in x/net will always be updated.
-
-To update a CLDR version run
-
-    CLDR_VERSION=version go generate
-
-where `version` must correspond to a directory in
-http://www.unicode.org/Public/cldr/.
-
-Note that the code gets adapted over time to changes in the data and that
-backwards compatibility is not maintained.
-So updating to a different version may not work.
-
-The files in DATA/{iana|icu|w3|whatwg} are currently not versioned.
-
-## Report Issues / Send Patches
-
-This repository uses Gerrit for code changes. To learn how to submit changes to
-this repository, see https://golang.org/doc/contribute.html.
-
-The main issue tracker for the image repository is located at
-https://github.com/golang/go/issues. Prefix your issue with "x/image:" in the
-subject line, so it is easy to find.
diff --git a/vendor/golang.org/x/text/codereview.cfg b/vendor/golang.org/x/text/codereview.cfg
deleted file mode 100644
index 3f8b14b..0000000
--- a/vendor/golang.org/x/text/codereview.cfg
+++ /dev/null
@@ -1 +0,0 @@
-issuerepo: golang/go
diff --git a/vendor/golang.org/x/text/doc.go b/vendor/golang.org/x/text/doc.go
deleted file mode 100644
index a48e284..0000000
--- a/vendor/golang.org/x/text/doc.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:generate go run gen.go
-
-// text is a repository of text-related packages related to internationalization
-// (i18n) and localization (l10n), such as character encodings, text
-// transformations, and locale-specific text handling.
-package text
-
-// TODO: more documentation on general concepts, such as Transformers, use
-// of normalization, etc.
diff --git a/vendor/golang.org/x/text/gen.go b/vendor/golang.org/x/text/gen.go
deleted file mode 100644
index 4257a18..0000000
--- a/vendor/golang.org/x/text/gen.go
+++ /dev/null
@@ -1,318 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-// gen runs go generate on Unicode- and CLDR-related package in the text
-// repositories, taking into account dependencies and versions.
-package main
-
-import (
-	"bytes"
-	"flag"
-	"fmt"
-	"go/build"
-	"go/format"
-	"io/ioutil"
-	"os"
-	"os/exec"
-	"path"
-	"path/filepath"
-	"regexp"
-	"runtime"
-	"strings"
-	"sync"
-	"unicode"
-
-	"golang.org/x/text/collate"
-	"golang.org/x/text/internal/gen"
-	"golang.org/x/text/language"
-)
-
-var (
-	verbose     = flag.Bool("v", false, "verbose output")
-	force       = flag.Bool("force", false, "ignore failing dependencies")
-	doCore      = flag.Bool("core", false, "force an update to core")
-	excludeList = flag.String("exclude", "",
-		"comma-separated list of packages to exclude")
-
-	// The user can specify a selection of packages to build on the command line.
-	args []string
-)
-
-func exclude(pkg string) bool {
-	if len(args) > 0 {
-		return !contains(args, pkg)
-	}
-	return contains(strings.Split(*excludeList, ","), pkg)
-}
-
-// TODO:
-// - Better version handling.
-// - Generate tables for the core unicode package?
-// - Add generation for encodings. This requires some retooling here and there.
-// - Running repo-wide "long" tests.
-
-var vprintf = fmt.Printf
-
-func main() {
-	gen.Init()
-	args = flag.Args()
-	if !*verbose {
-		// Set vprintf to a no-op.
-		vprintf = func(string, ...interface{}) (int, error) { return 0, nil }
-	}
-
-	// TODO: create temporary cache directory to load files and create and set
-	// a "cache" option if the user did not specify the UNICODE_DIR environment
-	// variable. This will prevent duplicate downloads and also will enable long
-	// tests, which really need to be run after each generated package.
-
-	updateCore := *doCore
-	if gen.UnicodeVersion() != unicode.Version {
-		fmt.Printf("Requested Unicode version %s; core unicode version is %s.\n",
-			gen.UnicodeVersion(),
-			unicode.Version)
-		c := collate.New(language.Und, collate.Numeric)
-		if c.CompareString(gen.UnicodeVersion(), unicode.Version) < 0 && !*force {
-			os.Exit(2)
-		}
-		updateCore = true
-		goroot := os.Getenv("GOROOT")
-		appendToFile(
-			filepath.Join(goroot, "api", "except.txt"),
-			fmt.Sprintf("pkg unicode, const Version = %q\n", unicode.Version),
-		)
-		const lines = `pkg unicode, const Version = %q
-// TODO: add a new line of the following form for each new script and property.
-pkg unicode, var <new script or property> *RangeTable
-`
-		appendToFile(
-			filepath.Join(goroot, "api", "next.txt"),
-			fmt.Sprintf(lines, gen.UnicodeVersion()),
-		)
-	}
-
-	var unicode = &dependency{}
-	if updateCore {
-		fmt.Printf("Updating core to version %s...\n", gen.UnicodeVersion())
-		unicode = generate("unicode")
-
-		// Test some users of the unicode packages, especially the ones that
-		// keep a mirrored table. These may need to be corrected by hand.
-		generate("regexp", unicode)
-		generate("strconv", unicode) // mimics Unicode table
-		generate("strings", unicode)
-		generate("testing", unicode) // mimics Unicode table
-	}
-
-	var (
-		cldr       = generate("./unicode/cldr", unicode)
-		language   = generate("./language", cldr)
-		internal   = generate("./internal", unicode, language)
-		norm       = generate("./unicode/norm", unicode)
-		rangetable = generate("./unicode/rangetable", unicode)
-		cases      = generate("./cases", unicode, norm, language, rangetable)
-		width      = generate("./width", unicode)
-		bidi       = generate("./unicode/bidi", unicode, norm, rangetable)
-		mib        = generate("./encoding/internal/identifier", unicode)
-		_          = generate("./encoding/htmlindex", unicode, language, mib)
-		_          = generate("./encoding/ianaindex", unicode, language, mib)
-		_          = generate("./secure/precis", unicode, norm, rangetable, cases, width, bidi)
-		_          = generate("./currency", unicode, cldr, language, internal)
-		_          = generate("./internal/number", unicode, cldr, language, internal)
-		_          = generate("./feature/plural", unicode, cldr, language, internal)
-		_          = generate("./internal/export/idna", unicode, bidi, norm)
-		_          = generate("./language/display", unicode, cldr, language, internal)
-		_          = generate("./collate", unicode, norm, cldr, language, rangetable)
-		_          = generate("./search", unicode, norm, cldr, language, rangetable)
-	)
-	all.Wait()
-
-	// Copy exported packages to the destination golang.org repo.
-	copyExported("golang.org/x/net/idna")
-
-	if updateCore {
-		copyVendored()
-	}
-
-	if hasErrors {
-		fmt.Println("FAIL")
-		os.Exit(1)
-	}
-	vprintf("SUCCESS\n")
-}
-
-func appendToFile(file, text string) {
-	fmt.Println("Augmenting", file)
-	w, err := os.OpenFile(file, os.O_APPEND|os.O_WRONLY, 0600)
-	if err != nil {
-		fmt.Println("Failed to open file:", err)
-		os.Exit(1)
-	}
-	defer w.Close()
-	if _, err := w.WriteString(text); err != nil {
-		fmt.Println("Failed to write to file:", err)
-		os.Exit(1)
-	}
-}
-
-var (
-	all       sync.WaitGroup
-	hasErrors bool
-)
-
-type dependency struct {
-	sync.WaitGroup
-	hasErrors bool
-}
-
-func generate(pkg string, deps ...*dependency) *dependency {
-	var wg dependency
-	if exclude(pkg) {
-		return &wg
-	}
-	wg.Add(1)
-	all.Add(1)
-	go func() {
-		defer wg.Done()
-		defer all.Done()
-		// Wait for dependencies to finish.
-		for _, d := range deps {
-			d.Wait()
-			if d.hasErrors && !*force {
-				fmt.Printf("--- ABORT: %s\n", pkg)
-				wg.hasErrors = true
-				return
-			}
-		}
-		vprintf("=== GENERATE %s\n", pkg)
-		args := []string{"generate"}
-		if *verbose {
-			args = append(args, "-v")
-		}
-		args = append(args, pkg)
-		cmd := exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), args...)
-		w := &bytes.Buffer{}
-		cmd.Stderr = w
-		cmd.Stdout = w
-		if err := cmd.Run(); err != nil {
-			fmt.Printf("--- FAIL: %s:\n\t%v\n\tError: %v\n", pkg, indent(w), err)
-			hasErrors = true
-			wg.hasErrors = true
-			return
-		}
-
-		vprintf("=== TEST %s\n", pkg)
-		args[0] = "test"
-		cmd = exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), args...)
-		wt := &bytes.Buffer{}
-		cmd.Stderr = wt
-		cmd.Stdout = wt
-		if err := cmd.Run(); err != nil {
-			fmt.Printf("--- FAIL: %s:\n\t%v\n\tError: %v\n", pkg, indent(wt), err)
-			hasErrors = true
-			wg.hasErrors = true
-			return
-		}
-		vprintf("--- SUCCESS: %s\n\t%v\n", pkg, indent(w))
-		fmt.Print(wt.String())
-	}()
-	return &wg
-}
-
-// copyExported copies a package in x/text/internal/export to the
-// destination repository.
-func copyExported(p string) {
-	copyPackage(
-		filepath.Join("internal", "export", path.Base(p)),
-		filepath.Join("..", filepath.FromSlash(p[len("golang.org/x"):])),
-		"golang.org/x/text/internal/export/"+path.Base(p),
-		p)
-}
-
-// copyVendored copies packages used by Go core into the vendored directory.
-func copyVendored() {
-	root := filepath.Join(build.Default.GOROOT, filepath.FromSlash("src/vendor/golang_org/x"))
-
-	err := filepath.Walk(root, func(dir string, info os.FileInfo, err error) error {
-		if err != nil || !info.IsDir() || root == dir {
-			return err
-		}
-		src := dir[len(root)+1:]
-		const slash = string(filepath.Separator)
-		if c := strings.Split(src, slash); c[0] == "text" {
-			// Copy a text repo package from its normal location.
-			src = strings.Join(c[1:], slash)
-		} else {
-			// Copy the vendored package if it exists in the export directory.
-			src = filepath.Join("internal", "export", filepath.Base(src))
-		}
-		copyPackage(src, dir, "golang.org", "golang_org")
-		return nil
-	})
-	if err != nil {
-		fmt.Printf("Seeding directory %s has failed %v:", root, err)
-		os.Exit(1)
-	}
-}
-
-// goGenRE is used to remove go:generate lines.
-var goGenRE = regexp.MustCompile("//go:generate[^\n]*\n")
-
-// copyPackage copies relevant files from a directory in x/text to the
-// destination package directory. The destination package is assumed to have
-// the same name. For each copied file go:generate lines are removed and
-// and package comments are rewritten to the new path.
-func copyPackage(dirSrc, dirDst, search, replace string) {
-	err := filepath.Walk(dirSrc, func(file string, info os.FileInfo, err error) error {
-		base := filepath.Base(file)
-		if err != nil || info.IsDir() ||
-			!strings.HasSuffix(base, ".go") ||
-			strings.HasSuffix(base, "_test.go") ||
-			// Don't process subdirectories.
-			filepath.Dir(file) != dirSrc {
-			return nil
-		}
-		b, err := ioutil.ReadFile(file)
-		if err != nil || bytes.Contains(b, []byte("\n// +build ignore")) {
-			return err
-		}
-		// Fix paths.
-		b = bytes.Replace(b, []byte(search), []byte(replace), -1)
-		// Remove go:generate lines.
-		b = goGenRE.ReplaceAllLiteral(b, nil)
-		comment := "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n"
-		if *doCore {
-			comment = "// Code generated by running \"go run gen.go -core\" in golang.org/x/text. DO NOT EDIT.\n\n"
-		}
-		if !bytes.HasPrefix(b, []byte(comment)) {
-			b = append([]byte(comment), b...)
-		}
-		if b, err = format.Source(b); err != nil {
-			fmt.Println("Failed to format file:", err)
-			os.Exit(1)
-		}
-		file = filepath.Join(dirDst, base)
-		vprintf("=== COPY %s\n", file)
-		return ioutil.WriteFile(file, b, 0666)
-	})
-	if err != nil {
-		fmt.Println("Copying exported files failed:", err)
-		os.Exit(1)
-	}
-}
-
-func contains(a []string, s string) bool {
-	for _, e := range a {
-		if s == e {
-			return true
-		}
-	}
-	return false
-}
-
-func indent(b *bytes.Buffer) string {
-	return strings.Replace(strings.TrimSpace(b.String()), "\n", "\n\t", -1)
-}
diff --git a/vendor/golang.org/x/text/language/Makefile b/vendor/golang.org/x/text/language/Makefile
deleted file mode 100644
index 79f0057..0000000
--- a/vendor/golang.org/x/text/language/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2013 The Go Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-CLEANFILES+=maketables
-
-maketables: maketables.go
-	go build $^
-
-tables:	maketables
-	./maketables > tables.go
-	gofmt -w -s tables.go
-
-# Build (but do not run) maketables during testing,
-# just to make sure it still compiles.
-testshort: maketables
diff --git a/vendor/golang.org/x/text/secure/doc.go b/vendor/golang.org/x/text/secure/doc.go
deleted file mode 100644
index e531c35..0000000
--- a/vendor/golang.org/x/text/secure/doc.go
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// secure is a repository of text security related packages.
-package secure // import "golang.org/x/text/secure"
diff --git a/vendor/golang.org/x/text/unicode/doc.go b/vendor/golang.org/x/text/unicode/doc.go
deleted file mode 100644
index e8f1032..0000000
--- a/vendor/golang.org/x/text/unicode/doc.go
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// unicode holds packages with implementations of Unicode standards that are
-// mostly used as building blocks for other packages in golang.org/x/text,
-// layout engines, or are otherwise more low-level in nature.
-package unicode
diff --git a/vendor/google.golang.org/api/.gitignore b/vendor/google.golang.org/api/.gitignore
deleted file mode 100644
index 50d2a9b..0000000
--- a/vendor/google.golang.org/api/.gitignore
+++ /dev/null
@@ -1,12 +0,0 @@
-_obj/
-*_testmain.go
-clientid.dat
-clientsecret.dat
-/google-api-go-generator/google-api-go-generator
-
-*.6
-*.8
-*~
-*.out
-*.test
-*.exe
diff --git a/vendor/google.golang.org/api/.hgtags b/vendor/google.golang.org/api/.hgtags
deleted file mode 100644
index f1a7357..0000000
--- a/vendor/google.golang.org/api/.hgtags
+++ /dev/null
@@ -1 +0,0 @@
-b571b553f8c057cb6952ce817dfb09b6e34a8c0b release
diff --git a/vendor/google.golang.org/api/.travis.yml b/vendor/google.golang.org/api/.travis.yml
deleted file mode 100644
index 7c81100..0000000
--- a/vendor/google.golang.org/api/.travis.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-sudo: false
-
-language: go
-
-go:
-  - 1.6
-  - 1.7
-  - 1.8
-  
-before_install:
-  - openssl aes-256-cbc -K $encrypted_6c6ebd86ce52_key -iv $encrypted_6c6ebd86ce52_iv -in key.json.enc -out key.json -d
-
-install:
-  - go get -v -t -p 1 google.golang.org/api/...
-
-script:
-  - GCLOUD_TESTS_GOLANG_PROJECT_ID="dulcet-port-762" GCLOUD_TESTS_GOLANG_DESTRUCTIVE_TEST_BUCKET_NAME="dulcet-port-762-api-go-client-storage-integration-test" GCLOUD_TESTS_GOLANG_KEY="$(pwd)/key.json" go test -v -tags=integration google.golang.org/api/...
diff --git a/vendor/google.golang.org/api/CONTRIBUTING.md b/vendor/google.golang.org/api/CONTRIBUTING.md
deleted file mode 100644
index e4d36da..0000000
--- a/vendor/google.golang.org/api/CONTRIBUTING.md
+++ /dev/null
@@ -1,484 +0,0 @@
-# Contributing to the Google API Go Client
-
-## Master git repo
-
-Our master git repo is https://code.googlesource.com/google-api-go-client
-
-## Pull Requests
-
-We do **NOT** use Github pull requests. We use Gerrit instead
-with the same workflow as Go. See below.
-
-## The source tree
-
-Most of this project is auto-generated.
-
-The notable directories which are not auto-generated:
-
-```
-   google-api-go-generator/ -- the generator itself
-   googleapi/               -- shared common code, used by auto-generated code
-   examples/                -- sample code
-```
-
-# Contribution Guidelines
-
-## Introduction
-
-This document explains how to contribute changes to the google-api-go-client project.
-
-## Testing redux
-
-You've written and tested your code, but
-before sending code out for review, run all the tests for the whole
-tree to make sure the changes don't break other packages or programs:
-
-```
-$ make cached
-$ go test ./...
-...
-ok  	google.golang.org/api/google-api-go-generator	0.226s
-ok  	google.golang.org/api/googleapi	0.015s
-...
-```
-
-Ideally, you will add unit tests to one of the above directories to
-demonstrate the changes you are making and include the tests with your
-code review.
-
-## Code review
-
-Changes to google-api-go-client must be reviewed before they are submitted,
-no matter who makes the change.
-A custom git command called `git-codereview`,
-discussed below, helps manage the code review process through a Google-hosted
-[instance](https://code-review.googlesource.com/) of the code review
-system called [Gerrit](https://code.google.com/p/gerrit/).
-
-### Set up authentication for code review
-
-The Git code hosting server and Gerrit code review server both use a Google
-Account to authenticate. You therefore need a Google Account to proceed.
-(If you can use the account to
-[sign in at google.com](https://www.google.com/accounts/Login),
-you can use it to sign in to the code review server.)
-The email address you use with the code review system
-needs to be added to the [`CONTRIBUTORS`](/CONTRIBUTORS) file
-with your first code review.
-You can [create a Google Account](https://www.google.com/accounts/NewAccount)
-associated with any address where you receive email.
-
-Visit the site [code.googlesource.com](https://code.googlesource.com)
-and log in using your Google Account.
-Click on the "Generate Password" link that appears at the top of the page.
-
-Click the radio button that says "Only `code.googlesource.com`"
-to use this authentication token only for the google-api-go-client project.
-
-Further down the page is a box containing commands to install
-the authentication cookie in file called `.gitcookies` in your home
-directory.
-Copy the text for the commands into a Unix shell window to execute it.
-That will install the authentication token.
-
-(If you are on a Windows computer, you should instead follow the instructions
-in the yellow box to run the command.)
-
-### Register with Gerrit
-
-Now that you have a Google account and the authentication token,
-you need to register your account with Gerrit, the code review system.
-To do this, visit [golang.org/cl](https://golang.org/cl)
-and log in using the same Google Account you used above.
-That is all that is required.
-
-### Install the git-codereview command
-
-Now install the `git-codereview` command by running,
-
-```
-go get -u golang.org/x/review/git-codereview
-```
-
-Make sure `git-codereview` is installed in your shell path, so that the
-`git` command can find it. Check that
-
-```
-$ git codereview help
-```
-
-prints help text, not an error.
-
-Note to Git aficionados: The `git-codereview` command is not required to
-upload and manage Gerrit code reviews. For those who prefer plain Git, the text
-below gives the Git equivalent of each git-codereview command. If you do use plain
-Git, note that you still need the commit hooks that the git-codereview command
-configures; those hooks add a Gerrit `Change-Id` line to the commit
-message and check that all Go source files have been formatted with gofmt. Even
-if you intend to use plain Git for daily work, install the hooks in a new Git
-checkout by running `git-codereview hooks`.
-
-### Set up git aliases
-
-The `git-codereview` command can be run directly from the shell
-by typing, for instance,
-
-```
-$ git codereview sync
-```
-
-but it is more convenient to set up aliases for `git-codereview`'s own
-subcommands, so that the above becomes,
-
-```
-$ git sync
-```
-
-The `git-codereview` subcommands have been chosen to be distinct from
-Git's own, so it's safe to do so.
-
-The aliases are optional, but in the rest of this document we will assume
-they are installed.
-To install them, copy this text into your Git configuration file
-(usually `.gitconfig` in your home directory):
-
-```
-[alias]
-	change = codereview change
-	gofmt = codereview gofmt
-	mail = codereview mail
-	pending = codereview pending
-	submit = codereview submit
-	sync = codereview sync
-```
-
-### Understanding the git-codereview command
-
-After installing the `git-codereview` command, you can run
-
-```
-$ git codereview help
-```
-
-to learn more about its commands.
-You can also read the [command documentation](https://godoc.org/golang.org/x/review/git-codereview).
-
-### Switch to the master branch
-
-New changes should
-only be made based on the master branch.
-Before making a change, make sure you start on the master branch:
-
-```
-$ git checkout master
-$ git sync
-````
-
-(In Git terms, `git sync` runs
-`git pull -r`.)
-
-### Make a change
-
-The entire checked-out tree is writable.
-Once you have edited files, you must tell Git that they have been modified.
-You must also tell Git about any files that are added, removed, or renamed files.
-These operations are done with the usual Git commands,
-`git add`,
-`git rm`,
-and
-`git mv`.
-
-If you wish to checkpoint your work, or are ready to send the code out for review, run
-
-```
-$ git change <branch>
-```
-
-from any directory in your google-api-go-client repository to commit the changes so far.
-The name `<branch>` is an arbitrary one you choose to identify the
-local branch containing your changes.
-
-(In Git terms, `git change <branch>`
-runs `git checkout -b branch`,
-then `git branch --set-upstream-to origin/master`,
-then `git commit`.)
-
-Git will open a change description file in your editor.
-(It uses the editor named by the `$EDITOR` environment variable,
-`vi` by default.)
-The file will look like:
-
-```
-# Please enter the commit message for your changes. Lines starting
-# with '#' will be ignored, and an empty message aborts the commit.
-# On branch foo
-# Changes not staged for commit:
-#	modified:   editedfile.go
-#
-```
-
-At the beginning of this file is a blank line; replace it
-with a thorough description of your change.
-The first line of the change description is conventionally a one-line
-summary of the change, prefixed by `google-api-go-client:`,
-and is used as the subject for code review mail.
-The rest of the
-description elaborates and should provide context for the
-change and explain what it does.
-If there is a helpful reference, mention it here.
-
-After editing, the template might now read:
-
-```
-math: improved Sin, Cos and Tan precision for very large arguments
-
-The existing implementation has poor numerical properties for
-large arguments, so use the McGillicutty algorithm to improve
-accuracy above 1e10.
-
-The algorithm is described at http://wikipedia.org/wiki/McGillicutty_Algorithm
-
-Fixes #54
-
-# Please enter the commit message for your changes. Lines starting
-# with '#' will be ignored, and an empty message aborts the commit.
-# On branch foo
-# Changes not staged for commit:
-#	modified:   editedfile.go
-#
-```
-
-The commented section of the file lists all the modified files in your client.
-It is best to keep unrelated changes in different change lists,
-so if you see a file listed that should not be included, abort
-the command and move that file to a different branch.
-
-The special notation "Fixes #54" associates the change with issue 54 in the
-[google-api-go-client issue tracker](https://github.com/google/google-api-go-client/issues/54).
-When this change is eventually submitted, the issue
-tracker will automatically mark the issue as fixed.
-(There are several such conventions, described in detail in the
-[GitHub Issue Tracker documentation](https://help.github.com/articles/closing-issues-via-commit-messages/).)
-
-Once you have finished writing the commit message,
-save the file and exit the editor.
-
-If you wish to do more editing, re-stage your changes using
-`git add`, and then run
-
-```
-$ git change
-```
-
-to update the change description and incorporate the staged changes.  The
-change description contains a `Change-Id` line near the bottom,
-added by a Git commit hook during the initial
-`git change`.
-That line is used by Gerrit to match successive uploads of the same change.
-Do not edit or delete it.
-
-(In Git terms, `git change` with no branch name
-runs `git commit --amend`.)
-
-### Mail the change for review
-
-Once the change is ready, mail it out for review:
-
-```
-$ git mail
-```
-
-You can specify a reviewer or CC interested parties
-using the `-r` or `-cc` options.
-Both accept a comma-separated list of email addresses:
-
-```
-$ git mail -r joe@golang.org -cc mabel@example.com,math-nuts@swtch.com
-```
-
-Unless explicitly told otherwise, such as in the discussion leading
-up to sending in the change list, please specify
-`bradfitz@golang.org`, `gmlewis@google.com`, or
-`mcgreevy@golang.org` as a reviewer.
-
-(In Git terms, `git mail` pushes the local committed
-changes to Gerrit using `git push origin HEAD:refs/for/master`.)
-
-If your change relates to an open issue, please add a comment to the issue
-announcing your proposed fix, including a link to your CL.
-
-The code review server assigns your change an issue number and URL,
-which `git mail` will print, something like:
-
-```
-remote: New Changes:
-remote:   https://code-review.googlesource.com/99999 math: improved Sin, Cos and Tan precision for very large arguments
-```
-
-### Reviewing code
-
-Running `git mail` will send an email to you and the
-reviewers asking them to visit the issue's URL and make comments on the change.
-When done, the reviewer adds comments through the Gerrit user interface
-and clicks "Reply" to send comments back.
-You will receive a mail notification when this happens.
-You must reply through the web interface.
-
-### Revise and upload
-
-You must respond to review comments through the web interface.
-
-When you have revised the code and are ready for another round of review,
-stage those changes and use `git change` to update the
-commit.
-To send the update change list for another round of review,
-run `git mail` again.
-
-The reviewer can comment on the new copy, and the process repeats.
-The reviewer approves the change by giving it a positive score
-(+1 or +2) and replying `LGTM`: looks good to me.
-
-You can see a list of your pending changes by running
-`git pending`, and switch between change branches with
-`git change <branch>`.
-
-### Synchronize your client
-
-While you were working, others might have submitted changes to the repository.
-To update your local branch, run
-
-```
-$ git sync
-```
-
-(In git terms, `git sync` runs
-`git pull -r`.)
-
-If files you were editing have changed, Git does its best to merge the
-remote changes into your local changes.
-It may leave some files to merge by hand.
-
-For example, suppose you have edited `sin.go` but
-someone else has committed an independent change.
-When you run `git sync`,
-you will get the (scary-looking) output:
-
-```
-$ git sync
-Failed to merge in the changes.
-Patch failed at 0023 math: improved Sin, Cos and Tan precision for very large arguments
-The copy of the patch that failed is found in:
-   /home/you/repo/.git/rebase-apply/patch
-
-When you have resolved this problem, run "git rebase --continue".
-If you prefer to skip this patch, run "git rebase --skip" instead.
-To check out the original branch and stop rebasing, run "git rebase --abort".
-```
-
-
-If this happens, run
-
-```
-$ git status
-```
-
-to see which files failed to merge.
-The output will look something like this:
-
-```
-rebase in progress; onto a24c3eb
-You are currently rebasing branch 'mcgillicutty' on 'a24c3eb'.
-  (fix conflicts and then run "git rebase --continue")
-  (use "git rebase --skip" to skip this patch)
-  (use "git rebase --abort" to check out the original branch)
-
-Unmerged paths:
-  (use "git reset HEAD <file>..." to unstage)
-  (use "git add <file>..." to mark resolution)
-
-	_both modified:   sin.go_
-```
-
-
-The only important part in that transcript is the italicized "both modified"
-line: Git failed to merge your changes with the conflicting change.
-When this happens, Git leaves both sets of edits in the file,
-with conflicts marked by `<<<<<<<` and
-`>>>>>>>`.
-It is now your job to edit the file to combine them.
-Continuing the example, searching for those strings in `sin.go`
-might turn up:
-
-```
-	arg = scale(arg)
-<<<<<<< HEAD
-	if arg > 1e9 {
-=======
-	if arg > 1e10 {
->>>>>>> mcgillicutty
-		largeReduce(arg)
-```
-
-Git doesn't show it, but suppose the original text that both edits
-started with was 1e8; you changed it to 1e10 and the other change to 1e9,
-so the correct answer might now be 1e10.  First, edit the section
-to remove the markers and leave the correct code:
-
-```
-	arg = scale(arg)
-	if arg > 1e10 {
-		largeReduce(arg)
-```
-
-Then tell Git that the conflict is resolved by running
-
-```
-$ git add sin.go
-```
-
-If you had been editing the file, say for debugging, but do not
-care to preserve your changes, you can run
-`git reset HEAD sin.go`
-to abandon your changes.
-Then run `git rebase --continue` to
-restore the change commit.
-
-### Reviewing code by others
-
-You can import a change proposed by someone else into your local Git repository.
-On the Gerrit review page, click the "Download ▼" link in the upper right
-corner, copy the "Checkout" command and run it from your local Git repo.
-It should look something like this:
-
-```
-$ git fetch https://code.googlesource.com/review refs/changes/21/1221/1 && git checkout FETCH_HEAD
-```
-
-To revert, change back to the branch you were working in.
-
-### Submit the change after the review
-
-After the code has been `LGTM`'ed, an approver may
-submit it to the master branch using the Gerrit UI.
-There is a "Submit" button on the web page for the change
-that appears once the change is approved (marked +2).
-
-This checks the change into the repository.
-The change description will include a link to the code review,
-and the code review will be updated with a link to the change
-in the repository.
-Since the method used to integrate the changes is "Cherry Pick",
-the commit hashes in the repository will be changed by
-the submit operation.
-
-### More information
-
-In addition to the information here, the Go community maintains a [CodeReview](https://golang.org/wiki/CodeReview) wiki page.
-Feel free to contribute to this page as you learn the review process.
-
-## Contributors
-
-Files in the google-api-go-client repository don't list author names,
-both to avoid clutter and to avoid having to keep the lists up to date.
-Instead, please add your name to the [`CONTRIBUTORS`](/CONTRIBUTORS)
-file as your first code review, keeping the names in sorted order.
diff --git a/vendor/google.golang.org/api/GettingStarted.md b/vendor/google.golang.org/api/GettingStarted.md
deleted file mode 100644
index 08641d9..0000000
--- a/vendor/google.golang.org/api/GettingStarted.md
+++ /dev/null
@@ -1,130 +0,0 @@
-# Getting Started with the Google APIs for Go
-
-## Getting Started
-
-This is a quick walk-through of how to get started with the Google APIs for Go.
-
-## Background
-
-The first thing to understand is that the Google API libraries are auto-generated for
-each language, including Go, so they may not feel like 100% natural for any language.
-The Go versions are pretty natural, but please forgive any small non-idiomatic things.
-(Suggestions welcome, though!)
-
-## Installing
-
-Pick an API and a version of that API to install.
-You can find the complete list by looking at the
-[directories here](https://github.com/google/google-api-go-client/tree/master/).
-
-For example, let's install the
-[urlshortener's version 1 API](https://godoc.org/google.golang.org/api/urlshortener/v1):
-
-```
-$ go get -u google.golang.org/api/urlshortener/v1
-```
-
-Now it's ready for use in your code.
-
-## Using
-
-Once you've installed a library, you import it like this:
-
-```go
-package main
-
-import (
-    "golang.org/x/net/context"
-    "golang.org/x/oauth2"
-    "golang.org/x/oauth2/google"
-    "google.golang.org/api/urlshortener/v1"
-)
-```
-
-The package name, if you don't override it on your import line, is the name of the
-API without the version number. In the case above, just `urlshortener`.
-
-## Instantiating
-
-Each API has a `New` function taking an `*http.Client` and returning an API-specific `*Service`.
-
-You create the service like:
-
-```go
-    svc, err := urlshortener.New(httpClient)
-```
-
-## OAuth HTTP Client
-
-The HTTP client you pass in to the service must be one that automatically adds
-Google-supported Authorization information to the requests.
-
-There are several ways to do authentication. They will all involve the package
-[golang.org/x/oauth2](https://godoc.org/golang.org/x/oauth2) in some way.
-
-### 3-legged OAuth
-
-For 3-legged OAuth (your application redirecting a user through a website to get a
-token giving your application access to that user's resources), you will need to
-create an oauth2.Config,
-
-
-```go
-    var config = &oauth2.Config{
-        ClientID:     "", // from https://console.developers.google.com/project/<your-project-id>/apiui/credential
-        ClientSecret: "", // from https://console.developers.google.com/project/<your-project-id>/apiui/credential
-        Endpoint:     google.Endpoint,
-        Scopes:       []string{urlshortener.UrlshortenerScope},
-    }
-```
-
-... and then use the AuthCodeURL, Exchange, and Client methods on it.
-For an example, see: https://godoc.org/golang.org/x/oauth2#example-Config
-
-For the redirect URL, see
-https://developers.google.com/identity/protocols/OAuth2InstalledApp#choosingredirecturi
-
-### Service Accounts
-
-To use a Google service account, or the GCE metadata service, see
-the [golang.org/x/oauth2/google](https://godoc.org/golang.org/x/oauth2/google) package.
-In particular, see [google.DefaultClient](https://godoc.org/golang.org/x/oauth2/google#DefaultClient).
-
-### Using API Keys
-
-Some APIs require passing API keys from your application.
-To do this, you can use
-[transport.APIKey](https://godoc.org/google.golang.org/api/googleapi/transport#APIKey):
-
-```go
-    ctx := context.WithValue(context.Background(), oauth2.HTTPClient, &http.Client{
-        Transport: &transport.APIKey{Key: developerKey},
-    })
-    oauthConfig := &oauth2.Config{ .... }
-    var token *oauth2.Token = .... // via cache, or oauthConfig.Exchange
-    httpClient := oauthConfig.Client(ctx, token)
-    svc, err := urlshortener.New(httpClient)
-    ...
-```
-
-## Using the Service
-
-Each service contains zero or more methods and zero or more sub-services.
-The sub-services related to a specific type of "Resource".
-
-Those sub-services then contain their own methods.
-
-For instance, the urlshortener API has just the "Url" sub-service:
-
-```go
-    url, err := svc.Url.Get(shortURL).Do()
-    if err != nil {
-        ...
-    }
-    fmt.Printf("The URL %s goes to %s\n", shortURL, url.LongUrl)
-```
-
-For a more complete example, see
-[urlshortener.go](https://github.com/google/google-api-go-client/tree/master/examples/urlshortener.go)
-in the [examples directory](https://github.com/google/google-api-go-client/tree/master/examples/).
-(the examples use some functions in `main.go` in the same directory)
diff --git a/vendor/google.golang.org/api/NOTES b/vendor/google.golang.org/api/NOTES
deleted file mode 100644
index 571f6ec..0000000
--- a/vendor/google.golang.org/api/NOTES
+++ /dev/null
@@ -1,13 +0,0 @@
-Discovery Service:
-https://developers.google.com/discovery/
-https://developers.google.com/discovery/v1/reference/
-
-The "type" key:
-http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1
-
-The "format" key:
-http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.23
-https://developers.google.com/discovery/v1/type-format
-
-Google JSON format docs:
-http://google-styleguide.googlecode.com/svn/trunk/jsoncstyleguide.xml
diff --git a/vendor/google.golang.org/api/README.md b/vendor/google.golang.org/api/README.md
deleted file mode 100644
index 097d330..0000000
--- a/vendor/google.golang.org/api/README.md
+++ /dev/null
@@ -1,108 +0,0 @@
-# Google APIs Client Library for Go
-
-## Getting Started
-
-```
-$ go get google.golang.org/api/tasks/v1
-$ go get google.golang.org/api/moderator/v1
-$ go get google.golang.org/api/urlshortener/v1
-... etc ...
-```
-
-and using:
-
-```go
-package main
-
-import (
-	"net/http"
-
-	"google.golang.org/api/urlshortener/v1"
-)
-
-func main() {
-	svc, err := urlshortener.New(http.DefaultClient)
-	// ...
-}
-```
-
-* For a longer tutorial, see the [Getting Started guide](https://github.com/google/google-api-go-client/blob/master/GettingStarted.md).
-* For examples, see the [examples directory](https://github.com/google/google-api-go-client/tree/master/examples).
-* For support, use the [golang-nuts](https://groups.google.com/group/golang-nuts) mailing list.
-
-## Status
-[![Build Status](https://travis-ci.org/google/google-api-go-client.png)](https://travis-ci.org/google/google-api-go-client)
-[![GoDoc](https://godoc.org/google.golang.org/api?status.svg)](https://godoc.org/google.golang.org/api)
-
-These are auto-generated Go libraries from the Google Discovery Service's JSON description files of the available "new style" Google APIs.
-
-Due to the auto-generated nature of this collection of libraries, complete APIs or specific versions can appear or go away without notice.
-As a result, you should always locally vendor any API(s) that your code relies upon.
-
-This client library is supported, but in maintenance mode only.
-We are fixing necessary bugs and adding essential features to ensure this
-library continues to meet your needs for accessing Google APIs.
-Non-critical issues will be closed.
-Any issue may be reopened if it is causing ongoing problems.
-
-If you're working with Google Cloud Platform APIs such as Datastore or Pub/Sub,
-consider using the
-[Cloud Client Libraries for Go](https://github.com/GoogleCloudPlatform/google-cloud-go)
-instead. These are the new and
-idiomatic Go libraries targeted specifically at Google Cloud Platform Services.
-
-The generator itself and the code it produces are beta. Some APIs are
-alpha/beta, and indicated as such in the import path (e.g.,
-"google.golang.org/api/someapi/v1alpha").
-
-## Application Default Credentials Example
-
-Application Default Credentials provide a simplified way to obtain credentials
-for authenticating with Google APIs.
-
-The Application Default Credentials authenticate as the application itself,
-which make them great for working with Google Cloud APIs like Storage or
-Datastore. They are the recommended form of authentication when building
-applications that run on Google Compute Engine or Google App Engine.
-
-Default credentials are provided by the `golang.org/x/oauth2/google` package. To use them, add the following import:
-
-```go
-import "golang.org/x/oauth2/google"
-```
-
-Some credentials types require you to specify scopes, and service entry points may not inject them. If you encounter this situation you may need to specify scopes as follows:
-
-```go
-import (
-        "golang.org/x/net/context"
-        "golang.org/x/oauth2/google"
-        "google.golang.org/api/compute/v1"
-)
-
-func main() {
-        // Use oauth2.NoContext if there isn't a good context to pass in.
-        ctx := context.Background()
-
-        client, err := google.DefaultClient(ctx, compute.ComputeScope)
-        if err != nil {
-                //...
-        }
-        computeService, err := compute.New(client)
-        if err != nil {
-                //...
-        }
-}
-```
-
-If you need a `oauth2.TokenSource`, use the `DefaultTokenSource` function:
-
-```go
-ts, err := google.DefaultTokenSource(ctx, scope1, scope2, ...)
-if err != nil {
-        //...
-}
-client := oauth2.NewClient(ctx, ts)
-```
-
-See also: [golang.org/x/oauth2/google](https://godoc.org/golang.org/x/oauth2/google) package documentation.
diff --git a/vendor/google.golang.org/api/TODO b/vendor/google.golang.org/api/TODO
deleted file mode 100644
index de2467c..0000000
--- a/vendor/google.golang.org/api/TODO
+++ /dev/null
@@ -1,2 +0,0 @@
-Moved to:
-https://github.com/google/google-api-go-client/issues
diff --git a/vendor/google.golang.org/api/api-list.json b/vendor/google.golang.org/api/api-list.json
deleted file mode 100644
index b3fd4e6..0000000
--- a/vendor/google.golang.org/api/api-list.json
+++ /dev/null
@@ -1,2909 +0,0 @@
-{
- "kind": "discovery#directoryList",
- "discoveryVersion": "v1",
- "items": [
-  {
-   "kind": "discovery#directoryItem",
-   "id": "acceleratedmobilepageurl:v1",
-   "name": "acceleratedmobilepageurl",
-   "version": "v1",
-   "title": "Accelerated Mobile Pages (AMP) URL API",
-   "description": "This API contains a single method, batchGet. Call this method to retrieve the AMP URL (and equivalent AMP Cache URL) for given public URL(s).",
-   "discoveryRestUrl": "https://acceleratedmobilepageurl.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/amp/cache/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangebuyer:v1.2",
-   "name": "adexchangebuyer",
-   "version": "v1.2",
-   "title": "Ad Exchange Buyer API",
-   "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangebuyer/v1.2/rest",
-   "discoveryLink": "./apis/adexchangebuyer/v1.2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangebuyer:v1.3",
-   "name": "adexchangebuyer",
-   "version": "v1.3",
-   "title": "Ad Exchange Buyer API",
-   "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangebuyer/v1.3/rest",
-   "discoveryLink": "./apis/adexchangebuyer/v1.3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangebuyer:v1.4",
-   "name": "adexchangebuyer",
-   "version": "v1.4",
-   "title": "Ad Exchange Buyer API",
-   "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangebuyer/v1.4/rest",
-   "discoveryLink": "./apis/adexchangebuyer/v1.4/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangebuyer2:v2beta1",
-   "name": "adexchangebuyer2",
-   "version": "v2beta1",
-   "title": "Ad Exchange Buyer API II",
-   "description": "Accesses the latest features for managing Ad Exchange accounts, Real-Time Bidding configurations and auction metrics, and Marketplace programmatic deals.",
-   "discoveryRestUrl": "https://adexchangebuyer.googleapis.com/$discovery/rest?version=v2beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest/reference/rest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangeseller:v1",
-   "name": "adexchangeseller",
-   "version": "v1",
-   "title": "Ad Exchange Seller API",
-   "description": "Accesses the inventory of Ad Exchange seller users and generates reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangeseller/v1/rest",
-   "discoveryLink": "./apis/adexchangeseller/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/seller-rest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangeseller:v1.1",
-   "name": "adexchangeseller",
-   "version": "v1.1",
-   "title": "Ad Exchange Seller API",
-   "description": "Accesses the inventory of Ad Exchange seller users and generates reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangeseller/v1.1/rest",
-   "discoveryLink": "./apis/adexchangeseller/v1.1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/seller-rest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangeseller:v2.0",
-   "name": "adexchangeseller",
-   "version": "v2.0",
-   "title": "Ad Exchange Seller API",
-   "description": "Accesses the inventory of Ad Exchange seller users and generates reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangeseller/v2.0/rest",
-   "discoveryLink": "./apis/adexchangeseller/v2.0/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/seller-rest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexperiencereport:v1",
-   "name": "adexperiencereport",
-   "version": "v1",
-   "title": "Google Ad Experience Report API",
-   "description": "View Ad Experience Report data, and get a list of sites that have a significant number of annoying ads.",
-   "discoveryRestUrl": "https://adexperiencereport.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/ad-experience-report/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "admin:datatransfer_v1",
-   "name": "admin",
-   "version": "datatransfer_v1",
-   "title": "Admin Data Transfer API",
-   "description": "Transfers user data from one user to another.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/admin/datatransfer_v1/rest",
-   "discoveryLink": "./apis/admin/datatransfer_v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/admin-sdk/data-transfer/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "admin:directory_v1",
-   "name": "admin",
-   "version": "directory_v1",
-   "title": "Admin Directory API",
-   "description": "The Admin SDK Directory API lets you view and manage enterprise resources such as users and groups, administrative notifications, security features, and more.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/admin/directory_v1/rest",
-   "discoveryLink": "./apis/admin/directory_v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/admin-sdk/directory/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "admin:reports_v1",
-   "name": "admin",
-   "version": "reports_v1",
-   "title": "Admin Reports API",
-   "description": "Fetches reports for the administrators of G Suite customers about the usage, collaboration, security, and risk for their users.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/admin/reports_v1/rest",
-   "discoveryLink": "./apis/admin/reports_v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/admin-sdk/reports/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adsense:v1.4",
-   "name": "adsense",
-   "version": "v1.4",
-   "title": "AdSense Management API",
-   "description": "Accesses AdSense publishers' inventory and generates performance reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adsense/v1.4/rest",
-   "discoveryLink": "./apis/adsense/v1.4/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/adsense-16.png",
-    "x32": "https://www.google.com/images/icons/product/adsense-32.png"
-   },
-   "documentationLink": "https://developers.google.com/adsense/management/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adsensehost:v4.1",
-   "name": "adsensehost",
-   "version": "v4.1",
-   "title": "AdSense Host API",
-   "description": "Generates performance reports, generates ad codes, and provides publisher management capabilities for AdSense Hosts.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adsensehost/v4.1/rest",
-   "discoveryLink": "./apis/adsensehost/v4.1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/adsense-16.png",
-    "x32": "https://www.google.com/images/icons/product/adsense-32.png"
-   },
-   "documentationLink": "https://developers.google.com/adsense/host/",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "analytics:v2.4",
-   "name": "analytics",
-   "version": "v2.4",
-   "title": "Google Analytics API",
-   "description": "Views and manages your Google Analytics data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/analytics/v2.4/rest",
-   "discoveryLink": "./apis/analytics/v2.4/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/analytics-16.png",
-    "x32": "https://www.google.com/images/icons/product/analytics-32.png"
-   },
-   "documentationLink": "https://developers.google.com/analytics/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "analytics:v3",
-   "name": "analytics",
-   "version": "v3",
-   "title": "Google Analytics API",
-   "description": "Views and manages your Google Analytics data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/analytics/v3/rest",
-   "discoveryLink": "./apis/analytics/v3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/analytics-16.png",
-    "x32": "https://www.google.com/images/icons/product/analytics-32.png"
-   },
-   "documentationLink": "https://developers.google.com/analytics/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "analyticsreporting:v4",
-   "name": "analyticsreporting",
-   "version": "v4",
-   "title": "Google Analytics Reporting API",
-   "description": "Accesses Analytics report data.",
-   "discoveryRestUrl": "https://analyticsreporting.googleapis.com/$discovery/rest?version=v4",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/analytics/devguides/reporting/core/v4/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androiddeviceprovisioning:v1",
-   "name": "androiddeviceprovisioning",
-   "version": "v1",
-   "title": "Android Device Provisioning Partner API",
-   "description": "Automates reseller integration into zero-touch enrollment by assigning devices to customers and creating device reports.",
-   "discoveryRestUrl": "https://androiddeviceprovisioning.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/zero-touch/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidenterprise:v1",
-   "name": "androidenterprise",
-   "version": "v1",
-   "title": "Google Play EMM API",
-   "description": "Manages the deployment of apps to Android for Work users.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidenterprise/v1/rest",
-   "discoveryLink": "./apis/androidenterprise/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/android-16.png",
-    "x32": "https://www.google.com/images/icons/product/android-32.png"
-   },
-   "documentationLink": "https://developers.google.com/android/work/play/emm-api",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidmanagement:v1",
-   "name": "androidmanagement",
-   "version": "v1",
-   "title": "Android Management API",
-   "description": "The Android Management API provides remote enterprise management of Android devices and apps.",
-   "discoveryRestUrl": "https://androidmanagement.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/android/management",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidpublisher:v1",
-   "name": "androidpublisher",
-   "version": "v1",
-   "title": "Google Play Developer API",
-   "description": "Lets Android application developers access their Google Play accounts.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v1/rest",
-   "discoveryLink": "./apis/androidpublisher/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/android-16.png",
-    "x32": "https://www.google.com/images/icons/product/android-32.png"
-   },
-   "documentationLink": "https://developers.google.com/android-publisher",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidpublisher:v1.1",
-   "name": "androidpublisher",
-   "version": "v1.1",
-   "title": "Google Play Developer API",
-   "description": "Lets Android application developers access their Google Play accounts.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v1.1/rest",
-   "discoveryLink": "./apis/androidpublisher/v1.1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/android-16.png",
-    "x32": "https://www.google.com/images/icons/product/android-32.png"
-   },
-   "documentationLink": "https://developers.google.com/android-publisher",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidpublisher:v2",
-   "name": "androidpublisher",
-   "version": "v2",
-   "title": "Google Play Developer API",
-   "description": "Lets Android application developers access their Google Play accounts.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v2/rest",
-   "discoveryLink": "./apis/androidpublisher/v2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/android-16.png",
-    "x32": "https://www.google.com/images/icons/product/android-32.png"
-   },
-   "documentationLink": "https://developers.google.com/android-publisher",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1alpha",
-   "name": "appengine",
-   "version": "v1alpha",
-   "title": "Google App Engine Admin API",
-   "description": "The App Engine Admin API enables developers to provision and manage their App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1alpha",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1beta",
-   "name": "appengine",
-   "version": "v1beta",
-   "title": "Google App Engine Admin API",
-   "description": "The App Engine Admin API enables developers to provision and manage their App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1beta",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1",
-   "name": "appengine",
-   "version": "v1",
-   "title": "Google App Engine Admin API",
-   "description": "The App Engine Admin API enables developers to provision and manage their App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1beta4",
-   "name": "appengine",
-   "version": "v1beta4",
-   "title": "Google App Engine Admin API",
-   "description": "The App Engine Admin API enables developers to provision and manage their App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1beta4",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1beta5",
-   "name": "appengine",
-   "version": "v1beta5",
-   "title": "Google App Engine Admin API",
-   "description": "The App Engine Admin API enables developers to provision and manage their App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1beta5",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appsactivity:v1",
-   "name": "appsactivity",
-   "version": "v1",
-   "title": "G Suite Activity API",
-   "description": "Provides a historical view of activity.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/appsactivity/v1/rest",
-   "discoveryLink": "./apis/appsactivity/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/activity/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appstate:v1",
-   "name": "appstate",
-   "version": "v1",
-   "title": "Google App State API",
-   "description": "The Google App State API.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/appstate/v1/rest",
-   "discoveryLink": "./apis/appstate/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/games/services/web/api/states",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "bigquery:v2",
-   "name": "bigquery",
-   "version": "v2",
-   "title": "BigQuery API",
-   "description": "A data platform for customers to create, manage, share and query data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/bigquery/v2/rest",
-   "discoveryLink": "./apis/bigquery/v2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/search-16.gif",
-    "x32": "https://www.google.com/images/icons/product/search-32.gif"
-   },
-   "documentationLink": "https://cloud.google.com/bigquery/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "bigquerydatatransfer:v1",
-   "name": "bigquerydatatransfer",
-   "version": "v1",
-   "title": "BigQuery Data Transfer API",
-   "description": "Transfers data from partner SaaS applications to Google BigQuery on a scheduled, managed basis.",
-   "discoveryRestUrl": "https://bigquerydatatransfer.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/bigquery/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "blogger:v2",
-   "name": "blogger",
-   "version": "v2",
-   "title": "Blogger API",
-   "description": "API for access to the data within Blogger.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/blogger/v2/rest",
-   "discoveryLink": "./apis/blogger/v2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/blogger-16.png",
-    "x32": "https://www.google.com/images/icons/product/blogger-32.png"
-   },
-   "documentationLink": "https://developers.google.com/blogger/docs/2.0/json/getting_started",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "blogger:v3",
-   "name": "blogger",
-   "version": "v3",
-   "title": "Blogger API",
-   "description": "API for access to the data within Blogger.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/blogger/v3/rest",
-   "discoveryLink": "./apis/blogger/v3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/blogger-16.png",
-    "x32": "https://www.google.com/images/icons/product/blogger-32.png"
-   },
-   "documentationLink": "https://developers.google.com/blogger/docs/3.0/getting_started",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "books:v1",
-   "name": "books",
-   "version": "v1",
-   "title": "Books API",
-   "description": "Searches for books and manages your Google Books library.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/books/v1/rest",
-   "discoveryLink": "./apis/books/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/ebooks-16.png",
-    "x32": "https://www.google.com/images/icons/product/ebooks-32.png"
-   },
-   "documentationLink": "https://developers.google.com/books/docs/v1/getting_started",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "calendar:v3",
-   "name": "calendar",
-   "version": "v3",
-   "title": "Calendar API",
-   "description": "Manipulates events and other calendar data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest",
-   "discoveryLink": "./apis/calendar/v3/rest",
-   "icons": {
-    "x16": "http://www.google.com/images/icons/product/calendar-16.png",
-    "x32": "http://www.google.com/images/icons/product/calendar-32.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/calendar/firstapp",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "civicinfo:v2",
-   "name": "civicinfo",
-   "version": "v2",
-   "title": "Google Civic Information API",
-   "description": "Provides polling places, early vote locations, contest data, election officials, and government representatives for U.S. residential addresses.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/civicinfo/v2/rest",
-   "discoveryLink": "./apis/civicinfo/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/civic-information",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "classroom:v1",
-   "name": "classroom",
-   "version": "v1",
-   "title": "Google Classroom API",
-   "description": "Manages classes, rosters, and invitations in Google Classroom.",
-   "discoveryRestUrl": "https://classroom.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/classroom",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudbilling:v1",
-   "name": "cloudbilling",
-   "version": "v1",
-   "title": "Google Cloud Billing API",
-   "description": "Allows developers to manage billing for their Google Cloud Platform projects programmatically.",
-   "discoveryRestUrl": "https://cloudbilling.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/billing/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudbuild:v1",
-   "name": "cloudbuild",
-   "version": "v1",
-   "title": "Google Cloud Container Builder API",
-   "description": "Builds container images in the cloud.",
-   "discoveryRestUrl": "https://cloudbuild.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/container-builder/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "clouddebugger:v2",
-   "name": "clouddebugger",
-   "version": "v2",
-   "title": "Stackdriver Debugger API",
-   "description": "Examines the call stack and variables of a running application without stopping or slowing it down.",
-   "discoveryRestUrl": "https://clouddebugger.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "http://cloud.google.com/debugger",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "clouderrorreporting:v1beta1",
-   "name": "clouderrorreporting",
-   "version": "v1beta1",
-   "title": "Stackdriver Error Reporting API",
-   "description": "Groups and counts similar errors from cloud services and applications, reports new errors, and provides access to error groups and their associated errors.",
-   "discoveryRestUrl": "https://clouderrorreporting.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/error-reporting/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudfunctions:v1",
-   "name": "cloudfunctions",
-   "version": "v1",
-   "title": "Google Cloud Functions API",
-   "description": "API for managing lightweight user-provided functions executed in response to events.",
-   "discoveryRestUrl": "https://cloudfunctions.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/functions",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudfunctions:v1beta2",
-   "name": "cloudfunctions",
-   "version": "v1beta2",
-   "title": "Google Cloud Functions API",
-   "description": "API for managing lightweight user-provided functions executed in response to events.",
-   "discoveryRestUrl": "https://cloudfunctions.googleapis.com/$discovery/rest?version=v1beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/functions",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudiot:v1",
-   "name": "cloudiot",
-   "version": "v1",
-   "title": "Google Cloud IoT API",
-   "description": "Registers and manages IoT (Internet of Things) devices that connect to the Google Cloud Platform.",
-   "discoveryRestUrl": "https://cloudiot.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/iot",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudiot:v1beta1",
-   "name": "cloudiot",
-   "version": "v1beta1",
-   "title": "Google Cloud IoT API",
-   "description": "Registers and manages IoT (Internet of Things) devices that connect to the Google Cloud Platform.",
-   "discoveryRestUrl": "https://cloudiot.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/iot",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudkms:v1",
-   "name": "cloudkms",
-   "version": "v1",
-   "title": "Google Cloud Key Management Service (KMS) API",
-   "description": "Manages encryption for your cloud services the same way you do on-premises. You can generate, use, rotate, and destroy AES256 encryption keys.",
-   "discoveryRestUrl": "https://cloudkms.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/kms/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudmonitoring:v2beta2",
-   "name": "cloudmonitoring",
-   "version": "v2beta2",
-   "title": "Cloud Monitoring API",
-   "description": "Accesses Google Cloud Monitoring data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/cloudmonitoring/v2beta2/rest",
-   "discoveryLink": "./apis/cloudmonitoring/v2beta2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/monitoring/v2beta2/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudresourcemanager:v1",
-   "name": "cloudresourcemanager",
-   "version": "v1",
-   "title": "Google Cloud Resource Manager API",
-   "description": "The Google Cloud Resource Manager API provides methods for creating, reading, and updating project metadata.",
-   "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/resource-manager",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudresourcemanager:v1beta1",
-   "name": "cloudresourcemanager",
-   "version": "v1beta1",
-   "title": "Google Cloud Resource Manager API",
-   "description": "The Google Cloud Resource Manager API provides methods for creating, reading, and updating project metadata.",
-   "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/resource-manager",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudresourcemanager:v2beta1",
-   "name": "cloudresourcemanager",
-   "version": "v2beta1",
-   "title": "Google Cloud Resource Manager API",
-   "description": "The Google Cloud Resource Manager API provides methods for creating, reading, and updating project metadata.",
-   "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v2beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/resource-manager",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudtasks:v2beta2",
-   "name": "cloudtasks",
-   "version": "v2beta2",
-   "title": "Cloud Tasks API",
-   "description": "Manages the execution of large numbers of distributed requests. Cloud Tasks is in Alpha.",
-   "discoveryRestUrl": "https://cloudtasks.googleapis.com/$discovery/rest?version=v2beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/cloud-tasks/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudtrace:v1",
-   "name": "cloudtrace",
-   "version": "v1",
-   "title": "Stackdriver Trace API",
-   "description": "Send and retrieve trace data from Stackdriver Trace. Data is generated and available by default for all App Engine applications. Data from other applications can be written to Stackdriver Trace for display, reporting, and analysis.",
-   "discoveryRestUrl": "https://cloudtrace.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/trace",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudtrace:v2",
-   "name": "cloudtrace",
-   "version": "v2",
-   "title": "Stackdriver Trace API",
-   "description": "Send and retrieve trace data from Stackdriver Trace. Data is generated and available by default for all App Engine applications. Data from other applications can be written to Stackdriver Trace for display, reporting, and analysis.",
-   "discoveryRestUrl": "https://cloudtrace.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/trace",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "clouduseraccounts:alpha",
-   "name": "clouduseraccounts",
-   "version": "alpha",
-   "title": "Cloud User Accounts API",
-   "description": "Creates and manages users and groups for accessing Google Compute Engine virtual machines.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/clouduseraccounts/alpha/rest",
-   "discoveryLink": "./apis/clouduseraccounts/alpha/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
-   },
-   "documentationLink": "https://cloud.google.com/compute/docs/access/user-accounts/api/latest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "clouduseraccounts:beta",
-   "name": "clouduseraccounts",
-   "version": "beta",
-   "title": "Cloud User Accounts API",
-   "description": "Creates and manages users and groups for accessing Google Compute Engine virtual machines.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/clouduseraccounts/beta/rest",
-   "discoveryLink": "./apis/clouduseraccounts/beta/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
-   },
-   "documentationLink": "https://cloud.google.com/compute/docs/access/user-accounts/api/latest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "clouduseraccounts:vm_alpha",
-   "name": "clouduseraccounts",
-   "version": "vm_alpha",
-   "title": "Cloud User Accounts API",
-   "description": "Creates and manages users and groups for accessing Google Compute Engine virtual machines.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/clouduseraccounts/vm_alpha/rest",
-   "discoveryLink": "./apis/clouduseraccounts/vm_alpha/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
-   },
-   "documentationLink": "https://cloud.google.com/compute/docs/access/user-accounts/api/latest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "clouduseraccounts:vm_beta",
-   "name": "clouduseraccounts",
-   "version": "vm_beta",
-   "title": "Cloud User Accounts API",
-   "description": "Creates and manages users and groups for accessing Google Compute Engine virtual machines.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/clouduseraccounts/vm_beta/rest",
-   "discoveryLink": "./apis/clouduseraccounts/vm_beta/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
-   },
-   "documentationLink": "https://cloud.google.com/compute/docs/access/user-accounts/api/latest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "compute:alpha",
-   "name": "compute",
-   "version": "alpha",
-   "title": "Compute Engine API",
-   "description": "Creates and runs virtual machines on Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/compute/alpha/rest",
-   "discoveryLink": "./apis/compute/alpha/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "compute:beta",
-   "name": "compute",
-   "version": "beta",
-   "title": "Compute Engine API",
-   "description": "Creates and runs virtual machines on Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/compute/beta/rest",
-   "discoveryLink": "./apis/compute/beta/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "compute:v1",
-   "name": "compute",
-   "version": "v1",
-   "title": "Compute Engine API",
-   "description": "Creates and runs virtual machines on Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/compute/v1/rest",
-   "discoveryLink": "./apis/compute/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "consumersurveys:v2",
-   "name": "consumersurveys",
-   "version": "v2",
-   "title": "Consumer Surveys API",
-   "description": "Creates and conducts surveys, lists the surveys that an authenticated user owns, and retrieves survey results and information about specified surveys.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/consumersurveys/v2/rest",
-   "discoveryLink": "./apis/consumersurveys/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "container:v1",
-   "name": "container",
-   "version": "v1",
-   "title": "Google Container Engine API",
-   "description": "The Google Container Engine API is used for building and managing container based applications, powered by the open source Kubernetes technology.",
-   "discoveryRestUrl": "https://container.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/container-engine/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "container:v1beta1",
-   "name": "container",
-   "version": "v1beta1",
-   "title": "Google Container Engine API",
-   "description": "The Google Container Engine API is used for building and managing container based applications, powered by the open source Kubernetes technology.",
-   "discoveryRestUrl": "https://container.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/container-engine/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "content:v2sandbox",
-   "name": "content",
-   "version": "v2sandbox",
-   "title": "Content API for Shopping",
-   "description": "Manages product items, inventory, and Merchant Center accounts for Google Shopping.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/content/v2sandbox/rest",
-   "discoveryLink": "./apis/content/v2sandbox/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/shopping-content",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "content:v2",
-   "name": "content",
-   "version": "v2",
-   "title": "Content API for Shopping",
-   "description": "Manages product items, inventory, and Merchant Center accounts for Google Shopping.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/content/v2/rest",
-   "discoveryLink": "./apis/content/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/shopping-content",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "customsearch:v1",
-   "name": "customsearch",
-   "version": "v1",
-   "title": "CustomSearch API",
-   "description": "Searches over a website or collection of websites",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/customsearch/v1/rest",
-   "discoveryLink": "./apis/customsearch/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/custom-search/v1/using_rest",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dataflow:v1b3",
-   "name": "dataflow",
-   "version": "v1b3",
-   "title": "Google Dataflow API",
-   "description": "Manages Google Cloud Dataflow projects on Google Cloud Platform.",
-   "discoveryRestUrl": "https://dataflow.googleapis.com/$discovery/rest?version=v1b3",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/dataflow",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dataproc:v1",
-   "name": "dataproc",
-   "version": "v1",
-   "title": "Google Cloud Dataproc API",
-   "description": "Manages Hadoop-based clusters and jobs on Google Cloud Platform.",
-   "discoveryRestUrl": "https://dataproc.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/dataproc/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dataproc:v1beta2",
-   "name": "dataproc",
-   "version": "v1beta2",
-   "title": "Google Cloud Dataproc API",
-   "description": "Manages Hadoop-based clusters and jobs on Google Cloud Platform.",
-   "discoveryRestUrl": "https://dataproc.googleapis.com/$discovery/rest?version=v1beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/dataproc/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "datastore:v1",
-   "name": "datastore",
-   "version": "v1",
-   "title": "Google Cloud Datastore API",
-   "description": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.",
-   "discoveryRestUrl": "https://datastore.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/datastore/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "datastore:v1beta1",
-   "name": "datastore",
-   "version": "v1beta1",
-   "title": "Google Cloud Datastore API",
-   "description": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.",
-   "discoveryRestUrl": "https://datastore.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/datastore/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "datastore:v1beta3",
-   "name": "datastore",
-   "version": "v1beta3",
-   "title": "Google Cloud Datastore API",
-   "description": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.",
-   "discoveryRestUrl": "https://datastore.googleapis.com/$discovery/rest?version=v1beta3",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/datastore/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "deploymentmanager:alpha",
-   "name": "deploymentmanager",
-   "version": "alpha",
-   "title": "Google Cloud Deployment Manager Alpha API",
-   "description": "The Deployment Manager API allows users to declaratively configure, deploy and run complex solutions on the Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/deploymentmanager/alpha/rest",
-   "discoveryLink": "./apis/deploymentmanager/alpha/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/deployment-manager/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "deploymentmanager:v2beta",
-   "name": "deploymentmanager",
-   "version": "v2beta",
-   "title": "Google Cloud Deployment Manager API V2Beta Methods",
-   "description": "The Deployment Manager API allows users to declaratively configure, deploy and run complex solutions on the Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/deploymentmanager/v2beta/rest",
-   "discoveryLink": "./apis/deploymentmanager/v2beta/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/deployment-manager/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "deploymentmanager:v2",
-   "name": "deploymentmanager",
-   "version": "v2",
-   "title": "Google Cloud Deployment Manager API",
-   "description": "Declares, configures, and deploys complex solutions on Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/deploymentmanager/v2/rest",
-   "discoveryLink": "./apis/deploymentmanager/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/deployment-manager/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dfareporting:v2.7",
-   "name": "dfareporting",
-   "version": "v2.7",
-   "title": "DCM/DFA Reporting And Trafficking API",
-   "description": "Manages your DoubleClick Campaign Manager ad campaigns and reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dfareporting/v2.7/rest",
-   "discoveryLink": "./apis/dfareporting/v2.7/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dfareporting:v2.8",
-   "name": "dfareporting",
-   "version": "v2.8",
-   "title": "DCM/DFA Reporting And Trafficking API",
-   "description": "Manages your DoubleClick Campaign Manager ad campaigns and reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dfareporting/v2.8/rest",
-   "discoveryLink": "./apis/dfareporting/v2.8/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "discovery:v1",
-   "name": "discovery",
-   "version": "v1",
-   "title": "APIs Discovery Service",
-   "description": "Provides information about other Google APIs, such as what APIs are available, the resource, and method details for each API.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/discovery/v1/rest",
-   "discoveryLink": "./apis/discovery/v1/rest",
-   "icons": {
-    "x16": "http://www.google.com/images/icons/feature/filing_cabinet_search-g16.png",
-    "x32": "http://www.google.com/images/icons/feature/filing_cabinet_search-g32.png"
-   },
-   "documentationLink": "https://developers.google.com/discovery/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dlp:v2beta1",
-   "name": "dlp",
-   "version": "v2beta1",
-   "title": "DLP API",
-   "description": "The Google Data Loss Prevention API provides methods for detection of privacy-sensitive fragments in text, images, and Google Cloud Platform storage repositories.",
-   "discoveryRestUrl": "https://dlp.googleapis.com/$discovery/rest?version=v2beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/dlp/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dns:v1",
-   "name": "dns",
-   "version": "v1",
-   "title": "Google Cloud DNS API",
-   "description": "Configures and serves authoritative DNS records.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dns/v1/rest",
-   "discoveryLink": "./apis/dns/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/cloud-dns",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dns:v1beta2",
-   "name": "dns",
-   "version": "v1beta2",
-   "title": "Google Cloud DNS API",
-   "description": "Configures and serves authoritative DNS records.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dns/v1beta2/rest",
-   "discoveryLink": "./apis/dns/v1beta2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/cloud-dns",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dns:v2beta1",
-   "name": "dns",
-   "version": "v2beta1",
-   "title": "Google Cloud DNS API",
-   "description": "Configures and serves authoritative DNS records.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dns/v2beta1/rest",
-   "discoveryLink": "./apis/dns/v2beta1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/cloud-dns",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "doubleclickbidmanager:v1",
-   "name": "doubleclickbidmanager",
-   "version": "v1",
-   "title": "DoubleClick Bid Manager API",
-   "description": "API for viewing and managing your reports in DoubleClick Bid Manager.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/doubleclickbidmanager/v1/rest",
-   "discoveryLink": "./apis/doubleclickbidmanager/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/bid-manager/",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "doubleclicksearch:v2",
-   "name": "doubleclicksearch",
-   "version": "v2",
-   "title": "DoubleClick Search API",
-   "description": "Reports and modifies your advertising data in DoubleClick Search (for example, campaigns, ad groups, keywords, and conversions).",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/doubleclicksearch/v2/rest",
-   "discoveryLink": "./apis/doubleclicksearch/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/doubleclick-search/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "drive:v2",
-   "name": "drive",
-   "version": "v2",
-   "title": "Drive API",
-   "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/drive/v2/rest",
-   "discoveryLink": "./apis/drive/v2/rest",
-   "icons": {
-    "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
-    "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
-   },
-   "documentationLink": "https://developers.google.com/drive/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "drive:v3",
-   "name": "drive",
-   "version": "v3",
-   "title": "Drive API",
-   "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/drive/v3/rest",
-   "discoveryLink": "./apis/drive/v3/rest",
-   "icons": {
-    "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
-    "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
-   },
-   "documentationLink": "https://developers.google.com/drive/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firebasedynamiclinks:v1",
-   "name": "firebasedynamiclinks",
-   "version": "v1",
-   "title": "Firebase Dynamic Links API",
-   "description": "Programmatically creates and manages Firebase Dynamic Links.",
-   "discoveryRestUrl": "https://firebasedynamiclinks.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://firebase.google.com/docs/dynamic-links/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firebaseremoteconfig:v1",
-   "name": "firebaseremoteconfig",
-   "version": "v1",
-   "title": "Firebase Remote Config API",
-   "description": "Firebase Remote Config API allows the 3P clients to manage Remote Config conditions and parameters for Firebase applications.",
-   "discoveryRestUrl": "https://firebaseremoteconfig.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://firebase.google.com/docs/remote-config/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firebaserules:v1",
-   "name": "firebaserules",
-   "version": "v1",
-   "title": "Firebase Rules API",
-   "description": "Creates and manages rules that determine when a Firebase Rules-enabled service should permit a request.",
-   "discoveryRestUrl": "https://firebaserules.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://firebase.google.com/docs/storage/security",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firestore:v1beta1",
-   "name": "firestore",
-   "version": "v1beta1",
-   "title": "Google Cloud Firestore API",
-   "description": "",
-   "discoveryRestUrl": "https://firestore.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/firestore",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "fitness:v1",
-   "name": "fitness",
-   "version": "v1",
-   "title": "Fitness",
-   "description": "Stores and accesses user data in the fitness store from apps on any platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/fitness/v1/rest",
-   "discoveryLink": "./apis/fitness/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/fit/rest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "fusiontables:v1",
-   "name": "fusiontables",
-   "version": "v1",
-   "title": "Fusion Tables API",
-   "description": "API for working with Fusion Tables data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/fusiontables/v1/rest",
-   "discoveryLink": "./apis/fusiontables/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/fusiontables",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "fusiontables:v2",
-   "name": "fusiontables",
-   "version": "v2",
-   "title": "Fusion Tables API",
-   "description": "API for working with Fusion Tables data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/fusiontables/v2/rest",
-   "discoveryLink": "./apis/fusiontables/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/fusiontables",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "games:v1",
-   "name": "games",
-   "version": "v1",
-   "title": "Google Play Game Services API",
-   "description": "The API for Google Play Game Services.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/games/v1/rest",
-   "discoveryLink": "./apis/games/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/games/services/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "gamesConfiguration:v1configuration",
-   "name": "gamesConfiguration",
-   "version": "v1configuration",
-   "title": "Google Play Game Services Publishing API",
-   "description": "The Publishing API for Google Play Game Services.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/gamesConfiguration/v1configuration/rest",
-   "discoveryLink": "./apis/gamesConfiguration/v1configuration/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/games/services",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "gamesManagement:v1management",
-   "name": "gamesManagement",
-   "version": "v1management",
-   "title": "Google Play Game Services Management API",
-   "description": "The Management API for Google Play Game Services.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/gamesManagement/v1management/rest",
-   "discoveryLink": "./apis/gamesManagement/v1management/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/games/services",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "genomics:v1alpha2",
-   "name": "genomics",
-   "version": "v1alpha2",
-   "title": "Genomics API",
-   "description": "Upload, process, query, and search Genomics data in the cloud.",
-   "discoveryRestUrl": "https://genomics.googleapis.com/$discovery/rest?version=v1alpha2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/genomics",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "genomics:v1",
-   "name": "genomics",
-   "version": "v1",
-   "title": "Genomics API",
-   "description": "Upload, process, query, and search Genomics data in the cloud.",
-   "discoveryRestUrl": "https://genomics.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/genomics",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "gmail:v1",
-   "name": "gmail",
-   "version": "v1",
-   "title": "Gmail API",
-   "description": "Access Gmail mailboxes including sending user email.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest",
-   "discoveryLink": "./apis/gmail/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/googlemail-16.png",
-    "x32": "https://www.google.com/images/icons/product/googlemail-32.png"
-   },
-   "documentationLink": "https://developers.google.com/gmail/api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "groupsmigration:v1",
-   "name": "groupsmigration",
-   "version": "v1",
-   "title": "Groups Migration API",
-   "description": "Groups Migration Api.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/groupsmigration/v1/rest",
-   "discoveryLink": "./apis/groupsmigration/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/discussions-16.gif",
-    "x32": "https://www.google.com/images/icons/product/discussions-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/groups-migration/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "groupssettings:v1",
-   "name": "groupssettings",
-   "version": "v1",
-   "title": "Groups Settings API",
-   "description": "Lets you manage permission levels and related settings of a group.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/groupssettings/v1/rest",
-   "discoveryLink": "./apis/groupssettings/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/groups-settings/get_started",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "iam:v1",
-   "name": "iam",
-   "version": "v1",
-   "title": "Google Identity and Access Management (IAM) API",
-   "description": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.",
-   "discoveryRestUrl": "https://iam.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/iam/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "identitytoolkit:v3",
-   "name": "identitytoolkit",
-   "version": "v3",
-   "title": "Google Identity Toolkit API",
-   "description": "Help the third party sites to implement federated login.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/identitytoolkit/v3/rest",
-   "discoveryLink": "./apis/identitytoolkit/v3/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/identity-toolkit/v3/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "kgsearch:v1",
-   "name": "kgsearch",
-   "version": "v1",
-   "title": "Knowledge Graph Search API",
-   "description": "Searches the Google Knowledge Graph for entities.",
-   "discoveryRestUrl": "https://kgsearch.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/knowledge-graph/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "language:v1",
-   "name": "language",
-   "version": "v1",
-   "title": "Google Cloud Natural Language API",
-   "description": "Provides natural language understanding technologies to developers. Examples include sentiment analysis, entity recognition, entity sentiment analysis, and text annotations.",
-   "discoveryRestUrl": "https://language.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/natural-language/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "language:v1beta1",
-   "name": "language",
-   "version": "v1beta1",
-   "title": "Google Cloud Natural Language API",
-   "description": "Provides natural language understanding technologies to developers. Examples include sentiment analysis, entity recognition, entity sentiment analysis, and text annotations.",
-   "discoveryRestUrl": "https://language.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/natural-language/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "language:v1beta2",
-   "name": "language",
-   "version": "v1beta2",
-   "title": "Google Cloud Natural Language API",
-   "description": "Provides natural language understanding technologies to developers. Examples include sentiment analysis, entity recognition, entity sentiment analysis, and text annotations.",
-   "discoveryRestUrl": "https://language.googleapis.com/$discovery/rest?version=v1beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/natural-language/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "licensing:v1",
-   "name": "licensing",
-   "version": "v1",
-   "title": "Enterprise License Manager API",
-   "description": "Views and manages licenses for your domain.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/licensing/v1/rest",
-   "discoveryLink": "./apis/licensing/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/licensing/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "logging:v2",
-   "name": "logging",
-   "version": "v2",
-   "title": "Stackdriver Logging API",
-   "description": "Writes log entries and manages your Stackdriver Logging configuration.",
-   "discoveryRestUrl": "https://logging.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/logging/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "logging:v2beta1",
-   "name": "logging",
-   "version": "v2beta1",
-   "title": "Stackdriver Logging API",
-   "description": "Writes log entries and manages your Stackdriver Logging configuration.",
-   "discoveryRestUrl": "https://logging.googleapis.com/$discovery/rest?version=v2beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/logging/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "manufacturers:v1",
-   "name": "manufacturers",
-   "version": "v1",
-   "title": "Manufacturer Center API",
-   "description": "Public API for managing Manufacturer Center related data.",
-   "discoveryRestUrl": "https://manufacturers.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/manufacturers/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "mirror:v1",
-   "name": "mirror",
-   "version": "v1",
-   "title": "Google Mirror API",
-   "description": "Interacts with Glass users via the timeline.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/mirror/v1/rest",
-   "discoveryLink": "./apis/mirror/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/glass",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "ml:v1",
-   "name": "ml",
-   "version": "v1",
-   "title": "Google Cloud Machine Learning Engine",
-   "description": "An API to enable creating and using machine learning models.",
-   "discoveryRestUrl": "https://ml.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/ml/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "monitoring:v3",
-   "name": "monitoring",
-   "version": "v3",
-   "title": "Stackdriver Monitoring API",
-   "description": "Manages your Stackdriver Monitoring data and configurations. Most projects must be associated with a Stackdriver account, with a few exceptions as noted on the individual method pages.",
-   "discoveryRestUrl": "https://monitoring.googleapis.com/$discovery/rest?version=v3",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/monitoring/api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "oauth2:v1",
-   "name": "oauth2",
-   "version": "v1",
-   "title": "Google OAuth2 API",
-   "description": "Obtains end-user authorization grants for use with other Google APIs.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/oauth2/v1/rest",
-   "discoveryLink": "./apis/oauth2/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/accounts/docs/OAuth2",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "oauth2:v2",
-   "name": "oauth2",
-   "version": "v2",
-   "title": "Google OAuth2 API",
-   "description": "Obtains end-user authorization grants for use with other Google APIs.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/oauth2/v2/rest",
-   "discoveryLink": "./apis/oauth2/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/accounts/docs/OAuth2",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "oslogin:v1alpha",
-   "name": "oslogin",
-   "version": "v1alpha",
-   "title": "Google Cloud OS Login API",
-   "description": "Manages OS login configuration for Directory API users.",
-   "discoveryRestUrl": "https://oslogin.googleapis.com/$discovery/rest?version=v1alpha",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/compute/docs/oslogin/rest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "oslogin:v1beta",
-   "name": "oslogin",
-   "version": "v1beta",
-   "title": "Google Cloud OS Login API",
-   "description": "Manages OS login configuration for Directory API users.",
-   "discoveryRestUrl": "https://oslogin.googleapis.com/$discovery/rest?version=v1beta",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/compute/docs/oslogin/rest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pagespeedonline:v1",
-   "name": "pagespeedonline",
-   "version": "v1",
-   "title": "PageSpeed Insights API",
-   "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v1/rest",
-   "discoveryLink": "./apis/pagespeedonline/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
-    "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
-   },
-   "documentationLink": "https://developers.google.com/speed/docs/insights/v1/getting_started",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pagespeedonline:v2",
-   "name": "pagespeedonline",
-   "version": "v2",
-   "title": "PageSpeed Insights API",
-   "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v2/rest",
-   "discoveryLink": "./apis/pagespeedonline/v2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
-    "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
-   },
-   "documentationLink": "https://developers.google.com/speed/docs/insights/v2/getting-started",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "partners:v2",
-   "name": "partners",
-   "version": "v2",
-   "title": "Google Partners API",
-   "description": "Searches certified companies and creates contact leads with them, and also audits the usage of clients.",
-   "discoveryRestUrl": "https://partners.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/partners/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "people:v1",
-   "name": "people",
-   "version": "v1",
-   "title": "Google People API",
-   "description": "Provides access to information about profiles and contacts.",
-   "discoveryRestUrl": "https://people.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/people/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "playcustomapp:v1",
-   "name": "playcustomapp",
-   "version": "v1",
-   "title": "Google Play Custom App Publishing API",
-   "description": "An API to publish custom Android apps.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/playcustomapp/v1/rest",
-   "discoveryLink": "./apis/playcustomapp/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/android/work/play/custom-app-api",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "playmoviespartner:v1",
-   "name": "playmoviespartner",
-   "version": "v1",
-   "title": "Google Play Movies Partner API",
-   "description": "Gets the delivery status of titles for Google Play Movies Partners.",
-   "discoveryRestUrl": "https://playmoviespartner.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/playmoviespartner/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "plus:v1",
-   "name": "plus",
-   "version": "v1",
-   "title": "Google+ API",
-   "description": "Builds on top of the Google+ platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/plus/v1/rest",
-   "discoveryLink": "./apis/plus/v1/rest",
-   "icons": {
-    "x16": "http://www.google.com/images/icons/product/gplus-16.png",
-    "x32": "http://www.google.com/images/icons/product/gplus-32.png"
-   },
-   "documentationLink": "https://developers.google.com/+/api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "plusDomains:v1",
-   "name": "plusDomains",
-   "version": "v1",
-   "title": "Google+ Domains API",
-   "description": "Builds on top of the Google+ platform for Google Apps Domains.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/plusDomains/v1/rest",
-   "discoveryLink": "./apis/plusDomains/v1/rest",
-   "icons": {
-    "x16": "http://www.google.com/images/icons/product/gplus-16.png",
-    "x32": "http://www.google.com/images/icons/product/gplus-32.png"
-   },
-   "documentationLink": "https://developers.google.com/+/domains/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "prediction:v1.2",
-   "name": "prediction",
-   "version": "v1.2",
-   "title": "Prediction API",
-   "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/prediction/v1.2/rest",
-   "discoveryLink": "./apis/prediction/v1.2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/feature/predictionapi-16.png",
-    "x32": "https://www.google.com/images/icons/feature/predictionapi-32.png"
-   },
-   "documentationLink": "https://developers.google.com/prediction/docs/developer-guide",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "prediction:v1.3",
-   "name": "prediction",
-   "version": "v1.3",
-   "title": "Prediction API",
-   "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/prediction/v1.3/rest",
-   "discoveryLink": "./apis/prediction/v1.3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/feature/predictionapi-16.png",
-    "x32": "https://www.google.com/images/icons/feature/predictionapi-32.png"
-   },
-   "documentationLink": "https://developers.google.com/prediction/docs/developer-guide",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "prediction:v1.4",
-   "name": "prediction",
-   "version": "v1.4",
-   "title": "Prediction API",
-   "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/prediction/v1.4/rest",
-   "discoveryLink": "./apis/prediction/v1.4/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/feature/predictionapi-16.png",
-    "x32": "https://www.google.com/images/icons/feature/predictionapi-32.png"
-   },
-   "documentationLink": "https://developers.google.com/prediction/docs/developer-guide",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "prediction:v1.5",
-   "name": "prediction",
-   "version": "v1.5",
-   "title": "Prediction API",
-   "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/prediction/v1.5/rest",
-   "discoveryLink": "./apis/prediction/v1.5/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/feature/predictionapi-16.png",
-    "x32": "https://www.google.com/images/icons/feature/predictionapi-32.png"
-   },
-   "documentationLink": "https://developers.google.com/prediction/docs/developer-guide",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "prediction:v1.6",
-   "name": "prediction",
-   "version": "v1.6",
-   "title": "Prediction API",
-   "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/prediction/v1.6/rest",
-   "discoveryLink": "./apis/prediction/v1.6/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/feature/predictionapi-16.png",
-    "x32": "https://www.google.com/images/icons/feature/predictionapi-32.png"
-   },
-   "documentationLink": "https://developers.google.com/prediction/docs/developer-guide",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "proximitybeacon:v1beta1",
-   "name": "proximitybeacon",
-   "version": "v1beta1",
-   "title": "Google Proximity Beacon API",
-   "description": "Registers, manages, indexes, and searches beacons.",
-   "discoveryRestUrl": "https://proximitybeacon.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/beacons/proximity/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pubsub:v1beta1a",
-   "name": "pubsub",
-   "version": "v1beta1a",
-   "title": "Google Cloud Pub/Sub API",
-   "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
-   "discoveryRestUrl": "https://pubsub.googleapis.com/$discovery/rest?version=v1beta1a",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/pubsub/docs",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pubsub:v1",
-   "name": "pubsub",
-   "version": "v1",
-   "title": "Google Cloud Pub/Sub API",
-   "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
-   "discoveryRestUrl": "https://pubsub.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/pubsub/docs",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pubsub:v1beta2",
-   "name": "pubsub",
-   "version": "v1beta2",
-   "title": "Google Cloud Pub/Sub API",
-   "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
-   "discoveryRestUrl": "https://pubsub.googleapis.com/$discovery/rest?version=v1beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/pubsub/docs",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "replicapool:v1beta1",
-   "name": "replicapool",
-   "version": "v1beta1",
-   "title": "Replica Pool API",
-   "description": "The Replica Pool API allows users to declaratively provision and manage groups of Google Compute Engine instances based on a common template.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/replicapool/v1beta1/rest",
-   "discoveryLink": "./apis/replicapool/v1beta1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/docs/replica-pool/",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "replicapool:v1beta2",
-   "name": "replicapool",
-   "version": "v1beta2",
-   "title": "Google Compute Engine Instance Group Manager API",
-   "description": "[Deprecated. Please use Instance Group Manager in Compute API] Provides groups of homogenous Compute Engine instances.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/replicapool/v1beta2/rest",
-   "discoveryLink": "./apis/replicapool/v1beta2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/docs/instance-groups/manager/v1beta2",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "replicapoolupdater:v1beta1",
-   "name": "replicapoolupdater",
-   "version": "v1beta1",
-   "title": "Google Compute Engine Instance Group Updater API",
-   "description": "[Deprecated. Please use compute.instanceGroupManagers.update method. replicapoolupdater API will be disabled after December 30th, 2016] Updates groups of Compute Engine instances.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/replicapoolupdater/v1beta1/rest",
-   "discoveryLink": "./apis/replicapoolupdater/v1beta1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/compute/docs/instance-groups/manager/#applying_rolling_updates_using_the_updater_service",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "reseller:v1",
-   "name": "reseller",
-   "version": "v1",
-   "title": "Enterprise Apps Reseller API",
-   "description": "Creates and manages your customers and their subscriptions.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/reseller/v1/rest",
-   "discoveryLink": "./apis/reseller/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/reseller/",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "resourceviews:v1beta1",
-   "name": "resourceviews",
-   "version": "v1beta1",
-   "title": "Resource Views API",
-   "description": "The Resource View API allows users to create and manage logical sets of Google Compute Engine instances.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/resourceviews/v1beta1/rest",
-   "discoveryLink": "./apis/resourceviews/v1beta1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "resourceviews:v1beta2",
-   "name": "resourceviews",
-   "version": "v1beta2",
-   "title": "Google Compute Engine Instance Groups API",
-   "description": "The Resource View API allows users to create and manage logical sets of Google Compute Engine instances.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/resourceviews/v1beta2/rest",
-   "discoveryLink": "./apis/resourceviews/v1beta2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "runtimeconfig:v1",
-   "name": "runtimeconfig",
-   "version": "v1",
-   "title": "Google Cloud RuntimeConfig API",
-   "description": "Provides capabilities for dynamic configuration and coordination for applications running on Google Cloud Platform.",
-   "discoveryRestUrl": "https://runtimeconfig.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/deployment-manager/runtime-configurator/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "runtimeconfig:v1beta1",
-   "name": "runtimeconfig",
-   "version": "v1beta1",
-   "title": "Google Cloud RuntimeConfig API",
-   "description": "Provides capabilities for dynamic configuration and coordination for applications running on Google Cloud Platform.",
-   "discoveryRestUrl": "https://runtimeconfig.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/deployment-manager/runtime-configurator/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "safebrowsing:v4",
-   "name": "safebrowsing",
-   "version": "v4",
-   "title": "Google Safe Browsing API",
-   "description": "Enables client applications to check web resources (most commonly URLs) against Google-generated lists of unsafe web resources.",
-   "discoveryRestUrl": "https://safebrowsing.googleapis.com/$discovery/rest?version=v4",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/safe-browsing/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "script:v1",
-   "name": "script",
-   "version": "v1",
-   "title": "Google Apps Script Execution API",
-   "description": "An API for managing and executing Google Apps Script projects.",
-   "discoveryRestUrl": "https://script.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/apps-script/execution/rest/v1/scripts/run",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "searchconsole:v1",
-   "name": "searchconsole",
-   "version": "v1",
-   "title": "Google Search Console URL Testing Tools API",
-   "description": "Provides tools for running validation tests against single URLs",
-   "discoveryRestUrl": "https://searchconsole.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/webmaster-tools/search-console-api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "servicecontrol:v1",
-   "name": "servicecontrol",
-   "version": "v1",
-   "title": "Google Service Control API",
-   "description": "Google Service Control provides control plane functionality to managed services, such as logging, monitoring, and status checks.",
-   "discoveryRestUrl": "https://servicecontrol.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/service-control/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "servicemanagement:v1",
-   "name": "servicemanagement",
-   "version": "v1",
-   "title": "Google Service Management API",
-   "description": "Google Service Management allows service producers to publish their services on Google Cloud Platform so that they can be discovered and used by service consumers.",
-   "discoveryRestUrl": "https://servicemanagement.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/service-management/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "serviceuser:v1",
-   "name": "serviceuser",
-   "version": "v1",
-   "title": "Google Service User API",
-   "description": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.",
-   "discoveryRestUrl": "https://serviceuser.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/service-management/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "sheets:v4",
-   "name": "sheets",
-   "version": "v4",
-   "title": "Google Sheets API",
-   "description": "Reads and writes Google Sheets.",
-   "discoveryRestUrl": "https://sheets.googleapis.com/$discovery/rest?version=v4",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/sheets/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "siteVerification:v1",
-   "name": "siteVerification",
-   "version": "v1",
-   "title": "Google Site Verification API",
-   "description": "Verifies ownership of websites or domains with Google.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/siteVerification/v1/rest",
-   "discoveryLink": "./apis/siteVerification/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/site-verification/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "slides:v1",
-   "name": "slides",
-   "version": "v1",
-   "title": "Google Slides API",
-   "description": "An API for creating and editing Google Slides presentations.",
-   "discoveryRestUrl": "https://slides.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/slides/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "sourcerepo:v1",
-   "name": "sourcerepo",
-   "version": "v1",
-   "title": "Cloud Source Repositories API",
-   "description": "Access source code repositories hosted by Google.",
-   "discoveryRestUrl": "https://sourcerepo.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/source-repositories/docs/apis",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "spanner:v1",
-   "name": "spanner",
-   "version": "v1",
-   "title": "Cloud Spanner API",
-   "description": "Cloud Spanner is a managed, mission-critical, globally consistent and scalable relational database service.",
-   "discoveryRestUrl": "https://spanner.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/spanner/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "spectrum:v1explorer",
-   "name": "spectrum",
-   "version": "v1explorer",
-   "title": "Google Spectrum Database API",
-   "description": "API for spectrum-management functions.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/spectrum/v1explorer/rest",
-   "discoveryLink": "./apis/spectrum/v1explorer/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "http://developers.google.com/spectrum",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "speech:v1",
-   "name": "speech",
-   "version": "v1",
-   "title": "Google Cloud Speech API",
-   "description": "Converts audio to text by applying powerful neural network models.",
-   "discoveryRestUrl": "https://speech.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/speech/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "speech:v1beta1",
-   "name": "speech",
-   "version": "v1beta1",
-   "title": "Google Cloud Speech API",
-   "description": "Converts audio to text by applying powerful neural network models.",
-   "discoveryRestUrl": "https://speech.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/speech/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "sqladmin:v1beta3",
-   "name": "sqladmin",
-   "version": "v1beta3",
-   "title": "Cloud SQL Administration API",
-   "description": "Creates and configures Cloud SQL instances, which provide fully-managed MySQL databases.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/sqladmin/v1beta3/rest",
-   "discoveryLink": "./apis/sqladmin/v1beta3/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/sql/docs/reference/latest",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "sqladmin:v1beta4",
-   "name": "sqladmin",
-   "version": "v1beta4",
-   "title": "Cloud SQL Administration API",
-   "description": "Creates and configures Cloud SQL instances, which provide fully-managed MySQL databases.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/sqladmin/v1beta4/rest",
-   "discoveryLink": "./apis/sqladmin/v1beta4/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/sql/docs/reference/latest",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "storage:v1",
-   "name": "storage",
-   "version": "v1",
-   "title": "Cloud Storage JSON API",
-   "description": "Stores and retrieves potentially large, immutable data objects.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1/rest",
-   "discoveryLink": "./apis/storage/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
-    "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
-   },
-   "documentationLink": "https://developers.google.com/storage/docs/json_api/",
-   "labels": [
-    "labs"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "storage:v1beta1",
-   "name": "storage",
-   "version": "v1beta1",
-   "title": "Cloud Storage JSON API",
-   "description": "Lets you store and retrieve potentially-large, immutable data objects.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1beta1/rest",
-   "discoveryLink": "./apis/storage/v1beta1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
-    "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
-   },
-   "documentationLink": "https://developers.google.com/storage/docs/json_api/",
-   "labels": [
-    "labs"
-   ],
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "storage:v1beta2",
-   "name": "storage",
-   "version": "v1beta2",
-   "title": "Cloud Storage JSON API",
-   "description": "Lets you store and retrieve potentially-large, immutable data objects.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1beta2/rest",
-   "discoveryLink": "./apis/storage/v1beta2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
-    "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
-   },
-   "documentationLink": "https://developers.google.com/storage/docs/json_api/",
-   "labels": [
-    "labs"
-   ],
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "storagetransfer:v1",
-   "name": "storagetransfer",
-   "version": "v1",
-   "title": "Google Storage Transfer API",
-   "description": "Transfers data from external data sources to a Google Cloud Storage bucket or between Google Cloud Storage buckets.",
-   "discoveryRestUrl": "https://storagetransfer.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/storage/transfer",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "streetviewpublish:v1",
-   "name": "streetviewpublish",
-   "version": "v1",
-   "title": "Street View Publish API",
-   "description": "Publishes 360 photos to Google Maps, along with position, orientation, and connectivity metadata. Apps can offer an interface for positioning, connecting, and uploading user-generated Street View images.",
-   "discoveryRestUrl": "https://streetviewpublish.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/streetview/publish/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "surveys:v2",
-   "name": "surveys",
-   "version": "v2",
-   "title": "Surveys API",
-   "description": "Creates and conducts surveys, lists the surveys that an authenticated user owns, and retrieves survey results and information about specified surveys.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/surveys/v2/rest",
-   "discoveryLink": "./apis/surveys/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "tagmanager:v1",
-   "name": "tagmanager",
-   "version": "v1",
-   "title": "Tag Manager API",
-   "description": "Accesses Tag Manager accounts and containers.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/tagmanager/v1/rest",
-   "discoveryLink": "./apis/tagmanager/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/tag-manager/api/v1/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "tagmanager:v2",
-   "name": "tagmanager",
-   "version": "v2",
-   "title": "Tag Manager API",
-   "description": "Accesses Tag Manager accounts and containers.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/tagmanager/v2/rest",
-   "discoveryLink": "./apis/tagmanager/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/tag-manager/api/v2/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "taskqueue:v1beta1",
-   "name": "taskqueue",
-   "version": "v1beta1",
-   "title": "TaskQueue API",
-   "description": "Accesses a Google App Engine Pull Task Queue over REST.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/taskqueue/v1beta1/rest",
-   "discoveryLink": "./apis/taskqueue/v1beta1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/app_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/app_engine-32.png"
-   },
-   "documentationLink": "https://developers.google.com/appengine/docs/python/taskqueue/rest",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "taskqueue:v1beta2",
-   "name": "taskqueue",
-   "version": "v1beta2",
-   "title": "TaskQueue API",
-   "description": "Accesses a Google App Engine Pull Task Queue over REST.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/taskqueue/v1beta2/rest",
-   "discoveryLink": "./apis/taskqueue/v1beta2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/app_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/app_engine-32.png"
-   },
-   "documentationLink": "https://developers.google.com/appengine/docs/python/taskqueue/rest",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "tasks:v1",
-   "name": "tasks",
-   "version": "v1",
-   "title": "Tasks API",
-   "description": "Lets you manage your tasks and task lists.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/tasks/v1/rest",
-   "discoveryLink": "./apis/tasks/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/tasks-16.png",
-    "x32": "https://www.google.com/images/icons/product/tasks-32.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/tasks/firstapp",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "testing:v1",
-   "name": "testing",
-   "version": "v1",
-   "title": "Google Cloud Testing API",
-   "description": "Allows developers to run automated tests for their mobile applications on Google infrastructure.",
-   "discoveryRestUrl": "https://testing.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/cloud-test-lab/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "toolresults:v1beta3",
-   "name": "toolresults",
-   "version": "v1beta3",
-   "title": "Cloud Tool Results API",
-   "description": "Reads and publishes results from Firebase Test Lab.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/toolresults/v1beta3/rest",
-   "discoveryLink": "./apis/toolresults/v1beta3/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://firebase.google.com/docs/test-lab/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "translate:v2",
-   "name": "translate",
-   "version": "v2",
-   "title": "Google Cloud Translation API",
-   "description": "The Google Cloud Translation API lets websites and programs integrate with Google Translate programmatically.",
-   "discoveryRestUrl": "https://translation.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://code.google.com/apis/language/translate/v2/getting_started.html",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "urlshortener:v1",
-   "name": "urlshortener",
-   "version": "v1",
-   "title": "URL Shortener API",
-   "description": "Lets you create, inspect, and manage goo.gl short URLs",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/urlshortener/v1/rest",
-   "discoveryLink": "./apis/urlshortener/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/url-shortener/v1/getting_started",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "vault:v1",
-   "name": "vault",
-   "version": "v1",
-   "title": "Google Vault API",
-   "description": "Archiving and eDiscovery for G Suite.",
-   "discoveryRestUrl": "https://vault.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/vault",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "videointelligence:v1beta1",
-   "name": "videointelligence",
-   "version": "v1beta1",
-   "title": "Cloud Video Intelligence API",
-   "description": "Cloud Video Intelligence API.",
-   "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "vision:v1",
-   "name": "vision",
-   "version": "v1",
-   "title": "Google Cloud Vision API",
-   "description": "Integrates Google Vision features, including image labeling, face, logo, and landmark detection, optical character recognition (OCR), and detection of explicit content, into applications.",
-   "discoveryRestUrl": "https://vision.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/vision/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "webfonts:v1",
-   "name": "webfonts",
-   "version": "v1",
-   "title": "Google Fonts Developer API",
-   "description": "Accesses the metadata for all families served by Google Fonts, providing a list of families currently available (including available styles and a list of supported script subsets).",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/webfonts/v1/rest",
-   "discoveryLink": "./apis/webfonts/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/feature/font_api-16.png",
-    "x32": "https://www.google.com/images/icons/feature/font_api-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/fonts/docs/developer_api",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "webmasters:v3",
-   "name": "webmasters",
-   "version": "v3",
-   "title": "Search Console API",
-   "description": "View Google Search Console data for your verified sites.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/webmasters/v3/rest",
-   "discoveryLink": "./apis/webmasters/v3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/webmaster_tools-16.png",
-    "x32": "https://www.google.com/images/icons/product/webmaster_tools-32.png"
-   },
-   "documentationLink": "https://developers.google.com/webmaster-tools/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "youtube:v3",
-   "name": "youtube",
-   "version": "v3",
-   "title": "YouTube Data API",
-   "description": "Supports core YouTube features, such as uploading videos, creating and managing playlists, searching for content, and much more.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest",
-   "discoveryLink": "./apis/youtube/v3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/youtube-16.png",
-    "x32": "https://www.google.com/images/icons/product/youtube-32.png"
-   },
-   "documentationLink": "https://developers.google.com/youtube/v3",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "youtubeAnalytics:v1",
-   "name": "youtubeAnalytics",
-   "version": "v1",
-   "title": "YouTube Analytics API",
-   "description": "Retrieves your YouTube Analytics data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/youtubeAnalytics/v1/rest",
-   "discoveryLink": "./apis/youtubeAnalytics/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/youtube-16.png",
-    "x32": "https://www.google.com/images/icons/product/youtube-32.png"
-   },
-   "documentationLink": "http://developers.google.com/youtube/analytics/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "youtubeAnalytics:v1beta1",
-   "name": "youtubeAnalytics",
-   "version": "v1beta1",
-   "title": "YouTube Analytics API",
-   "description": "Retrieves your YouTube Analytics data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/youtubeAnalytics/v1beta1/rest",
-   "discoveryLink": "./apis/youtubeAnalytics/v1beta1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/youtube-16.png",
-    "x32": "https://www.google.com/images/icons/product/youtube-32.png"
-   },
-   "documentationLink": "http://developers.google.com/youtube/analytics/",
-   "labels": [
-    "deprecated"
-   ],
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "youtubereporting:v1",
-   "name": "youtubereporting",
-   "version": "v1",
-   "title": "YouTube Reporting API",
-   "description": "Schedules reporting jobs containing your YouTube Analytics data and downloads the resulting bulk data reports in the form of CSV files.",
-   "discoveryRestUrl": "https://youtubereporting.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/youtube/reporting/v1/reports/",
-   "preferred": true
-  }
- ]
-}
diff --git a/vendor/google.golang.org/api/key.json.enc b/vendor/google.golang.org/api/key.json.enc
deleted file mode 100644
index 1286368..0000000
--- a/vendor/google.golang.org/api/key.json.enc
+++ /dev/null
Binary files differ
diff --git a/vendor/google.golang.org/appengine/.travis.yml b/vendor/google.golang.org/appengine/.travis.yml
deleted file mode 100644
index 0762cb9..0000000
--- a/vendor/google.golang.org/appengine/.travis.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-language: go
-
-go:
-  - 1.6.3
-  - 1.7.1
-
-install:
-  - go get -v -t -d google.golang.org/appengine/...
-  - mkdir sdk
-  - curl -o sdk.zip "https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-1.9.40.zip"
-  - unzip -q sdk.zip -d sdk
-  - export APPENGINE_DEV_APPSERVER=$(pwd)/sdk/go_appengine/dev_appserver.py
-
-script:
-  - go version
-  - go test -v google.golang.org/appengine/...
-  - go test -v -race google.golang.org/appengine/...
-  - sdk/go_appengine/goapp test -v google.golang.org/appengine/...
diff --git a/vendor/google.golang.org/appengine/README.md b/vendor/google.golang.org/appengine/README.md
deleted file mode 100644
index b6b11d9..0000000
--- a/vendor/google.golang.org/appengine/README.md
+++ /dev/null
@@ -1,73 +0,0 @@
-# Go App Engine packages
-
-[![Build Status](https://travis-ci.org/golang/appengine.svg)](https://travis-ci.org/golang/appengine)
-
-This repository supports the Go runtime on App Engine,
-including both the standard App Engine and the
-"App Engine flexible environment" (formerly known as "Managed VMs").
-It provides APIs for interacting with App Engine services.
-Its canonical import path is `google.golang.org/appengine`.
-
-See https://cloud.google.com/appengine/docs/go/
-for more information.
-
-File issue reports and feature requests on the [Google App Engine issue
-tracker](https://code.google.com/p/googleappengine/issues/entry?template=Go%20defect).
-
-## Directory structure
-The top level directory of this repository is the `appengine` package. It
-contains the
-basic APIs (e.g. `appengine.NewContext`) that apply across APIs. Specific API
-packages are in subdirectories (e.g. `datastore`).
-
-There is an `internal` subdirectory that contains service protocol buffers,
-plus packages required for connectivity to make API calls. App Engine apps
-should not directly import any package under `internal`.
-
-## Updating a Go App Engine app
-
-This section describes how to update an older Go App Engine app to use
-these packages. A provided tool, `aefix`, can help automate steps 2 and 3
-(run `go get google.golang.org/appengine/cmd/aefix` to install it), but
-read the details below since `aefix` can't perform all the changes.
-
-### 1. Update YAML files (App Engine flexible environment / Managed VMs only)
-
-The `app.yaml` file (and YAML files for modules) should have these new lines added:
-```
-vm: true
-```
-See https://cloud.google.com/appengine/docs/go/modules/#Go_Instance_scaling_and_class for details.
-
-### 2. Update import paths
-
-The import paths for App Engine packages are now fully qualified, based at `google.golang.org/appengine`.
-You will need to update your code to use import paths starting with that; for instance,
-code importing `appengine/datastore` will now need to import `google.golang.org/appengine/datastore`.
-
-### 3. Update code using deprecated, removed or modified APIs
-
-Most App Engine services are available with exactly the same API.
-A few APIs were cleaned up, and some are not available yet.
-This list summarises the differences:
-
-* `appengine.Context` has been replaced with the `Context` type from `golang.org/x/net/context`.
-* Logging methods that were on `appengine.Context` are now functions in `google.golang.org/appengine/log`.
-* `appengine.Timeout` has been removed. Use `context.WithTimeout` instead.
-* `appengine.Datacenter` now takes a `context.Context` argument.
-* `datastore.PropertyLoadSaver` has been simplified to use slices in place of channels.
-* `delay.Call` now returns an error.
-* `search.FieldLoadSaver` now handles document metadata.
-* `urlfetch.Transport` no longer has a Deadline field; set a deadline on the
-  `context.Context` instead.
-* `aetest` no longer declares its own Context type, and uses the standard one instead.
-* `taskqueue.QueueStats` no longer takes a maxTasks argument. That argument has been
-  deprecated and unused for a long time.
-* `appengine.BackendHostname` and `appengine.BackendInstance` were for the deprecated backends feature.
-  Use `appengine.ModuleHostname`and `appengine.ModuleName` instead.
-* Most of `appengine/file` and parts of `appengine/blobstore` are deprecated.
-  Use [Google Cloud Storage](https://godoc.org/cloud.google.com/go/storage) if the
-  feature you require is not present in the new
-  [blobstore package](https://google.golang.org/appengine/blobstore).
-* `appengine/socket` is not required on App Engine flexible environment / Managed VMs.
-  Use the standard `net` package instead.
diff --git a/vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.proto b/vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.proto
deleted file mode 100644
index 19610ca..0000000
--- a/vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.proto
+++ /dev/null
@@ -1,64 +0,0 @@
-syntax = "proto2";
-option go_package = "app_identity";
-
-package appengine;
-
-message AppIdentityServiceError {
-  enum ErrorCode {
-    SUCCESS = 0;
-    UNKNOWN_SCOPE = 9;
-    BLOB_TOO_LARGE = 1000;
-    DEADLINE_EXCEEDED = 1001;
-    NOT_A_VALID_APP = 1002;
-    UNKNOWN_ERROR = 1003;
-    NOT_ALLOWED = 1005;
-    NOT_IMPLEMENTED = 1006;
-  }
-}
-
-message SignForAppRequest {
-  optional bytes bytes_to_sign = 1;
-}
-
-message SignForAppResponse {
-  optional string key_name = 1;
-  optional bytes signature_bytes = 2;
-}
-
-message GetPublicCertificateForAppRequest {
-}
-
-message PublicCertificate {
-  optional string key_name = 1;
-  optional string x509_certificate_pem = 2;
-}
-
-message GetPublicCertificateForAppResponse {
-  repeated PublicCertificate public_certificate_list = 1;
-  optional int64 max_client_cache_time_in_second = 2;
-}
-
-message GetServiceAccountNameRequest {
-}
-
-message GetServiceAccountNameResponse {
-  optional string service_account_name = 1;
-}
-
-message GetAccessTokenRequest {
-  repeated string scope = 1;
-  optional int64 service_account_id = 2;
-  optional string service_account_name = 3;
-}
-
-message GetAccessTokenResponse {
-  optional string access_token = 1;
-  optional int64 expiration_time = 2;
-}
-
-message GetDefaultGcsBucketNameRequest {
-}
-
-message GetDefaultGcsBucketNameResponse {
-  optional string default_gcs_bucket_name = 1;
-}
diff --git a/vendor/google.golang.org/appengine/internal/base/api_base.proto b/vendor/google.golang.org/appengine/internal/base/api_base.proto
deleted file mode 100644
index 56cd7a3..0000000
--- a/vendor/google.golang.org/appengine/internal/base/api_base.proto
+++ /dev/null
@@ -1,33 +0,0 @@
-// Built-in base types for API calls. Primarily useful as return types.
-
-syntax = "proto2";
-option go_package = "base";
-
-package appengine.base;
-
-message StringProto {
-  required string value = 1;
-}
-
-message Integer32Proto {
-  required int32 value = 1;
-}
-
-message Integer64Proto {
-  required int64 value = 1;
-}
-
-message BoolProto {
-  required bool value = 1;
-}
-
-message DoubleProto {
-  required double value = 1;
-}
-
-message BytesProto {
-  required bytes value = 1 [ctype=CORD];
-}
-
-message VoidProto {
-}
diff --git a/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto b/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto
deleted file mode 100755
index e76f126..0000000
--- a/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto
+++ /dev/null
@@ -1,541 +0,0 @@
-syntax = "proto2";
-option go_package = "datastore";
-
-package appengine;
-
-message Action{}
-
-message PropertyValue {
-  optional int64 int64Value = 1;
-  optional bool booleanValue = 2;
-  optional string stringValue = 3;
-  optional double doubleValue = 4;
-
-  optional group PointValue = 5 {
-    required double x = 6;
-    required double y = 7;
-  }
-
-  optional group UserValue = 8 {
-    required string email = 9;
-    required string auth_domain = 10;
-    optional string nickname = 11;
-    optional string federated_identity = 21;
-    optional string federated_provider = 22;
-  }
-
-  optional group ReferenceValue = 12 {
-    required string app = 13;
-    optional string name_space = 20;
-    repeated group PathElement = 14 {
-      required string type = 15;
-      optional int64 id = 16;
-      optional string name = 17;
-    }
-  }
-}
-
-message Property {
-  enum Meaning {
-    NO_MEANING = 0;
-    BLOB = 14;
-    TEXT = 15;
-    BYTESTRING = 16;
-
-    ATOM_CATEGORY = 1;
-    ATOM_LINK = 2;
-    ATOM_TITLE = 3;
-    ATOM_CONTENT = 4;
-    ATOM_SUMMARY = 5;
-    ATOM_AUTHOR = 6;
-
-    GD_WHEN = 7;
-    GD_EMAIL = 8;
-    GEORSS_POINT = 9;
-    GD_IM = 10;
-
-    GD_PHONENUMBER = 11;
-    GD_POSTALADDRESS = 12;
-
-    GD_RATING = 13;
-
-    BLOBKEY = 17;
-    ENTITY_PROTO = 19;
-
-    INDEX_VALUE = 18;
-  };
-
-  optional Meaning meaning = 1 [default = NO_MEANING];
-  optional string meaning_uri = 2;
-
-  required string name = 3;
-
-  required PropertyValue value = 5;
-
-  required bool multiple = 4;
-
-  optional bool searchable = 6 [default=false];
-
-  enum FtsTokenizationOption {
-    HTML = 1;
-    ATOM = 2;
-  }
-
-  optional FtsTokenizationOption fts_tokenization_option = 8;
-
-  optional string locale = 9 [default = "en"];
-}
-
-message Path {
-  repeated group Element = 1 {
-    required string type = 2;
-    optional int64 id = 3;
-    optional string name = 4;
-  }
-}
-
-message Reference {
-  required string app = 13;
-  optional string name_space = 20;
-  required Path path = 14;
-}
-
-message User {
-  required string email = 1;
-  required string auth_domain = 2;
-  optional string nickname = 3;
-  optional string federated_identity = 6;
-  optional string federated_provider = 7;
-}
-
-message EntityProto {
-  required Reference key = 13;
-  required Path entity_group = 16;
-  optional User owner = 17;
-
-  enum Kind {
-    GD_CONTACT = 1;
-    GD_EVENT = 2;
-    GD_MESSAGE = 3;
-  }
-  optional Kind kind = 4;
-  optional string kind_uri = 5;
-
-  repeated Property property = 14;
-  repeated Property raw_property = 15;
-
-  optional int32 rank = 18;
-}
-
-message CompositeProperty {
-  required int64 index_id = 1;
-  repeated string value = 2;
-}
-
-message Index {
-  required string entity_type = 1;
-  required bool ancestor = 5;
-  repeated group Property = 2 {
-    required string name = 3;
-    enum Direction {
-      ASCENDING = 1;
-      DESCENDING = 2;
-    }
-    optional Direction direction = 4 [default = ASCENDING];
-  }
-}
-
-message CompositeIndex {
-  required string app_id = 1;
-  required int64 id = 2;
-  required Index definition = 3;
-
-  enum State {
-    WRITE_ONLY = 1;
-    READ_WRITE = 2;
-    DELETED = 3;
-    ERROR = 4;
-  }
-  required State state = 4;
-
-  optional bool only_use_if_required = 6 [default = false];
-}
-
-message IndexPostfix {
-  message IndexValue {
-    required string property_name = 1;
-    required PropertyValue value = 2;
-  }
-
-  repeated IndexValue index_value = 1;
-
-  optional Reference key = 2;
-
-  optional bool before = 3 [default=true];
-}
-
-message IndexPosition {
-  optional string key = 1;
-
-  optional bool before = 2 [default=true];
-}
-
-message Snapshot {
-  enum Status {
-    INACTIVE = 0;
-    ACTIVE = 1;
-  }
-
-  required int64 ts = 1;
-}
-
-message InternalHeader {
-  optional string qos = 1;
-}
-
-message Transaction {
-  optional InternalHeader header = 4;
-  required fixed64 handle = 1;
-  required string app = 2;
-  optional bool mark_changes = 3 [default = false];
-}
-
-message Query {
-  optional InternalHeader header = 39;
-
-  required string app = 1;
-  optional string name_space = 29;
-
-  optional string kind = 3;
-  optional Reference ancestor = 17;
-
-  repeated group Filter = 4 {
-    enum Operator {
-      LESS_THAN = 1;
-      LESS_THAN_OR_EQUAL = 2;
-      GREATER_THAN = 3;
-      GREATER_THAN_OR_EQUAL = 4;
-      EQUAL = 5;
-      IN = 6;
-      EXISTS = 7;
-    }
-
-    required Operator op = 6;
-    repeated Property property = 14;
-  }
-
-  optional string search_query = 8;
-
-  repeated group Order = 9 {
-    enum Direction {
-      ASCENDING = 1;
-      DESCENDING = 2;
-    }
-
-    required string property = 10;
-    optional Direction direction = 11 [default = ASCENDING];
-  }
-
-  enum Hint {
-    ORDER_FIRST = 1;
-    ANCESTOR_FIRST = 2;
-    FILTER_FIRST = 3;
-  }
-  optional Hint hint = 18;
-
-  optional int32 count = 23;
-
-  optional int32 offset = 12 [default = 0];
-
-  optional int32 limit = 16;
-
-  optional CompiledCursor compiled_cursor = 30;
-  optional CompiledCursor end_compiled_cursor = 31;
-
-  repeated CompositeIndex composite_index = 19;
-
-  optional bool require_perfect_plan = 20 [default = false];
-
-  optional bool keys_only = 21 [default = false];
-
-  optional Transaction transaction = 22;
-
-  optional bool compile = 25 [default = false];
-
-  optional int64 failover_ms = 26;
-
-  optional bool strong = 32;
-
-  repeated string property_name = 33;
-
-  repeated string group_by_property_name = 34;
-
-  optional bool distinct = 24;
-
-  optional int64 min_safe_time_seconds = 35;
-
-  repeated string safe_replica_name = 36;
-
-  optional bool persist_offset = 37 [default=false];
-}
-
-message CompiledQuery {
-  required group PrimaryScan = 1 {
-    optional string index_name = 2;
-
-    optional string start_key = 3;
-    optional bool start_inclusive = 4;
-    optional string end_key = 5;
-    optional bool end_inclusive = 6;
-
-    repeated string start_postfix_value = 22;
-    repeated string end_postfix_value = 23;
-
-    optional int64 end_unapplied_log_timestamp_us = 19;
-  }
-
-  repeated group MergeJoinScan = 7 {
-    required string index_name = 8;
-
-    repeated string prefix_value = 9;
-
-    optional bool value_prefix = 20 [default=false];
-  }
-
-  optional Index index_def = 21;
-
-  optional int32 offset = 10 [default = 0];
-
-  optional int32 limit = 11;
-
-  required bool keys_only = 12;
-
-  repeated string property_name = 24;
-
-  optional int32 distinct_infix_size = 25;
-
-  optional group EntityFilter = 13 {
-    optional bool distinct = 14 [default=false];
-
-    optional string kind = 17;
-    optional Reference ancestor = 18;
-  }
-}
-
-message CompiledCursor {
-  optional group Position = 2 {
-    optional string start_key = 27;
-
-    repeated group IndexValue = 29 {
-      optional string property = 30;
-      required PropertyValue value = 31;
-    }
-
-    optional Reference key = 32;
-
-    optional bool start_inclusive = 28 [default=true];
-  }
-}
-
-message Cursor {
-  required fixed64 cursor = 1;
-
-  optional string app = 2;
-}
-
-message Error {
-  enum ErrorCode {
-    BAD_REQUEST = 1;
-    CONCURRENT_TRANSACTION = 2;
-    INTERNAL_ERROR = 3;
-    NEED_INDEX = 4;
-    TIMEOUT = 5;
-    PERMISSION_DENIED = 6;
-    BIGTABLE_ERROR = 7;
-    COMMITTED_BUT_STILL_APPLYING = 8;
-    CAPABILITY_DISABLED = 9;
-    TRY_ALTERNATE_BACKEND = 10;
-    SAFE_TIME_TOO_OLD = 11;
-  }
-}
-
-message Cost {
-  optional int32 index_writes = 1;
-  optional int32 index_write_bytes = 2;
-  optional int32 entity_writes = 3;
-  optional int32 entity_write_bytes = 4;
-  optional group CommitCost = 5 {
-    optional int32 requested_entity_puts = 6;
-    optional int32 requested_entity_deletes = 7;
-  };
-  optional int32 approximate_storage_delta = 8;
-  optional int32 id_sequence_updates = 9;
-}
-
-message GetRequest {
-  optional InternalHeader header = 6;
-
-  repeated Reference key = 1;
-  optional Transaction transaction = 2;
-
-  optional int64 failover_ms = 3;
-
-  optional bool strong = 4;
-
-  optional bool allow_deferred = 5 [default=false];
-}
-
-message GetResponse {
-  repeated group Entity = 1 {
-    optional EntityProto entity = 2;
-    optional Reference key = 4;
-
-    optional int64 version = 3;
-  }
-
-  repeated Reference deferred = 5;
-
-  optional bool in_order = 6 [default=true];
-}
-
-message PutRequest {
-  optional InternalHeader header = 11;
-
-  repeated EntityProto entity = 1;
-  optional Transaction transaction = 2;
-  repeated CompositeIndex composite_index = 3;
-
-  optional bool trusted = 4 [default = false];
-
-  optional bool force = 7 [default = false];
-
-  optional bool mark_changes = 8 [default = false];
-  repeated Snapshot snapshot = 9;
-
-  enum AutoIdPolicy {
-    CURRENT = 0;
-    SEQUENTIAL = 1;
-  }
-  optional AutoIdPolicy auto_id_policy = 10 [default = CURRENT];
-}
-
-message PutResponse {
-  repeated Reference key = 1;
-  optional Cost cost = 2;
-  repeated int64 version = 3;
-}
-
-message TouchRequest {
-  optional InternalHeader header = 10;
-
-  repeated Reference key = 1;
-  repeated CompositeIndex composite_index = 2;
-  optional bool force = 3 [default = false];
-  repeated Snapshot snapshot = 9;
-}
-
-message TouchResponse {
-  optional Cost cost = 1;
-}
-
-message DeleteRequest {
-  optional InternalHeader header = 10;
-
-  repeated Reference key = 6;
-  optional Transaction transaction = 5;
-
-  optional bool trusted = 4 [default = false];
-
-  optional bool force = 7 [default = false];
-
-  optional bool mark_changes = 8 [default = false];
-  repeated Snapshot snapshot = 9;
-}
-
-message DeleteResponse {
-  optional Cost cost = 1;
-  repeated int64 version = 3;
-}
-
-message NextRequest {
-  optional InternalHeader header = 5;
-
-  required Cursor cursor = 1;
-  optional int32 count = 2;
-
-  optional int32 offset = 4 [default = 0];
-
-  optional bool compile = 3 [default = false];
-}
-
-message QueryResult {
-  optional Cursor cursor = 1;
-
-  repeated EntityProto result = 2;
-
-  optional int32 skipped_results = 7;
-
-  required bool more_results = 3;
-
-  optional bool keys_only = 4;
-
-  optional bool index_only = 9;
-
-  optional bool small_ops = 10;
-
-  optional CompiledQuery compiled_query = 5;
-
-  optional CompiledCursor compiled_cursor = 6;
-
-  repeated CompositeIndex index = 8;
-
-  repeated int64 version = 11;
-}
-
-message AllocateIdsRequest {
-  optional InternalHeader header = 4;
-
-  optional Reference model_key = 1;
-
-  optional int64 size = 2;
-
-  optional int64 max = 3;
-
-  repeated Reference reserve = 5;
-}
-
-message AllocateIdsResponse {
-  required int64 start = 1;
-  required int64 end = 2;
-  optional Cost cost = 3;
-}
-
-message CompositeIndices {
-  repeated CompositeIndex index = 1;
-}
-
-message AddActionsRequest {
-  optional InternalHeader header = 3;
-
-  required Transaction transaction = 1;
-  repeated Action action = 2;
-}
-
-message AddActionsResponse {
-}
-
-message BeginTransactionRequest {
-  optional InternalHeader header = 3;
-
-  required string app = 1;
-  optional bool allow_multiple_eg = 2 [default = false];
-}
-
-message CommitResponse {
-  optional Cost cost = 1;
-
-  repeated group Version = 3 {
-    required Reference root_entity_key = 4;
-    required int64 version = 5;
-  }
-}
diff --git a/vendor/google.golang.org/appengine/internal/log/log_service.proto b/vendor/google.golang.org/appengine/internal/log/log_service.proto
deleted file mode 100644
index 8981dc4..0000000
--- a/vendor/google.golang.org/appengine/internal/log/log_service.proto
+++ /dev/null
@@ -1,150 +0,0 @@
-syntax = "proto2";
-option go_package = "log";
-
-package appengine;
-
-message LogServiceError {
-  enum ErrorCode {
-    OK  = 0;
-    INVALID_REQUEST = 1;
-    STORAGE_ERROR = 2;
-  }
-}
-
-message UserAppLogLine {
-  required int64 timestamp_usec = 1;
-  required int64 level = 2;
-  required string message = 3;
-}
-
-message UserAppLogGroup {
-  repeated UserAppLogLine log_line = 2;
-}
-
-message FlushRequest {
-  optional bytes logs = 1;
-}
-
-message SetStatusRequest {
-  required string status = 1;
-}
-
-
-message LogOffset {
-  optional bytes request_id = 1;
-}
-
-message LogLine {
-  required int64 time = 1;
-  required int32 level = 2;
-  required string log_message = 3;
-}
-
-message RequestLog {
-  required string app_id = 1;
-  optional string module_id = 37 [default="default"];
-  required string version_id = 2;
-  required bytes request_id = 3;
-  optional LogOffset offset = 35;
-  required string ip = 4;
-  optional string nickname = 5;
-  required int64 start_time = 6;
-  required int64 end_time = 7;
-  required int64 latency = 8;
-  required int64 mcycles = 9;
-  required string method = 10;
-  required string resource = 11;
-  required string http_version = 12;
-  required int32 status = 13;
-  required int64 response_size = 14;
-  optional string referrer = 15;
-  optional string user_agent = 16;
-  required string url_map_entry = 17;
-  required string combined = 18;
-  optional int64 api_mcycles = 19;
-  optional string host = 20;
-  optional double cost = 21;
-
-  optional string task_queue_name = 22;
-  optional string task_name = 23;
-
-  optional bool was_loading_request = 24;
-  optional int64 pending_time = 25;
-  optional int32 replica_index = 26 [default = -1];
-  optional bool finished = 27 [default = true];
-  optional bytes clone_key = 28;
-
-  repeated LogLine line = 29;
-
-  optional bool lines_incomplete = 36;
-  optional bytes app_engine_release = 38;
-
-  optional int32 exit_reason = 30;
-  optional bool was_throttled_for_time = 31;
-  optional bool was_throttled_for_requests = 32;
-  optional int64 throttled_time = 33;
-
-  optional bytes server_name = 34;
-}
-
-message LogModuleVersion {
-  optional string module_id = 1 [default="default"];
-  optional string version_id = 2;
-}
-
-message LogReadRequest {
-  required string app_id = 1;
-  repeated string version_id = 2;
-  repeated LogModuleVersion module_version = 19;
-
-  optional int64 start_time = 3;
-  optional int64 end_time = 4;
-  optional LogOffset offset = 5;
-  repeated bytes request_id = 6;
-
-  optional int32 minimum_log_level = 7;
-  optional bool include_incomplete = 8;
-  optional int64 count = 9;
-
-  optional string combined_log_regex = 14;
-  optional string host_regex = 15;
-  optional int32 replica_index = 16;
-
-  optional bool include_app_logs = 10;
-  optional int32 app_logs_per_request = 17;
-  optional bool include_host = 11;
-  optional bool include_all = 12;
-  optional bool cache_iterator = 13;
-  optional int32 num_shards = 18;
-}
-
-message LogReadResponse {
-  repeated RequestLog log = 1;
-  optional LogOffset offset = 2;
-  optional int64 last_end_time = 3;
-}
-
-message LogUsageRecord {
-  optional string version_id = 1;
-  optional int32 start_time = 2;
-  optional int32 end_time = 3;
-  optional int64 count = 4;
-  optional int64 total_size = 5;
-  optional int32 records = 6;
-}
-
-message LogUsageRequest {
-  required string app_id = 1;
-  repeated string version_id = 2;
-  optional int32 start_time = 3;
-  optional int32 end_time = 4;
-  optional uint32 resolution_hours = 5 [default = 1];
-  optional bool combine_versions = 6;
-  optional int32 usage_version = 7;
-  optional bool versions_only = 8;
-}
-
-message LogUsageResponse {
-  repeated LogUsageRecord usage = 1;
-  optional LogUsageRecord summary = 2;
-}
diff --git a/vendor/google.golang.org/appengine/internal/modules/modules_service.proto b/vendor/google.golang.org/appengine/internal/modules/modules_service.proto
deleted file mode 100644
index d29f006..0000000
--- a/vendor/google.golang.org/appengine/internal/modules/modules_service.proto
+++ /dev/null
@@ -1,80 +0,0 @@
-syntax = "proto2";
-option go_package = "modules";
-
-package appengine;
-
-message ModulesServiceError {
-  enum ErrorCode {
-    OK  = 0;
-    INVALID_MODULE = 1;
-    INVALID_VERSION = 2;
-    INVALID_INSTANCES = 3;
-    TRANSIENT_ERROR = 4;
-    UNEXPECTED_STATE = 5;
-  }
-}
-
-message GetModulesRequest {
-}
-
-message GetModulesResponse {
-  repeated string module = 1;
-}
-
-message GetVersionsRequest {
-  optional string module = 1;
-}
-
-message GetVersionsResponse {
-  repeated string version = 1;
-}
-
-message GetDefaultVersionRequest {
-  optional string module = 1;
-}
-
-message GetDefaultVersionResponse {
-  required string version = 1;
-}
-
-message GetNumInstancesRequest {
-  optional string module = 1;
-  optional string version = 2;
-}
-
-message GetNumInstancesResponse {
-  required int64 instances = 1;
-}
-
-message SetNumInstancesRequest {
-  optional string module = 1;
-  optional string version = 2;
-  required int64 instances = 3;
-}
-
-message SetNumInstancesResponse {}
-
-message StartModuleRequest {
-  required string module = 1;
-  required string version = 2;
-}
-
-message StartModuleResponse {}
-
-message StopModuleRequest {
-  optional string module = 1;
-  optional string version = 2;
-}
-
-message StopModuleResponse {}
-
-message GetHostnameRequest {
-  optional string module = 1;
-  optional string version = 2;
-  optional string instance = 3;
-}
-
-message GetHostnameResponse {
-  required string hostname = 1;
-}
-
diff --git a/vendor/google.golang.org/appengine/internal/regen.sh b/vendor/google.golang.org/appengine/internal/regen.sh
deleted file mode 100755
index 2fdb546..0000000
--- a/vendor/google.golang.org/appengine/internal/regen.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash -e
-#
-# This script rebuilds the generated code for the protocol buffers.
-# To run this you will need protoc and goprotobuf installed;
-# see https://github.com/golang/protobuf for instructions.
-
-PKG=google.golang.org/appengine
-
-function die() {
-	echo 1>&2 $*
-	exit 1
-}
-
-# Sanity check that the right tools are accessible.
-for tool in go protoc protoc-gen-go; do
-	q=$(which $tool) || die "didn't find $tool"
-	echo 1>&2 "$tool: $q"
-done
-
-echo -n 1>&2 "finding package dir... "
-pkgdir=$(go list -f '{{.Dir}}' $PKG)
-echo 1>&2 $pkgdir
-base=$(echo $pkgdir | sed "s,/$PKG\$,,")
-echo 1>&2 "base: $base"
-cd $base
-
-# Run protoc once per package.
-for dir in $(find $PKG/internal -name '*.proto' | xargs dirname | sort | uniq); do
-	echo 1>&2 "* $dir"
-	protoc --go_out=. $dir/*.proto
-done
-
-for f in $(find $PKG/internal -name '*.pb.go'); do
-  # Remove proto.RegisterEnum calls.
-  # These cause duplicate registration panics when these packages
-  # are used on classic App Engine. proto.RegisterEnum only affects
-  # parsing the text format; we don't care about that.
-  # https://code.google.com/p/googleappengine/issues/detail?id=11670#c17
-  sed -i '/proto.RegisterEnum/d' $f
-done
diff --git a/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto b/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto
deleted file mode 100644
index f21763a..0000000
--- a/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto
+++ /dev/null
@@ -1,44 +0,0 @@
-syntax = "proto2";
-option go_package = "remote_api";
-
-package remote_api;
-
-message Request {
-  required string service_name = 2;
-  required string method = 3;
-  required bytes request = 4;
-  optional string request_id = 5;
-}
-
-message ApplicationError {
-  required int32 code = 1;
-  required string detail = 2;
-}
-
-message RpcError {
-  enum ErrorCode {
-    UNKNOWN = 0;
-    CALL_NOT_FOUND = 1;
-    PARSE_ERROR = 2;
-    SECURITY_VIOLATION = 3;
-    OVER_QUOTA = 4;
-    REQUEST_TOO_LARGE = 5;
-    CAPABILITY_DISABLED = 6;
-    FEATURE_DISABLED = 7;
-    BAD_REQUEST = 8;
-    RESPONSE_TOO_LARGE = 9;
-    CANCELLED = 10;
-    REPLAY_ERROR = 11;
-    DEADLINE_EXCEEDED = 12;
-  }
-  required int32 code = 1;
-  optional string detail = 2;
-}
-
-message Response {
-  optional bytes response = 1;
-  optional bytes exception = 2;
-  optional ApplicationError application_error = 3;
-  optional bytes java_exception = 4;
-  optional RpcError rpc_error = 5;
-}
diff --git a/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto b/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto
deleted file mode 100644
index f695edf..0000000
--- a/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto
+++ /dev/null
@@ -1,64 +0,0 @@
-syntax = "proto2";
-option go_package = "urlfetch";
-
-package appengine;
-
-message URLFetchServiceError {
-  enum ErrorCode {
-    OK = 0;
-    INVALID_URL = 1;
-    FETCH_ERROR = 2;
-    UNSPECIFIED_ERROR = 3;
-    RESPONSE_TOO_LARGE = 4;
-    DEADLINE_EXCEEDED = 5;
-    SSL_CERTIFICATE_ERROR = 6;
-    DNS_ERROR = 7;
-    CLOSED = 8;
-    INTERNAL_TRANSIENT_ERROR = 9;
-    TOO_MANY_REDIRECTS = 10;
-    MALFORMED_REPLY = 11;
-    CONNECTION_ERROR = 12;
-  }
-}
-
-message URLFetchRequest {
-  enum RequestMethod {
-    GET = 1;
-    POST = 2;
-    HEAD = 3;
-    PUT = 4;
-    DELETE = 5;
-    PATCH = 6;
-  }
-  required RequestMethod Method = 1;
-  required string Url = 2;
-  repeated group Header = 3 {
-    required string Key = 4;
-    required string Value = 5;
-  }
-  optional bytes Payload = 6 [ctype=CORD];
-
-  optional bool FollowRedirects = 7 [default=true];
-
-  optional double Deadline = 8;
-
-  optional bool MustValidateServerCertificate = 9 [default=true];
-}
-
-message URLFetchResponse {
-  optional bytes Content = 1;
-  required int32 StatusCode = 2;
-  repeated group Header = 3 {
-    required string Key = 4;
-    required string Value = 5;
-  }
-  optional bool ContentWasTruncated = 6 [default=false];
-  optional int64 ExternalBytesSent = 7;
-  optional int64 ExternalBytesReceived = 8;
-
-  optional string FinalUrl = 9;
-
-  optional int64 ApiCpuMilliseconds = 10 [default=0];
-  optional int64 ApiBytesSent = 11 [default=0];
-  optional int64 ApiBytesReceived = 12 [default=0];
-}
diff --git a/vendor/gopkg.in/yaml.v2/.travis.yml b/vendor/gopkg.in/yaml.v2/.travis.yml
deleted file mode 100644
index 004172a..0000000
--- a/vendor/gopkg.in/yaml.v2/.travis.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-language: go
-
-go:
-    - 1.4
-    - 1.5
-    - 1.6
-    - tip
-
-go_import_path: gopkg.in/yaml.v2
diff --git a/vendor/gopkg.in/yaml.v2/README.md b/vendor/gopkg.in/yaml.v2/README.md
deleted file mode 100644
index 7a512d6..0000000
--- a/vendor/gopkg.in/yaml.v2/README.md
+++ /dev/null
@@ -1,133 +0,0 @@
-# YAML support for the Go language
-
-Introduction
-------------
-
-The yaml package enables Go programs to comfortably encode and decode YAML
-values. It was developed within [Canonical](https://www.canonical.com) as
-part of the [juju](https://juju.ubuntu.com) project, and is based on a
-pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML)
-C library to parse and generate YAML data quickly and reliably.
-
-Compatibility
--------------
-
-The yaml package supports most of YAML 1.1 and 1.2, including support for
-anchors, tags, map merging, etc. Multi-document unmarshalling is not yet
-implemented, and base-60 floats from YAML 1.1 are purposefully not
-supported since they're a poor design and are gone in YAML 1.2.
-
-Installation and usage
-----------------------
-
-The import path for the package is *gopkg.in/yaml.v2*.
-
-To install it, run:
-
-    go get gopkg.in/yaml.v2
-
-API documentation
------------------
-
-If opened in a browser, the import path itself leads to the API documentation:
-
-  * [https://gopkg.in/yaml.v2](https://gopkg.in/yaml.v2)
-
-API stability
--------------
-
-The package API for yaml v2 will remain stable as described in [gopkg.in](https://gopkg.in).
-
-
-License
--------
-
-The yaml package is licensed under the Apache License 2.0. Please see the LICENSE file for details.
-
-
-Example
--------
-
-Some more examples can be found in the "examples" folder.
-
-```Go
-package main
-
-import (
-        "fmt"
-        "log"
-
-        "gopkg.in/yaml.v2"
-)
-
-var data = `
-a: Easy!
-b:
-  c: 2
-  d: [3, 4]
-`
-
-type T struct {
-        A string
-        B struct {
-                RenamedC int   `yaml:"c"`
-                D        []int `yaml:",flow"`
-        }
-}
-
-func main() {
-        t := T{}
-    
-        err := yaml.Unmarshal([]byte(data), &t)
-        if err != nil {
-                log.Fatalf("error: %v", err)
-        }
-        fmt.Printf("--- t:\n%v\n\n", t)
-    
-        d, err := yaml.Marshal(&t)
-        if err != nil {
-                log.Fatalf("error: %v", err)
-        }
-        fmt.Printf("--- t dump:\n%s\n\n", string(d))
-    
-        m := make(map[interface{}]interface{})
-    
-        err = yaml.Unmarshal([]byte(data), &m)
-        if err != nil {
-                log.Fatalf("error: %v", err)
-        }
-        fmt.Printf("--- m:\n%v\n\n", m)
-    
-        d, err = yaml.Marshal(&m)
-        if err != nil {
-                log.Fatalf("error: %v", err)
-        }
-        fmt.Printf("--- m dump:\n%s\n\n", string(d))
-}
-```
-
-This example will generate the following output:
-
-```
---- t:
-{Easy! {2 [3 4]}}
-
---- t dump:
-a: Easy!
-b:
-  c: 2
-  d: [3, 4]
-
-
---- m:
-map[a:Easy! b:map[c:2 d:[3 4]]]
-
---- m dump:
-a: Easy!
-b:
-  c: 2
-  d:
-  - 3
-  - 4
-```
-
diff --git a/vendor/upspin.io/.travis.yml b/vendor/upspin.io/.travis.yml
deleted file mode 100644
index b276b92..0000000
--- a/vendor/upspin.io/.travis.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-os:
-- linux
-- osx
-language: go
-go:
-- 1.9.x
-go_import_path: upspin.io
-install: true
-script: go test -short -race ./...
-notifications:
-  email:
-  - upspin-reviews@googlegroups.com
diff --git a/vendor/upspin.io/AUTHORS b/vendor/upspin.io/AUTHORS
index fef38b6..f722f4f 100644
--- a/vendor/upspin.io/AUTHORS
+++ b/vendor/upspin.io/AUTHORS
@@ -10,4 +10,42 @@
 
 # Please keep the list sorted.
 
+Adrian Lopez <adrianlzt@gmail.com>
+Andrew O'Neill <foolusion@gmail.com>
+Benjamin Campbell <i@benjic.me>
+Borja Clemente <borja.clemente@gmail.com>
+Bruce Downs <bruce.downs@jivesoftware.com>
+Carl Henrik Lunde <chlunde@ifi.uio.no>
+Chris Morrow <morrowc@ops-netman.net>
+Christopher Waldon <christopher.waldon.dev@gmail.com>
+Dave Cohen <davecohen10@gmail.com>
+Derek Chiang <derekchiang93@gmail.com>
+Dmitri Shuralyov <shurcooL@gmail.com>
+Emil Hessman <emil@hessman.se>
+Eric Grosse <grosse@gmail.com>
+Fabian Wickborn <fabian@wickborn.net>
+Fazlul Shahriar <fshahriar@gmail.com>
+Frank Rehwinkel <frankrehwinkel@gmail.com>
+Gabriel Aszalos <gabriel.aszalos@gmail.com>
+Gildas Chabot <gildaschbt@gmail.com>
 Google Inc.
+Gurjant Kalsi <gurjantkalsi@gmail.com>
+Jacek Masiulaniec <jacek.masiulaniec@gmail.com>
+Jeff R. Allen <jra@nella.org>
+Kaviraj <kavirajkanagaraj@gmail.com>
+Kris Foster <kris.foster@gmail.com>
+Leon Klingele <git@leonklingele.de>
+Levi Gross <levi@levigross.com>
+Martin Palma <m@palma.bz>
+Mate Hajzso <ajz@lambd.ax>
+Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
+Matt Croydon <mcroydon@gmail.com>
+Michaelian Ennis <mennis@corvus.net>
+Mikkel Oscar Lyderik Larsen <m@moscar.net>
+Nicola Girardi <idrarig.alocin@gmail.com>
+Rene Kaufmann <kaufmann.r@gmail.com>
+Sebastian Zaha <sebastian.zaha@gmail.com>
+Shawn Smith <shawnpsmith@gmail.com>
+Steven Hiscocks <steven@hiscocks.me.uk>
+Stuart Auld <sja@marsupialmusic.net>
+Xiang Li <xiangli.cs@gmail.com>
diff --git a/vendor/upspin.io/CONDUCT.md b/vendor/upspin.io/CONDUCT.md
deleted file mode 100644
index 9ae747a..0000000
--- a/vendor/upspin.io/CONDUCT.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to making participation in our project and
-our community a harassment-free experience for everyone, regardless of age, body
-size, disability, ethnicity, gender identity and expression, level of experience,
-nationality, personal appearance, race, religion, or sexual identity and
-orientation.
-
-## Our Standards
-
-Examples of behavior that contributes to creating a positive environment
-include:
-
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
-
-Examples of unacceptable behavior by participants include:
-
-* The use of sexualized language or imagery and unwelcome sexual attention or
-advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or electronic
-  address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
-  professional setting
-
-## Our Responsibilities
-
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
-
-## Scope
-
-This Code of Conduct applies both within project spaces and in public spaces
-when an individual is representing the project or its community. Examples of
-representing a project or community include using an official project e-mail
-address, posting via an official social media account, or acting as an appointed
-representative at an online or offline event. Representation of a project may be
-further defined and clarified by project maintainers.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by privately contacting the project team at
-[upspin-team@googlegroups.com](mailto:upspin-team@googlegroups.com).
-All complaints will be reviewed and investigated and will result in a response
-that is deemed necessary and appropriate to the circumstances. The project team
-is obligated to maintain confidentiality with regard to the reporter of an
-incident. Further details of specific enforcement policies may be posted
-separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
-available at [http://contributor-covenant.org/version/1/4][version]
-
-[homepage]: http://contributor-covenant.org
-[version]: http://contributor-covenant.org/version/1/4/
diff --git a/vendor/upspin.io/CONTRIBUTING.md b/vendor/upspin.io/CONTRIBUTING.md
deleted file mode 100644
index f6ed4ee..0000000
--- a/vendor/upspin.io/CONTRIBUTING.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# Contributing to Upspin
-
-Upspin is an open source project.
-
-It is the work of many contributors. We appreciate your help!
-
-
-## Filing issues
-
-When filing an issue, make sure to answer these five questions:
-
-1. What version of Upspin are you using?
-2. What operating system and processor architecture are you using?
-3. What did you do?
-4. What did you expect to see?
-5. What did you see instead?
-
-Sensitive security-related issues should be reported to the private
-[upspin-security@googlegroups.com](mailto:upspin-security@googlegroups.com)
-mailing list.
-
-
-## Contributing code
-
-We do not use GitHub pull requests
-(we use [an instance](https://upspin-review.googlesource.com/) of the
-[Gerrit](https://www.gerritcodereview.com/) code review system instead).
-
-Our code review process is the same as that used by the Go project.
-Please read the Code Review section of
-[Go's Contribution Guidelines](https://golang.org/doc/contribute.html#Code_review)
-to learn how to send patches to Upspin.
-That document covers registering with
-[our Gerrit instance]((https://upspin-review.googlesource.com/)),
-configuring the `git-codereview` tool,
-signing a Contributor License Agreement,
-and the process of creating, reviewing, and submitting changes.
-
-Unless otherwise noted, the Upspin source files are distributed under
-the BSD-style license found in the LICENSE file.
-
-
-## Code of Conduct
-
-Please note that this project is released with a [Contributor Code of Conduct](CONDUCT.md).
-By participating in this project you agree to abide by its terms.
-
diff --git a/vendor/upspin.io/CONTRIBUTORS b/vendor/upspin.io/CONTRIBUTORS
index 95c922b..0a2a9a2 100644
--- a/vendor/upspin.io/CONTRIBUTORS
+++ b/vendor/upspin.io/CONTRIBUTORS
@@ -32,11 +32,54 @@
 
 # Please keep the list sorted.
 
+Adrian Lopez <adrianlzt@gmail.com>
 Andrew Bonventre <andybons@gmail.com>
 Andrew Gerrand <adg@golang.org>
+Andrew Lytvynov <awly@google.com>
+Andrew O'Neill <foolusion@gmail.com>
+Andy Bursavich <bursavich@google.com>
+Axel Wagner <axel.wagner.hh@googlemail.com>
+Benjamin Campbell <i@benjic.me>
+Borja Clemente <borja.clemente@gmail.com>
+Bruce Downs <bruce.downs@jivesoftware.com>
+Carl Henrik Lunde <chlunde@ifi.uio.no>
+Chris Morrow <morrowc@ops-netman.net>
+Christopher Waldon <christopher.waldon.dev@gmail.com>
+Dave Cohen <davecohen10@gmail.com>
 David Presotto <presotto@gmail.com>
+Derek Chiang <derekchiang93@gmail.com>
+Dmitri Shuralyov <shurcooL@gmail.com>
 Ed Knapp <edknapp@google.com>
 Eduardo Pinheiro <edpin@edpin.com>
+Emil Hessman <emil@hessman.se>
 Eric Grosse <grosse@gmail.com>
-Rob Pike <r@golang.org>
+Fabian Wickborn <fabian@wickborn.net>
+Fazlul Shahriar <fshahriar@gmail.com>
+Frank Rehwinkel <frankrehwinkel@gmail.com>
+Gabriel Aszalos <gabriel.aszalos@gmail.com>
+Gildas Chabot <gildaschbt@gmail.com>
+Gurjant Kalsi <gurjantkalsi@gmail.com>
+Jacek Masiulaniec <jacek.masiulaniec@gmail.com>
+Jeff R. Allen <jra@nella.org>
+Kaviraj <kavirajkanagaraj@gmail.com>
+Kris Foster <kris.foster@gmail.com>
+Leon Klingele <git@leonklingele.de>
+Levi Gross <levi@levigross.com>
+Martin Palma <m@palma.bz>
+Mate Hajzso <ajz@lambd.ax>
+Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
+Matt Croydon <mcroydon@gmail.com>
+Michaelian Ennis <mennis@corvus.net>
+Michael Stapelberg <stapelberg@google.com>
+Mikkel Oscar Lyderik Larsen <m@moscar.net>
+Nate Rosenblum <natr@google.com>
+Nicola Girardi <idrarig.alocin@gmail.com>
 Quan Nguyen <quannguyen@google.com>
+Rene Kaufmann <kaufmann.r@gmail.com>
+Rob Pike <r@golang.org>
+Ross Light <light@google.com>
+Sebastian Zaha <sebastian.zaha@gmail.com>
+Shawn Smith <shawnpsmith@gmail.com>
+Steven Hiscocks <steven@hiscocks.me.uk>
+Stuart Auld <sja@marsupialmusic.net>
+Xiang Li <xiangli.cs@gmail.com>
diff --git a/vendor/upspin.io/Gopkg.lock b/vendor/upspin.io/Gopkg.lock
deleted file mode 100644
index 938da47..0000000
--- a/vendor/upspin.io/Gopkg.lock
+++ /dev/null
@@ -1,57 +0,0 @@
-# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
-
-
-[[projects]]
-  branch = "master"
-  name = "bazil.org/fuse"
-  packages = [".","fs","fuseutil"]
-  revision = "371fbbdaa8987b715bdd21d6adc4c9b20155f748"
-
-[[projects]]
-  branch = "master"
-  name = "github.com/NYTimes/gziphandler"
-  packages = ["."]
-  revision = "97ae7fbaf81620fe97840685304a78a306a39c64"
-
-[[projects]]
-  branch = "master"
-  name = "github.com/golang/protobuf"
-  packages = ["proto"]
-  revision = "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9"
-
-[[projects]]
-  branch = "master"
-  name = "github.com/russross/blackfriday"
-  packages = ["."]
-  revision = "6d1ef893fcb01b4f50cb6e57ed7df3e2e627b6b2"
-
-[[projects]]
-  branch = "master"
-  name = "golang.org/x/crypto"
-  packages = ["acme","acme/autocert","hkdf"]
-  revision = "2509b142fb2b797aa7587dad548f113b2c0f20ce"
-
-[[projects]]
-  branch = "master"
-  name = "golang.org/x/net"
-  packages = ["context"]
-  revision = "4b14673ba32bee7f5ac0f990a48f033919fd418b"
-
-[[projects]]
-  branch = "master"
-  name = "golang.org/x/text"
-  packages = ["cases","internal","internal/gen","internal/tag","internal/triegen","internal/ucd","language","runes","secure/bidirule","secure/precis","transform","unicode/bidi","unicode/cldr","unicode/norm","unicode/rangetable","width"]
-  revision = "6eab0e8f74e86c598ec3b6fad4888e0c11482d48"
-
-[[projects]]
-  branch = "v2"
-  name = "gopkg.in/yaml.v2"
-  packages = ["."]
-  revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f"
-
-[solve-meta]
-  analyzer-name = "dep"
-  analyzer-version = 1
-  inputs-digest = "2246e647ba1c78b0b9f948f9fb072fff1467284fb138709c063e99736f646b90"
-  solver-name = "gps-cdcl"
-  solver-version = 1
diff --git a/vendor/upspin.io/Gopkg.toml b/vendor/upspin.io/Gopkg.toml
deleted file mode 100644
index df6c92d..0000000
--- a/vendor/upspin.io/Gopkg.toml
+++ /dev/null
@@ -1,34 +0,0 @@
-# golang.org/x/text/gen.go imports this package; we don't depend on it.
-ignored = ["golang.org/x/text/collate"]
-
-[[constraint]]
-  branch = "master"
-  name = "bazil.org/fuse"
-
-[[constraint]]
-  branch = "master"
-  name = "github.com/NYTimes/gziphandler"
-
-[[constraint]]
-  branch = "master"
-  name = "github.com/russross/blackfriday"
-
-[[constraint]]
-  branch = "master"
-  name = "github.com/golang/protobuf"
-
-[[constraint]]
-  branch = "master"
-  name = "golang.org/x/crypto"
-
-[[constraint]]
-  branch = "master"
-  name = "golang.org/x/net"
-
-[[constraint]]
-  branch = "master"
-  name = "golang.org/x/text"
-
-[[constraint]]
-  branch = "v2"
-  name = "gopkg.in/yaml.v2"
diff --git a/vendor/upspin.io/README.binary b/vendor/upspin.io/README.binary
deleted file mode 100644
index 6e43d88..0000000
--- a/vendor/upspin.io/README.binary
+++ /dev/null
@@ -1,42 +0,0 @@
-{{/* This file is interpreted as a template by serverutil/frontend/download.go. */}}
-Upspin
-
-Documentation: https://upspin.io/
-
-Upspin is an experimental project to build a framework for naming
-and sharing files and other data securely, uniformly, and globally:
-a global name system of sorts.
-
-It is not a file system, but a set of protocols and reference
-implementations that can be used to join things like file systems
-and other storage services to the name space.
-
-Performance is not a primary goal. Uniformity and security are.
-
-Tools included in this archive:
-
-upspin
-	The upspin command provides utilities for creating and
-	administering Upspin files, users, and servers.
-
-	https://godoc.org/upspin.io/cmd/upspin
-
-upspin-ui
-	The upspin-ui command presents a web interface to the Upspin name
-	space, and also provides a facility to sign up an Upspin user and
-	deploy an upspinserver to Google Cloud Platform.
-
-	https://godoc.org/augie.upspin.io/cmd/upspin-ui
-
-cacheserver
-	The cacheserver command implements a directory
-	and storage cache for Upspin.
-
-	https://godoc.org/upspin.io/cmd/cacheserver
-
-upspinfs (Linux and macOS only)
-	The upspinfs command is a FUSE interface for Upspin.
-
-	https://godoc.org/upspin.io/cmd/upspinfs
-
-These binaries were built for {{.OSArch}} at{{range .Commits}} {{.Repo}}/{{.ShortHash}}{{end}}.
diff --git a/vendor/upspin.io/README.md b/vendor/upspin.io/README.md
deleted file mode 100644
index 9c3838c..0000000
--- a/vendor/upspin.io/README.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Upspin
-
-![Augie](doc/images/augie.jpg)
-
-Documentation: [upspin.io](https://upspin.io/)
-
-## About the project
-
-Upspin is an experimental project to build a framework for naming
-and sharing files and other data securely, uniformly, and globally:
-a global name system of sorts.
-
-It is not a file system, but a set of protocols and reference
-implementations that can be used to join things like file systems
-and other storage services to the name space.
-
-Performance is not a primary goal. Uniformity and security are.
-
-Upspin is not an official Google product.
-
-
-## Status
-
-Upspin has rough edges, and is not yet suitable for non-technical users.
-
-[![Build Status](https://travis-ci.org/upspin/upspin.svg?branch=master)](https://travis-ci.org/upspin/upspin)
-
-
-## Contributing
-
-The code repository lives at
-[upspin.googlesource.com](https://upspin.googlesource.com)
-and is mirrored to [GitHub](https://github.com/upspin/upspin).
-
-Note that the Upspin project does not use GitHub pull requests, and
-that we use the issue tracker for bug reports and proposals only.
-
-See the [Contribution Guidelines](CONTRIBUTING.md)
-for more information on contributing to the project.
-
-
-### Reporting issues
-
-Please report issues through
-[our issue tracker](https://github.com/upspin/upspin/issues).
-
-
-## Community
-
-All Upspin users should subscribe to the
-[Upspin Announcements mailing list](https://groups.google.com/forum/#!forum/upspin-announce)
-to receive critical information about the project.
-
-Use the [Upspin mailing list](https://groups.google.com/forum/#!forum/upspin)
-for discussion about Upspin use and development.
-
-
-### Code of Conduct
-
-Please note that this project is released with a [Contributor Code of Conduct](CONDUCT.md).
-By participating in this project you agree to abide by its terms.
-
-
-The Upspin mascot is Copyright 2017 Renee French. [All Rights Reserved](doc/mascot.md).
diff --git a/vendor/upspin.io/bind/bind.go b/vendor/upspin.io/bind/bind.go
index 23cb07c..df82cf7 100644
--- a/vendor/upspin.io/bind/bind.go
+++ b/vendor/upspin.io/bind/bind.go
@@ -14,8 +14,9 @@
 )
 
 type dialKey struct {
-	user     upspin.UserName
-	endpoint upspin.Endpoint
+	user        upspin.UserName
+	endpoint    upspin.Endpoint
+	cacheserver upspin.Endpoint
 }
 
 type dialers map[upspin.Transport]upspin.Dialer
@@ -155,7 +156,7 @@
 // reachableService finds a bound and reachable service in the cache or dials a
 // fresh one and saves it in the cache.
 func (s *servers) reachableService(cc upspin.Config, e upspin.Endpoint) (upspin.Service, error) {
-	key := dialKey{user: cc.UserName(), endpoint: e}
+	key := dialKey{user: cc.UserName(), endpoint: e, cacheserver: cc.CacheEndpoint()}
 	s.mu.Lock()
 	defer s.mu.Unlock()
 	service, cached := s.services[key]
@@ -183,9 +184,3 @@
 func (s *servers) serverOp() errors.Op {
 	return errors.Op("bind." + s.kind + "Server") // "bind.KeyServer"
 }
-
-// NoCache supresses the caching of dial results. This was added for
-// debugging.
-func NoCache() {
-	noCache = true
-}
diff --git a/vendor/upspin.io/client/client.go b/vendor/upspin.io/client/client.go
index ab67b2e..b082513 100644
--- a/vendor/upspin.io/client/client.go
+++ b/vendor/upspin.io/client/client.go
@@ -412,19 +412,6 @@
 	return readers, nil
 }
 
-// isReadableByAll returns true if all@upspin.io has read rights.
-// The default is false, for example if there are any errors in reading Access.
-// The access package restricts where the "all" word can appear; here we
-// trust that it has done its job.
-func (c *Client) isReadableByAll(readers []upspin.UserName) bool {
-	for _, reader := range readers {
-		if reader == access.AllUsers {
-			return true
-		}
-	}
-	return false
-}
-
 func makeDirectoryLookupFn(dir upspin.DirServer, entry *upspin.DirEntry, s *metric.Span) (*upspin.DirEntry, error) {
 	defer s.StartSpan("dir.makeDirectory").End()
 	entry.SignedName = entry.Name // Make sure they match as we step through links.
@@ -790,7 +777,7 @@
 
 	packer := pack.Lookup(entry.Packing)
 	if packer == nil {
-		return nil, errors.E(op, oldName, errors.Invalid, errors.Errorf("unrecognized Packing %d", c.config.Packing()))
+		return nil, errors.E(op, oldName, errors.Invalid, errors.Errorf("unrecognized Packing %d", entry.Packing))
 	}
 	if access.IsAccessControlFile(newName) {
 		return nil, errors.E(op, newName, errors.Invalid, "Access or Group files cannot be renamed")
diff --git a/vendor/upspin.io/cmd/cacheserver/cacheutil/detach_posix.go b/vendor/upspin.io/cmd/cacheserver/cacheutil/detach_posix.go
index bc74189..9090cc9 100644
--- a/vendor/upspin.io/cmd/cacheserver/cacheutil/detach_posix.go
+++ b/vendor/upspin.io/cmd/cacheserver/cacheutil/detach_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build !windows
+// +build !windows,!plan9
 
 package cacheutil
 
diff --git a/vendor/upspin.io/cmd/cacheserver/cacheutil/start.go b/vendor/upspin.io/cmd/cacheserver/cacheutil/start.go
index e70cea8..27e3d81 100644
--- a/vendor/upspin.io/cmd/cacheserver/cacheutil/start.go
+++ b/vendor/upspin.io/cmd/cacheserver/cacheutil/start.go
@@ -16,13 +16,11 @@
 
 	"upspin.io/bind"
 	"upspin.io/log"
-	"upspin.io/rpc"
 	"upspin.io/upspin"
 )
 
 var (
 	writethrough = flag.Bool("writethrough", false, "make storage cache writethrough")
-	cacheSize    = flag.Int64("cachesize", 5e9, "max disk `bytes` for cache")
 )
 
 // detach detaches a process from the parent process group,
@@ -30,18 +28,19 @@
 var detach = func(*exec.Cmd) {}
 
 // Start starts the cacheserver if the config requires it and it is not already running.
-func Start(cfg upspin.Config) {
+func Start(cfg upspin.Config) (usingCache bool) {
 	if cfg == nil {
 		return
 	}
-	ce, err := rpc.CacheEndpoint(cfg)
-	if err != nil || ce == nil {
+	ce := cfg.CacheEndpoint()
+	if ce.Unassigned() {
 		// TODO(adg): log error message?
 		return // not using a cache server
 	}
+	usingCache = true
 
 	// Ping the cache server.
-	if err := ping(cfg, ce); err == nil {
+	if err := ping(cfg, &ce); err == nil {
 		return // cache server running
 	}
 
@@ -59,8 +58,7 @@
 		cmd.Stdout = os.Stdout
 		cmd.Stderr = os.Stderr
 		if err := cmd.Run(); err != nil {
-			log.Info.Printf("Starting cacheserver: %s", err)
-			fmt.Fprintf(os.Stderr, "Failed to start cacheserver; continuing without.\n")
+			log.Info.Printf("cacheserver terminated or not started: %s", err)
 			close(cacheErrorChan)
 		}
 	}()
@@ -73,12 +71,13 @@
 			return
 		default:
 		}
-		if err := ping(cfg, ce); err == nil {
+		if err := ping(cfg, &ce); err == nil {
 			return
 		}
 	}
 
 	fmt.Fprintf(os.Stderr, "Timed out waiting for cacheserver to start.\n")
+	return
 }
 
 // addFlag adds a flag to the command if it is at a non-default value.
diff --git a/vendor/upspin.io/config/initconfig.go b/vendor/upspin.io/config/initconfig.go
index 98b002b..ac6e065 100644
--- a/vendor/upspin.io/config/initconfig.go
+++ b/vendor/upspin.io/config/initconfig.go
@@ -41,6 +41,7 @@
 func (base) KeyEndpoint() upspin.Endpoint   { return defaultKeyEndpoint }
 func (base) DirEndpoint() upspin.Endpoint   { return upspin.Endpoint{} }
 func (base) StoreEndpoint() upspin.Endpoint { return upspin.Endpoint{} }
+func (base) CacheEndpoint() upspin.Endpoint { return upspin.Endpoint{} }
 func (base) Value(string) string            { return "" }
 
 // New returns a config with all fields set as defaults.
@@ -65,6 +66,7 @@
 	storeserver = "storeserver"
 	packing     = "packing"
 	secrets     = "secrets"
+	cache       = "cache"
 )
 
 // ErrNoFactotum indicates that the returned config contains no Factotum, and
@@ -134,6 +136,7 @@
 		keyserver:   defaultKeyEndpoint.String(),
 		dirserver:   "",
 		storeserver: "",
+		cache:       "",
 	}
 	other := make(map[string]interface{})
 
@@ -208,6 +211,7 @@
 	cfg = SetKeyEndpoint(cfg, parseEndpoint(op, vals, keyserver, &err))
 	cfg = SetStoreEndpoint(cfg, parseEndpoint(op, vals, storeserver, &err))
 	cfg = SetDirEndpoint(cfg, parseEndpoint(op, vals, dirserver, &err))
+	cfg = parseCacheValue(op, cfg, vals, &err)
 
 	valueMap := make(map[string]string)
 	for k, v := range other {
@@ -291,6 +295,34 @@
 	return *ep
 }
 
+// parseCacheValue parses the cache value and returns a config containing the cacheserver endpoint.
+func parseCacheValue(op errors.Op, cfg upspin.Config, vals map[string]string, errorp *error) upspin.Config {
+	text := vals["cache"]
+	switch text {
+	case "", "n", "no", "false":
+		// nothing to do
+	case "y", "yes", "true":
+		name := "remote," + LocalName(cfg, "cacheserver") + ":80"
+		ep, err := upspin.ParseEndpoint(name)
+		if err != nil {
+			*errorp = errors.E(op, errors.Errorf("cannot parse cache value %q: %v", text, err))
+			break
+		}
+		cfg = SetCacheEndpoint(cfg, *ep)
+	default:
+		if !strings.Contains(text, ",") {
+			text = "remote," + text
+		}
+		ep, err := upspin.ParseEndpoint(text)
+		if err != nil {
+			*errorp = errors.E(op, errors.Errorf("cannot parse cache value %q: %v", text, err))
+			break
+		}
+		cfg = SetCacheEndpoint(cfg, *ep)
+	}
+	return cfg
+}
+
 type cfgUserName struct {
 	upspin.Config
 	userName upspin.UserName
@@ -399,6 +431,24 @@
 	}
 }
 
+type cfgCacheEndpoint struct {
+	upspin.Config
+	cacheEndpoint upspin.Endpoint
+}
+
+func (cfg cfgCacheEndpoint) CacheEndpoint() upspin.Endpoint {
+	return cfg.cacheEndpoint
+}
+
+// SetDirEndpoint returns a config derived from the given config
+// with the given dir endpoint.
+func SetCacheEndpoint(cfg upspin.Config, e upspin.Endpoint) upspin.Config {
+	return cfgCacheEndpoint{
+		Config:        cfg,
+		cacheEndpoint: e,
+	}
+}
+
 type cfgValue struct {
 	upspin.Config
 	key, val string
diff --git a/vendor/upspin.io/config/localname.go b/vendor/upspin.io/config/localname.go
new file mode 100644
index 0000000..e8c8e09
--- /dev/null
+++ b/vendor/upspin.io/config/localname.go
@@ -0,0 +1,33 @@
+// Copyright 2016 The Upspin Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package config
+
+import (
+	"fmt"
+	"net"
+	"strings"
+
+	"upspin.io/upspin"
+)
+
+const localSuffix = ".localhost."
+
+// LocalName constructs the host local name for a service.
+func LocalName(config upspin.Config, service string) string {
+	s := fmt.Sprintf("%s.%s%s", config.UserName(), service, localSuffix)
+	return strings.Replace(s, "@", ".", 1)
+}
+
+// IsLocal returns true if the address is host local.
+func IsLocal(address string) bool {
+	h, _, err := net.SplitHostPort(address)
+	if err != nil {
+		h = address
+	}
+	if !strings.HasSuffix(h, localSuffix) {
+		return false
+	}
+	return true
+}
diff --git a/vendor/upspin.io/dir/inprocess/watch.go b/vendor/upspin.io/dir/inprocess/watch.go
index 61a5b54..1a834dd 100644
--- a/vendor/upspin.io/dir/inprocess/watch.go
+++ b/vendor/upspin.io/dir/inprocess/watch.go
@@ -241,9 +241,9 @@
 
 	eventsSoFar := <-e.eventsSoFar
 
-	// A sequence other than the special cases 0 and -1 must exist.
+	// A sequence other than the special cases must exist.
 	// The special case of an invalid sequence is returned as an event with an "invalid" error.
-	if sequence != 0 && sequence != -1 {
+	if sequence != upspin.WatchCurrent && sequence != upspin.WatchStart && sequence != upspin.WatchNew {
 		if sequence < 0 || int64(len(eventsSoFar)) < sequence {
 			events <- upspin.Event{Error: errors.E(op, errors.Invalid, "bad sequence")}
 			close(events)
diff --git a/vendor/upspin.io/dir/remote/remote.go b/vendor/upspin.io/dir/remote/remote.go
index 52dc0f3..6aefd12 100644
--- a/vendor/upspin.io/dir/remote/remote.go
+++ b/vendor/upspin.io/dir/remote/remote.go
@@ -180,11 +180,8 @@
 
 func dialCache(config upspin.Config, proxyFor upspin.Endpoint) (upspin.Service, error) {
 	// Are we using a cache?
-	ce, err := rpc.CacheEndpoint(config)
-	if err != nil {
-		return nil, err
-	}
-	if ce == nil {
+	ce := config.CacheEndpoint()
+	if ce.Unassigned() {
 		return nil, nil
 	}
 
diff --git a/vendor/upspin.io/factotum/factotum.go b/vendor/upspin.io/factotum/factotum.go
index 1ae1184..5816482 100644
--- a/vendor/upspin.io/factotum/factotum.go
+++ b/vendor/upspin.io/factotum/factotum.go
@@ -12,12 +12,15 @@
 	"crypto/rand"
 	"crypto/sha256"
 	"fmt"
+	"io"
 	"io/ioutil"
 	"math/big"
 	"os"
 	"path/filepath"
 	"strings"
 
+	"golang.org/x/crypto/hkdf"
+
 	"upspin.io/errors"
 	"upspin.io/upspin"
 )
@@ -280,6 +283,19 @@
 	return nil
 }
 
+// HKDF cryptographically mixes salt, info, and the Factotum secret and
+// writes the result to out, which may be of any length but is typically
+// 8 or 16 bytes. The result is unguessable without the secret, and does
+// not leak the secret. For more information, see package
+// golang.org/x/crypto/hkdf.
+func (f factotum) HKDF(salt, info, out []byte) error {
+	hash := sha256.New
+	secret := []byte(f.keys[f.current].private)
+	hkdf := hkdf.New(hash, secret, salt, info)
+	_, err := io.ReadFull(hkdf, out)
+	return err
+}
+
 // Pop derives a Factotum by switching default from the current to the previous key.
 func (f factotum) Pop() upspin.Factotum {
 	// Arbitrarily keep f.previous unchanged, so Pop() is idempotent.
diff --git a/vendor/upspin.io/flags/flags.go b/vendor/upspin.io/flags/flags.go
index 629bdb6..3102210 100644
--- a/vendor/upspin.io/flags/flags.go
+++ b/vendor/upspin.io/flags/flags.go
@@ -33,6 +33,7 @@
 	defaultHTTPSAddr  = ":443"
 	defaultLog        = "info"
 	defaultServerKind = "inprocess"
+	defaultCacheSize  = int64(5e9)
 )
 
 var (
@@ -77,6 +78,10 @@
 	// caches.
 	CacheDir = defaultCacheDir
 
+	// CacheSize ("cachesize") specifies the maximum bytes used by
+	// the various file caches. This is only approximate.
+	CacheSize = defaultCacheSize
+
 	// Config ("config") names the Upspin configuration file to use.
 	Config = defaultConfig
 
@@ -147,9 +152,20 @@
 		},
 	},
 	"cachedir": strVar(&CacheDir, "cachedir", CacheDir, "`directory` containing all file caches"),
-	"config":   strVar(&Config, "config", Config, "user's configuration `file`"),
-	"http":     strVar(&HTTPAddr, "http", HTTPAddr, "`address` for incoming insecure network connections"),
-	"https":    strVar(&HTTPSAddr, "https", HTTPSAddr, "`address` for incoming secure network connections"),
+	"cachesize": &flagVar{
+		set: func(fs *flag.FlagSet) {
+			fs.Int64Var(&CacheSize, "cachesize", defaultCacheSize, "maximum bytes for file caches")
+		},
+		arg: func() string {
+			if CacheSize == defaultCacheSize {
+				return ""
+			}
+			return fmt.Sprintf("-cachesize=%d", CacheSize)
+		},
+	},
+	"config": strVar(&Config, "config", Config, "user's configuration `file`"),
+	"http":   strVar(&HTTPAddr, "http", HTTPAddr, "`address` for incoming insecure network connections"),
+	"https":  strVar(&HTTPSAddr, "https", HTTPSAddr, "`address` for incoming secure network connections"),
 	"insecure": &flagVar{
 		set: func(fs *flag.FlagSet) {
 			fs.BoolVar(&InsecureHTTP, "insecure", false, "whether to serve insecure HTTP instead of HTTPS")
diff --git a/vendor/upspin.io/key/keygen/keygen.go b/vendor/upspin.io/key/keygen/keygen.go
index cadf6cc..3863be8 100644
--- a/vendor/upspin.io/key/keygen/keygen.go
+++ b/vendor/upspin.io/key/keygen/keygen.go
@@ -70,8 +70,12 @@
 
 // ValidSecretSeed reports whether a seed conforms to the proquint format.
 func ValidSecretSeed(seed string) bool {
-	// TODO: this could be more strict.
-	return len(seed) == 47 && seed[5] == '-'
+	if len(seed) != 47 {
+		return false
+	}
+
+	// Check if the seed can be converted to a secret and back to the same seed.
+	return seed == secretFromProquint(seed).proquint()
 }
 
 // writeKeyFile writes a single key to its file, removing the file
diff --git a/vendor/upspin.io/log/log.go b/vendor/upspin.io/log/log.go
index a73abe8..ae4644b 100644
--- a/vendor/upspin.io/log/log.go
+++ b/vendor/upspin.io/log/log.go
@@ -7,6 +7,7 @@
 package log // import "upspin.io/log"
 
 import (
+	"bytes"
 	"fmt"
 	"io"
 	"log"
@@ -80,6 +81,38 @@
 	return log.New(w, "", log.Ldate|log.Ltime|log.LUTC|log.Lmicroseconds)
 }
 
+// logBridge augments the Logger type with the io.Writer interface enabling
+// NewStdLogger to connect Go's standard library logger to the logger provided
+// by this package.
+type logBridge struct {
+	Logger
+}
+
+// Write parses the standard logging line (configured with log.Lshortfile) and
+// passes its message component to the logger provided by this package.
+func (lb logBridge) Write(b []byte) (n int, err error) {
+	var message string
+	// Split "f.go:42: message" into "f.go", "42", and "message".
+	parts := bytes.SplitN(b, []byte{':'}, 3)
+	if len(parts) != 3 || len(parts[0]) < 1 || len(parts[2]) < 1 {
+		message = fmt.Sprintf("bad log format: %s", b)
+	} else {
+		message = string(parts[2][1:]) // Skip leading space.
+	}
+	lb.Print(message)
+	return len(b), nil
+}
+
+// NewStdLogger creates a *log.Logger ("log" is from the Go standard library)
+// that forwards messages to the provided upspin logger using a logBridge. The
+// standard logger is configured with log.Lshortfile, this log line
+// format which is parsed to extract the log message (skipping the filename,
+// line number) to forward it to the provided upspin logger.
+func NewStdLogger(l Logger) *log.Logger {
+	lb := logBridge{l}
+	return log.New(lb, "", log.Lshortfile)
+}
+
 // Register connects an ExternalLogger to the default logger. This may only be
 // called once.
 func Register(e ExternalLogger) {
diff --git a/vendor/upspin.io/pack/ee/ee.go b/vendor/upspin.io/pack/ee/ee.go
index 60443ad..52f3c79 100644
--- a/vendor/upspin.io/pack/ee/ee.go
+++ b/vendor/upspin.io/pack/ee/ee.go
@@ -58,7 +58,6 @@
 	errNoWrappedKey     = errors.Str("no wrapped key for me")
 	errKeyLength        = errors.Str("wrong key length for AES-256")
 	errSignedNameNotSet = errors.Str("empty SignedName")
-	sig0                upspin.Signature // for returning error of correct type
 )
 
 var errNotOnCurve = errors.Str("a crypto attack was attempted against you; see safecurves.cr.yp.to/twist.html for details")
diff --git a/vendor/upspin.io/rpc/cache.go b/vendor/upspin.io/rpc/cache.go
deleted file mode 100644
index 6db03d8..0000000
--- a/vendor/upspin.io/rpc/cache.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2016 The Upspin Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package rpc
-
-import (
-	"strings"
-
-	"upspin.io/errors"
-	"upspin.io/rpc/local"
-	"upspin.io/upspin"
-)
-
-func CacheEndpoint(cfg upspin.Config) (*upspin.Endpoint, error) {
-	const op errors.Op = "rpc.CacheEndpoint"
-
-	v := cfg.Value("cache")
-	switch v {
-	case "", "n", "no", "false":
-		return nil, nil
-	case "y", "yes", "true":
-		name := "remote," + local.LocalName(cfg, "cacheserver") + ":80"
-		ep, err := upspin.ParseEndpoint(name)
-		if err != nil {
-			return nil, errors.E(op, errors.Internal, err)
-		}
-		return ep, nil
-	default:
-		if !strings.Contains(v, ",") {
-			v = "remote," + v
-		}
-		ep, err := upspin.ParseEndpoint(v)
-		if err != nil {
-			return nil, errors.E(op, errors.Invalid, err)
-		}
-		return ep, nil
-	}
-}
diff --git a/vendor/upspin.io/rpc/client.go b/vendor/upspin.io/rpc/client.go
index 67aac91..3b2113d 100644
--- a/vendor/upspin.io/rpc/client.go
+++ b/vendor/upspin.io/rpc/client.go
@@ -127,6 +127,7 @@
 			KeepAlive: 30 * time.Second,
 		}).DialContext,
 		MaxIdleConns:          100,
+		MaxIdleConnsPerHost:   10,
 		IdleConnTimeout:       90 * time.Second,
 		TLSHandshakeTimeout:   10 * time.Second,
 		ExpectContinueTimeout: 1 * time.Second,
diff --git a/vendor/upspin.io/rpc/local/local.go b/vendor/upspin.io/rpc/local/local.go
index d665ce9..5d1217f 100644
--- a/vendor/upspin.io/rpc/local/local.go
+++ b/vendor/upspin.io/rpc/local/local.go
@@ -7,39 +7,17 @@
 
 import (
 	"context"
-	"fmt"
 	"net"
-	"strings"
 
-	"upspin.io/upspin"
+	"upspin.io/config"
 )
 
-const localSuffix = ".localhost."
-
 type Dialer net.Dialer
 
-// LocalName constructs the host local name for a service.
-func LocalName(config upspin.Config, service string) string {
-	s := fmt.Sprintf("%s.%s%s", config.UserName(), service, localSuffix)
-	return strings.Replace(s, "@", ".", 1)
-}
-
-// IsLocal returns true if the address is host local.
-func IsLocal(address string) bool {
-	h, _, err := net.SplitHostPort(address)
-	if err != nil {
-		h = address
-	}
-	if !strings.HasSuffix(h, localSuffix) {
-		return false
-	}
-	return true
-}
-
 // DialContext dials a service. Use it instead of the standard net.DialContext
 // to use a local IPC for host names ending in localSuffix.
 func (d *Dialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
-	if IsLocal(address) {
+	if config.IsLocal(address) {
 		return d.DialContextLocal(ctx, network, address)
 	}
 	nd := net.Dialer(*d)
@@ -49,7 +27,7 @@
 // Listen listens for calls to a service. Use it instead of the standard net.Listen
 // to use a local IPC for host names ending in localSuffix.
 func Listen(network, address string) (net.Listener, error) {
-	if IsLocal(address) {
+	if config.IsLocal(address) {
 		return ListenLocal(address)
 	}
 	return net.Listen(network, address)
diff --git a/vendor/upspin.io/serverutil/addr.go b/vendor/upspin.io/serverutil/addr.go
index 9c16a8c..180d5bc 100644
--- a/vendor/upspin.io/serverutil/addr.go
+++ b/vendor/upspin.io/serverutil/addr.go
@@ -7,7 +7,7 @@
 import (
 	"net"
 
-	"upspin.io/rpc/local"
+	"upspin.io/config"
 )
 
 // IsLoopback returns true if the name only resolves to loopback addresses.
@@ -20,7 +20,7 @@
 		return true
 	}
 	// Check for local IPC.
-	if local.IsLocal(host) {
+	if config.IsLocal(host) {
 		return true
 	}
 	// Check for loopback network.
diff --git a/vendor/upspin.io/store/.gitignore b/vendor/upspin.io/store/.gitignore
deleted file mode 100644
index 19b887e..0000000
--- a/vendor/upspin.io/store/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*~
-c.out
diff --git a/vendor/upspin.io/store/remote/remote.go b/vendor/upspin.io/store/remote/remote.go
index 75fcb4e..3972822 100644
--- a/vendor/upspin.io/store/remote/remote.go
+++ b/vendor/upspin.io/store/remote/remote.go
@@ -127,11 +127,8 @@
 
 func dialCache(config upspin.Config, proxyFor upspin.Endpoint) (upspin.Service, error) {
 	// Are we using a cache?
-	ce, err := rpc.CacheEndpoint(config)
-	if err != nil {
-		return nil, err
-	}
-	if ce == nil {
+	ce := config.CacheEndpoint()
+	if ce.Unassigned() {
 		return nil, nil
 	}
 
diff --git a/vendor/upspin.io/upspin/code.go b/vendor/upspin.io/upspin/code.go
index b141c65..4aab6cd 100644
--- a/vendor/upspin.io/upspin/code.go
+++ b/vendor/upspin.io/upspin/code.go
@@ -402,29 +402,6 @@
 	return cons.remainder()
 }
 
-// getBytes unmarshals the byte slice at b (varint count followed by bytes)
-// and returns the slice followed by the remaining bytes.
-// If there is insufficient data, both return values will be nil.
-func getBytes(b []byte) (data, remaining []byte) {
-	u, n := binary.Varint(b)
-	// If n <= 0, Varint returned an error. Otherwise we know n <= len(b).
-	// We also test that u is good and u bytes remain in the buffer after the count.
-	if n <= 0 || u < 0 || len(b[n:]) < int(u) {
-		return nil, nil
-	}
-	return getNBytes(b[n:], int(u))
-}
-
-// getNBytes unmarshals n bytes from b and returns the slice followed by the
-// remaining bytes. If there is insufficient data, both return values will be
-// nil.
-func getNBytes(b []byte, n int) (data, remaining []byte) {
-	if len(b) < n {
-		return nil, nil
-	}
-	return b[:n], b[n:]
-}
-
 // String returns a default string representation of the time,
 // in the format similar to RFC 3339: "2006-01-02T15:04:05 UTC"
 // The time zone is always UTC.
diff --git a/vendor/upspin.io/upspin/endpoint.go b/vendor/upspin.io/upspin/endpoint.go
index cbad03a..92eda5a 100644
--- a/vendor/upspin.io/upspin/endpoint.go
+++ b/vendor/upspin.io/upspin/endpoint.go
@@ -98,3 +98,8 @@
 	*ep = *p
 	return nil
 }
+
+// Unassigned (sic) reports whether the endpoint is nil or has value Unassigned.
+func (ep *Endpoint) Unassigned() bool {
+	return ep == nil || ep.Transport == Unassigned
+}
diff --git a/vendor/upspin.io/upspin/proto/README b/vendor/upspin.io/upspin/proto/README
deleted file mode 100644
index 80472c4..0000000
--- a/vendor/upspin.io/upspin/proto/README
+++ /dev/null
@@ -1,23 +0,0 @@
-The upspin.io/upspin/proto package is generated from the upspin.proto file.
-
-To generate it, you need protoc 3.1.0 or later and the protoc-gen-go tools.
-
-Download the protoc build (version 3.x) for your platform
-and put it in your PATH.
-
-	https://github.com/google/protobuf/releases
-
-Use 'go get' to install the latest protoc-gen-go
-(git hash 6a1fa94 at time of writing, June 2017):
-
-	$ go get -u github.com/golang/protobuf/protoc-gen-go
-
-Then, run 'go generate' from this directory to re-generate the package:
-
-	$ go generate
-
-If you encounter unexpected diffs, such as changes to the
-"ProtoPackageIsVersion3" constants, then you may be using the wrong versions of
-protoc or protoc-gen-go.
-To debug, run 'which protoc' and 'which protoc-gen-go' and check that the
-commands in your path are the ones you just installed.
diff --git a/vendor/upspin.io/upspin/proto/upspin.proto b/vendor/upspin.io/upspin/proto/upspin.proto
deleted file mode 100644
index 8f8c59b..0000000
--- a/vendor/upspin.io/upspin/proto/upspin.proto
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright 2016 The Upspin Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-syntax = "proto3";
-
-package proto;
-
-// See proto.go for a description of these protocol buffers.
-
-// Endpoint mirrors upspin.Endpoint.
-message Endpoint {
-    int32 transport = 1;
-    string net_addr = 2;
-}
-
-// Location mirrors upspin.Location.
-message Location {
-    Endpoint endpoint = 1;
-    string reference = 2;
-}
-
-// Refdata mirrors upspin.Refdata.
-message Refdata {
-    string reference = 1;
-    bool volatile = 2;
-    int64 duration = 3;
-}
-
-// The Service interface.
-
-message EndpointRequest {
-}
-
-message EndpointResponse {
-    Endpoint endpoint = 1;
-}
-
-// The Store interface.
-
-message StoreGetRequest {
-    string reference = 1;
-}
-
-message StoreGetResponse {
-    bytes data = 1;
-    Refdata refdata = 2;
-    repeated Location locations = 3;
-    bytes error = 4;
-}
-
-message StorePutRequest {
-    bytes data = 1;
-}
-
-message StorePutResponse {
-    Refdata refdata = 1;
-    bytes error = 2;
-}
-
-message StoreDeleteRequest {
-    string reference = 1;
-}
-
-message StoreDeleteResponse {
-    bytes error = 1;
-}
-
-service Store {
-    // Service methods:
-    rpc Endpoint (EndpointRequest) returns (EndpointResponse) {}
-
-    rpc Get (StoreGetRequest) returns (StoreGetResponse) {}
-    rpc Put (StorePutRequest) returns (StorePutResponse) {}
-    rpc Delete (StoreDeleteRequest) returns (StoreDeleteResponse) {}
-}
-
-// The Key interface.
-
-message User {
-    string name = 1;
-    repeated Endpoint dirs = 2;
-    repeated Endpoint stores = 3;
-    string public_key = 4;
-}
-
-message KeyLookupRequest {
-    string user_name = 1;
-}
-
-message KeyLookupResponse {
-    User user = 1;
-    bytes error = 2;
-}
-
-message KeyPutRequest {
-    User user = 1;
-}
-
-message KeyPutResponse {
-    bytes error = 1;
-}
-
-service Key {
-    // Service methods:
-    rpc Endpoint (EndpointRequest) returns (EndpointResponse) {}
-
-    rpc Lookup (KeyLookupRequest) returns (KeyLookupResponse) {}
-    rpc Put(KeyPutRequest) returns (KeyPutResponse) {}
-}
-
-// The DirServer interface.
-// DirEntry values are stored as bytes, for simple and fast marshaling.
-// (The upspin.DirEntry type has a Marshal method that returns a []byte;
-// the alternative is to create a DirEntry proto message and copy the fields
-// from one struct to the other, which is needless busywork.)
-
-message EntryError {
-    bytes entry = 1;
-    bytes error = 2;
-}
-
-message EntriesError {
-    repeated bytes entries = 1;
-    bytes error = 2;
-}
-
-message DirLookupRequest {
-    string name = 1;
-}
-
-message DirPutRequest {
-    bytes entry = 1;
-}
-
-message DirGlobRequest {
-    string pattern = 1;
-}
-
-message DirDeleteRequest {
-    string name = 1;
-}
-
-message DirWhichAccessRequest {
-    string name = 1;
-}
-
-message DirWatchRequest {
-    string name = 1;
-    int64 sequence = 2;
-}
-
-// The first response in the stream is whether dir.Watch succeeded. If it
-// didn't, the error field contains the error and no streaming happens. If it
-// did succeed the error is nil and subsequent streams are from the Events
-// channel.
-message Event {
-    bytes entry = 1;
-    int64 sequence = 2;
-    bool delete = 3;
-    bytes error = 4;
-}
-
-service Dir{
-    // Service methods:
-    rpc Endpoint (EndpointRequest) returns (EndpointResponse) {}
-
-    rpc Lookup (DirLookupRequest) returns (EntryError) {}
-    rpc Put (DirPutRequest) returns (EntryError) {}
-    rpc Glob (DirGlobRequest) returns (EntriesError) {}
-    rpc Delete (DirDeleteRequest) returns (EntryError) {}
-    rpc WhichAccess (DirWhichAccessRequest) returns (EntryError) {}
-    rpc Watch (DirWatchRequest) returns (stream Event) {}
-}
diff --git a/vendor/upspin.io/upspin/upspin.go b/vendor/upspin.io/upspin/upspin.go
index 75c967d..975d7b6 100644
--- a/vendor/upspin.io/upspin/upspin.go
+++ b/vendor/upspin.io/upspin/upspin.go
@@ -144,6 +144,13 @@
 	// no longer than your key's curve order. Don't use without a security consult.
 	Sign(hash []byte) (Signature, error)
 
+	// HKDF cryptographically mixes salt, info, and the Factotum secret and
+	// writes the result to out, which may be of any length but is typically
+	// 8 or 16 bytes. The result is unguessable without the secret, and does
+	// not leak the secret. For more information, see package
+	// golang.org/x/crypto/hkdf.
+	HKDF(salt, info, out []byte) error
+
 	// Pop derives a Factotum that defaults to the previous key.
 	Pop() Factotum
 
@@ -827,6 +834,9 @@
 	// StoreEndpoint is the endpoint of the StoreServer in which to place new data items.
 	StoreEndpoint() Endpoint
 
+	// CacheEndpoint is the endpoint of the cache server between the client and the StoreServer and DirServers.
+	CacheEndpoint() Endpoint
+
 	// Value returns the value for the given configuration key.
 	Value(key string) string
 }