From 63ff349b62e5952c61b7623a4a979adbaf4c4b6a Mon Sep 17 00:00:00 2001
From: Ali Ok
Date: Wed, 20 Dec 2023 10:54:45 +0300
Subject: [PATCH] Add Knative hack scripts (#9)
* Add update-deps.sh
Signed-off-by: Ali Ok
* go mod tidy && go mod vendor
Signed-off-by: Ali Ok
* Run ./hack/update-deps.sh
Signed-off-by: Ali Ok
* Check in hack/tools.go
Signed-off-by: Ali Ok
---------
Signed-off-by: Ali Ok
---
go.mod | 18 +-
go.sum | 84 +-
hack/tools.go | 26 +
hack/update-deps.sh | 23 +
.../exporter/ocagent/LICENSE | 201 +
.../exporter/prometheus/LICENSE | 201 +
.../antlr/antlr4/runtime/Go/antlr/LICENSE | 26 +
.../github.com/beorn7/perks/quantile/LICENSE | 20 +
.../github.com/blang/semver/v4/LICENSE | 22 +
.../github.com/blendle/zapdriver/LICENSE | 15 +
.../opencensus-proto/gen-go/LICENSE | 202 +
.../github.com/cespare/xxhash/v2/LICENSE.txt | 22 +
.../cloudevents/sdk-go/sql/v2/LICENSE | 201 +
.../github.com/cloudevents/sdk-go/v2/LICENSE | 201 +
.../github.com/davecgh/go-spew/spew/LICENSE | 15 +
.../github.com/emicklei/go-restful/v3/LICENSE | 22 +
.../github.com/evanphx/json-patch/v5/LICENSE | 25 +
.../github.com/go-kit/log/LICENSE | 21 +
.../github.com/go-logfmt/logfmt/LICENSE | 22 +
.../github.com/go-logr/logr/LICENSE | 201 +
.../github.com/go-openapi/jsonpointer/LICENSE | 202 +
.../go-openapi/jsonreference/LICENSE | 202 +
.../github.com/go-openapi/swag/LICENSE | 202 +
.../github.com/gogo/protobuf/LICENSE | 35 +
.../github.com/golang/groupcache/lru/LICENSE | 191 +
.../github.com/golang/protobuf/LICENSE | 28 +
.../github.com/google/gnostic/LICENSE | 203 +
.../github.com/google/go-cmp/cmp/LICENSE | 27 +
.../github.com/google/gofuzz/LICENSE | 202 +
.../github.com/google/uuid/LICENSE | 27 +
.../github.com/gorilla/mux/LICENSE | 27 +
.../grpc-gateway/v2/LICENSE.txt | 27 +
.../hashicorp/golang-lru/.gitignore | 23 +
.../hashicorp/golang-lru/.golangci.yml | 30 +
.../github.com/hashicorp/golang-lru/2q.go | 222 +
.../github.com/hashicorp/golang-lru/LICENSE | 364 +
.../github.com/hashicorp/golang-lru/README.md | 7 +
.../github.com/hashicorp/golang-lru/arc.go | 256 +
.../github.com/hashicorp/golang-lru/doc.go | 21 +
.../github.com/hashicorp/golang-lru/lru.go | 231 +
.../hashicorp/golang-lru/simplelru/lru.go | 177 +
.../golang-lru/simplelru/lru_interface.go | 40 +
.../hashicorp/golang-lru/testing.go | 16 +
.../github.com/imdario/mergo/LICENSE | 28 +
.../github.com/josharian/intern/license.md | 21 +
.../github.com/json-iterator/go/LICENSE | 21 +
.../kelseyhightower/envconfig/LICENSE | 19 +
.../github.com/mailru/easyjson/LICENSE | 7 +
.../v2/pbutil/LICENSE | 201 +
.../v2/pbutil/NOTICE | 1 +
.../github.com/modern-go/concurrent/LICENSE | 201 +
.../github.com/modern-go/reflect2/LICENSE | 201 +
.../github.com/munnerz/goautoneg/LICENSE | 31 +
.../github.com/pkg/errors/LICENSE | 23 +
.../client_golang/prometheus/LICENSE | 201 +
.../client_golang/prometheus/NOTICE | 23 +
.../prometheus/client_model/go/LICENSE | 201 +
.../prometheus/client_model/go/NOTICE | 5 +
.../github.com/prometheus/common/LICENSE | 201 +
.../github.com/prometheus/common/NOTICE | 5 +
.../bitbucket.org/ww/goautoneg/README.txt | 67 +
.../github.com/prometheus/procfs/LICENSE | 201 +
.../github.com/prometheus/procfs/NOTICE | 7 +
.../prometheus/statsd_exporter/pkg/LICENSE | 201 +
.../prometheus/statsd_exporter/pkg/NOTICE | 5 +
.../github.com/rickb777/date/period/LICENSE | 27 +
.../github.com/rickb777/plural/LICENSE | 27 +
.../github.com/robfig/cron/v3/LICENSE | 21 +
.../github.com/spf13/pflag/LICENSE | 28 +
.../VENDOR-LICENSE/go.opencensus.io/LICENSE | 202 +
.../go.uber.org/automaxprocs/LICENSE | 19 +
.../go.uber.org/multierr/LICENSE.txt | 19 +
.../go.uber.org/zap/LICENSE.txt | 19 +
.../VENDOR-LICENSE/golang.org/x/net/LICENSE | 27 +
.../golang.org/x/oauth2/LICENSE | 27 +
.../VENDOR-LICENSE/golang.org/x/sync/LICENSE | 27 +
.../golang.org/x/sys/unix/LICENSE | 27 +
.../VENDOR-LICENSE/golang.org/x/term/LICENSE | 27 +
.../VENDOR-LICENSE/golang.org/x/text/LICENSE | 27 +
.../golang.org/x/time/rate/LICENSE | 27 +
.../gomodules.xyz/jsonpatch/v2/LICENSE | 202 +
.../api/support/bundler/LICENSE | 27 +
.../genproto/googleapis/api/httpbody/LICENSE | 202 +
.../genproto/googleapis/rpc/status/LICENSE | 202 +
.../genproto/protobuf/field_mask/LICENSE | 202 +
.../google.golang.org/grpc/LICENSE | 202 +
.../google.golang.org/grpc/NOTICE.txt | 13 +
.../google.golang.org/protobuf/LICENSE | 27 +
.../VENDOR-LICENSE/gopkg.in/inf.v0/LICENSE | 28 +
.../VENDOR-LICENSE/gopkg.in/yaml.v2/LICENSE | 201 +
.../VENDOR-LICENSE/gopkg.in/yaml.v2/NOTICE | 13 +
.../VENDOR-LICENSE/gopkg.in/yaml.v3/LICENSE | 50 +
.../VENDOR-LICENSE/gopkg.in/yaml.v3/NOTICE | 13 +
third_party/VENDOR-LICENSE/k8s.io/api/LICENSE | 202 +
.../pkg/apis/apiextensions/LICENSE | 202 +
.../k8s.io/apimachinery/pkg/LICENSE | 202 +
.../third_party/forked/golang/LICENSE | 27 +
.../VENDOR-LICENSE/k8s.io/client-go/LICENSE | 202 +
.../VENDOR-LICENSE/k8s.io/klog/v2/LICENSE | 191 +
.../k8s.io/kube-openapi/pkg/LICENSE | 202 +
.../go-json-experiment/json/LICENSE | 27 +
.../kube-openapi/pkg/validation/spec/LICENSE | 202 +
.../VENDOR-LICENSE/k8s.io/utils/LICENSE | 202 +
.../third_party/forked/golang/net/LICENSE | 27 +
.../backstage-plugins/backends/LICENSE | 201 +
.../knative.dev/eventing/pkg/LICENSE | 201 +
.../VENDOR-LICENSE/knative.dev/pkg/LICENSE | 201 +
.../VENDOR-LICENSE/sigs.k8s.io/json/LICENSE | 238 +
.../structured-merge-diff/v4/LICENSE | 201 +
.../VENDOR-LICENSE/sigs.k8s.io/yaml/LICENSE | 306 +
.../sigs.k8s.io/yaml/goyaml.v2/LICENSE | 201 +
.../sigs.k8s.io/yaml/goyaml.v2/NOTICE | 13 +
.../exporter/zipkin/.travis.yml | 17 +
.../exporter/zipkin/LICENSE | 201 +
.../exporter/zipkin/Makefile | 95 +
.../exporter/zipkin/README.md | 14 +
.../exporter/zipkin/zipkin.go | 197 +
.../gen-crd-api-reference-docs/.gitignore | 16 +
.../.goreleaser.yml | 24 +
.../gen-crd-api-reference-docs/.travis.yml | 32 +
.../ahmetb/gen-crd-api-reference-docs/LICENSE | 201 +
.../gen-crd-api-reference-docs/README.md | 80 +
.../example-config.json | 28 +
.../ahmetb/gen-crd-api-reference-docs/main.go | 701 +
.../template/members.tpl | 48 +
.../template/pkg.tpl | 49 +
.../template/placeholder.go | 2 +
.../template/type.tpl | 81 +
.../cloudevents/conformance/LICENSE | 201 +
.../conformance/pkg/event/event.go | 36 +
.../cloudevents/conformance/pkg/event/read.go | 124 +
.../conformance/pkg/event/write.go | 9 +
.../cloudevents/conformance/pkg/http/http.go | 271 +
.../cloudevents/conformance/pkg/http/raw.go | 27 +
.../cloudevents/sdk-go/v2/test/doc.go | 9 +
.../sdk-go/v2/test/event_asserts.go | 34 +
.../sdk-go/v2/test/event_matchers.go | 304 +
.../cloudevents/sdk-go/v2/test/event_mocks.go | 99 +
.../cloudevents/sdk-go/v2/test/helpers.go | 99 +
vendor/github.com/google/mako/LICENSE | 204 +
.../threshold_analyzer.pb.go | 420 +
.../utest_analyzer.pb.go | 495 +
.../window_deviation.pb.go | 855 ++
.../quickstore_go_proto/quickstore.pb.go | 439 +
.../mako/spec/proto/mako_go_proto/mako.pb.go | 4052 ++++++
.../v2/internal/httprule/BUILD.bazel | 35 -
.../grpc-gateway/v2/runtime/BUILD.bazel | 97 -
.../grpc-gateway/v2/utilities/BUILD.bazel | 31 -
.../openzipkin/zipkin-go/.gitattributes | 1 +
.../openzipkin/zipkin-go/.gitignore | 26 +
.../openzipkin/zipkin-go/.golangci.yml | 30 +
.../github.com/openzipkin/zipkin-go/LICENSE | 201 +
.../github.com/openzipkin/zipkin-go/Makefile | 44 +
.../github.com/openzipkin/zipkin-go/README.md | 116 +
.../openzipkin/zipkin-go/context.go | 63 +
vendor/github.com/openzipkin/zipkin-go/doc.go | 20 +
.../openzipkin/zipkin-go/endpoint.go | 81 +
.../zipkin-go/idgenerator/idgenerator.go | 130 +
.../openzipkin/zipkin-go/model/annotation.go | 60 +
.../openzipkin/zipkin-go/model/doc.go | 23 +
.../openzipkin/zipkin-go/model/endpoint.go | 50 +
.../openzipkin/zipkin-go/model/kind.go | 27 +
.../openzipkin/zipkin-go/model/span.go | 161 +
.../openzipkin/zipkin-go/model/span_id.go | 44 +
.../openzipkin/zipkin-go/model/traceid.go | 75 +
.../github.com/openzipkin/zipkin-go/noop.go | 48 +
.../zipkin-go/propagation/propagation.go | 30 +
.../zipkin-go/reporter/http/http.go | 275 +
.../openzipkin/zipkin-go/reporter/reporter.go | 41 +
.../zipkin-go/reporter/serializer.go | 42 +
.../github.com/openzipkin/zipkin-go/sample.go | 127 +
.../github.com/openzipkin/zipkin-go/span.go | 58 +
.../zipkin-go/span_implementation.go | 101 +
.../openzipkin/zipkin-go/span_options.go | 88 +
.../github.com/openzipkin/zipkin-go/tags.go | 37 +
.../github.com/openzipkin/zipkin-go/tracer.go | 200 +
.../openzipkin/zipkin-go/tracer_options.go | 138 +
vendor/github.com/pmezard/go-difflib/LICENSE | 27 +
.../pmezard/go-difflib/difflib/difflib.go | 772 ++
.../russross/blackfriday/v2/.gitignore | 8 +
.../russross/blackfriday/v2/.travis.yml | 17 +
.../russross/blackfriday/v2/LICENSE.txt | 29 +
.../russross/blackfriday/v2/README.md | 335 +
.../russross/blackfriday/v2/block.go | 1612 +++
.../github.com/russross/blackfriday/v2/doc.go | 46 +
.../russross/blackfriday/v2/entities.go | 2236 +++
.../github.com/russross/blackfriday/v2/esc.go | 70 +
.../russross/blackfriday/v2/html.go | 952 ++
.../russross/blackfriday/v2/inline.go | 1228 ++
.../russross/blackfriday/v2/markdown.go | 950 ++
.../russross/blackfriday/v2/node.go | 360 +
.../russross/blackfriday/v2/smartypants.go | 457 +
vendor/github.com/stretchr/testify/LICENSE | 21 +
.../testify/assert/assertion_compare.go | 458 +
.../assert/assertion_compare_can_convert.go | 16 +
.../assert/assertion_compare_legacy.go | 16 +
.../testify/assert/assertion_format.go | 763 ++
.../testify/assert/assertion_format.go.tmpl | 5 +
.../testify/assert/assertion_forward.go | 1514 +++
.../testify/assert/assertion_forward.go.tmpl | 5 +
.../testify/assert/assertion_order.go | 81 +
.../stretchr/testify/assert/assertions.go | 1868 +++
.../github.com/stretchr/testify/assert/doc.go | 45 +
.../stretchr/testify/assert/errors.go | 10 +
.../testify/assert/forward_assertions.go | 16 +
.../testify/assert/http_assertions.go | 162 +
.../stretchr/testify/require/doc.go | 28 +
.../testify/require/forward_requirements.go | 16 +
.../stretchr/testify/require/require.go | 1935 +++
.../stretchr/testify/require/require.go.tmpl | 6 +
.../testify/require/require_forward.go | 1515 +++
.../testify/require/require_forward.go.tmpl | 5 +
.../stretchr/testify/require/requirements.go | 29 +
.../go.opencensus.io/plugin/ochttp/client.go | 117 +
.../plugin/ochttp/client_stats.go | 143 +
vendor/go.opencensus.io/plugin/ochttp/doc.go | 19 +
.../plugin/ochttp/propagation/b3/b3.go | 123 +
.../propagation/tracecontext/propagation.go | 202 +
.../go.opencensus.io/plugin/ochttp/route.go | 61 +
.../go.opencensus.io/plugin/ochttp/server.go | 455 +
.../ochttp/span_annotating_client_trace.go | 169 +
.../go.opencensus.io/plugin/ochttp/stats.go | 292 +
.../go.opencensus.io/plugin/ochttp/trace.go | 244 +
.../plugin/ochttp/wrapped_body.go | 44 +
vendor/go.uber.org/atomic/.codecov.yml | 19 +
vendor/go.uber.org/atomic/.gitignore | 15 +
vendor/go.uber.org/atomic/CHANGELOG.md | 100 +
vendor/go.uber.org/atomic/LICENSE.txt | 19 +
vendor/go.uber.org/atomic/Makefile | 79 +
vendor/go.uber.org/atomic/README.md | 63 +
vendor/go.uber.org/atomic/bool.go | 81 +
vendor/go.uber.org/atomic/bool_ext.go | 53 +
vendor/go.uber.org/atomic/doc.go | 23 +
vendor/go.uber.org/atomic/duration.go | 82 +
vendor/go.uber.org/atomic/duration_ext.go | 40 +
vendor/go.uber.org/atomic/error.go | 51 +
vendor/go.uber.org/atomic/error_ext.go | 39 +
vendor/go.uber.org/atomic/float64.go | 77 +
vendor/go.uber.org/atomic/float64_ext.go | 69 +
vendor/go.uber.org/atomic/gen.go | 27 +
vendor/go.uber.org/atomic/int32.go | 102 +
vendor/go.uber.org/atomic/int64.go | 102 +
vendor/go.uber.org/atomic/nocmp.go | 35 +
vendor/go.uber.org/atomic/string.go | 54 +
vendor/go.uber.org/atomic/string_ext.go | 45 +
vendor/go.uber.org/atomic/time.go | 55 +
vendor/go.uber.org/atomic/time_ext.go | 36 +
vendor/go.uber.org/atomic/uint32.go | 102 +
vendor/go.uber.org/atomic/uint64.go | 102 +
vendor/go.uber.org/atomic/uintptr.go | 102 +
vendor/go.uber.org/atomic/unsafe_pointer.go | 58 +
vendor/go.uber.org/atomic/value.go | 31 +
vendor/golang.org/x/mod/LICENSE | 27 +
vendor/golang.org/x/mod/PATENTS | 22 +
.../x/mod/internal/lazyregexp/lazyre.go | 78 +
vendor/golang.org/x/mod/module/module.go | 841 ++
vendor/golang.org/x/mod/module/pseudo.go | 250 +
vendor/golang.org/x/mod/semver/semver.go | 401 +
vendor/golang.org/x/tools/LICENSE | 27 +
vendor/golang.org/x/tools/PATENTS | 22 +
.../x/tools/go/ast/astutil/enclosing.go | 636 +
.../x/tools/go/ast/astutil/imports.go | 485 +
.../x/tools/go/ast/astutil/rewrite.go | 488 +
.../golang.org/x/tools/go/ast/astutil/util.go | 18 +
vendor/golang.org/x/tools/imports/forward.go | 77 +
.../x/tools/internal/event/core/event.go | 85 +
.../x/tools/internal/event/core/export.go | 70 +
.../x/tools/internal/event/core/fast.go | 77 +
.../golang.org/x/tools/internal/event/doc.go | 7 +
.../x/tools/internal/event/event.go | 127 +
.../x/tools/internal/event/keys/keys.go | 564 +
.../x/tools/internal/event/keys/standard.go | 22 +
.../x/tools/internal/event/label/label.go | 215 +
.../x/tools/internal/event/tag/tag.go | 59 +
.../x/tools/internal/gocommand/invoke.go | 465 +
.../x/tools/internal/gocommand/vendor.go | 109 +
.../x/tools/internal/gocommand/version.go | 71 +
.../x/tools/internal/gopathwalk/walk.go | 331 +
.../x/tools/internal/imports/fix.go | 1767 +++
.../x/tools/internal/imports/imports.go | 356 +
.../x/tools/internal/imports/mod.go | 723 +
.../x/tools/internal/imports/mod_cache.go | 236 +
.../x/tools/internal/imports/sortimports.go | 297 +
.../x/tools/internal/imports/zstdlib.go | 11345 ++++++++++++++++
.../x/tools/internal/typeparams/common.go | 204 +
.../x/tools/internal/typeparams/coretype.go | 122 +
.../internal/typeparams/enabled_go117.go | 12 +
.../internal/typeparams/enabled_go118.go | 15 +
.../x/tools/internal/typeparams/normalize.go | 218 +
.../x/tools/internal/typeparams/termlist.go | 163 +
.../internal/typeparams/typeparams_go117.go | 197 +
.../internal/typeparams/typeparams_go118.go | 151 +
.../x/tools/internal/typeparams/typeterm.go | 169 +
.../k8s.io/apimachinery/pkg/api/errors/OWNERS | 17 -
.../k8s.io/apimachinery/pkg/api/meta/OWNERS | 14 -
.../apimachinery/pkg/api/resource/OWNERS | 11 -
.../apimachinery/pkg/apis/meta/v1/OWNERS | 16 -
.../apimachinery/pkg/util/mergepatch/OWNERS | 6 -
.../pkg/util/strategicpatch/OWNERS | 9 -
.../third_party/forked/golang/json/OWNERS | 6 -
vendor/k8s.io/client-go/openapi/OWNERS | 4 -
.../pkg/apis/clientauthentication/OWNERS | 8 -
vendor/k8s.io/client-go/rest/OWNERS | 14 -
vendor/k8s.io/client-go/tools/auth/OWNERS | 8 -
vendor/k8s.io/client-go/tools/cache/OWNERS | 28 -
.../client-go/tools/leaderelection/OWNERS | 11 -
vendor/k8s.io/client-go/tools/metrics/OWNERS | 5 -
vendor/k8s.io/client-go/tools/record/OWNERS | 6 -
vendor/k8s.io/client-go/transport/OWNERS | 8 -
vendor/k8s.io/client-go/util/cert/OWNERS | 8 -
vendor/k8s.io/client-go/util/keyutil/OWNERS | 6 -
vendor/k8s.io/client-go/util/retry/OWNERS | 4 -
vendor/k8s.io/code-generator/CONTRIBUTING.md | 7 +
vendor/k8s.io/code-generator/LICENSE | 202 +
vendor/k8s.io/code-generator/README.md | 25 +
.../k8s.io/code-generator/SECURITY_CONTACTS | 16 +
.../cmd/applyconfiguration-gen/args/args.go | 81 +
.../args/externaltypes.go | 122 +
.../generators/applyconfiguration.go | 423 +
.../generators/internal.go | 99 +
.../generators/jsontagutil.go | 99 +
.../generators/openapi.go | 198 +
.../generators/packages.go | 297 +
.../generators/refgraph.go | 179 +
.../generators/types.go | 33 +
.../applyconfiguration-gen/generators/util.go | 163 +
.../cmd/applyconfiguration-gen/main.go | 54 +
.../code-generator/cmd/client-gen/README.md | 2 +
.../cmd/client-gen/args/args.go | 133 +
.../cmd/client-gen/args/gvpackages.go | 173 +
.../cmd/client-gen/args/gvtype.go | 110 +
.../client-gen/generators/client_generator.go | 393 +
.../generators/fake/fake_client_generator.go | 131 +
.../fake/generator_fake_for_clientset.go | 170 +
.../fake/generator_fake_for_group.go | 130 +
.../fake/generator_fake_for_type.go | 570 +
.../generators/generator_for_clientset.go | 209 +
.../generators/generator_for_expansion.go | 54 +
.../generators/generator_for_group.go | 267 +
.../generators/generator_for_type.go | 760 ++
.../generators/scheme/generator_for_scheme.go | 187 +
.../client-gen/generators/util/gvpackages.go | 30 +
.../cmd/client-gen/generators/util/tags.go | 344 +
.../code-generator/cmd/client-gen/main.go | 63 +
.../cmd/client-gen/path/path.go | 31 +
.../cmd/client-gen/types/helpers.go | 121 +
.../cmd/client-gen/types/types.go | 97 +
.../cmd/conversion-gen/args/args.go | 90 +
.../conversion-gen/generators/conversion.go | 1222 ++
.../code-generator/cmd/conversion-gen/main.go | 139 +
.../cmd/deepcopy-gen/args/args.go | 54 +
.../code-generator/cmd/deepcopy-gen/main.go | 81 +
.../cmd/defaulter-gen/args/args.go | 54 +
.../code-generator/cmd/defaulter-gen/main.go | 77 +
.../cmd/go-to-protobuf/.gitignore | 1 +
.../code-generator/cmd/go-to-protobuf/main.go | 41 +
.../cmd/go-to-protobuf/protobuf/cmd.go | 480 +
.../cmd/go-to-protobuf/protobuf/generator.go | 773 ++
.../go-to-protobuf/protobuf/import_tracker.go | 50 +
.../cmd/go-to-protobuf/protobuf/namer.go | 208 +
.../cmd/go-to-protobuf/protobuf/package.go | 215 +
.../cmd/go-to-protobuf/protobuf/parser.go | 463 +
.../cmd/go-to-protobuf/protobuf/tags.go | 33 +
.../code-generator/cmd/import-boss/.gitignore | 1 +
.../code-generator/cmd/import-boss/README.md | 97 +
.../code-generator/cmd/import-boss/main.go | 45 +
.../cmd/informer-gen/args/args.go | 83 +
.../cmd/informer-gen/generators/factory.go | 330 +
.../generators/factoryinterface.go | 90 +
.../cmd/informer-gen/generators/generic.go | 184 +
.../informer-gen/generators/groupinterface.go | 118 +
.../cmd/informer-gen/generators/informer.go | 186 +
.../cmd/informer-gen/generators/packages.go | 347 +
.../cmd/informer-gen/generators/types.go | 42 +
.../generators/versioninterface.go | 109 +
.../code-generator/cmd/informer-gen/main.go | 60 +
.../cmd/lister-gen/args/args.go | 64 +
.../cmd/lister-gen/generators/expansion.go | 67 +
.../cmd/lister-gen/generators/lister.go | 376 +
.../code-generator/cmd/lister-gen/main.go | 57 +
.../code-generator/cmd/openapi-gen/main.go | 57 +
.../cmd/register-gen/args/args.go | 39 +
.../cmd/register-gen/generators/packages.go | 137 +
.../generators/register_external.go | 117 +
.../code-generator/cmd/register-gen/main.go | 49 +
.../code-generator/cmd/set-gen/.gitignore | 1 +
.../k8s.io/code-generator/cmd/set-gen/main.go | 53 +
.../k8s.io/code-generator/code-of-conduct.md | 3 +
vendor/k8s.io/code-generator/doc.go | 17 +
.../k8s.io/code-generator/generate-groups.sh | 118 +
.../generate-internal-groups.sh | 138 +
.../code-generator/pkg/namer/tag-override.go | 58 +
.../k8s.io/code-generator/pkg/util/build.go | 60 +
.../pkg/util/plural_exceptions.go | 37 +
.../third_party/forked/golang/LICENSE | 27 +
.../third_party/forked/golang/PATENTS | 22 +
.../third_party/forked/golang/reflect/type.go | 91 +
vendor/k8s.io/code-generator/tools.go | 37 +
vendor/k8s.io/gengo/LICENSE | 202 +
vendor/k8s.io/gengo/args/args.go | 218 +
.../deepcopy-gen/generators/deepcopy.go | 935 ++
.../defaulter-gen/generators/defaulter.go | 1185 ++
.../import-boss/generators/import_restrict.go | 419 +
.../gengo/examples/set-gen/generators/sets.go | 378 +
.../gengo/examples/set-gen/generators/tags.go | 33 +
.../gengo/examples/set-gen/sets/byte.go | 221 +
.../k8s.io/gengo/examples/set-gen/sets/doc.go | 20 +
.../gengo/examples/set-gen/sets/empty.go | 23 +
.../k8s.io/gengo/examples/set-gen/sets/int.go | 221 +
.../gengo/examples/set-gen/sets/int64.go | 221 +
.../gengo/examples/set-gen/sets/string.go | 221 +
.../gengo/generator/default_generator.go | 62 +
.../k8s.io/gengo/generator/default_package.go | 75 +
vendor/k8s.io/gengo/generator/doc.go | 31 +
.../k8s.io/gengo/generator/error_tracker.go | 50 +
vendor/k8s.io/gengo/generator/execute.go | 329 +
vendor/k8s.io/gengo/generator/generator.go | 259 +
.../k8s.io/gengo/generator/import_tracker.go | 70 +
.../k8s.io/gengo/generator/snippet_writer.go | 154 +
.../gengo/generator/transitive_closure.go | 65 +
vendor/k8s.io/gengo/namer/doc.go | 31 +
vendor/k8s.io/gengo/namer/import_tracker.go | 121 +
vendor/k8s.io/gengo/namer/namer.go | 394 +
vendor/k8s.io/gengo/namer/order.go | 72 +
vendor/k8s.io/gengo/namer/plural_namer.go | 120 +
vendor/k8s.io/gengo/parser/doc.go | 19 +
vendor/k8s.io/gengo/parser/parse.go | 925 ++
vendor/k8s.io/gengo/types/comments.go | 82 +
vendor/k8s.io/gengo/types/doc.go | 19 +
vendor/k8s.io/gengo/types/flatten.go | 57 +
vendor/k8s.io/gengo/types/types.go | 537 +
vendor/k8s.io/klog/.travis.yml | 16 +
vendor/k8s.io/klog/CONTRIBUTING.md | 22 +
vendor/k8s.io/klog/LICENSE | 191 +
vendor/k8s.io/klog/README.md | 97 +
vendor/k8s.io/klog/RELEASE.md | 9 +
vendor/k8s.io/klog/SECURITY_CONTACTS | 20 +
vendor/k8s.io/klog/code-of-conduct.md | 3 +
vendor/k8s.io/klog/klog.go | 1308 ++
vendor/k8s.io/klog/klog_file.go | 139 +
vendor/k8s.io/klog/v2/OWNERS | 14 -
.../kube-openapi/cmd/openapi-gen/args/args.go | 76 +
.../kube-openapi/pkg/generators/README.md | 49 +
.../kube-openapi/pkg/generators/api_linter.go | 219 +
.../kube-openapi/pkg/generators/config.go | 91 +
.../kube-openapi/pkg/generators/enum.go | 162 +
.../kube-openapi/pkg/generators/extension.go | 202 +
.../kube-openapi/pkg/generators/openapi.go | 825 ++
.../kube-openapi/pkg/generators/rules/doc.go | 23 +
.../pkg/generators/rules/idl_tag.go | 53 +
.../pkg/generators/rules/names_match.go | 178 +
.../generators/rules/omitempty_match_case.go | 64 +
.../kube-openapi/pkg/generators/union.go | 207 +
.../k8s.io/kube-openapi/pkg/util/proto/OWNERS | 2 -
.../kube-openapi/pkg/util/sets/empty.go | 27 +
.../kube-openapi/pkg/util/sets/string.go | 207 +
vendor/k8s.io/utils/pointer/OWNERS | 10 -
vendor/knative.dev/eventing/hack/README.md | 113 +
.../eventing/hack/create-kind-cluster.sh | 46 +
.../eventing/hack/generate-yamls.sh | 139 +
vendor/knative.dev/eventing/hack/install.sh | 30 +
.../hack/reference-docs-gen-config.json | 49 +
vendor/knative.dev/eventing/hack/release.sh | 35 +
vendor/knative.dev/eventing/hack/tools.go | 40 +
.../eventing/hack/update-cert-manager.sh | 14 +
.../eventing/hack/update-checksums.sh | 30 +
.../eventing/hack/update-codegen.sh | 72 +
.../knative.dev/eventing/hack/update-deps.sh | 25 +
.../eventing/hack/update-reference-docs.sh | 37 +
.../eventing/hack/verify-codegen.sh | 80 +
vendor/knative.dev/hack/CODE-OF-CONDUCT.md | 3 +
vendor/knative.dev/hack/LICENSE | 201 +
vendor/knative.dev/hack/README.md | 347 +
vendor/knative.dev/hack/codegen-library.sh | 35 +
vendor/knative.dev/hack/e2e-tests.sh | 188 +
vendor/knative.dev/hack/embed.go | 24 +
vendor/knative.dev/hack/go.work | 8 +
vendor/knative.dev/hack/infra-library.sh | 166 +
vendor/knative.dev/hack/library.sh | 1034 ++
vendor/knative.dev/hack/microbenchmarks.sh | 89 +
vendor/knative.dev/hack/performance-tests.sh | 160 +
vendor/knative.dev/hack/presubmit-tests.sh | 370 +
vendor/knative.dev/hack/release.sh | 813 ++
.../knative.dev/hack/shellcheck-presubmit.sh | 34 +
.../storageversion/cmd/migrate/main.go | 107 +
.../apiextensions/storageversion/migrator.go | 126 +
vendor/knative.dev/pkg/apis/OWNERS | 15 -
vendor/knative.dev/pkg/apis/duck/OWNERS | 8 -
.../codegen/cmd/injection-gen/args/args.go | 69 +
.../cmd/injection-gen/generators/client.go | 119 +
.../generators/comment_parser.go | 96 +
.../cmd/injection-gen/generators/duck.go | 134 +
.../cmd/injection-gen/generators/factory.go | 118 +
.../injection-gen/generators/fake_client.go | 122 +
.../cmd/injection-gen/generators/fake_duck.go | 104 +
.../injection-gen/generators/fake_factory.go | 109 +
.../generators/fake_filtered_factory.go | 132 +
.../generators/fake_filtered_informer.go | 133 +
.../injection-gen/generators/fake_informer.go | 117 +
.../generators/filtered_factory.go | 143 +
.../generators/filtered_informer.go | 145 +
.../cmd/injection-gen/generators/informer.go | 131 +
.../injection-gen/generators/namesystems.go | 101 +
.../cmd/injection-gen/generators/packages.go | 743 +
.../generators/reconciler_controller.go | 341 +
.../generators/reconciler_controller_stub.go | 165 +
.../generators/reconciler_reconciler.go | 706 +
.../generators/reconciler_reconciler_stub.go | 150 +
.../generators/reconciler_state.go | 166 +
.../pkg/codegen/cmd/injection-gen/main.go | 55 +
.../pkg/configmap/hash-gen/main.go | 140 +
vendor/knative.dev/pkg/controller/OWNERS | 7 -
.../knative.dev/pkg/hack/generate-knative.sh | 92 +
vendor/knative.dev/pkg/hack/tools.go | 33 +
vendor/knative.dev/pkg/hack/update-codegen.sh | 90 +
vendor/knative.dev/pkg/hack/update-deps.sh | 23 +
.../knative.dev/pkg/hack/update-k8s-deps.sh | 29 +
vendor/knative.dev/pkg/hack/verify-codegen.sh | 84 +
vendor/knative.dev/pkg/kflag/doc.go | 18 +
vendor/knative.dev/pkg/kflag/set.go | 42 +
.../pkg/leaderelection/chaosduck/main.go | 165 +
vendor/knative.dev/pkg/reconciler/OWNERS | 7 -
vendor/knative.dev/pkg/resolver/OWNERS | 8 -
vendor/knative.dev/pkg/test/helpers/dir.go | 62 +
vendor/knative.dev/pkg/test/helpers/dryrun.go | 32 +
vendor/knative.dev/pkg/test/helpers/error.go | 41 +
vendor/knative.dev/pkg/test/helpers/name.go | 135 +
.../knative.dev/pkg/test/logging/logging.go | 177 +
.../pkg/test/mako/config/benchmark.go | 75 +
.../pkg/test/mako/config/configmap.go | 93 +
.../pkg/test/mako/config/environment.go | 66 +
.../knative.dev/pkg/test/mako/config/slack.go | 56 +
.../pkg/test/mako/stub-sidecar/main.go | 169 +
.../test/mako/stub-sidecar/read_results.sh | 74 +
vendor/knative.dev/pkg/test/monitoring/doc.go | 32 +
.../pkg/test/monitoring/monitoring.go | 84 +
.../knative.dev/pkg/test/security/security.go | 70 +
vendor/knative.dev/pkg/test/zipkin/doc.go | 40 +
vendor/knative.dev/pkg/test/zipkin/util.go | 259 +
.../knative.dev/pkg/third_party/mako/LICENSE | 204 +
.../quickstore_go_proto/quickstore.pb.go | 374 +
vendor/knative.dev/pkg/tracing/config/doc.go | 21 +
.../knative.dev/pkg/tracing/config/tracing.go | 158 +
.../tracing/config/zz_generated.deepcopy.go | 38 +
vendor/knative.dev/pkg/tracing/http.go | 57 +
vendor/knative.dev/pkg/tracing/opencensus.go | 205 +
.../propagation/http_format_sequence.go | 53 +
.../propagation/tracecontextb3/http_format.go | 61 +
vendor/knative.dev/pkg/tracing/setup.go | 127 +
vendor/knative.dev/pkg/tracing/zipkin.go | 69 +
vendor/knative.dev/pkg/webhook/OWNERS | 7 -
vendor/knative.dev/reconciler-test/LICENSE | 201 +
.../reconciler-test/cmd/eventshub/main.go | 56 +
.../pkg/environment/execution.go | 117 +
.../reconciler-test/pkg/environment/flags.go | 141 +
.../reconciler-test/pkg/environment/images.go | 213 +
.../pkg/environment/interfaces.go | 100 +
.../reconciler-test/pkg/environment/istio.go | 65 +
.../pkg/environment/logging.go | 47 +
.../reconciler-test/pkg/environment/magic.go | 510 +
.../pkg/environment/namespace.go | 156 +
.../pkg/environment/standard.go | 110 +
.../reconciler-test/pkg/environment/t.go | 118 +
.../pkg/environment/timings.go | 55 +
.../pkg/eventshub/102-service.yaml | 33 +
.../pkg/eventshub/103-pod.yaml | 106 +
.../pkg/eventshub/104-forwarder.yaml | 50 +
.../pkg/eventshub/105-certificate-ca.yaml | 33 +
.../eventshub/105-certificate-service.yaml | 53 +
.../pkg/eventshub/105-issuer-ca.yaml | 22 +
.../pkg/eventshub/105-issuer-certificate.yaml | 21 +
.../dropeventsfibonacci/fibonacci.go | 34 +
.../dropevents/dropeventsfirst/sequence.go | 25 +
.../pkg/eventshub/dropevents/receiver.go | 71 +
.../pkg/eventshub/event_info.go | 189 +
.../pkg/eventshub/event_info_store.go | 274 +
.../pkg/eventshub/event_log.go | 54 +
.../pkg/eventshub/eventshub.go | 101 +
.../pkg/eventshub/eventshub_image.go | 55 +
.../pkg/eventshub/forwarder/forwarder.go | 264 +
.../pkg/eventshub/istio_quit.go | 38 +
.../pkg/eventshub/logger_vent/logger.go | 29 +
.../reconciler-test/pkg/eventshub/options.go | 388 +
.../reconciler-test/pkg/eventshub/prober.go | 569 +
.../pkg/eventshub/rbac/100-sa.yaml | 19 +
.../pkg/eventshub/rbac/101-rbac.yaml | 47 +
.../pkg/eventshub/rbac/rbac.go | 40 +
.../pkg/eventshub/receiver/receiver.go | 287 +
.../pkg/eventshub/receiver/reply.go | 90 +
.../eventshub/recorder_vent/constructor.go | 75 +
.../pkg/eventshub/recorder_vent/doc.go | 19 +
.../pkg/eventshub/recorder_vent/recorder.go | 128 +
.../pkg/eventshub/resources.go | 335 +
.../pkg/eventshub/sender/sender.go | 569 +
.../reconciler-test/pkg/eventshub/utils.go | 132 +
.../reconciler-test/pkg/feature/context.go | 38 +
.../reconciler-test/pkg/feature/feature.go | 431 +
.../reconciler-test/pkg/feature/level.go | 85 +
.../reconciler-test/pkg/feature/logging.go | 98 +
.../reconciler-test/pkg/feature/name.go | 110 +
.../reconciler-test/pkg/feature/states.go | 72 +
.../reconciler-test/pkg/feature/steps.go | 30 +
.../reconciler-test/pkg/feature/t.go | 46 +
.../reconciler-test/pkg/feature/timing.go | 53 +
.../reconciler-test/pkg/images/file/file.go | 54 +
.../reconciler-test/pkg/images/ko/cmd.go | 77 +
.../reconciler-test/pkg/images/ko/publish.go | 50 +
.../reconciler-test/pkg/k8s/events.go | 124 +
.../reconciler-test/pkg/k8s/job.go | 210 +
.../reconciler-test/pkg/k8s/logs.go | 57 +
.../reconciler-test/pkg/k8s/pod.go | 84 +
.../reconciler-test/pkg/k8s/steps.go | 125 +
.../reconciler-test/pkg/k8s/wait.go | 518 +
.../pkg/knative/knative_namespace_config.go | 38 +
.../pkg/knative/logging_config.go | 60 +
.../pkg/knative/tracing_config.go | 60 +
.../reconciler-test/pkg/logging/context.go | 69 +
.../reconciler-test/pkg/logging/env.go | 40 +
.../reconciler-test/pkg/manifest/installer.go | 136 +
.../reconciler-test/pkg/manifest/logging.go | 30 +
.../reconciler-test/pkg/manifest/manifest.go | 230 +
.../reconciler-test/pkg/manifest/options.go | 94 +
.../reconciler-test/pkg/manifest/templates.go | 231 +
.../pkg/manifest/testdata/100-ns.yaml | 18 +
.../pkg/manifest/testdata/101-pod.yaml | 23 +
.../reconciler-test/pkg/manifest/yaml.go | 154 +
.../reconciler-test/pkg/milestone/emitter.go | 215 +
.../pkg/milestone/emitter_composite.go | 84 +
.../pkg/milestone/emitter_log.go | 180 +
.../pkg/milestone/emitter_tracing.go | 193 +
.../reconciler-test/pkg/milestone/factory.go | 269 +
.../pkg/resources/knativeservice/ksvc.go | 34 +
.../pkg/resources/secret/options.go | 54 +
.../pkg/resources/secret/secret.go | 99 +
.../pkg/resources/secret/secret.yaml | 32 +
.../pkg/resources/service/options.go | 53 +
.../pkg/resources/service/service.go | 91 +
.../pkg/resources/service/service.yaml | 57 +
.../serviceaccount/serviceaccount.go | 46 +
.../serviceaccount/serviceaccount.yaml | 17 +
.../reconciler-test/pkg/state/context.go | 70 +
.../reconciler-test/pkg/state/interfaces.go | 27 +
.../reconciler-test/pkg/state/kvstore.go | 71 +
vendor/modules.txt | 170 +
vendor/sigs.k8s.io/json/OWNERS | 6 -
vendor/sigs.k8s.io/yaml/OWNERS | 23 -
vendor/sigs.k8s.io/yaml/goyaml.v2/OWNERS | 24 -
647 files changed, 114405 insertions(+), 487 deletions(-)
create mode 100644 hack/tools.go
create mode 100755 hack/update-deps.sh
create mode 100644 third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/ocagent/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/prometheus/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/antlr/antlr4/runtime/Go/antlr/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/beorn7/perks/quantile/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/blang/semver/v4/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/blendle/zapdriver/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/cespare/xxhash/v2/LICENSE.txt
create mode 100644 third_party/VENDOR-LICENSE/github.com/cloudevents/sdk-go/sql/v2/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/cloudevents/sdk-go/v2/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/davecgh/go-spew/spew/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/emicklei/go-restful/v3/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/v5/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/go-kit/log/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/go-logfmt/logfmt/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/go-logr/logr/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/go-openapi/jsonpointer/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/go-openapi/jsonreference/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/go-openapi/swag/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/gogo/protobuf/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/golang/groupcache/lru/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/golang/protobuf/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/google/gnostic/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/google/go-cmp/cmp/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/google/gofuzz/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/google/uuid/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/gorilla/mux/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/grpc-ecosystem/grpc-gateway/v2/LICENSE.txt
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/.gitignore
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/.golangci.yml
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/2q.go
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/README.md
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/arc.go
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/doc.go
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/lru.go
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/simplelru/lru.go
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/simplelru/lru_interface.go
create mode 100644 third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/testing.go
create mode 100644 third_party/VENDOR-LICENSE/github.com/imdario/mergo/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/josharian/intern/license.md
create mode 100644 third_party/VENDOR-LICENSE/github.com/json-iterator/go/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/kelseyhightower/envconfig/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/mailru/easyjson/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/NOTICE
create mode 100644 third_party/VENDOR-LICENSE/github.com/modern-go/concurrent/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/modern-go/reflect2/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/munnerz/goautoneg/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/pkg/errors/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/prometheus/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/prometheus/NOTICE
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/NOTICE
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/common/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/common/NOTICE
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/procfs/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/procfs/NOTICE
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/NOTICE
create mode 100644 third_party/VENDOR-LICENSE/github.com/rickb777/date/period/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/rickb777/plural/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/robfig/cron/v3/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/github.com/spf13/pflag/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/go.opencensus.io/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/go.uber.org/automaxprocs/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/go.uber.org/multierr/LICENSE.txt
create mode 100644 third_party/VENDOR-LICENSE/go.uber.org/zap/LICENSE.txt
create mode 100644 third_party/VENDOR-LICENSE/golang.org/x/net/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/golang.org/x/oauth2/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/golang.org/x/sync/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/golang.org/x/sys/unix/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/golang.org/x/term/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/golang.org/x/text/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/golang.org/x/time/rate/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/gomodules.xyz/jsonpatch/v2/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/google.golang.org/api/support/bundler/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/google.golang.org/genproto/googleapis/api/httpbody/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/google.golang.org/genproto/googleapis/rpc/status/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/google.golang.org/genproto/protobuf/field_mask/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/google.golang.org/grpc/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/google.golang.org/grpc/NOTICE.txt
create mode 100644 third_party/VENDOR-LICENSE/google.golang.org/protobuf/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/gopkg.in/inf.v0/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/NOTICE
create mode 100644 third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/NOTICE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/api/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/apimachinery/pkg/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/apimachinery/third_party/forked/golang/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/client-go/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/klog/v2/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/validation/spec/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/utils/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/k8s.io/utils/internal/third_party/forked/golang/net/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/knative.dev/backstage-plugins/backends/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/knative.dev/eventing/pkg/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/knative.dev/pkg/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/sigs.k8s.io/json/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/sigs.k8s.io/structured-merge-diff/v4/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/goyaml.v2/LICENSE
create mode 100644 third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/goyaml.v2/NOTICE
create mode 100644 vendor/contrib.go.opencensus.io/exporter/zipkin/.travis.yml
create mode 100644 vendor/contrib.go.opencensus.io/exporter/zipkin/LICENSE
create mode 100644 vendor/contrib.go.opencensus.io/exporter/zipkin/Makefile
create mode 100644 vendor/contrib.go.opencensus.io/exporter/zipkin/README.md
create mode 100644 vendor/contrib.go.opencensus.io/exporter/zipkin/zipkin.go
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/.gitignore
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/.goreleaser.yml
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/.travis.yml
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/LICENSE
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/README.md
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/example-config.json
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/main.go
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/members.tpl
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/pkg.tpl
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/placeholder.go
create mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/type.tpl
create mode 100644 vendor/github.com/cloudevents/conformance/LICENSE
create mode 100644 vendor/github.com/cloudevents/conformance/pkg/event/event.go
create mode 100644 vendor/github.com/cloudevents/conformance/pkg/event/read.go
create mode 100644 vendor/github.com/cloudevents/conformance/pkg/event/write.go
create mode 100644 vendor/github.com/cloudevents/conformance/pkg/http/http.go
create mode 100644 vendor/github.com/cloudevents/conformance/pkg/http/raw.go
create mode 100644 vendor/github.com/cloudevents/sdk-go/v2/test/doc.go
create mode 100644 vendor/github.com/cloudevents/sdk-go/v2/test/event_asserts.go
create mode 100644 vendor/github.com/cloudevents/sdk-go/v2/test/event_matchers.go
create mode 100644 vendor/github.com/cloudevents/sdk-go/v2/test/event_mocks.go
create mode 100644 vendor/github.com/cloudevents/sdk-go/v2/test/helpers.go
create mode 100644 vendor/github.com/google/mako/LICENSE
create mode 100644 vendor/github.com/google/mako/clients/proto/analyzers/threshold_analyzer_go_proto/threshold_analyzer.pb.go
create mode 100644 vendor/github.com/google/mako/clients/proto/analyzers/utest_analyzer_go_proto/utest_analyzer.pb.go
create mode 100644 vendor/github.com/google/mako/clients/proto/analyzers/window_deviation_go_proto/window_deviation.pb.go
create mode 100644 vendor/github.com/google/mako/proto/quickstore/quickstore_go_proto/quickstore.pb.go
create mode 100644 vendor/github.com/google/mako/spec/proto/mako_go_proto/mako.pb.go
delete mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule/BUILD.bazel
delete mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel
delete mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/v2/utilities/BUILD.bazel
create mode 100644 vendor/github.com/openzipkin/zipkin-go/.gitattributes
create mode 100644 vendor/github.com/openzipkin/zipkin-go/.gitignore
create mode 100644 vendor/github.com/openzipkin/zipkin-go/.golangci.yml
create mode 100644 vendor/github.com/openzipkin/zipkin-go/LICENSE
create mode 100644 vendor/github.com/openzipkin/zipkin-go/Makefile
create mode 100644 vendor/github.com/openzipkin/zipkin-go/README.md
create mode 100644 vendor/github.com/openzipkin/zipkin-go/context.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/doc.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/endpoint.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/idgenerator/idgenerator.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/model/annotation.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/model/doc.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/model/endpoint.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/model/kind.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/model/span.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/model/span_id.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/model/traceid.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/noop.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/propagation/propagation.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/reporter/http/http.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/reporter/reporter.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/reporter/serializer.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/sample.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/span.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/span_implementation.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/span_options.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/tags.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/tracer.go
create mode 100644 vendor/github.com/openzipkin/zipkin-go/tracer_options.go
create mode 100644 vendor/github.com/pmezard/go-difflib/LICENSE
create mode 100644 vendor/github.com/pmezard/go-difflib/difflib/difflib.go
create mode 100644 vendor/github.com/russross/blackfriday/v2/.gitignore
create mode 100644 vendor/github.com/russross/blackfriday/v2/.travis.yml
create mode 100644 vendor/github.com/russross/blackfriday/v2/LICENSE.txt
create mode 100644 vendor/github.com/russross/blackfriday/v2/README.md
create mode 100644 vendor/github.com/russross/blackfriday/v2/block.go
create mode 100644 vendor/github.com/russross/blackfriday/v2/doc.go
create mode 100644 vendor/github.com/russross/blackfriday/v2/entities.go
create mode 100644 vendor/github.com/russross/blackfriday/v2/esc.go
create mode 100644 vendor/github.com/russross/blackfriday/v2/html.go
create mode 100644 vendor/github.com/russross/blackfriday/v2/inline.go
create mode 100644 vendor/github.com/russross/blackfriday/v2/markdown.go
create mode 100644 vendor/github.com/russross/blackfriday/v2/node.go
create mode 100644 vendor/github.com/russross/blackfriday/v2/smartypants.go
create mode 100644 vendor/github.com/stretchr/testify/LICENSE
create mode 100644 vendor/github.com/stretchr/testify/assert/assertion_compare.go
create mode 100644 vendor/github.com/stretchr/testify/assert/assertion_compare_can_convert.go
create mode 100644 vendor/github.com/stretchr/testify/assert/assertion_compare_legacy.go
create mode 100644 vendor/github.com/stretchr/testify/assert/assertion_format.go
create mode 100644 vendor/github.com/stretchr/testify/assert/assertion_format.go.tmpl
create mode 100644 vendor/github.com/stretchr/testify/assert/assertion_forward.go
create mode 100644 vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl
create mode 100644 vendor/github.com/stretchr/testify/assert/assertion_order.go
create mode 100644 vendor/github.com/stretchr/testify/assert/assertions.go
create mode 100644 vendor/github.com/stretchr/testify/assert/doc.go
create mode 100644 vendor/github.com/stretchr/testify/assert/errors.go
create mode 100644 vendor/github.com/stretchr/testify/assert/forward_assertions.go
create mode 100644 vendor/github.com/stretchr/testify/assert/http_assertions.go
create mode 100644 vendor/github.com/stretchr/testify/require/doc.go
create mode 100644 vendor/github.com/stretchr/testify/require/forward_requirements.go
create mode 100644 vendor/github.com/stretchr/testify/require/require.go
create mode 100644 vendor/github.com/stretchr/testify/require/require.go.tmpl
create mode 100644 vendor/github.com/stretchr/testify/require/require_forward.go
create mode 100644 vendor/github.com/stretchr/testify/require/require_forward.go.tmpl
create mode 100644 vendor/github.com/stretchr/testify/require/requirements.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/client.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/client_stats.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/doc.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/propagation/b3/b3.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/propagation/tracecontext/propagation.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/route.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/server.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/span_annotating_client_trace.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/stats.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/trace.go
create mode 100644 vendor/go.opencensus.io/plugin/ochttp/wrapped_body.go
create mode 100644 vendor/go.uber.org/atomic/.codecov.yml
create mode 100644 vendor/go.uber.org/atomic/.gitignore
create mode 100644 vendor/go.uber.org/atomic/CHANGELOG.md
create mode 100644 vendor/go.uber.org/atomic/LICENSE.txt
create mode 100644 vendor/go.uber.org/atomic/Makefile
create mode 100644 vendor/go.uber.org/atomic/README.md
create mode 100644 vendor/go.uber.org/atomic/bool.go
create mode 100644 vendor/go.uber.org/atomic/bool_ext.go
create mode 100644 vendor/go.uber.org/atomic/doc.go
create mode 100644 vendor/go.uber.org/atomic/duration.go
create mode 100644 vendor/go.uber.org/atomic/duration_ext.go
create mode 100644 vendor/go.uber.org/atomic/error.go
create mode 100644 vendor/go.uber.org/atomic/error_ext.go
create mode 100644 vendor/go.uber.org/atomic/float64.go
create mode 100644 vendor/go.uber.org/atomic/float64_ext.go
create mode 100644 vendor/go.uber.org/atomic/gen.go
create mode 100644 vendor/go.uber.org/atomic/int32.go
create mode 100644 vendor/go.uber.org/atomic/int64.go
create mode 100644 vendor/go.uber.org/atomic/nocmp.go
create mode 100644 vendor/go.uber.org/atomic/string.go
create mode 100644 vendor/go.uber.org/atomic/string_ext.go
create mode 100644 vendor/go.uber.org/atomic/time.go
create mode 100644 vendor/go.uber.org/atomic/time_ext.go
create mode 100644 vendor/go.uber.org/atomic/uint32.go
create mode 100644 vendor/go.uber.org/atomic/uint64.go
create mode 100644 vendor/go.uber.org/atomic/uintptr.go
create mode 100644 vendor/go.uber.org/atomic/unsafe_pointer.go
create mode 100644 vendor/go.uber.org/atomic/value.go
create mode 100644 vendor/golang.org/x/mod/LICENSE
create mode 100644 vendor/golang.org/x/mod/PATENTS
create mode 100644 vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go
create mode 100644 vendor/golang.org/x/mod/module/module.go
create mode 100644 vendor/golang.org/x/mod/module/pseudo.go
create mode 100644 vendor/golang.org/x/mod/semver/semver.go
create mode 100644 vendor/golang.org/x/tools/LICENSE
create mode 100644 vendor/golang.org/x/tools/PATENTS
create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/enclosing.go
create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/imports.go
create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/rewrite.go
create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/util.go
create mode 100644 vendor/golang.org/x/tools/imports/forward.go
create mode 100644 vendor/golang.org/x/tools/internal/event/core/event.go
create mode 100644 vendor/golang.org/x/tools/internal/event/core/export.go
create mode 100644 vendor/golang.org/x/tools/internal/event/core/fast.go
create mode 100644 vendor/golang.org/x/tools/internal/event/doc.go
create mode 100644 vendor/golang.org/x/tools/internal/event/event.go
create mode 100644 vendor/golang.org/x/tools/internal/event/keys/keys.go
create mode 100644 vendor/golang.org/x/tools/internal/event/keys/standard.go
create mode 100644 vendor/golang.org/x/tools/internal/event/label/label.go
create mode 100644 vendor/golang.org/x/tools/internal/event/tag/tag.go
create mode 100644 vendor/golang.org/x/tools/internal/gocommand/invoke.go
create mode 100644 vendor/golang.org/x/tools/internal/gocommand/vendor.go
create mode 100644 vendor/golang.org/x/tools/internal/gocommand/version.go
create mode 100644 vendor/golang.org/x/tools/internal/gopathwalk/walk.go
create mode 100644 vendor/golang.org/x/tools/internal/imports/fix.go
create mode 100644 vendor/golang.org/x/tools/internal/imports/imports.go
create mode 100644 vendor/golang.org/x/tools/internal/imports/mod.go
create mode 100644 vendor/golang.org/x/tools/internal/imports/mod_cache.go
create mode 100644 vendor/golang.org/x/tools/internal/imports/sortimports.go
create mode 100644 vendor/golang.org/x/tools/internal/imports/zstdlib.go
create mode 100644 vendor/golang.org/x/tools/internal/typeparams/common.go
create mode 100644 vendor/golang.org/x/tools/internal/typeparams/coretype.go
create mode 100644 vendor/golang.org/x/tools/internal/typeparams/enabled_go117.go
create mode 100644 vendor/golang.org/x/tools/internal/typeparams/enabled_go118.go
create mode 100644 vendor/golang.org/x/tools/internal/typeparams/normalize.go
create mode 100644 vendor/golang.org/x/tools/internal/typeparams/termlist.go
create mode 100644 vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go
create mode 100644 vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go
create mode 100644 vendor/golang.org/x/tools/internal/typeparams/typeterm.go
delete mode 100644 vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS
delete mode 100644 vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS
delete mode 100644 vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS
delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS
delete mode 100644 vendor/k8s.io/apimachinery/pkg/util/mergepatch/OWNERS
delete mode 100644 vendor/k8s.io/apimachinery/pkg/util/strategicpatch/OWNERS
delete mode 100644 vendor/k8s.io/apimachinery/third_party/forked/golang/json/OWNERS
delete mode 100644 vendor/k8s.io/client-go/openapi/OWNERS
delete mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS
delete mode 100644 vendor/k8s.io/client-go/rest/OWNERS
delete mode 100644 vendor/k8s.io/client-go/tools/auth/OWNERS
delete mode 100644 vendor/k8s.io/client-go/tools/cache/OWNERS
delete mode 100644 vendor/k8s.io/client-go/tools/leaderelection/OWNERS
delete mode 100644 vendor/k8s.io/client-go/tools/metrics/OWNERS
delete mode 100644 vendor/k8s.io/client-go/tools/record/OWNERS
delete mode 100644 vendor/k8s.io/client-go/transport/OWNERS
delete mode 100644 vendor/k8s.io/client-go/util/cert/OWNERS
delete mode 100644 vendor/k8s.io/client-go/util/keyutil/OWNERS
delete mode 100644 vendor/k8s.io/client-go/util/retry/OWNERS
create mode 100644 vendor/k8s.io/code-generator/CONTRIBUTING.md
create mode 100644 vendor/k8s.io/code-generator/LICENSE
create mode 100644 vendor/k8s.io/code-generator/README.md
create mode 100644 vendor/k8s.io/code-generator/SECURITY_CONTACTS
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/args/args.go
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/args/externaltypes.go
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/applyconfiguration.go
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/internal.go
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/jsontagutil.go
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/openapi.go
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/packages.go
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/refgraph.go
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/types.go
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/util.go
create mode 100644 vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/README.md
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/args/args.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/args/gvpackages.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/args/gvtype.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_clientset.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_group.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_type.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_expansion.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_group.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_type.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/scheme/generator_for_scheme.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/util/gvpackages.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/generators/util/tags.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/path/path.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/types/helpers.go
create mode 100644 vendor/k8s.io/code-generator/cmd/client-gen/types/types.go
create mode 100644 vendor/k8s.io/code-generator/cmd/conversion-gen/args/args.go
create mode 100644 vendor/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go
create mode 100644 vendor/k8s.io/code-generator/cmd/conversion-gen/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/deepcopy-gen/args/args.go
create mode 100644 vendor/k8s.io/code-generator/cmd/deepcopy-gen/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/defaulter-gen/args/args.go
create mode 100644 vendor/k8s.io/code-generator/cmd/defaulter-gen/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/go-to-protobuf/.gitignore
create mode 100644 vendor/k8s.io/code-generator/cmd/go-to-protobuf/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/cmd.go
create mode 100644 vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/generator.go
create mode 100644 vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/import_tracker.go
create mode 100644 vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/namer.go
create mode 100644 vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/package.go
create mode 100644 vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/parser.go
create mode 100644 vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/tags.go
create mode 100644 vendor/k8s.io/code-generator/cmd/import-boss/.gitignore
create mode 100644 vendor/k8s.io/code-generator/cmd/import-boss/README.md
create mode 100644 vendor/k8s.io/code-generator/cmd/import-boss/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/informer-gen/args/args.go
create mode 100644 vendor/k8s.io/code-generator/cmd/informer-gen/generators/factory.go
create mode 100644 vendor/k8s.io/code-generator/cmd/informer-gen/generators/factoryinterface.go
create mode 100644 vendor/k8s.io/code-generator/cmd/informer-gen/generators/generic.go
create mode 100644 vendor/k8s.io/code-generator/cmd/informer-gen/generators/groupinterface.go
create mode 100644 vendor/k8s.io/code-generator/cmd/informer-gen/generators/informer.go
create mode 100644 vendor/k8s.io/code-generator/cmd/informer-gen/generators/packages.go
create mode 100644 vendor/k8s.io/code-generator/cmd/informer-gen/generators/types.go
create mode 100644 vendor/k8s.io/code-generator/cmd/informer-gen/generators/versioninterface.go
create mode 100644 vendor/k8s.io/code-generator/cmd/informer-gen/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/lister-gen/args/args.go
create mode 100644 vendor/k8s.io/code-generator/cmd/lister-gen/generators/expansion.go
create mode 100644 vendor/k8s.io/code-generator/cmd/lister-gen/generators/lister.go
create mode 100644 vendor/k8s.io/code-generator/cmd/lister-gen/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/openapi-gen/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/register-gen/args/args.go
create mode 100644 vendor/k8s.io/code-generator/cmd/register-gen/generators/packages.go
create mode 100644 vendor/k8s.io/code-generator/cmd/register-gen/generators/register_external.go
create mode 100644 vendor/k8s.io/code-generator/cmd/register-gen/main.go
create mode 100644 vendor/k8s.io/code-generator/cmd/set-gen/.gitignore
create mode 100644 vendor/k8s.io/code-generator/cmd/set-gen/main.go
create mode 100644 vendor/k8s.io/code-generator/code-of-conduct.md
create mode 100644 vendor/k8s.io/code-generator/doc.go
create mode 100644 vendor/k8s.io/code-generator/generate-groups.sh
create mode 100644 vendor/k8s.io/code-generator/generate-internal-groups.sh
create mode 100644 vendor/k8s.io/code-generator/pkg/namer/tag-override.go
create mode 100644 vendor/k8s.io/code-generator/pkg/util/build.go
create mode 100644 vendor/k8s.io/code-generator/pkg/util/plural_exceptions.go
create mode 100644 vendor/k8s.io/code-generator/third_party/forked/golang/LICENSE
create mode 100644 vendor/k8s.io/code-generator/third_party/forked/golang/PATENTS
create mode 100644 vendor/k8s.io/code-generator/third_party/forked/golang/reflect/type.go
create mode 100644 vendor/k8s.io/code-generator/tools.go
create mode 100644 vendor/k8s.io/gengo/LICENSE
create mode 100644 vendor/k8s.io/gengo/args/args.go
create mode 100644 vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go
create mode 100644 vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go
create mode 100644 vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go
create mode 100644 vendor/k8s.io/gengo/examples/set-gen/generators/sets.go
create mode 100644 vendor/k8s.io/gengo/examples/set-gen/generators/tags.go
create mode 100644 vendor/k8s.io/gengo/examples/set-gen/sets/byte.go
create mode 100644 vendor/k8s.io/gengo/examples/set-gen/sets/doc.go
create mode 100644 vendor/k8s.io/gengo/examples/set-gen/sets/empty.go
create mode 100644 vendor/k8s.io/gengo/examples/set-gen/sets/int.go
create mode 100644 vendor/k8s.io/gengo/examples/set-gen/sets/int64.go
create mode 100644 vendor/k8s.io/gengo/examples/set-gen/sets/string.go
create mode 100644 vendor/k8s.io/gengo/generator/default_generator.go
create mode 100644 vendor/k8s.io/gengo/generator/default_package.go
create mode 100644 vendor/k8s.io/gengo/generator/doc.go
create mode 100644 vendor/k8s.io/gengo/generator/error_tracker.go
create mode 100644 vendor/k8s.io/gengo/generator/execute.go
create mode 100644 vendor/k8s.io/gengo/generator/generator.go
create mode 100644 vendor/k8s.io/gengo/generator/import_tracker.go
create mode 100644 vendor/k8s.io/gengo/generator/snippet_writer.go
create mode 100644 vendor/k8s.io/gengo/generator/transitive_closure.go
create mode 100644 vendor/k8s.io/gengo/namer/doc.go
create mode 100644 vendor/k8s.io/gengo/namer/import_tracker.go
create mode 100644 vendor/k8s.io/gengo/namer/namer.go
create mode 100644 vendor/k8s.io/gengo/namer/order.go
create mode 100644 vendor/k8s.io/gengo/namer/plural_namer.go
create mode 100644 vendor/k8s.io/gengo/parser/doc.go
create mode 100644 vendor/k8s.io/gengo/parser/parse.go
create mode 100644 vendor/k8s.io/gengo/types/comments.go
create mode 100644 vendor/k8s.io/gengo/types/doc.go
create mode 100644 vendor/k8s.io/gengo/types/flatten.go
create mode 100644 vendor/k8s.io/gengo/types/types.go
create mode 100644 vendor/k8s.io/klog/.travis.yml
create mode 100644 vendor/k8s.io/klog/CONTRIBUTING.md
create mode 100644 vendor/k8s.io/klog/LICENSE
create mode 100644 vendor/k8s.io/klog/README.md
create mode 100644 vendor/k8s.io/klog/RELEASE.md
create mode 100644 vendor/k8s.io/klog/SECURITY_CONTACTS
create mode 100644 vendor/k8s.io/klog/code-of-conduct.md
create mode 100644 vendor/k8s.io/klog/klog.go
create mode 100644 vendor/k8s.io/klog/klog_file.go
delete mode 100644 vendor/k8s.io/klog/v2/OWNERS
create mode 100644 vendor/k8s.io/kube-openapi/cmd/openapi-gen/args/args.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/README.md
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/api_linter.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/config.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/enum.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/extension.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/openapi.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/rules/doc.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/rules/idl_tag.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/rules/names_match.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/rules/omitempty_match_case.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/union.go
delete mode 100644 vendor/k8s.io/kube-openapi/pkg/util/proto/OWNERS
create mode 100644 vendor/k8s.io/kube-openapi/pkg/util/sets/empty.go
create mode 100644 vendor/k8s.io/kube-openapi/pkg/util/sets/string.go
delete mode 100644 vendor/k8s.io/utils/pointer/OWNERS
create mode 100644 vendor/knative.dev/eventing/hack/README.md
create mode 100644 vendor/knative.dev/eventing/hack/create-kind-cluster.sh
create mode 100644 vendor/knative.dev/eventing/hack/generate-yamls.sh
create mode 100644 vendor/knative.dev/eventing/hack/install.sh
create mode 100644 vendor/knative.dev/eventing/hack/reference-docs-gen-config.json
create mode 100644 vendor/knative.dev/eventing/hack/release.sh
create mode 100644 vendor/knative.dev/eventing/hack/tools.go
create mode 100644 vendor/knative.dev/eventing/hack/update-cert-manager.sh
create mode 100644 vendor/knative.dev/eventing/hack/update-checksums.sh
create mode 100644 vendor/knative.dev/eventing/hack/update-codegen.sh
create mode 100644 vendor/knative.dev/eventing/hack/update-deps.sh
create mode 100644 vendor/knative.dev/eventing/hack/update-reference-docs.sh
create mode 100644 vendor/knative.dev/eventing/hack/verify-codegen.sh
create mode 100644 vendor/knative.dev/hack/CODE-OF-CONDUCT.md
create mode 100644 vendor/knative.dev/hack/LICENSE
create mode 100644 vendor/knative.dev/hack/README.md
create mode 100644 vendor/knative.dev/hack/codegen-library.sh
create mode 100644 vendor/knative.dev/hack/e2e-tests.sh
create mode 100644 vendor/knative.dev/hack/embed.go
create mode 100644 vendor/knative.dev/hack/go.work
create mode 100644 vendor/knative.dev/hack/infra-library.sh
create mode 100644 vendor/knative.dev/hack/library.sh
create mode 100644 vendor/knative.dev/hack/microbenchmarks.sh
create mode 100644 vendor/knative.dev/hack/performance-tests.sh
create mode 100644 vendor/knative.dev/hack/presubmit-tests.sh
create mode 100644 vendor/knative.dev/hack/release.sh
create mode 100644 vendor/knative.dev/hack/shellcheck-presubmit.sh
create mode 100644 vendor/knative.dev/pkg/apiextensions/storageversion/cmd/migrate/main.go
create mode 100644 vendor/knative.dev/pkg/apiextensions/storageversion/migrator.go
delete mode 100644 vendor/knative.dev/pkg/apis/OWNERS
delete mode 100644 vendor/knative.dev/pkg/apis/duck/OWNERS
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/args/args.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/client.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/comment_parser.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/duck.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/factory.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/fake_client.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/fake_duck.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/fake_factory.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/fake_filtered_factory.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/fake_filtered_informer.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/fake_informer.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/filtered_factory.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/filtered_informer.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/informer.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/namesystems.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/packages.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/reconciler_controller.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/reconciler_controller_stub.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/reconciler_reconciler.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/reconciler_reconciler_stub.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/generators/reconciler_state.go
create mode 100644 vendor/knative.dev/pkg/codegen/cmd/injection-gen/main.go
create mode 100644 vendor/knative.dev/pkg/configmap/hash-gen/main.go
delete mode 100644 vendor/knative.dev/pkg/controller/OWNERS
create mode 100644 vendor/knative.dev/pkg/hack/generate-knative.sh
create mode 100644 vendor/knative.dev/pkg/hack/tools.go
create mode 100644 vendor/knative.dev/pkg/hack/update-codegen.sh
create mode 100644 vendor/knative.dev/pkg/hack/update-deps.sh
create mode 100644 vendor/knative.dev/pkg/hack/update-k8s-deps.sh
create mode 100644 vendor/knative.dev/pkg/hack/verify-codegen.sh
create mode 100644 vendor/knative.dev/pkg/kflag/doc.go
create mode 100644 vendor/knative.dev/pkg/kflag/set.go
create mode 100644 vendor/knative.dev/pkg/leaderelection/chaosduck/main.go
delete mode 100644 vendor/knative.dev/pkg/reconciler/OWNERS
delete mode 100644 vendor/knative.dev/pkg/resolver/OWNERS
create mode 100644 vendor/knative.dev/pkg/test/helpers/dir.go
create mode 100644 vendor/knative.dev/pkg/test/helpers/dryrun.go
create mode 100644 vendor/knative.dev/pkg/test/helpers/error.go
create mode 100644 vendor/knative.dev/pkg/test/helpers/name.go
create mode 100644 vendor/knative.dev/pkg/test/logging/logging.go
create mode 100644 vendor/knative.dev/pkg/test/mako/config/benchmark.go
create mode 100644 vendor/knative.dev/pkg/test/mako/config/configmap.go
create mode 100644 vendor/knative.dev/pkg/test/mako/config/environment.go
create mode 100644 vendor/knative.dev/pkg/test/mako/config/slack.go
create mode 100644 vendor/knative.dev/pkg/test/mako/stub-sidecar/main.go
create mode 100644 vendor/knative.dev/pkg/test/mako/stub-sidecar/read_results.sh
create mode 100644 vendor/knative.dev/pkg/test/monitoring/doc.go
create mode 100644 vendor/knative.dev/pkg/test/monitoring/monitoring.go
create mode 100644 vendor/knative.dev/pkg/test/security/security.go
create mode 100644 vendor/knative.dev/pkg/test/zipkin/doc.go
create mode 100644 vendor/knative.dev/pkg/test/zipkin/util.go
create mode 100644 vendor/knative.dev/pkg/third_party/mako/LICENSE
create mode 100644 vendor/knative.dev/pkg/third_party/mako/proto/quickstore_go_proto/quickstore.pb.go
create mode 100644 vendor/knative.dev/pkg/tracing/config/doc.go
create mode 100644 vendor/knative.dev/pkg/tracing/config/tracing.go
create mode 100644 vendor/knative.dev/pkg/tracing/config/zz_generated.deepcopy.go
create mode 100644 vendor/knative.dev/pkg/tracing/http.go
create mode 100644 vendor/knative.dev/pkg/tracing/opencensus.go
create mode 100644 vendor/knative.dev/pkg/tracing/propagation/http_format_sequence.go
create mode 100644 vendor/knative.dev/pkg/tracing/propagation/tracecontextb3/http_format.go
create mode 100644 vendor/knative.dev/pkg/tracing/setup.go
create mode 100644 vendor/knative.dev/pkg/tracing/zipkin.go
delete mode 100644 vendor/knative.dev/pkg/webhook/OWNERS
create mode 100644 vendor/knative.dev/reconciler-test/LICENSE
create mode 100644 vendor/knative.dev/reconciler-test/cmd/eventshub/main.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/execution.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/flags.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/images.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/interfaces.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/istio.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/logging.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/magic.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/namespace.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/standard.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/t.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/environment/timings.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/102-service.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/103-pod.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/104-forwarder.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/105-certificate-ca.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/105-certificate-service.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/105-issuer-ca.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/105-issuer-certificate.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/dropevents/dropeventsfibonacci/fibonacci.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/dropevents/dropeventsfirst/sequence.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/dropevents/receiver.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/event_info.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/event_info_store.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/event_log.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/eventshub.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/eventshub_image.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/forwarder/forwarder.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/istio_quit.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/logger_vent/logger.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/options.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/prober.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/rbac/100-sa.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/rbac/101-rbac.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/rbac/rbac.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/receiver/receiver.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/receiver/reply.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/recorder_vent/constructor.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/recorder_vent/doc.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/recorder_vent/recorder.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/resources.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/sender/sender.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/eventshub/utils.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/feature/context.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/feature/feature.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/feature/level.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/feature/logging.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/feature/name.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/feature/states.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/feature/steps.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/feature/t.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/feature/timing.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/images/file/file.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/images/ko/cmd.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/images/ko/publish.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/k8s/events.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/k8s/job.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/k8s/logs.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/k8s/pod.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/k8s/steps.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/k8s/wait.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/knative/knative_namespace_config.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/knative/logging_config.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/knative/tracing_config.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/logging/context.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/logging/env.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/manifest/installer.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/manifest/logging.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/manifest/manifest.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/manifest/options.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/manifest/templates.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/manifest/testdata/100-ns.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/manifest/testdata/101-pod.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/manifest/yaml.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/milestone/emitter.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/milestone/emitter_composite.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/milestone/emitter_log.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/milestone/emitter_tracing.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/milestone/factory.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/resources/knativeservice/ksvc.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/resources/secret/options.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/resources/secret/secret.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/resources/secret/secret.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/resources/service/options.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/resources/service/service.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/resources/service/service.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/resources/serviceaccount/serviceaccount.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/resources/serviceaccount/serviceaccount.yaml
create mode 100644 vendor/knative.dev/reconciler-test/pkg/state/context.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/state/interfaces.go
create mode 100644 vendor/knative.dev/reconciler-test/pkg/state/kvstore.go
delete mode 100644 vendor/sigs.k8s.io/json/OWNERS
delete mode 100644 vendor/sigs.k8s.io/yaml/OWNERS
delete mode 100644 vendor/sigs.k8s.io/yaml/goyaml.v2/OWNERS
diff --git a/go.mod b/go.mod
index 9ad42e64..52e19174 100644
--- a/go.mod
+++ b/go.mod
@@ -3,22 +3,27 @@ module knative.dev/backstage-plugins
go 1.18
require (
+ github.com/google/go-cmp v0.6.0
github.com/gorilla/mux v1.8.1
go.uber.org/zap v1.26.0
k8s.io/apimachinery v0.27.6
knative.dev/eventing v0.39.1
+ knative.dev/hack v0.0.0-20231122182901-eb352426ecc1
knative.dev/pkg v0.0.0-20231204120332-9386ad6703ee
)
require (
contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d // indirect
contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
+ contrib.go.opencensus.io/exporter/zipkin v0.1.2 // indirect
+ github.com/ahmetb/gen-crd-api-reference-docs v0.3.1-0.20210420163308-c1402a70e2f1 // indirect
github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/blendle/zapdriver v1.3.1 // indirect
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/cloudevents/conformance v0.2.0 // indirect
github.com/cloudevents/sdk-go/sql/v2 v2.13.0 // indirect
github.com/cloudevents/sdk-go/v2 v2.13.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
@@ -35,8 +40,8 @@ require (
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/gnostic v0.5.7-v3refs // indirect
- github.com/google/go-cmp v0.6.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
+ github.com/google/mako v0.0.0-20190821191249-122f8dcef9e3 // indirect
github.com/google/uuid v1.4.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
@@ -49,7 +54,9 @@ require (
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
+ github.com/openzipkin/zipkin-go v0.4.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
+ github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_golang v1.17.0 // indirect
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
github.com/prometheus/common v0.45.0 // indirect
@@ -58,10 +65,14 @@ require (
github.com/rickb777/date v1.13.0 // indirect
github.com/rickb777/plural v1.2.1 // indirect
github.com/robfig/cron/v3 v3.0.1 // indirect
+ github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
+ github.com/stretchr/testify v1.8.1 // indirect
go.opencensus.io v0.24.0 // indirect
+ go.uber.org/atomic v1.9.0 // indirect
go.uber.org/automaxprocs v1.5.3 // indirect
go.uber.org/multierr v1.10.0 // indirect
+ golang.org/x/mod v0.14.0 // indirect
golang.org/x/net v0.19.0 // indirect
golang.org/x/oauth2 v0.15.0 // indirect
golang.org/x/sync v0.5.0 // indirect
@@ -69,6 +80,7 @@ require (
golang.org/x/term v0.15.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.5.0 // indirect
+ golang.org/x/tools v0.16.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
google.golang.org/api v0.152.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
@@ -83,9 +95,13 @@ require (
k8s.io/api v0.27.6 // indirect
k8s.io/apiextensions-apiserver v0.27.6 // indirect
k8s.io/client-go v0.27.6 // indirect
+ k8s.io/code-generator v0.27.6 // indirect
+ k8s.io/gengo v0.0.0-20221011193443-fad74ee6edd9 // indirect
+ k8s.io/klog v1.0.0 // indirect
k8s.io/klog/v2 v2.90.1 // indirect
k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect
k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
+ knative.dev/reconciler-test v0.0.0-20231024072442-5fb93a792b99 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
diff --git a/go.sum b/go.sum
index 28dbdb63..94b2d6a5 100644
--- a/go.sum
+++ b/go.sum
@@ -34,9 +34,15 @@ contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d h
contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d/go.mod h1:IshRmMJBhDfFj5Y67nVhMYTTIze91RUeT73ipWKs/GY=
contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
+contrib.go.opencensus.io/exporter/zipkin v0.1.2 h1:YqE293IZrKtqPnpwDPH/lOqTWD/s3Iwabycam74JV3g=
+contrib.go.opencensus.io/exporter/zipkin v0.1.2/go.mod h1:mP5xM3rrgOjpn79MM8fZbj3gsxcuytSqtH0dxSWW1RE=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
+github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
+github.com/ahmetb/gen-crd-api-reference-docs v0.3.1-0.20210420163308-c1402a70e2f1 h1:mh2wBXE8rRSJkYz87b9YBTOOTzLUex1kuV+ar4r2j1c=
+github.com/ahmetb/gen-crd-api-reference-docs v0.3.1-0.20210420163308-c1402a70e2f1/go.mod h1:TdjdkYhlOifCQWPs1UdTma97kQQMozf5h26hTuG70u8=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -46,6 +52,7 @@ github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8V
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrGr5AyrNMXuA0gves=
github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -65,18 +72,28 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cloudevents/conformance v0.2.0 h1:NvSXOKlagcsOWMEbi8U7Ex/0oQ4JZE1HQ45bnxYf2zk=
+github.com/cloudevents/conformance v0.2.0/go.mod h1:rHKDwylBH89Rns6U3wL9ww8bg9/4GbwRCDNuyoC6bcc=
github.com/cloudevents/sdk-go/sql/v2 v2.13.0 h1:gMJvQ3XFkygY9JmrusgK80d9yRAb8+J3X8IA1OC+oc0=
github.com/cloudevents/sdk-go/sql/v2 v2.13.0/go.mod h1:XZRQBCgRreddIpQrdjBJQUrRg3BCs3aikplJQkHrK44=
github.com/cloudevents/sdk-go/v2 v2.13.0 h1:2zxDS8RyY1/wVPULGGbdgniGXSzLaRJVl136fLXGsYw=
github.com/cloudevents/sdk-go/v2 v2.13.0/go.mod h1:xDmKfzNjM8gBvjaF8ijFjM1VYOVUEeUfapHMUX1T5To=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
+github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
+github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
+github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -101,6 +118,8 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
+github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
@@ -111,8 +130,10 @@ github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En
github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g=
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -147,6 +168,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54=
@@ -166,8 +188,11 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/mako v0.0.0-20190821191249-122f8dcef9e3 h1:/o5e44nTD/QEEiWPGSFT3bSqcq3Qg7q27N9bv4gKh5M=
+github.com/google/mako v0.0.0-20190821191249-122f8dcef9e3/go.mod h1:YzLcVlL+NqWnmUEPuhS1LxDDwGO9WNbVlEXaF4IH35g=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
@@ -184,6 +209,8 @@ github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
+github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
@@ -193,10 +220,12 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg=
github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
@@ -224,12 +253,16 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -243,16 +276,24 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo/v2 v2.9.1 h1:zie5Ly042PD3bsCvsSOPvRnFwyo3rKe64TJlD6nu0mk=
+github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
+github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E=
+github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
+github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
+github.com/openzipkin/zipkin-go v0.4.2 h1:zjqfqHjUpPmB3c1GlCvvgsM1G4LkvqQbBDueDOCg/jA=
+github.com/openzipkin/zipkin-go v0.4.2/go.mod h1:ZeVkFjuuBiSy13y8vpSDCjMi9GoI3hPpCJSBx/EYFhY=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
@@ -289,6 +330,7 @@ github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwa
github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
+github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rickb777/date v1.13.0 h1:+8AmwLuY1d/rldzdqvqTEg7107bZ8clW37x4nsdG3Hs=
github.com/rickb777/date v1.13.0/go.mod h1:GZf3LoGnxPWjX+/1TXOuzHefZFDovTyNLHDMd3qH70k=
github.com/rickb777/plural v1.2.1 h1:UitRAgR70+yHFt26Tmj/F9dU9aV6UfjGXSbO1DcC9/U=
@@ -298,13 +340,25 @@ github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzG
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/sqs/goreturns v0.0.0-20181028201513-538ac6014518/go.mod h1:CKI4AZ4XmGV240rTHfO0hfE83S6/a3/Q1siZJ/vXf7A=
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
+github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
@@ -319,7 +373,9 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc=
+github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -333,6 +389,8 @@ go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
+go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8=
go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0=
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
@@ -343,6 +401,7 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -379,6 +438,7 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
+golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -443,6 +503,7 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -537,6 +598,7 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512001501-aaeff5de670a/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -547,6 +609,7 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM=
+golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -619,6 +682,7 @@ google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.
google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I=
google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
@@ -688,6 +752,15 @@ k8s.io/apimachinery v0.27.6 h1:mGU8jmBq5o8mWBov+mLjdTBcU+etTE19waies4AQ6NE=
k8s.io/apimachinery v0.27.6/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E=
k8s.io/client-go v0.27.6 h1:vzI8804gpUtpMCNaFjIFyJrifH7u//LJCJPy8fQuYQg=
k8s.io/client-go v0.27.6/go.mod h1:PMsXcDKiJTW7PHJ64oEsIUJF319wm+EFlCj76oE5QXM=
+k8s.io/code-generator v0.27.6 h1:1zkSDvylcA11s91aYg5U7fZ24EXMZ+KIDOj/Z3Ti4c8=
+k8s.io/code-generator v0.27.6/go.mod h1:DPung1sI5vBgn4AGKtlPRQAyagj/ir/4jI55ipZHVww=
+k8s.io/gengo v0.0.0-20201203183100-97869a43a9d9/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
+k8s.io/gengo v0.0.0-20221011193443-fad74ee6edd9 h1:iu3o/SxaHVI7tKPtkGzD3M9IzrE21j+CUKH98NQJ8Ms=
+k8s.io/gengo v0.0.0-20221011193443-fad74ee6edd9/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
+k8s.io/klog v0.2.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
+k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
+k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
+k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg=
@@ -696,8 +769,12 @@ k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPB
k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
knative.dev/eventing v0.39.1 h1:HMBLfvAZ/LZVXQW4cUqOSM/cmdfNKqQXqJWRe2o1JDU=
knative.dev/eventing v0.39.1/go.mod h1:MlEiEcHALqZnu0OFMuWdJfjBzM7HlSJfk8pQbTcIy4o=
+knative.dev/hack v0.0.0-20231122182901-eb352426ecc1 h1:ZUkFAaq5gEls7bJ2ADLg+ZJVtN3KUcHEWx5ngLfacuQ=
+knative.dev/hack v0.0.0-20231122182901-eb352426ecc1/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
knative.dev/pkg v0.0.0-20231204120332-9386ad6703ee h1:O1bJlEC4pzAEyTt8+f0Qe50QqS2JJxhK269CAGZ68vg=
knative.dev/pkg v0.0.0-20231204120332-9386ad6703ee/go.mod h1:aJX49KSaKufMCwJgrCbHxXLTQ/j6LGspSZxn9VIv51w=
+knative.dev/reconciler-test v0.0.0-20231024072442-5fb93a792b99 h1:RyJ5EZ0XMhTn4CdjI355ceeZmjpPhz4edMu2XRC67bA=
+knative.dev/reconciler-test v0.0.0-20231024072442-5fb93a792b99/go.mod h1:ojrPzMaQ7FugThq5SAG3mF1+8/N6gM8b/gFM3kHUXJU=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
@@ -705,5 +782,6 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
diff --git a/hack/tools.go b/hack/tools.go
new file mode 100644
index 00000000..5dc20574
--- /dev/null
+++ b/hack/tools.go
@@ -0,0 +1,26 @@
+//go:build tools
+// +build tools
+
+/*
+ * Copyright 2020 The Knative Authors
+ *
+ * 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 tools
+
+import (
+ _ "knative.dev/eventing/hack"
+ _ "knative.dev/hack"
+ _ "knative.dev/pkg/hack"
+)
diff --git a/hack/update-deps.sh b/hack/update-deps.sh
new file mode 100755
index 00000000..1d401b6c
--- /dev/null
+++ b/hack/update-deps.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+# Copyright 2023 The Knative Authors
+#
+# 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.
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+source $(dirname "$0")/../vendor/knative.dev/hack/library.sh
+
+go_update_deps "$@"
diff --git a/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/ocagent/LICENSE b/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/ocagent/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/ocagent/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/prometheus/LICENSE b/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/prometheus/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/contrib.go.opencensus.io/exporter/prometheus/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/antlr/antlr4/runtime/Go/antlr/LICENSE b/third_party/VENDOR-LICENSE/github.com/antlr/antlr4/runtime/Go/antlr/LICENSE
new file mode 100644
index 00000000..52cf18e4
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/antlr/antlr4/runtime/Go/antlr/LICENSE
@@ -0,0 +1,26 @@
+Copyright 2021 The ANTLR Project
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ 3. Neither the name of the copyright holder 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 HOLDER 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/beorn7/perks/quantile/LICENSE b/third_party/VENDOR-LICENSE/github.com/beorn7/perks/quantile/LICENSE
new file mode 100644
index 00000000..339177be
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/beorn7/perks/quantile/LICENSE
@@ -0,0 +1,20 @@
+Copyright (C) 2013 Blake Mizerany
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/github.com/blang/semver/v4/LICENSE b/third_party/VENDOR-LICENSE/github.com/blang/semver/v4/LICENSE
new file mode 100644
index 00000000..5ba5c86f
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/blang/semver/v4/LICENSE
@@ -0,0 +1,22 @@
+The MIT License
+
+Copyright (c) 2014 Benedikt Lang
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/third_party/VENDOR-LICENSE/github.com/blendle/zapdriver/LICENSE b/third_party/VENDOR-LICENSE/github.com/blendle/zapdriver/LICENSE
new file mode 100644
index 00000000..7db45677
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/blendle/zapdriver/LICENSE
@@ -0,0 +1,15 @@
+ISC License
+
+Copyright (c) Blendle
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE b/third_party/VENDOR-LICENSE/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/census-instrumentation/opencensus-proto/gen-go/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/cespare/xxhash/v2/LICENSE.txt b/third_party/VENDOR-LICENSE/github.com/cespare/xxhash/v2/LICENSE.txt
new file mode 100644
index 00000000..24b53065
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/cespare/xxhash/v2/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2016 Caleb Spare
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/github.com/cloudevents/sdk-go/sql/v2/LICENSE b/third_party/VENDOR-LICENSE/github.com/cloudevents/sdk-go/sql/v2/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/cloudevents/sdk-go/sql/v2/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/cloudevents/sdk-go/v2/LICENSE b/third_party/VENDOR-LICENSE/github.com/cloudevents/sdk-go/v2/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/cloudevents/sdk-go/v2/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/davecgh/go-spew/spew/LICENSE b/third_party/VENDOR-LICENSE/github.com/davecgh/go-spew/spew/LICENSE
new file mode 100644
index 00000000..bc52e96f
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/davecgh/go-spew/spew/LICENSE
@@ -0,0 +1,15 @@
+ISC License
+
+Copyright (c) 2012-2016 Dave Collins
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/github.com/emicklei/go-restful/v3/LICENSE b/third_party/VENDOR-LICENSE/github.com/emicklei/go-restful/v3/LICENSE
new file mode 100644
index 00000000..ece7ec61
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/emicklei/go-restful/v3/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2012,2013 Ernest Micklei
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/v5/LICENSE b/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/v5/LICENSE
new file mode 100644
index 00000000..df76d7d7
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/evanphx/json-patch/v5/LICENSE
@@ -0,0 +1,25 @@
+Copyright (c) 2014, Evan Phoenix
+All rights reserved.
+
+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 the Evan Phoenix 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/go-kit/log/LICENSE b/third_party/VENDOR-LICENSE/github.com/go-kit/log/LICENSE
new file mode 100644
index 00000000..bb5bdb9c
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/go-kit/log/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Go kit
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/github.com/go-logfmt/logfmt/LICENSE b/third_party/VENDOR-LICENSE/github.com/go-logfmt/logfmt/LICENSE
new file mode 100644
index 00000000..c0265089
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/go-logfmt/logfmt/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 go-logfmt
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/third_party/VENDOR-LICENSE/github.com/go-logr/logr/LICENSE b/third_party/VENDOR-LICENSE/github.com/go-logr/logr/LICENSE
new file mode 100644
index 00000000..8dada3ed
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/go-logr/logr/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/go-openapi/jsonpointer/LICENSE b/third_party/VENDOR-LICENSE/github.com/go-openapi/jsonpointer/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/go-openapi/jsonpointer/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/go-openapi/jsonreference/LICENSE b/third_party/VENDOR-LICENSE/github.com/go-openapi/jsonreference/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/go-openapi/jsonreference/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/go-openapi/swag/LICENSE b/third_party/VENDOR-LICENSE/github.com/go-openapi/swag/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/go-openapi/swag/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/gogo/protobuf/LICENSE b/third_party/VENDOR-LICENSE/github.com/gogo/protobuf/LICENSE
new file mode 100644
index 00000000..f57de90d
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/gogo/protobuf/LICENSE
@@ -0,0 +1,35 @@
+Copyright (c) 2013, The GoGo Authors. All rights reserved.
+
+Protocol Buffers for Go with Gadgets
+
+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.
+
diff --git a/third_party/VENDOR-LICENSE/github.com/golang/groupcache/lru/LICENSE b/third_party/VENDOR-LICENSE/github.com/golang/groupcache/lru/LICENSE
new file mode 100644
index 00000000..37ec93a1
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/golang/groupcache/lru/LICENSE
@@ -0,0 +1,191 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright
+owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities
+that control, are controlled by, or are under common control with that entity.
+For the purposes of this definition, "control" means (i) the power, direct or
+indirect, to cause the direction or management of such entity, whether by
+contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and configuration
+files.
+
+"Object" form shall mean any form resulting from mechanical transformation or
+translation of a Source form, including but not limited to compiled object code,
+generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made
+available under the License, as indicated by a copyright notice that is included
+in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that
+is based on (or derived from) the Work and for which the editorial revisions,
+annotations, elaborations, or other modifications represent, as a whole, an
+original work of authorship. For the purposes of this License, Derivative Works
+shall not include works that remain separable from, or merely link (or bind by
+name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version
+of the Work and any modifications or additions to that Work or Derivative Works
+thereof, that is intentionally submitted to Licensor for inclusion in the Work
+by the copyright owner or by an individual or Legal Entity authorized to submit
+on behalf of the copyright owner. For the purposes of this definition,
+"submitted" means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems, and
+issue tracking systems that are managed by, or on behalf of, the Licensor for
+the purpose of discussing and improving the Work, but excluding communication
+that is conspicuously marked or otherwise designated in writing by the copyright
+owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
+of whom a Contribution has been received by Licensor and subsequently
+incorporated within the Work.
+
+2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.
+
+3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable (except as stated in this section) patent license to make, have
+made, use, offer to sell, sell, import, and otherwise transfer the Work, where
+such license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by combination
+of their Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or contributory
+patent infringement, then any patent licenses granted to You under this License
+for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof
+in any medium, with or without modifications, and in Source or Object form,
+provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of
+this License; and
+You must cause any modified files to carry prominent notices stating that You
+changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute,
+all copyright, patent, trademark, and attribution notices from the Source form
+of the Work, excluding those notices that do not pertain to any part of the
+Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any
+Derivative Works that You distribute must include a readable copy of the
+attribution notices contained within such NOTICE file, excluding those notices
+that do not pertain to any part of the Derivative Works, in at least one of the
+following places: within a NOTICE text file distributed as part of the
+Derivative Works; within the Source form or documentation, if provided along
+with the Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The contents of
+the NOTICE file are for informational purposes only and do not modify the
+License. You may add Your own attribution notices within Derivative Works that
+You distribute, alongside or as an addendum to the NOTICE text from the Work,
+provided that such additional attribution notices cannot be construed as
+modifying the License.
+You may add Your own copyright statement to Your modifications and may provide
+additional or different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works as a whole,
+provided Your use, reproduction, and distribution of the Work otherwise complies
+with the conditions stated in this License.
+
+5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted
+for inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the terms of
+any separate license agreement you may have executed with Licensor regarding
+such Contributions.
+
+6. Trademarks.
+
+This License does not grant permission to use the trade names, trademarks,
+service marks, or product names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor provides the
+Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
+including, without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
+solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise of
+permissions under this License.
+
+8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including negligence),
+contract, or otherwise, unless required by applicable law (such as deliberate
+and grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License or
+out of the use or inability to use the Work (including but not limited to
+damages for loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses), even if such Contributor has
+been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to
+offer, and charge a fee for, acceptance of support, warranty, indemnity, or
+other liability obligations and/or rights consistent with this License. However,
+in accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if You
+agree to indemnify, defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason of your
+accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included on
+the same "printed page" as the copyright notice for easier identification within
+third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/golang/protobuf/LICENSE b/third_party/VENDOR-LICENSE/github.com/golang/protobuf/LICENSE
new file mode 100644
index 00000000..0f646931
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/golang/protobuf/LICENSE
@@ -0,0 +1,28 @@
+Copyright 2010 The Go Authors. All rights reserved.
+
+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.
+
diff --git a/third_party/VENDOR-LICENSE/github.com/google/gnostic/LICENSE b/third_party/VENDOR-LICENSE/github.com/google/gnostic/LICENSE
new file mode 100644
index 00000000..6b0b1270
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/google/gnostic/LICENSE
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
+
diff --git a/third_party/VENDOR-LICENSE/github.com/google/go-cmp/cmp/LICENSE b/third_party/VENDOR-LICENSE/github.com/google/go-cmp/cmp/LICENSE
new file mode 100644
index 00000000..32017f8f
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/google/go-cmp/cmp/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2017 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/github.com/google/gofuzz/LICENSE b/third_party/VENDOR-LICENSE/github.com/google/gofuzz/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/google/gofuzz/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/google/uuid/LICENSE b/third_party/VENDOR-LICENSE/github.com/google/uuid/LICENSE
new file mode 100644
index 00000000..5dc68268
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/google/uuid/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2009,2014 Google Inc. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/github.com/gorilla/mux/LICENSE b/third_party/VENDOR-LICENSE/github.com/gorilla/mux/LICENSE
new file mode 100644
index 00000000..bb9d80bc
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/gorilla/mux/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2023 The Gorilla Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/github.com/grpc-ecosystem/grpc-gateway/v2/LICENSE.txt b/third_party/VENDOR-LICENSE/github.com/grpc-ecosystem/grpc-gateway/v2/LICENSE.txt
new file mode 100644
index 00000000..36451625
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/grpc-ecosystem/grpc-gateway/v2/LICENSE.txt
@@ -0,0 +1,27 @@
+Copyright (c) 2015, Gengo, Inc.
+All rights reserved.
+
+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 Gengo, 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/.gitignore b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/.gitignore
new file mode 100644
index 00000000..83656241
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/.gitignore
@@ -0,0 +1,23 @@
+# Compiled Object files, Static and Dynamic libs (Shared Objects)
+*.o
+*.a
+*.so
+
+# Folders
+_obj
+_test
+
+# Architecture specific extensions/prefixes
+*.[568vq]
+[568vq].out
+
+*.cgo1.go
+*.cgo2.c
+_cgo_defun.c
+_cgo_gotypes.go
+_cgo_export.*
+
+_testmain.go
+
+*.exe
+*.test
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/.golangci.yml b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/.golangci.yml
new file mode 100644
index 00000000..49202fc4
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/.golangci.yml
@@ -0,0 +1,30 @@
+linters:
+ enable:
+ - megacheck
+ - revive
+ - govet
+ - unconvert
+ - megacheck
+ - gas
+ - gocyclo
+ - dupl
+ - misspell
+ - unparam
+ - unused
+ - typecheck
+ - ineffassign
+ - stylecheck
+ - exportloopref
+ - gocritic
+ - nakedret
+ - gosimple
+ - prealloc
+ fast: false
+ disable-all: true
+
+issues:
+ exclude-rules:
+ - path: _test\.go
+ linters:
+ - dupl
+ exclude-use-default: false
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/2q.go b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/2q.go
new file mode 100644
index 00000000..15fcad03
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/2q.go
@@ -0,0 +1,222 @@
+package lru
+
+import (
+ "fmt"
+ "sync"
+
+ "github.com/hashicorp/golang-lru/simplelru"
+)
+
+const (
+ // Default2QRecentRatio is the ratio of the 2Q cache dedicated
+ // to recently added entries that have only been accessed once.
+ Default2QRecentRatio = 0.25
+
+ // Default2QGhostEntries is the default ratio of ghost
+ // entries kept to track entries recently evicted
+ Default2QGhostEntries = 0.50
+)
+
+// TwoQueueCache is a thread-safe fixed size 2Q cache.
+// 2Q is an enhancement over the standard LRU cache
+// in that it tracks both frequently and recently used
+// entries separately. This avoids a burst in access to new
+// entries from evicting frequently used entries. It adds some
+// additional tracking overhead to the standard LRU cache, and is
+// computationally about 2x the cost, and adds some metadata over
+// head. The ARCCache is similar, but does not require setting any
+// parameters.
+type TwoQueueCache struct {
+ size int
+ recentSize int
+
+ recent simplelru.LRUCache
+ frequent simplelru.LRUCache
+ recentEvict simplelru.LRUCache
+ lock sync.RWMutex
+}
+
+// New2Q creates a new TwoQueueCache using the default
+// values for the parameters.
+func New2Q(size int) (*TwoQueueCache, error) {
+ return New2QParams(size, Default2QRecentRatio, Default2QGhostEntries)
+}
+
+// New2QParams creates a new TwoQueueCache using the provided
+// parameter values.
+func New2QParams(size int, recentRatio, ghostRatio float64) (*TwoQueueCache, error) {
+ if size <= 0 {
+ return nil, fmt.Errorf("invalid size")
+ }
+ if recentRatio < 0.0 || recentRatio > 1.0 {
+ return nil, fmt.Errorf("invalid recent ratio")
+ }
+ if ghostRatio < 0.0 || ghostRatio > 1.0 {
+ return nil, fmt.Errorf("invalid ghost ratio")
+ }
+
+ // Determine the sub-sizes
+ recentSize := int(float64(size) * recentRatio)
+ evictSize := int(float64(size) * ghostRatio)
+
+ // Allocate the LRUs
+ recent, err := simplelru.NewLRU(size, nil)
+ if err != nil {
+ return nil, err
+ }
+ frequent, err := simplelru.NewLRU(size, nil)
+ if err != nil {
+ return nil, err
+ }
+ recentEvict, err := simplelru.NewLRU(evictSize, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ // Initialize the cache
+ c := &TwoQueueCache{
+ size: size,
+ recentSize: recentSize,
+ recent: recent,
+ frequent: frequent,
+ recentEvict: recentEvict,
+ }
+ return c, nil
+}
+
+// Get looks up a key's value from the cache.
+func (c *TwoQueueCache) Get(key interface{}) (value interface{}, ok bool) {
+ c.lock.Lock()
+ defer c.lock.Unlock()
+
+ // Check if this is a frequent value
+ if val, ok := c.frequent.Get(key); ok {
+ return val, ok
+ }
+
+ // If the value is contained in recent, then we
+ // promote it to frequent
+ if val, ok := c.recent.Peek(key); ok {
+ c.recent.Remove(key)
+ c.frequent.Add(key, val)
+ return val, ok
+ }
+
+ // No hit
+ return nil, false
+}
+
+// Add adds a value to the cache.
+func (c *TwoQueueCache) Add(key, value interface{}) {
+ c.lock.Lock()
+ defer c.lock.Unlock()
+
+ // Check if the value is frequently used already,
+ // and just update the value
+ if c.frequent.Contains(key) {
+ c.frequent.Add(key, value)
+ return
+ }
+
+ // Check if the value is recently used, and promote
+ // the value into the frequent list
+ if c.recent.Contains(key) {
+ c.recent.Remove(key)
+ c.frequent.Add(key, value)
+ return
+ }
+
+ // If the value was recently evicted, add it to the
+ // frequently used list
+ if c.recentEvict.Contains(key) {
+ c.ensureSpace(true)
+ c.recentEvict.Remove(key)
+ c.frequent.Add(key, value)
+ return
+ }
+
+ // Add to the recently seen list
+ c.ensureSpace(false)
+ c.recent.Add(key, value)
+}
+
+// ensureSpace is used to ensure we have space in the cache
+func (c *TwoQueueCache) ensureSpace(recentEvict bool) {
+ // If we have space, nothing to do
+ recentLen := c.recent.Len()
+ freqLen := c.frequent.Len()
+ if recentLen+freqLen < c.size {
+ return
+ }
+
+ // If the recent buffer is larger than
+ // the target, evict from there
+ if recentLen > 0 && (recentLen > c.recentSize || (recentLen == c.recentSize && !recentEvict)) {
+ k, _, _ := c.recent.RemoveOldest()
+ c.recentEvict.Add(k, nil)
+ return
+ }
+
+ // Remove from the frequent list otherwise
+ c.frequent.RemoveOldest()
+}
+
+// Len returns the number of items in the cache.
+func (c *TwoQueueCache) Len() int {
+ c.lock.RLock()
+ defer c.lock.RUnlock()
+ return c.recent.Len() + c.frequent.Len()
+}
+
+// Keys returns a slice of the keys in the cache.
+// The frequently used keys are first in the returned slice.
+func (c *TwoQueueCache) Keys() []interface{} {
+ c.lock.RLock()
+ defer c.lock.RUnlock()
+ k1 := c.frequent.Keys()
+ k2 := c.recent.Keys()
+ return append(k1, k2...)
+}
+
+// Remove removes the provided key from the cache.
+func (c *TwoQueueCache) Remove(key interface{}) {
+ c.lock.Lock()
+ defer c.lock.Unlock()
+ if c.frequent.Remove(key) {
+ return
+ }
+ if c.recent.Remove(key) {
+ return
+ }
+ if c.recentEvict.Remove(key) {
+ return
+ }
+}
+
+// Purge is used to completely clear the cache.
+func (c *TwoQueueCache) Purge() {
+ c.lock.Lock()
+ defer c.lock.Unlock()
+ c.recent.Purge()
+ c.frequent.Purge()
+ c.recentEvict.Purge()
+}
+
+// Contains is used to check if the cache contains a key
+// without updating recency or frequency.
+func (c *TwoQueueCache) Contains(key interface{}) bool {
+ c.lock.RLock()
+ defer c.lock.RUnlock()
+ return c.frequent.Contains(key) || c.recent.Contains(key)
+}
+
+// Peek is used to inspect the cache value of a key
+// without updating recency or frequency.
+func (c *TwoQueueCache) Peek(key interface{}) (value interface{}, ok bool) {
+ c.lock.RLock()
+ defer c.lock.RUnlock()
+ if val, ok := c.frequent.Peek(key); ok {
+ return val, ok
+ }
+ return c.recent.Peek(key)
+}
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/LICENSE b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/LICENSE
new file mode 100644
index 00000000..0e5d580e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/LICENSE
@@ -0,0 +1,364 @@
+Copyright (c) 2014 HashiCorp, Inc.
+
+Mozilla Public License, version 2.0
+
+1. Definitions
+
+1.1. "Contributor"
+
+ means each individual or legal entity that creates, contributes to the
+ creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+
+ means the combination of the Contributions of others (if any) used by a
+ Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+
+ means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+
+ means Source Code Form to which the initial Contributor has attached the
+ notice in Exhibit A, the Executable Form of such Source Code Form, and
+ Modifications of such Source Code Form, in each case including portions
+ thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+ means
+
+ a. that the initial Contributor has attached the notice described in
+ Exhibit B to the Covered Software; or
+
+ b. that the Covered Software was made available under the terms of
+ version 1.1 or earlier of the License, but not also under the terms of
+ a Secondary License.
+
+1.6. "Executable Form"
+
+ means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+
+ means a work that combines Covered Software with other material, in a
+ separate file or files, that is not Covered Software.
+
+1.8. "License"
+
+ means this document.
+
+1.9. "Licensable"
+
+ means having the right to grant, to the maximum extent possible, whether
+ at the time of the initial grant or subsequently, any and all of the
+ rights conveyed by this License.
+
+1.10. "Modifications"
+
+ means any of the following:
+
+ a. any file in Source Code Form that results from an addition to,
+ deletion from, or modification of the contents of Covered Software; or
+
+ b. any new file in Source Code Form that contains any Covered Software.
+
+1.11. "Patent Claims" of a Contributor
+
+ means any patent claim(s), including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by such
+ Contributor that would be infringed, but for the grant of the License,
+ by the making, using, selling, offering for sale, having made, import,
+ or transfer of either its Contributions or its Contributor Version.
+
+1.12. "Secondary License"
+
+ means either the GNU General Public License, Version 2.0, the GNU Lesser
+ General Public License, Version 2.1, the GNU Affero General Public
+ License, Version 3.0, or any later versions of those licenses.
+
+1.13. "Source Code Form"
+
+ means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, "You" includes any entity that controls, is
+ controlled by, or is under common control with You. For purposes of this
+ definition, "control" means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.
+
+
+2. License Grants and Conditions
+
+2.1. Grants
+
+ Each Contributor hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ a. under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or
+ as part of a Larger Work; and
+
+ b. under Patent Claims of such Contributor to make, use, sell, offer for
+ sale, have made, import, and otherwise transfer either its
+ Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+ The licenses granted in Section 2.1 with respect to any Contribution
+ become effective for each Contribution on the date the Contributor first
+ distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+ The licenses granted in this Section 2 are the only rights granted under
+ this License. No additional rights or licenses will be implied from the
+ distribution or licensing of Covered Software under this License.
+ Notwithstanding Section 2.1(b) above, no patent license is granted by a
+ Contributor:
+
+ a. for any code that a Contributor has removed from Covered Software; or
+
+ b. for infringements caused by: (i) Your and any other third party's
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+ c. under Patent Claims infringed by Covered Software in the absence of
+ its Contributions.
+
+ This License does not grant any rights in the trademarks, service marks,
+ or logos of any Contributor (except as may be necessary to comply with
+ the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+ No Contributor makes additional grants as a result of Your choice to
+ distribute the Covered Software under a subsequent version of this
+ License (see Section 10.2) or under the terms of a Secondary License (if
+ permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+ Each Contributor represents that the Contributor believes its
+ Contributions are its original creation(s) or it has sufficient rights to
+ grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+ This License is not intended to limit any rights You have under
+ applicable copyright doctrines of fair use, fair dealing, or other
+ equivalents.
+
+2.7. Conditions
+
+ Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
+ Section 2.1.
+
+
+3. Responsibilities
+
+3.1. Distribution of Source Form
+
+ All distribution of Covered Software in Source Code Form, including any
+ Modifications that You create or to which You contribute, must be under
+ the terms of this License. You must inform recipients that the Source
+ Code Form of the Covered Software is governed by the terms of this
+ License, and how they can obtain a copy of this License. You may not
+ attempt to alter or restrict the recipients' rights in the Source Code
+ Form.
+
+3.2. Distribution of Executable Form
+
+ If You distribute Covered Software in Executable Form then:
+
+ a. such Covered Software must also be made available in Source Code Form,
+ as described in Section 3.1, and You must inform recipients of the
+ Executable Form how they can obtain a copy of such Source Code Form by
+ reasonable means in a timely manner, at a charge no more than the cost
+ of distribution to the recipient; and
+
+ b. You may distribute such Executable Form under the terms of this
+ License, or sublicense it under different terms, provided that the
+ license for the Executable Form does not attempt to limit or alter the
+ recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+ You may create and distribute a Larger Work under terms of Your choice,
+ provided that You also comply with the requirements of this License for
+ the Covered Software. If the Larger Work is a combination of Covered
+ Software with a work governed by one or more Secondary Licenses, and the
+ Covered Software is not Incompatible With Secondary Licenses, this
+ License permits You to additionally distribute such Covered Software
+ under the terms of such Secondary License(s), so that the recipient of
+ the Larger Work may, at their option, further distribute the Covered
+ Software under the terms of either this License or such Secondary
+ License(s).
+
+3.4. Notices
+
+ You may not remove or alter the substance of any license notices
+ (including copyright notices, patent notices, disclaimers of warranty, or
+ limitations of liability) contained within the Source Code Form of the
+ Covered Software, except that You may alter any license notices to the
+ extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+ You may choose to offer, and to charge a fee for, warranty, support,
+ indemnity or liability obligations to one or more recipients of Covered
+ Software. However, You may do so only on Your own behalf, and not on
+ behalf of any Contributor. You must make it absolutely clear that any
+ such warranty, support, indemnity, or liability obligation is offered by
+ You alone, and You hereby agree to indemnify every Contributor for any
+ liability incurred by such Contributor as a result of warranty, support,
+ indemnity or liability terms You offer. You may include additional
+ disclaimers of warranty and limitations of liability specific to any
+ jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+
+ If it is impossible for You to comply with any of the terms of this License
+ with respect to some or all of the Covered Software due to statute,
+ judicial order, or regulation then You must: (a) comply with the terms of
+ this License to the maximum extent possible; and (b) describe the
+ limitations and the code they affect. Such description must be placed in a
+ text file included with all distributions of the Covered Software under
+ this License. Except to the extent prohibited by statute or regulation,
+ such description must be sufficiently detailed for a recipient of ordinary
+ skill to be able to understand it.
+
+5. Termination
+
+5.1. The rights granted under this License will terminate automatically if You
+ fail to comply with any of its terms. However, if You become compliant,
+ then the rights granted under this License from a particular Contributor
+ are reinstated (a) provisionally, unless and until such Contributor
+ explicitly and finally terminates Your grants, and (b) on an ongoing
+ basis, if such Contributor fails to notify You of the non-compliance by
+ some reasonable means prior to 60 days after You have come back into
+ compliance. Moreover, Your grants from a particular Contributor are
+ reinstated on an ongoing basis if such Contributor notifies You of the
+ non-compliance by some reasonable means, this is the first time You have
+ received notice of non-compliance with this License from such
+ Contributor, and You become compliant prior to 30 days after Your receipt
+ of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+ infringement claim (excluding declaratory judgment actions,
+ counter-claims, and cross-claims) alleging that a Contributor Version
+ directly or indirectly infringes any patent, then the rights granted to
+ You by any and all Contributors for the Covered Software under Section
+ 2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
+ license agreements (excluding distributors and resellers) which have been
+ validly granted by You or Your distributors under this License prior to
+ termination shall survive termination.
+
+6. Disclaimer of Warranty
+
+ Covered Software is provided under this License on an "as is" basis,
+ without warranty of any kind, either expressed, implied, or statutory,
+ including, without limitation, warranties that the Covered Software is free
+ of defects, merchantable, fit for a particular purpose or non-infringing.
+ The entire risk as to the quality and performance of the Covered Software
+ is with You. Should any Covered Software prove defective in any respect,
+ You (not any Contributor) assume the cost of any necessary servicing,
+ repair, or correction. This disclaimer of warranty constitutes an essential
+ part of this License. No use of any Covered Software is authorized under
+ this License except under this disclaimer.
+
+7. Limitation of Liability
+
+ Under no circumstances and under no legal theory, whether tort (including
+ negligence), contract, or otherwise, shall any Contributor, or anyone who
+ distributes Covered Software as permitted above, be liable to You for any
+ direct, indirect, special, incidental, or consequential damages of any
+ character including, without limitation, damages for lost profits, loss of
+ goodwill, work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses, even if such party shall have been
+ informed of the possibility of such damages. This limitation of liability
+ shall not apply to liability for death or personal injury resulting from
+ such party's negligence to the extent applicable law prohibits such
+ limitation. Some jurisdictions do not allow the exclusion or limitation of
+ incidental or consequential damages, so this exclusion and limitation may
+ not apply to You.
+
+8. Litigation
+
+ Any litigation relating to this License may be brought only in the courts
+ of a jurisdiction where the defendant maintains its principal place of
+ business and such litigation shall be governed by laws of that
+ jurisdiction, without reference to its conflict-of-law provisions. Nothing
+ in this Section shall prevent a party's ability to bring cross-claims or
+ counter-claims.
+
+9. Miscellaneous
+
+ This License represents the complete agreement concerning the subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. Any law or regulation which provides that
+ the language of a contract shall be construed against the drafter shall not
+ be used to construe this License against a Contributor.
+
+
+10. Versions of the License
+
+10.1. New Versions
+
+ Mozilla Foundation is the license steward. Except as provided in Section
+ 10.3, no one other than the license steward has the right to modify or
+ publish new versions of this License. Each version will be given a
+ distinguishing version number.
+
+10.2. Effect of New Versions
+
+ You may distribute the Covered Software under the terms of the version
+ of the License under which You originally received the Covered Software,
+ or under the terms of any subsequent version published by the license
+ steward.
+
+10.3. Modified Versions
+
+ If you create software not governed by this License, and you want to
+ create a new license for such software, you may create and use a
+ modified version of this License if you rename the license and remove
+ any references to the name of the license steward (except to note that
+ such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+ Licenses If You choose to distribute Source Code Form that is
+ Incompatible With Secondary Licenses under the terms of this version of
+ the License, the notice described in Exhibit B of this License must be
+ attached.
+
+Exhibit A - Source Code Form License Notice
+
+ This Source Code Form is subject to the
+ terms of the Mozilla Public License, v.
+ 2.0. If a copy of the MPL was not
+ distributed with this file, You can
+ obtain one at
+ http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular file,
+then You may include the notice in a location (such as a LICENSE file in a
+relevant directory) where a recipient would be likely to look for such a
+notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+
+ This Source Code Form is "Incompatible
+ With Secondary Licenses", as defined by
+ the Mozilla Public License, v. 2.0.
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/README.md b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/README.md
new file mode 100644
index 00000000..03bcfb5b
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/README.md
@@ -0,0 +1,7 @@
+golang-lru
+==========
+
+Please upgrade to github.com/hashicorp/golang-lru/v2 for all new code as v1 will
+not be updated anymore. The v2 version supports generics and is faster; old code
+can specify a specific tag, e.g. github.com/hashicorp/golang-lru/v1.0.2 for
+backwards compatibility.
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/arc.go b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/arc.go
new file mode 100644
index 00000000..e396f842
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/arc.go
@@ -0,0 +1,256 @@
+package lru
+
+import (
+ "sync"
+
+ "github.com/hashicorp/golang-lru/simplelru"
+)
+
+// ARCCache is a thread-safe fixed size Adaptive Replacement Cache (ARC).
+// ARC is an enhancement over the standard LRU cache in that tracks both
+// frequency and recency of use. This avoids a burst in access to new
+// entries from evicting the frequently used older entries. It adds some
+// additional tracking overhead to a standard LRU cache, computationally
+// it is roughly 2x the cost, and the extra memory overhead is linear
+// with the size of the cache. ARC has been patented by IBM, but is
+// similar to the TwoQueueCache (2Q) which requires setting parameters.
+type ARCCache struct {
+ size int // Size is the total capacity of the cache
+ p int // P is the dynamic preference towards T1 or T2
+
+ t1 simplelru.LRUCache // T1 is the LRU for recently accessed items
+ b1 simplelru.LRUCache // B1 is the LRU for evictions from t1
+
+ t2 simplelru.LRUCache // T2 is the LRU for frequently accessed items
+ b2 simplelru.LRUCache // B2 is the LRU for evictions from t2
+
+ lock sync.RWMutex
+}
+
+// NewARC creates an ARC of the given size
+func NewARC(size int) (*ARCCache, error) {
+ // Create the sub LRUs
+ b1, err := simplelru.NewLRU(size, nil)
+ if err != nil {
+ return nil, err
+ }
+ b2, err := simplelru.NewLRU(size, nil)
+ if err != nil {
+ return nil, err
+ }
+ t1, err := simplelru.NewLRU(size, nil)
+ if err != nil {
+ return nil, err
+ }
+ t2, err := simplelru.NewLRU(size, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ // Initialize the ARC
+ c := &ARCCache{
+ size: size,
+ p: 0,
+ t1: t1,
+ b1: b1,
+ t2: t2,
+ b2: b2,
+ }
+ return c, nil
+}
+
+// Get looks up a key's value from the cache.
+func (c *ARCCache) Get(key interface{}) (value interface{}, ok bool) {
+ c.lock.Lock()
+ defer c.lock.Unlock()
+
+ // If the value is contained in T1 (recent), then
+ // promote it to T2 (frequent)
+ if val, ok := c.t1.Peek(key); ok {
+ c.t1.Remove(key)
+ c.t2.Add(key, val)
+ return val, ok
+ }
+
+ // Check if the value is contained in T2 (frequent)
+ if val, ok := c.t2.Get(key); ok {
+ return val, ok
+ }
+
+ // No hit
+ return nil, false
+}
+
+// Add adds a value to the cache.
+func (c *ARCCache) Add(key, value interface{}) {
+ c.lock.Lock()
+ defer c.lock.Unlock()
+
+ // Check if the value is contained in T1 (recent), and potentially
+ // promote it to frequent T2
+ if c.t1.Contains(key) {
+ c.t1.Remove(key)
+ c.t2.Add(key, value)
+ return
+ }
+
+ // Check if the value is already in T2 (frequent) and update it
+ if c.t2.Contains(key) {
+ c.t2.Add(key, value)
+ return
+ }
+
+ // Check if this value was recently evicted as part of the
+ // recently used list
+ if c.b1.Contains(key) {
+ // T1 set is too small, increase P appropriately
+ delta := 1
+ b1Len := c.b1.Len()
+ b2Len := c.b2.Len()
+ if b2Len > b1Len {
+ delta = b2Len / b1Len
+ }
+ if c.p+delta >= c.size {
+ c.p = c.size
+ } else {
+ c.p += delta
+ }
+
+ // Potentially need to make room in the cache
+ if c.t1.Len()+c.t2.Len() >= c.size {
+ c.replace(false)
+ }
+
+ // Remove from B1
+ c.b1.Remove(key)
+
+ // Add the key to the frequently used list
+ c.t2.Add(key, value)
+ return
+ }
+
+ // Check if this value was recently evicted as part of the
+ // frequently used list
+ if c.b2.Contains(key) {
+ // T2 set is too small, decrease P appropriately
+ delta := 1
+ b1Len := c.b1.Len()
+ b2Len := c.b2.Len()
+ if b1Len > b2Len {
+ delta = b1Len / b2Len
+ }
+ if delta >= c.p {
+ c.p = 0
+ } else {
+ c.p -= delta
+ }
+
+ // Potentially need to make room in the cache
+ if c.t1.Len()+c.t2.Len() >= c.size {
+ c.replace(true)
+ }
+
+ // Remove from B2
+ c.b2.Remove(key)
+
+ // Add the key to the frequently used list
+ c.t2.Add(key, value)
+ return
+ }
+
+ // Potentially need to make room in the cache
+ if c.t1.Len()+c.t2.Len() >= c.size {
+ c.replace(false)
+ }
+
+ // Keep the size of the ghost buffers trim
+ if c.b1.Len() > c.size-c.p {
+ c.b1.RemoveOldest()
+ }
+ if c.b2.Len() > c.p {
+ c.b2.RemoveOldest()
+ }
+
+ // Add to the recently seen list
+ c.t1.Add(key, value)
+}
+
+// replace is used to adaptively evict from either T1 or T2
+// based on the current learned value of P
+func (c *ARCCache) replace(b2ContainsKey bool) {
+ t1Len := c.t1.Len()
+ if t1Len > 0 && (t1Len > c.p || (t1Len == c.p && b2ContainsKey)) {
+ k, _, ok := c.t1.RemoveOldest()
+ if ok {
+ c.b1.Add(k, nil)
+ }
+ } else {
+ k, _, ok := c.t2.RemoveOldest()
+ if ok {
+ c.b2.Add(k, nil)
+ }
+ }
+}
+
+// Len returns the number of cached entries
+func (c *ARCCache) Len() int {
+ c.lock.RLock()
+ defer c.lock.RUnlock()
+ return c.t1.Len() + c.t2.Len()
+}
+
+// Keys returns all the cached keys
+func (c *ARCCache) Keys() []interface{} {
+ c.lock.RLock()
+ defer c.lock.RUnlock()
+ k1 := c.t1.Keys()
+ k2 := c.t2.Keys()
+ return append(k1, k2...)
+}
+
+// Remove is used to purge a key from the cache
+func (c *ARCCache) Remove(key interface{}) {
+ c.lock.Lock()
+ defer c.lock.Unlock()
+ if c.t1.Remove(key) {
+ return
+ }
+ if c.t2.Remove(key) {
+ return
+ }
+ if c.b1.Remove(key) {
+ return
+ }
+ if c.b2.Remove(key) {
+ return
+ }
+}
+
+// Purge is used to clear the cache
+func (c *ARCCache) Purge() {
+ c.lock.Lock()
+ defer c.lock.Unlock()
+ c.t1.Purge()
+ c.t2.Purge()
+ c.b1.Purge()
+ c.b2.Purge()
+}
+
+// Contains is used to check if the cache contains a key
+// without updating recency or frequency.
+func (c *ARCCache) Contains(key interface{}) bool {
+ c.lock.RLock()
+ defer c.lock.RUnlock()
+ return c.t1.Contains(key) || c.t2.Contains(key)
+}
+
+// Peek is used to inspect the cache value of a key
+// without updating recency or frequency.
+func (c *ARCCache) Peek(key interface{}) (value interface{}, ok bool) {
+ c.lock.RLock()
+ defer c.lock.RUnlock()
+ if val, ok := c.t1.Peek(key); ok {
+ return val, ok
+ }
+ return c.t2.Peek(key)
+}
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/doc.go b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/doc.go
new file mode 100644
index 00000000..2547df97
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/doc.go
@@ -0,0 +1,21 @@
+// Package lru provides three different LRU caches of varying sophistication.
+//
+// Cache is a simple LRU cache. It is based on the
+// LRU implementation in groupcache:
+// https://github.com/golang/groupcache/tree/master/lru
+//
+// TwoQueueCache tracks frequently used and recently used entries separately.
+// This avoids a burst of accesses from taking out frequently used entries,
+// at the cost of about 2x computational overhead and some extra bookkeeping.
+//
+// ARCCache is an adaptive replacement cache. It tracks recent evictions as
+// well as recent usage in both the frequent and recent caches. Its
+// computational overhead is comparable to TwoQueueCache, but the memory
+// overhead is linear with the size of the cache.
+//
+// ARC has been patented by IBM, so do not use it if that is problematic for
+// your program.
+//
+// All caches in this package take locks while operating, and are therefore
+// thread-safe for consumers.
+package lru
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/lru.go b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/lru.go
new file mode 100644
index 00000000..895d8e3e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/lru.go
@@ -0,0 +1,231 @@
+package lru
+
+import (
+ "sync"
+
+ "github.com/hashicorp/golang-lru/simplelru"
+)
+
+const (
+ // DefaultEvictedBufferSize defines the default buffer size to store evicted key/val
+ DefaultEvictedBufferSize = 16
+)
+
+// Cache is a thread-safe fixed size LRU cache.
+type Cache struct {
+ lru *simplelru.LRU
+ evictedKeys, evictedVals []interface{}
+ onEvictedCB func(k, v interface{})
+ lock sync.RWMutex
+}
+
+// New creates an LRU of the given size.
+func New(size int) (*Cache, error) {
+ return NewWithEvict(size, nil)
+}
+
+// NewWithEvict constructs a fixed size cache with the given eviction
+// callback.
+func NewWithEvict(size int, onEvicted func(key, value interface{})) (c *Cache, err error) {
+ // create a cache with default settings
+ c = &Cache{
+ onEvictedCB: onEvicted,
+ }
+ if onEvicted != nil {
+ c.initEvictBuffers()
+ onEvicted = c.onEvicted
+ }
+ c.lru, err = simplelru.NewLRU(size, onEvicted)
+ return
+}
+
+func (c *Cache) initEvictBuffers() {
+ c.evictedKeys = make([]interface{}, 0, DefaultEvictedBufferSize)
+ c.evictedVals = make([]interface{}, 0, DefaultEvictedBufferSize)
+}
+
+// onEvicted save evicted key/val and sent in externally registered callback
+// outside of critical section
+func (c *Cache) onEvicted(k, v interface{}) {
+ c.evictedKeys = append(c.evictedKeys, k)
+ c.evictedVals = append(c.evictedVals, v)
+}
+
+// Purge is used to completely clear the cache.
+func (c *Cache) Purge() {
+ var ks, vs []interface{}
+ c.lock.Lock()
+ c.lru.Purge()
+ if c.onEvictedCB != nil && len(c.evictedKeys) > 0 {
+ ks, vs = c.evictedKeys, c.evictedVals
+ c.initEvictBuffers()
+ }
+ c.lock.Unlock()
+ // invoke callback outside of critical section
+ if c.onEvictedCB != nil {
+ for i := 0; i < len(ks); i++ {
+ c.onEvictedCB(ks[i], vs[i])
+ }
+ }
+}
+
+// Add adds a value to the cache. Returns true if an eviction occurred.
+func (c *Cache) Add(key, value interface{}) (evicted bool) {
+ var k, v interface{}
+ c.lock.Lock()
+ evicted = c.lru.Add(key, value)
+ if c.onEvictedCB != nil && evicted {
+ k, v = c.evictedKeys[0], c.evictedVals[0]
+ c.evictedKeys, c.evictedVals = c.evictedKeys[:0], c.evictedVals[:0]
+ }
+ c.lock.Unlock()
+ if c.onEvictedCB != nil && evicted {
+ c.onEvictedCB(k, v)
+ }
+ return
+}
+
+// Get looks up a key's value from the cache.
+func (c *Cache) Get(key interface{}) (value interface{}, ok bool) {
+ c.lock.Lock()
+ value, ok = c.lru.Get(key)
+ c.lock.Unlock()
+ return value, ok
+}
+
+// Contains checks if a key is in the cache, without updating the
+// recent-ness or deleting it for being stale.
+func (c *Cache) Contains(key interface{}) bool {
+ c.lock.RLock()
+ containKey := c.lru.Contains(key)
+ c.lock.RUnlock()
+ return containKey
+}
+
+// Peek returns the key value (or undefined if not found) without updating
+// the "recently used"-ness of the key.
+func (c *Cache) Peek(key interface{}) (value interface{}, ok bool) {
+ c.lock.RLock()
+ value, ok = c.lru.Peek(key)
+ c.lock.RUnlock()
+ return value, ok
+}
+
+// ContainsOrAdd checks if a key is in the cache without updating the
+// recent-ness or deleting it for being stale, and if not, adds the value.
+// Returns whether found and whether an eviction occurred.
+func (c *Cache) ContainsOrAdd(key, value interface{}) (ok, evicted bool) {
+ var k, v interface{}
+ c.lock.Lock()
+ if c.lru.Contains(key) {
+ c.lock.Unlock()
+ return true, false
+ }
+ evicted = c.lru.Add(key, value)
+ if c.onEvictedCB != nil && evicted {
+ k, v = c.evictedKeys[0], c.evictedVals[0]
+ c.evictedKeys, c.evictedVals = c.evictedKeys[:0], c.evictedVals[:0]
+ }
+ c.lock.Unlock()
+ if c.onEvictedCB != nil && evicted {
+ c.onEvictedCB(k, v)
+ }
+ return false, evicted
+}
+
+// PeekOrAdd checks if a key is in the cache without updating the
+// recent-ness or deleting it for being stale, and if not, adds the value.
+// Returns whether found and whether an eviction occurred.
+func (c *Cache) PeekOrAdd(key, value interface{}) (previous interface{}, ok, evicted bool) {
+ var k, v interface{}
+ c.lock.Lock()
+ previous, ok = c.lru.Peek(key)
+ if ok {
+ c.lock.Unlock()
+ return previous, true, false
+ }
+ evicted = c.lru.Add(key, value)
+ if c.onEvictedCB != nil && evicted {
+ k, v = c.evictedKeys[0], c.evictedVals[0]
+ c.evictedKeys, c.evictedVals = c.evictedKeys[:0], c.evictedVals[:0]
+ }
+ c.lock.Unlock()
+ if c.onEvictedCB != nil && evicted {
+ c.onEvictedCB(k, v)
+ }
+ return nil, false, evicted
+}
+
+// Remove removes the provided key from the cache.
+func (c *Cache) Remove(key interface{}) (present bool) {
+ var k, v interface{}
+ c.lock.Lock()
+ present = c.lru.Remove(key)
+ if c.onEvictedCB != nil && present {
+ k, v = c.evictedKeys[0], c.evictedVals[0]
+ c.evictedKeys, c.evictedVals = c.evictedKeys[:0], c.evictedVals[:0]
+ }
+ c.lock.Unlock()
+ if c.onEvictedCB != nil && present {
+ c.onEvictedCB(k, v)
+ }
+ return
+}
+
+// Resize changes the cache size.
+func (c *Cache) Resize(size int) (evicted int) {
+ var ks, vs []interface{}
+ c.lock.Lock()
+ evicted = c.lru.Resize(size)
+ if c.onEvictedCB != nil && evicted > 0 {
+ ks, vs = c.evictedKeys, c.evictedVals
+ c.initEvictBuffers()
+ }
+ c.lock.Unlock()
+ if c.onEvictedCB != nil && evicted > 0 {
+ for i := 0; i < len(ks); i++ {
+ c.onEvictedCB(ks[i], vs[i])
+ }
+ }
+ return evicted
+}
+
+// RemoveOldest removes the oldest item from the cache.
+func (c *Cache) RemoveOldest() (key, value interface{}, ok bool) {
+ var k, v interface{}
+ c.lock.Lock()
+ key, value, ok = c.lru.RemoveOldest()
+ if c.onEvictedCB != nil && ok {
+ k, v = c.evictedKeys[0], c.evictedVals[0]
+ c.evictedKeys, c.evictedVals = c.evictedKeys[:0], c.evictedVals[:0]
+ }
+ c.lock.Unlock()
+ if c.onEvictedCB != nil && ok {
+ c.onEvictedCB(k, v)
+ }
+ return
+}
+
+// GetOldest returns the oldest entry
+func (c *Cache) GetOldest() (key, value interface{}, ok bool) {
+ c.lock.RLock()
+ key, value, ok = c.lru.GetOldest()
+ c.lock.RUnlock()
+ return
+}
+
+// Keys returns a slice of the keys in the cache, from oldest to newest.
+func (c *Cache) Keys() []interface{} {
+ c.lock.RLock()
+ keys := c.lru.Keys()
+ c.lock.RUnlock()
+ return keys
+}
+
+// Len returns the number of items in the cache.
+func (c *Cache) Len() int {
+ c.lock.RLock()
+ length := c.lru.Len()
+ c.lock.RUnlock()
+ return length
+}
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/simplelru/lru.go b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/simplelru/lru.go
new file mode 100644
index 00000000..9233583c
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/simplelru/lru.go
@@ -0,0 +1,177 @@
+package simplelru
+
+import (
+ "container/list"
+ "errors"
+)
+
+// EvictCallback is used to get a callback when a cache entry is evicted
+type EvictCallback func(key interface{}, value interface{})
+
+// LRU implements a non-thread safe fixed size LRU cache
+type LRU struct {
+ size int
+ evictList *list.List
+ items map[interface{}]*list.Element
+ onEvict EvictCallback
+}
+
+// entry is used to hold a value in the evictList
+type entry struct {
+ key interface{}
+ value interface{}
+}
+
+// NewLRU constructs an LRU of the given size
+func NewLRU(size int, onEvict EvictCallback) (*LRU, error) {
+ if size <= 0 {
+ return nil, errors.New("must provide a positive size")
+ }
+ c := &LRU{
+ size: size,
+ evictList: list.New(),
+ items: make(map[interface{}]*list.Element),
+ onEvict: onEvict,
+ }
+ return c, nil
+}
+
+// Purge is used to completely clear the cache.
+func (c *LRU) Purge() {
+ for k, v := range c.items {
+ if c.onEvict != nil {
+ c.onEvict(k, v.Value.(*entry).value)
+ }
+ delete(c.items, k)
+ }
+ c.evictList.Init()
+}
+
+// Add adds a value to the cache. Returns true if an eviction occurred.
+func (c *LRU) Add(key, value interface{}) (evicted bool) {
+ // Check for existing item
+ if ent, ok := c.items[key]; ok {
+ c.evictList.MoveToFront(ent)
+ ent.Value.(*entry).value = value
+ return false
+ }
+
+ // Add new item
+ ent := &entry{key, value}
+ entry := c.evictList.PushFront(ent)
+ c.items[key] = entry
+
+ evict := c.evictList.Len() > c.size
+ // Verify size not exceeded
+ if evict {
+ c.removeOldest()
+ }
+ return evict
+}
+
+// Get looks up a key's value from the cache.
+func (c *LRU) Get(key interface{}) (value interface{}, ok bool) {
+ if ent, ok := c.items[key]; ok {
+ c.evictList.MoveToFront(ent)
+ if ent.Value.(*entry) == nil {
+ return nil, false
+ }
+ return ent.Value.(*entry).value, true
+ }
+ return
+}
+
+// Contains checks if a key is in the cache, without updating the recent-ness
+// or deleting it for being stale.
+func (c *LRU) Contains(key interface{}) (ok bool) {
+ _, ok = c.items[key]
+ return ok
+}
+
+// Peek returns the key value (or undefined if not found) without updating
+// the "recently used"-ness of the key.
+func (c *LRU) Peek(key interface{}) (value interface{}, ok bool) {
+ var ent *list.Element
+ if ent, ok = c.items[key]; ok {
+ return ent.Value.(*entry).value, true
+ }
+ return nil, ok
+}
+
+// Remove removes the provided key from the cache, returning if the
+// key was contained.
+func (c *LRU) Remove(key interface{}) (present bool) {
+ if ent, ok := c.items[key]; ok {
+ c.removeElement(ent)
+ return true
+ }
+ return false
+}
+
+// RemoveOldest removes the oldest item from the cache.
+func (c *LRU) RemoveOldest() (key, value interface{}, ok bool) {
+ ent := c.evictList.Back()
+ if ent != nil {
+ c.removeElement(ent)
+ kv := ent.Value.(*entry)
+ return kv.key, kv.value, true
+ }
+ return nil, nil, false
+}
+
+// GetOldest returns the oldest entry
+func (c *LRU) GetOldest() (key, value interface{}, ok bool) {
+ ent := c.evictList.Back()
+ if ent != nil {
+ kv := ent.Value.(*entry)
+ return kv.key, kv.value, true
+ }
+ return nil, nil, false
+}
+
+// Keys returns a slice of the keys in the cache, from oldest to newest.
+func (c *LRU) Keys() []interface{} {
+ keys := make([]interface{}, len(c.items))
+ i := 0
+ for ent := c.evictList.Back(); ent != nil; ent = ent.Prev() {
+ keys[i] = ent.Value.(*entry).key
+ i++
+ }
+ return keys
+}
+
+// Len returns the number of items in the cache.
+func (c *LRU) Len() int {
+ return c.evictList.Len()
+}
+
+// Resize changes the cache size.
+func (c *LRU) Resize(size int) (evicted int) {
+ diff := c.Len() - size
+ if diff < 0 {
+ diff = 0
+ }
+ for i := 0; i < diff; i++ {
+ c.removeOldest()
+ }
+ c.size = size
+ return diff
+}
+
+// removeOldest removes the oldest item from the cache.
+func (c *LRU) removeOldest() {
+ ent := c.evictList.Back()
+ if ent != nil {
+ c.removeElement(ent)
+ }
+}
+
+// removeElement is used to remove a given list element from the cache
+func (c *LRU) removeElement(e *list.Element) {
+ c.evictList.Remove(e)
+ kv := e.Value.(*entry)
+ delete(c.items, kv.key)
+ if c.onEvict != nil {
+ c.onEvict(kv.key, kv.value)
+ }
+}
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/simplelru/lru_interface.go b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/simplelru/lru_interface.go
new file mode 100644
index 00000000..cb7f8caf
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/simplelru/lru_interface.go
@@ -0,0 +1,40 @@
+// Package simplelru provides simple LRU implementation based on build-in container/list.
+package simplelru
+
+// LRUCache is the interface for simple LRU cache.
+type LRUCache interface {
+ // Adds a value to the cache, returns true if an eviction occurred and
+ // updates the "recently used"-ness of the key.
+ Add(key, value interface{}) bool
+
+ // Returns key's value from the cache and
+ // updates the "recently used"-ness of the key. #value, isFound
+ Get(key interface{}) (value interface{}, ok bool)
+
+ // Checks if a key exists in cache without updating the recent-ness.
+ Contains(key interface{}) (ok bool)
+
+ // Returns key's value without updating the "recently used"-ness of the key.
+ Peek(key interface{}) (value interface{}, ok bool)
+
+ // Removes a key from the cache.
+ Remove(key interface{}) bool
+
+ // Removes the oldest entry from cache.
+ RemoveOldest() (interface{}, interface{}, bool)
+
+ // Returns the oldest entry from the cache. #key, value, isFound
+ GetOldest() (interface{}, interface{}, bool)
+
+ // Returns a slice of the keys in the cache, from oldest to newest.
+ Keys() []interface{}
+
+ // Returns the number of items in the cache.
+ Len() int
+
+ // Clears all cache entries.
+ Purge()
+
+ // Resizes cache, returning number evicted
+ Resize(int) int
+}
diff --git a/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/testing.go b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/testing.go
new file mode 100644
index 00000000..49276078
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/hashicorp/golang-lru/testing.go
@@ -0,0 +1,16 @@
+package lru
+
+import (
+ "crypto/rand"
+ "math"
+ "math/big"
+ "testing"
+)
+
+func getRand(tb testing.TB) int64 {
+ out, err := rand.Int(rand.Reader, big.NewInt(math.MaxInt64))
+ if err != nil {
+ tb.Fatal(err)
+ }
+ return out.Int64()
+}
diff --git a/third_party/VENDOR-LICENSE/github.com/imdario/mergo/LICENSE b/third_party/VENDOR-LICENSE/github.com/imdario/mergo/LICENSE
new file mode 100644
index 00000000..68668029
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/imdario/mergo/LICENSE
@@ -0,0 +1,28 @@
+Copyright (c) 2013 Dario Castañé. All rights reserved.
+Copyright (c) 2012 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/github.com/josharian/intern/license.md b/third_party/VENDOR-LICENSE/github.com/josharian/intern/license.md
new file mode 100644
index 00000000..353d3055
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/josharian/intern/license.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Josh Bleecher Snyder
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/github.com/json-iterator/go/LICENSE b/third_party/VENDOR-LICENSE/github.com/json-iterator/go/LICENSE
new file mode 100644
index 00000000..2cf4f5ab
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/json-iterator/go/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 json-iterator
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/github.com/kelseyhightower/envconfig/LICENSE b/third_party/VENDOR-LICENSE/github.com/kelseyhightower/envconfig/LICENSE
new file mode 100644
index 00000000..4bfa7a84
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/kelseyhightower/envconfig/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2013 Kelsey Hightower
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/github.com/mailru/easyjson/LICENSE b/third_party/VENDOR-LICENSE/github.com/mailru/easyjson/LICENSE
new file mode 100644
index 00000000..fbff658f
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/mailru/easyjson/LICENSE
@@ -0,0 +1,7 @@
+Copyright (c) 2016 Mail.Ru Group
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/LICENSE b/third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/LICENSE
new file mode 100644
index 00000000..8dada3ed
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/NOTICE b/third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/NOTICE
new file mode 100644
index 00000000..5d8cb5b7
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/NOTICE
@@ -0,0 +1 @@
+Copyright 2012 Matt T. Proud (matt.proud@gmail.com)
diff --git a/third_party/VENDOR-LICENSE/github.com/modern-go/concurrent/LICENSE b/third_party/VENDOR-LICENSE/github.com/modern-go/concurrent/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/modern-go/concurrent/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/modern-go/reflect2/LICENSE b/third_party/VENDOR-LICENSE/github.com/modern-go/reflect2/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/modern-go/reflect2/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/munnerz/goautoneg/LICENSE b/third_party/VENDOR-LICENSE/github.com/munnerz/goautoneg/LICENSE
new file mode 100644
index 00000000..bbc7b897
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/munnerz/goautoneg/LICENSE
@@ -0,0 +1,31 @@
+Copyright (c) 2011, Open Knowledge Foundation Ltd.
+All rights reserved.
+
+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 the Open Knowledge Foundation Ltd. 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
+HOLDER 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/pkg/errors/LICENSE b/third_party/VENDOR-LICENSE/github.com/pkg/errors/LICENSE
new file mode 100644
index 00000000..835ba3e7
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/pkg/errors/LICENSE
@@ -0,0 +1,23 @@
+Copyright (c) 2015, Dave Cheney
+All rights reserved.
+
+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.
+
+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 HOLDER 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/prometheus/LICENSE b/third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/prometheus/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/prometheus/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/prometheus/NOTICE b/third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/prometheus/NOTICE
new file mode 100644
index 00000000..dd878a30
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/client_golang/prometheus/NOTICE
@@ -0,0 +1,23 @@
+Prometheus instrumentation library for Go applications
+Copyright 2012-2015 The Prometheus Authors
+
+This product includes software developed at
+SoundCloud Ltd. (http://soundcloud.com/).
+
+
+The following components are included in this product:
+
+perks - a fork of https://github.com/bmizerany/perks
+https://github.com/beorn7/perks
+Copyright 2013-2015 Blake Mizerany, Björn Rabenstein
+See https://github.com/beorn7/perks/blob/master/README.md for license details.
+
+Go support for Protocol Buffers - Google's data interchange format
+http://github.com/golang/protobuf/
+Copyright 2010 The Go Authors
+See source code for license details.
+
+Support for streaming Protocol Buffer messages for the Go language (golang).
+https://github.com/matttproud/golang_protobuf_extensions
+Copyright 2013 Matt T. Proud
+Licensed under the Apache License, Version 2.0
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/LICENSE b/third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/NOTICE b/third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/NOTICE
new file mode 100644
index 00000000..20110e41
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/client_model/go/NOTICE
@@ -0,0 +1,5 @@
+Data model artifacts for Prometheus.
+Copyright 2012-2015 The Prometheus Authors
+
+This product includes software developed at
+SoundCloud Ltd. (http://soundcloud.com/).
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/common/LICENSE b/third_party/VENDOR-LICENSE/github.com/prometheus/common/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/common/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/common/NOTICE b/third_party/VENDOR-LICENSE/github.com/prometheus/common/NOTICE
new file mode 100644
index 00000000..636a2c1a
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/common/NOTICE
@@ -0,0 +1,5 @@
+Common libraries shared by Prometheus Go components.
+Copyright 2015 The Prometheus Authors
+
+This product includes software developed at
+SoundCloud Ltd. (http://soundcloud.com/).
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt b/third_party/VENDOR-LICENSE/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt
new file mode 100644
index 00000000..7723656d
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt
@@ -0,0 +1,67 @@
+PACKAGE
+
+package goautoneg
+import "bitbucket.org/ww/goautoneg"
+
+HTTP Content-Type Autonegotiation.
+
+The functions in this package implement the behaviour specified in
+http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
+
+Copyright (c) 2011, Open Knowledge Foundation Ltd.
+All rights reserved.
+
+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 the Open Knowledge Foundation Ltd. 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
+HOLDER 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.
+
+
+FUNCTIONS
+
+func Negotiate(header string, alternatives []string) (content_type string)
+Negotiate the most appropriate content_type given the accept header
+and a list of alternatives.
+
+func ParseAccept(header string) (accept []Accept)
+Parse an Accept Header string returning a sorted list
+of clauses
+
+
+TYPES
+
+type Accept struct {
+ Type, SubType string
+ Q float32
+ Params map[string]string
+}
+Structure to represent a clause in an HTTP Accept Header
+
+
+SUBDIRECTORIES
+
+ .hg
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/procfs/LICENSE b/third_party/VENDOR-LICENSE/github.com/prometheus/procfs/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/procfs/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/procfs/NOTICE b/third_party/VENDOR-LICENSE/github.com/prometheus/procfs/NOTICE
new file mode 100644
index 00000000..53c5e9aa
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/procfs/NOTICE
@@ -0,0 +1,7 @@
+procfs provides functions to retrieve system, kernel and process
+metrics from the pseudo-filesystem proc.
+
+Copyright 2014-2015 The Prometheus Authors
+
+This product includes software developed at
+SoundCloud Ltd. (http://soundcloud.com/).
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/LICENSE b/third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/NOTICE b/third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/NOTICE
new file mode 100644
index 00000000..33179a98
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/prometheus/statsd_exporter/pkg/NOTICE
@@ -0,0 +1,5 @@
+StatsD-to-Prometheus exporter
+Copyright 2013-2015 The Prometheus Authors
+
+This product includes software developed at
+SoundCloud Ltd. (http://soundcloud.com/).
diff --git a/third_party/VENDOR-LICENSE/github.com/rickb777/date/period/LICENSE b/third_party/VENDOR-LICENSE/github.com/rickb777/date/period/LICENSE
new file mode 100644
index 00000000..b0280bc6
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/rickb777/date/period/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2015 The Go Authors & Rick Beton. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/github.com/rickb777/plural/LICENSE b/third_party/VENDOR-LICENSE/github.com/rickb777/plural/LICENSE
new file mode 100644
index 00000000..4faeca51
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/rickb777/plural/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2016, Rick Beton
+All rights reserved.
+
+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 plural 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 HOLDER 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.
diff --git a/third_party/VENDOR-LICENSE/github.com/robfig/cron/v3/LICENSE b/third_party/VENDOR-LICENSE/github.com/robfig/cron/v3/LICENSE
new file mode 100644
index 00000000..3a0f627f
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/robfig/cron/v3/LICENSE
@@ -0,0 +1,21 @@
+Copyright (C) 2012 Rob Figueiredo
+All Rights Reserved.
+
+MIT LICENSE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/github.com/spf13/pflag/LICENSE b/third_party/VENDOR-LICENSE/github.com/spf13/pflag/LICENSE
new file mode 100644
index 00000000..63ed1cfe
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/github.com/spf13/pflag/LICENSE
@@ -0,0 +1,28 @@
+Copyright (c) 2012 Alex Ogier. All rights reserved.
+Copyright (c) 2012 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/go.opencensus.io/LICENSE b/third_party/VENDOR-LICENSE/go.opencensus.io/LICENSE
new file mode 100644
index 00000000..7a4a3ea2
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/go.opencensus.io/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
\ No newline at end of file
diff --git a/third_party/VENDOR-LICENSE/go.uber.org/automaxprocs/LICENSE b/third_party/VENDOR-LICENSE/go.uber.org/automaxprocs/LICENSE
new file mode 100644
index 00000000..20dcf51d
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/go.uber.org/automaxprocs/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2017 Uber Technologies, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/third_party/VENDOR-LICENSE/go.uber.org/multierr/LICENSE.txt b/third_party/VENDOR-LICENSE/go.uber.org/multierr/LICENSE.txt
new file mode 100644
index 00000000..413e30f7
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/go.uber.org/multierr/LICENSE.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2017-2021 Uber Technologies, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/go.uber.org/zap/LICENSE.txt b/third_party/VENDOR-LICENSE/go.uber.org/zap/LICENSE.txt
new file mode 100644
index 00000000..6652bed4
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/go.uber.org/zap/LICENSE.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2016-2017 Uber Technologies, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/third_party/VENDOR-LICENSE/golang.org/x/net/LICENSE b/third_party/VENDOR-LICENSE/golang.org/x/net/LICENSE
new file mode 100644
index 00000000..6a66aea5
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/golang.org/x/net/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/golang.org/x/oauth2/LICENSE b/third_party/VENDOR-LICENSE/golang.org/x/oauth2/LICENSE
new file mode 100644
index 00000000..6a66aea5
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/golang.org/x/oauth2/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/golang.org/x/sync/LICENSE b/third_party/VENDOR-LICENSE/golang.org/x/sync/LICENSE
new file mode 100644
index 00000000..6a66aea5
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/golang.org/x/sync/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/golang.org/x/sys/unix/LICENSE b/third_party/VENDOR-LICENSE/golang.org/x/sys/unix/LICENSE
new file mode 100644
index 00000000..6a66aea5
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/golang.org/x/sys/unix/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/golang.org/x/term/LICENSE b/third_party/VENDOR-LICENSE/golang.org/x/term/LICENSE
new file mode 100644
index 00000000..6a66aea5
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/golang.org/x/term/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/golang.org/x/text/LICENSE b/third_party/VENDOR-LICENSE/golang.org/x/text/LICENSE
new file mode 100644
index 00000000..6a66aea5
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/golang.org/x/text/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/golang.org/x/time/rate/LICENSE b/third_party/VENDOR-LICENSE/golang.org/x/time/rate/LICENSE
new file mode 100644
index 00000000..6a66aea5
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/golang.org/x/time/rate/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/gomodules.xyz/jsonpatch/v2/LICENSE b/third_party/VENDOR-LICENSE/gomodules.xyz/jsonpatch/v2/LICENSE
new file mode 100644
index 00000000..8f71f43f
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/gomodules.xyz/jsonpatch/v2/LICENSE
@@ -0,0 +1,202 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
+
diff --git a/third_party/VENDOR-LICENSE/google.golang.org/api/support/bundler/LICENSE b/third_party/VENDOR-LICENSE/google.golang.org/api/support/bundler/LICENSE
new file mode 100644
index 00000000..263aa7a0
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/google.golang.org/api/support/bundler/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2011 Google Inc. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/google.golang.org/genproto/googleapis/api/httpbody/LICENSE b/third_party/VENDOR-LICENSE/google.golang.org/genproto/googleapis/api/httpbody/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/google.golang.org/genproto/googleapis/api/httpbody/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/google.golang.org/genproto/googleapis/rpc/status/LICENSE b/third_party/VENDOR-LICENSE/google.golang.org/genproto/googleapis/rpc/status/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/google.golang.org/genproto/googleapis/rpc/status/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/google.golang.org/genproto/protobuf/field_mask/LICENSE b/third_party/VENDOR-LICENSE/google.golang.org/genproto/protobuf/field_mask/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/google.golang.org/genproto/protobuf/field_mask/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/google.golang.org/grpc/LICENSE b/third_party/VENDOR-LICENSE/google.golang.org/grpc/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/google.golang.org/grpc/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/google.golang.org/grpc/NOTICE.txt b/third_party/VENDOR-LICENSE/google.golang.org/grpc/NOTICE.txt
new file mode 100644
index 00000000..53019774
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/google.golang.org/grpc/NOTICE.txt
@@ -0,0 +1,13 @@
+Copyright 2014 gRPC authors.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/google.golang.org/protobuf/LICENSE b/third_party/VENDOR-LICENSE/google.golang.org/protobuf/LICENSE
new file mode 100644
index 00000000..49ea0f92
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/google.golang.org/protobuf/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2018 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/gopkg.in/inf.v0/LICENSE b/third_party/VENDOR-LICENSE/gopkg.in/inf.v0/LICENSE
new file mode 100644
index 00000000..87a5cede
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/gopkg.in/inf.v0/LICENSE
@@ -0,0 +1,28 @@
+Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go
+Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/LICENSE b/third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/LICENSE
new file mode 100644
index 00000000..8dada3ed
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/NOTICE b/third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/NOTICE
new file mode 100644
index 00000000..866d74a7
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/gopkg.in/yaml.v2/NOTICE
@@ -0,0 +1,13 @@
+Copyright 2011-2016 Canonical Ltd.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/LICENSE b/third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/LICENSE
new file mode 100644
index 00000000..2683e4bb
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/LICENSE
@@ -0,0 +1,50 @@
+
+This project is covered by two different licenses: MIT and Apache.
+
+#### MIT License ####
+
+The following files were ported to Go from C files of libyaml, and thus
+are still covered by their original MIT license, with the additional
+copyright staring in 2011 when the project was ported over:
+
+ apic.go emitterc.go parserc.go readerc.go scannerc.go
+ writerc.go yamlh.go yamlprivateh.go
+
+Copyright (c) 2006-2010 Kirill Simonov
+Copyright (c) 2006-2011 Kirill Simonov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+### Apache License ###
+
+All the remaining project files are covered by the Apache license:
+
+Copyright (c) 2011-2019 Canonical Ltd
+
+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.
diff --git a/third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/NOTICE b/third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/NOTICE
new file mode 100644
index 00000000..866d74a7
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/gopkg.in/yaml.v3/NOTICE
@@ -0,0 +1,13 @@
+Copyright 2011-2016 Canonical Ltd.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/api/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/api/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/api/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/apimachinery/pkg/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/apimachinery/pkg/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/apimachinery/pkg/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/apimachinery/third_party/forked/golang/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/apimachinery/third_party/forked/golang/LICENSE
new file mode 100644
index 00000000..6a66aea5
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/apimachinery/third_party/forked/golang/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/client-go/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/client-go/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/client-go/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/klog/v2/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/klog/v2/LICENSE
new file mode 100644
index 00000000..37ec93a1
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/klog/v2/LICENSE
@@ -0,0 +1,191 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright
+owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities
+that control, are controlled by, or are under common control with that entity.
+For the purposes of this definition, "control" means (i) the power, direct or
+indirect, to cause the direction or management of such entity, whether by
+contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and configuration
+files.
+
+"Object" form shall mean any form resulting from mechanical transformation or
+translation of a Source form, including but not limited to compiled object code,
+generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made
+available under the License, as indicated by a copyright notice that is included
+in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that
+is based on (or derived from) the Work and for which the editorial revisions,
+annotations, elaborations, or other modifications represent, as a whole, an
+original work of authorship. For the purposes of this License, Derivative Works
+shall not include works that remain separable from, or merely link (or bind by
+name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version
+of the Work and any modifications or additions to that Work or Derivative Works
+thereof, that is intentionally submitted to Licensor for inclusion in the Work
+by the copyright owner or by an individual or Legal Entity authorized to submit
+on behalf of the copyright owner. For the purposes of this definition,
+"submitted" means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems, and
+issue tracking systems that are managed by, or on behalf of, the Licensor for
+the purpose of discussing and improving the Work, but excluding communication
+that is conspicuously marked or otherwise designated in writing by the copyright
+owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
+of whom a Contribution has been received by Licensor and subsequently
+incorporated within the Work.
+
+2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.
+
+3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable (except as stated in this section) patent license to make, have
+made, use, offer to sell, sell, import, and otherwise transfer the Work, where
+such license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by combination
+of their Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or contributory
+patent infringement, then any patent licenses granted to You under this License
+for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof
+in any medium, with or without modifications, and in Source or Object form,
+provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of
+this License; and
+You must cause any modified files to carry prominent notices stating that You
+changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute,
+all copyright, patent, trademark, and attribution notices from the Source form
+of the Work, excluding those notices that do not pertain to any part of the
+Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any
+Derivative Works that You distribute must include a readable copy of the
+attribution notices contained within such NOTICE file, excluding those notices
+that do not pertain to any part of the Derivative Works, in at least one of the
+following places: within a NOTICE text file distributed as part of the
+Derivative Works; within the Source form or documentation, if provided along
+with the Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The contents of
+the NOTICE file are for informational purposes only and do not modify the
+License. You may add Your own attribution notices within Derivative Works that
+You distribute, alongside or as an addendum to the NOTICE text from the Work,
+provided that such additional attribution notices cannot be construed as
+modifying the License.
+You may add Your own copyright statement to Your modifications and may provide
+additional or different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works as a whole,
+provided Your use, reproduction, and distribution of the Work otherwise complies
+with the conditions stated in this License.
+
+5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted
+for inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the terms of
+any separate license agreement you may have executed with Licensor regarding
+such Contributions.
+
+6. Trademarks.
+
+This License does not grant permission to use the trade names, trademarks,
+service marks, or product names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor provides the
+Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
+including, without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
+solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise of
+permissions under this License.
+
+8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including negligence),
+contract, or otherwise, unless required by applicable law (such as deliberate
+and grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License or
+out of the use or inability to use the Work (including but not limited to
+damages for loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses), even if such Contributor has
+been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to
+offer, and charge a fee for, acceptance of support, warranty, indemnity, or
+other liability obligations and/or rights consistent with this License. However,
+in accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if You
+agree to indemnify, defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason of your
+accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included on
+the same "printed page" as the copyright notice for easier identification within
+third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/LICENSE
new file mode 100644
index 00000000..24412730
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2020 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/validation/spec/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/validation/spec/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/kube-openapi/pkg/validation/spec/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/utils/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/utils/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/utils/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/k8s.io/utils/internal/third_party/forked/golang/net/LICENSE b/third_party/VENDOR-LICENSE/k8s.io/utils/internal/third_party/forked/golang/net/LICENSE
new file mode 100644
index 00000000..74487567
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/k8s.io/utils/internal/third_party/forked/golang/net/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2012 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/knative.dev/backstage-plugins/backends/LICENSE b/third_party/VENDOR-LICENSE/knative.dev/backstage-plugins/backends/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/knative.dev/backstage-plugins/backends/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/knative.dev/eventing/pkg/LICENSE b/third_party/VENDOR-LICENSE/knative.dev/eventing/pkg/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/knative.dev/eventing/pkg/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/knative.dev/pkg/LICENSE b/third_party/VENDOR-LICENSE/knative.dev/pkg/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/knative.dev/pkg/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/sigs.k8s.io/json/LICENSE b/third_party/VENDOR-LICENSE/sigs.k8s.io/json/LICENSE
new file mode 100644
index 00000000..e5adf7f0
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/sigs.k8s.io/json/LICENSE
@@ -0,0 +1,238 @@
+Files other than internal/golang/* licensed under:
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
+
+
+------------------
+
+internal/golang/* files licensed under:
+
+
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+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.
diff --git a/third_party/VENDOR-LICENSE/sigs.k8s.io/structured-merge-diff/v4/LICENSE b/third_party/VENDOR-LICENSE/sigs.k8s.io/structured-merge-diff/v4/LICENSE
new file mode 100644
index 00000000..8dada3ed
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/sigs.k8s.io/structured-merge-diff/v4/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/LICENSE b/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/LICENSE
new file mode 100644
index 00000000..093d6d3e
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/LICENSE
@@ -0,0 +1,306 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Sam Ghods
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+Copyright (c) 2012 The Go Authors. All rights reserved.
+
+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.
+
+# The forked go-yaml.v3 library under this project is covered by two
+different licenses (MIT and Apache):
+
+#### MIT License ####
+
+The following files were ported to Go from C files of libyaml, and thus
+are still covered by their original MIT license, with the additional
+copyright staring in 2011 when the project was ported over:
+
+ apic.go emitterc.go parserc.go readerc.go scannerc.go
+ writerc.go yamlh.go yamlprivateh.go
+
+Copyright (c) 2006-2010 Kirill Simonov
+Copyright (c) 2006-2011 Kirill Simonov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+### Apache License ###
+
+All the remaining project files are covered by the Apache license:
+
+Copyright (c) 2011-2019 Canonical Ltd
+
+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.
+
+# The forked go-yaml.v2 library under the project is covered by an
+Apache license:
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/goyaml.v2/LICENSE b/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/goyaml.v2/LICENSE
new file mode 100644
index 00000000..8dada3ed
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/goyaml.v2/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
diff --git a/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/goyaml.v2/NOTICE b/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/goyaml.v2/NOTICE
new file mode 100644
index 00000000..866d74a7
--- /dev/null
+++ b/third_party/VENDOR-LICENSE/sigs.k8s.io/yaml/goyaml.v2/NOTICE
@@ -0,0 +1,13 @@
+Copyright 2011-2016 Canonical Ltd.
+
+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.
diff --git a/vendor/contrib.go.opencensus.io/exporter/zipkin/.travis.yml b/vendor/contrib.go.opencensus.io/exporter/zipkin/.travis.yml
new file mode 100644
index 00000000..957a893d
--- /dev/null
+++ b/vendor/contrib.go.opencensus.io/exporter/zipkin/.travis.yml
@@ -0,0 +1,17 @@
+language: go
+
+go_import_path: contrib.go.opencensus.io
+
+go:
+ - 1.11.x
+
+env:
+ global:
+ GO111MODULE=on
+
+before_script:
+ - make install-tools
+
+script:
+ - make travis-ci
+
diff --git a/vendor/contrib.go.opencensus.io/exporter/zipkin/LICENSE b/vendor/contrib.go.opencensus.io/exporter/zipkin/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/vendor/contrib.go.opencensus.io/exporter/zipkin/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/vendor/contrib.go.opencensus.io/exporter/zipkin/Makefile b/vendor/contrib.go.opencensus.io/exporter/zipkin/Makefile
new file mode 100644
index 00000000..2e11d225
--- /dev/null
+++ b/vendor/contrib.go.opencensus.io/exporter/zipkin/Makefile
@@ -0,0 +1,95 @@
+# TODO: Fix this on windows.
+ALL_SRC := $(shell find . -name '*.go' \
+ -not -path './vendor/*' \
+ -not -path '*/gen-go/*' \
+ -type f | sort)
+ALL_PKGS := $(shell go list $(sort $(dir $(ALL_SRC))))
+
+GOTEST_OPT?=-v -race -timeout 30s
+GOTEST_OPT_WITH_COVERAGE = $(GOTEST_OPT) -coverprofile=coverage.txt -covermode=atomic
+GOTEST=go test
+GOFMT=gofmt
+GOLINT=golint
+GOVET=go vet
+EMBEDMD=embedmd
+# TODO decide if we need to change these names.
+README_FILES := $(shell find . -name '*README.md' | sort | tr '\n' ' ')
+
+
+.DEFAULT_GOAL := fmt-lint-vet-embedmd-test
+
+.PHONY: fmt-lint-vet-embedmd-test
+fmt-lint-vet-embedmd-test: fmt lint vet embedmd test
+
+# TODO enable test-with-coverage in tavis
+.PHONY: travis-ci
+travis-ci: fmt lint vet embedmd test test-386
+
+all-pkgs:
+ @echo $(ALL_PKGS) | tr ' ' '\n' | sort
+
+all-srcs:
+ @echo $(ALL_SRC) | tr ' ' '\n' | sort
+
+.PHONY: test
+test:
+ $(GOTEST) $(GOTEST_OPT) $(ALL_PKGS)
+
+.PHONY: test-386
+test-386:
+ GOARCH=386 $(GOTEST) -v -timeout 30s $(ALL_PKGS)
+
+.PHONY: test-with-coverage
+test-with-coverage:
+ $(GOTEST) $(GOTEST_OPT_WITH_COVERAGE) $(ALL_PKGS)
+
+.PHONY: fmt
+fmt:
+ @FMTOUT=`$(GOFMT) -s -l $(ALL_SRC) 2>&1`; \
+ if [ "$$FMTOUT" ]; then \
+ echo "$(GOFMT) FAILED => gofmt the following files:\n"; \
+ echo "$$FMTOUT\n"; \
+ exit 1; \
+ else \
+ echo "Fmt finished successfully"; \
+ fi
+
+.PHONY: lint
+lint:
+ @LINTOUT=`$(GOLINT) $(ALL_PKGS) 2>&1`; \
+ if [ "$$LINTOUT" ]; then \
+ echo "$(GOLINT) FAILED => clean the following lint errors:\n"; \
+ echo "$$LINTOUT\n"; \
+ exit 1; \
+ else \
+ echo "Lint finished successfully"; \
+ fi
+
+.PHONY: vet
+vet:
+ # TODO: Understand why go vet downloads "github.com/google/go-cmp v0.2.0"
+ @VETOUT=`$(GOVET) ./... | grep -v "go: downloading" 2>&1`; \
+ if [ "$$VETOUT" ]; then \
+ echo "$(GOVET) FAILED => go vet the following files:\n"; \
+ echo "$$VETOUT\n"; \
+ exit 1; \
+ else \
+ echo "Vet finished successfully"; \
+ fi
+
+.PHONY: embedmd
+embedmd:
+ @EMBEDMDOUT=`$(EMBEDMD) -d $(README_FILES) 2>&1`; \
+ if [ "$$EMBEDMDOUT" ]; then \
+ echo "$(EMBEDMD) FAILED => embedmd the following files:\n"; \
+ echo "$$EMBEDMDOUT\n"; \
+ exit 1; \
+ else \
+ echo "Embedmd finished successfully"; \
+ fi
+
+.PHONY: install-tools
+install-tools:
+ go get -u golang.org/x/tools/cmd/cover
+ go get -u golang.org/x/lint/golint
+ go get -u github.com/rakyll/embedmd
diff --git a/vendor/contrib.go.opencensus.io/exporter/zipkin/README.md b/vendor/contrib.go.opencensus.io/exporter/zipkin/README.md
new file mode 100644
index 00000000..51bc3cbc
--- /dev/null
+++ b/vendor/contrib.go.opencensus.io/exporter/zipkin/README.md
@@ -0,0 +1,14 @@
+# OpenCensus Go Zipkin Exporter
+
+[![Build Status](https://travis-ci.org/census-ecosystem/opencensus-go-exporter-zipkin.svg?branch=master)](https://travis-ci.org/census-ecosystem/opencensus-go-exporter-zipkin) [![GoDoc][godoc-image]][godoc-url]
+
+Provides OpenCensus exporter support for Zipkin.
+
+## Installation
+
+```
+$ go get -u contrib.go.opencensus.io/exporter/zipkin
+```
+
+[godoc-image]: https://godoc.org/contrib.go.opencensus.io/exporter/zipkin?status.svg
+[godoc-url]: https://godoc.org/contrib.go.opencensus.io/exporter/zipkin
diff --git a/vendor/contrib.go.opencensus.io/exporter/zipkin/zipkin.go b/vendor/contrib.go.opencensus.io/exporter/zipkin/zipkin.go
new file mode 100644
index 00000000..6bd28ff8
--- /dev/null
+++ b/vendor/contrib.go.opencensus.io/exporter/zipkin/zipkin.go
@@ -0,0 +1,197 @@
+// Copyright 2017, OpenCensus Authors
+//
+// 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 zipkin contains an trace exporter for Zipkin.
+package zipkin // import "contrib.go.opencensus.io/exporter/zipkin"
+
+import (
+ "encoding/binary"
+ "fmt"
+ "strconv"
+
+ "github.com/openzipkin/zipkin-go/model"
+ "github.com/openzipkin/zipkin-go/reporter"
+ "go.opencensus.io/trace"
+)
+
+// Exporter is an implementation of trace.Exporter that uploads spans to a
+// Zipkin server.
+type Exporter struct {
+ reporter reporter.Reporter
+ localEndpoint *model.Endpoint
+}
+
+// NewExporter returns an implementation of trace.Exporter that uploads spans
+// to a Zipkin server.
+//
+// reporter is a Zipkin Reporter which will be used to send the spans. These
+// can be created with the openzipkin library, using one of the packages under
+// github.com/openzipkin/zipkin-go/reporter.
+//
+// localEndpoint sets the local endpoint of exported spans. It can be
+// constructed with github.com/openzipkin/zipkin-go.NewEndpoint, e.g.:
+// localEndpoint, err := NewEndpoint("my server", listener.Addr().String())
+// localEndpoint can be nil.
+func NewExporter(reporter reporter.Reporter, localEndpoint *model.Endpoint) *Exporter {
+ return &Exporter{
+ reporter: reporter,
+ localEndpoint: localEndpoint,
+ }
+}
+
+// ExportSpan exports a span to a Zipkin server.
+func (e *Exporter) ExportSpan(s *trace.SpanData) {
+ e.reporter.Send(zipkinSpan(s, e.localEndpoint))
+}
+
+const (
+ statusCodeTagKey = "error"
+ statusDescriptionTagKey = "opencensus.status_description"
+)
+
+var (
+ sampledTrue = true
+ canonicalCodes = [...]string{
+ "OK",
+ "CANCELLED",
+ "UNKNOWN",
+ "INVALID_ARGUMENT",
+ "DEADLINE_EXCEEDED",
+ "NOT_FOUND",
+ "ALREADY_EXISTS",
+ "PERMISSION_DENIED",
+ "RESOURCE_EXHAUSTED",
+ "FAILED_PRECONDITION",
+ "ABORTED",
+ "OUT_OF_RANGE",
+ "UNIMPLEMENTED",
+ "INTERNAL",
+ "UNAVAILABLE",
+ "DATA_LOSS",
+ "UNAUTHENTICATED",
+ }
+)
+
+func canonicalCodeString(code int32) string {
+ if code < 0 || int(code) >= len(canonicalCodes) {
+ return "error code " + strconv.FormatInt(int64(code), 10)
+ }
+ return canonicalCodes[code]
+}
+
+func convertTraceID(t trace.TraceID) model.TraceID {
+ return model.TraceID{
+ High: binary.BigEndian.Uint64(t[:8]),
+ Low: binary.BigEndian.Uint64(t[8:]),
+ }
+}
+
+func convertSpanID(s trace.SpanID) model.ID {
+ return model.ID(binary.BigEndian.Uint64(s[:]))
+}
+
+func spanKind(s *trace.SpanData) model.Kind {
+ switch s.SpanKind {
+ case trace.SpanKindClient:
+ return model.Client
+ case trace.SpanKindServer:
+ return model.Server
+ }
+ return model.Undetermined
+}
+
+func zipkinSpan(s *trace.SpanData, localEndpoint *model.Endpoint) model.SpanModel {
+ sc := s.SpanContext
+ z := model.SpanModel{
+ SpanContext: model.SpanContext{
+ TraceID: convertTraceID(sc.TraceID),
+ ID: convertSpanID(sc.SpanID),
+ Sampled: &sampledTrue,
+ },
+ Kind: spanKind(s),
+ Name: s.Name,
+ Timestamp: s.StartTime,
+ Shared: false,
+ LocalEndpoint: localEndpoint,
+ }
+
+ if s.ParentSpanID != (trace.SpanID{}) {
+ id := convertSpanID(s.ParentSpanID)
+ z.ParentID = &id
+ }
+
+ if s, e := s.StartTime, s.EndTime; !s.IsZero() && !e.IsZero() {
+ z.Duration = e.Sub(s)
+ }
+
+ // construct Tags from s.Attributes and s.Status.
+ if len(s.Attributes) != 0 {
+ m := make(map[string]string, len(s.Attributes)+2)
+ for key, value := range s.Attributes {
+ switch v := value.(type) {
+ case string:
+ m[key] = v
+ case bool:
+ if v {
+ m[key] = "true"
+ } else {
+ m[key] = "false"
+ }
+ case int64:
+ m[key] = strconv.FormatInt(v, 10)
+ case float64:
+ m[key] = strconv.FormatFloat(v, 'f', -1, 64)
+ }
+ }
+ z.Tags = m
+ }
+ if s.Status.Code != 0 || s.Status.Message != "" {
+ if z.Tags == nil {
+ z.Tags = make(map[string]string, 2)
+ }
+ if s.Status.Code != 0 {
+ z.Tags[statusCodeTagKey] = canonicalCodeString(s.Status.Code)
+ }
+ if s.Status.Message != "" {
+ z.Tags[statusDescriptionTagKey] = s.Status.Message
+ }
+ }
+
+ // construct Annotations from s.Annotations and s.MessageEvents.
+ if len(s.Annotations) != 0 || len(s.MessageEvents) != 0 {
+ z.Annotations = make([]model.Annotation, 0, len(s.Annotations)+len(s.MessageEvents))
+ for _, a := range s.Annotations {
+ z.Annotations = append(z.Annotations, model.Annotation{
+ Timestamp: a.Time,
+ Value: a.Message,
+ })
+ }
+ for _, m := range s.MessageEvents {
+ a := model.Annotation{
+ Timestamp: m.Time,
+ }
+ switch m.EventType {
+ case trace.MessageEventTypeSent:
+ a.Value = fmt.Sprintf("Sent %d bytes", m.UncompressedByteSize)
+ case trace.MessageEventTypeRecv:
+ a.Value = fmt.Sprintf("Received %d bytes", m.UncompressedByteSize)
+ default:
+ a.Value = ">"
+ }
+ z.Annotations = append(z.Annotations, a)
+ }
+ }
+
+ return z
+}
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/.gitignore b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/.gitignore
new file mode 100644
index 00000000..a4d184e8
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/.gitignore
@@ -0,0 +1,16 @@
+# Binaries for programs and plugins
+refdocs
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, build with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
+
+# goreleaser output
+dist
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/.goreleaser.yml b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/.goreleaser.yml
new file mode 100644
index 00000000..f1caccad
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/.goreleaser.yml
@@ -0,0 +1,24 @@
+builds:
+ - env:
+ - CGO_ENABLED=0
+ # travis ci currently sets GOPATH even with go1.11.
+ # force-setting GO111MODULE=on to use vgo
+ - GO111MODULE=on
+ goos:
+ - linux
+ - darwin
+ goarch:
+ - amd64
+archive:
+ name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}"
+ files:
+ - LICENSE
+ - template/**
+ - example-config.json
+checksum:
+ name_template: "checksums.txt"
+changelog:
+ skip: true
+release:
+ # releases are uploaded to github by .travis.yml
+ disable: true
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/.travis.yml b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/.travis.yml
new file mode 100644
index 00000000..d6845bab
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/.travis.yml
@@ -0,0 +1,32 @@
+language: go
+go:
+ - 1.11.x
+install:
+ - echo noop
+before_script:
+ # travis ci currently sets GOPATH even with go1.11.
+ # force-setting GO111MODULE=on to use vgo
+ - env GO111MODULE=on go mod download
+script:
+ # travis ci currently sets GOPATH even with go1.11.
+ # force-setting GO111MODULE=on to use vgo
+ - env GO111MODULE=on go build -v -o /dev/null
+deploy:
+ # use goreleaser to prepare dist/
+ - provider: script
+ skip_cleanup: true
+ on:
+ tags: true
+ script: curl -sL https://git.io/goreleaser | bash
+ # use github release feature to upload dist/
+ - provider: releases
+ skip_cleanup: true
+ on:
+ tags: true
+ file_glob: true
+ file:
+ - dist/*.tar.gz
+ - dist/*.zip
+ - dist/checksums.txt
+ api_key:
+ secure: r1GMgbVDnZTUcny/PbIATW9dXGOTpm2U9iEGaWvpprMO2AGo7ju7SWEJWtjcap3pc0YasyR2/eon9LC0scWY0Xlpeb+g0pRCQ39FABk1Vo3DpmIPRUCFFkaescWmrWDj3ImzjJgZjCewwK6Fo8s8ngnqIlZnE1Hq6ls2xDp6jNVf+Pn7LyqxkK4axFFSPQM9zFX3N1PVUH5RT03bIJfojJZguqnhNfyTvKvHJidoeWU/Ie+fXc4AdPHyP85xrmGHYl68O0HziU6JCLXira8r1FjUgVeYFYC5nnNuylszO6JWqWh1nXYDxs5FGPnZd9N8bEi/2ahiqms8eV7S+/DGzhSoEdHikcBxTgJpZP2VOmvRSITyv3RleJzCeMULTGFQodoxRgA/Q8qZySvInNjstiBjV2Pyucrnn990XQbN8rIV4RmNggJvbAwJNCGjCwS2eB42EKNCODTuzHPbIV0ap4EjvfBBo0cZ2J9M2Q6VzdpNErdntpM1hZl9yymv3MNN4hOiLQKkofoo/QI3cffB8Y0PBPAL8Cs9Mx1bbx+Dr8iitTHBUAt4a5DHFen4MS8znrZ+Cr4kLDD9QPJ8G0oh4tDKq8CJ73Gt+xqkLZEuka0W1awz9essqE7MH20kRJbKa5woTIs0v9njHMpbeqd7KrNV+1e5F5aPRQyiCzaom7c=
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/LICENSE b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/README.md b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/README.md
new file mode 100644
index 00000000..f52116c4
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/README.md
@@ -0,0 +1,80 @@
+# Kubernetes Custom Resource API Reference Docs generator
+
+If you have a project that is Custom Resource Definitions and wanted to generate
+API Reference Docs [like this][ar] this tool is for you.
+
+[ar]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/
+
+## Current Users
+
+- [**Knative** API reference docs](https://www.knative.dev/docs/reference/)
+- [**Kubeflow** API reference docs](https://www.kubeflow.org/docs/reference/overview/)
+- [**Agones** API reference docs](https://agones.dev/site/docs/reference/agones_crd_api_reference/)
+- [**cert-manager** API reference docs](https://cert-manager.io/docs/reference/api-docs/)
+- [**Gardener** API reference docs](https://gardener.cloud/api-reference/)
+- [**New Relic Alert Manager** API reference docs](https://github.com/fpetkovski/newrelic-alert-manager/tree/master/docs)
+- _[[ADD YOUR PROJECT HERE]]_
+
+## Why
+
+Normally you would want to use the same [docs generator][dg] as [Kubernetes API
+reference][ar], but here's why I wrote a different parser/generator:
+
+1. Today, Kubernetes API [does not][pr] provide OpenAPI specs for CRDs (e.g.
+ Knative), therefore the [gen-apidocs][ga]
+ generator used by Kubernetes won't work.
+
+2. Even when Kubernetes API starts providing OpenAPI specs for CRDs, your CRD
+ must have a validation schema (e.g. Knative API doesn't!)
+
+3. Kubernetes [gen-apidocs][ga] parser relies on running a `kube-apiserver` and
+ calling `/apis` endpoint to get OpenAPI specs to generate docs. **This tool
+ doesn't need that!**
+
+[dg]: https://github.com/kubernetes-incubator/reference-docs/
+[ga]: https://github.com/kubernetes-incubator/reference-docs/tree/master/gen-apidocs/generators
+[pr]: https://github.com/kubernetes/kubernetes/pull/71192
+
+## How
+
+This is a custom API reference docs generator that uses the
+[k8s.io/gengo](https://godoc.org/k8s.io/gengo) project to parse types and
+generate API documentation from it.
+
+Capabilities of this tool include:
+
+- Doesn't depend on OpenAPI specs, or kube-apiserver, or a running cluster.
+- Relies only on the Go source code (pkg/apis/**/*.go) to parse API types.
+- Can link to other sites for external APIs. For example, if your types have a
+ reference to Kubernetes core/v1.PodSpec, you can link to it.
+- [Configurable](./example-config.json) settings to hide certain fields or types
+ entirely from the generated output.
+- Either output to a file or start a live http-server (for rapid iteration).
+- Supports markdown rendering from godoc type, package and field comments.
+
+## Try it out
+
+1. Clone this repository.
+
+2. Make sure you have go1.11+ instaled. Then run `go build`, you should get a
+ `refdocs` binary executable.
+
+3. Clone a Knative repository, set GOPATH correctly,
+ and call the compiled binary within that directory.
+
+ ```sh
+ # go into a repository root with GOPATH set. (I use my own script
+ # goclone(1) to have a separate GOPATH for each repo I clone.)
+ $ goclone knative/build
+
+ $ /path/to/refdocs \
+ -config "/path/to/example-config.json" \
+ -api-dir "github.com/knative/build/pkg/apis/build/v1alpha1" \
+ -out-file docs.html
+ ```
+
+4. Visit `docs.html` to view the results.
+
+-----
+
+This is not an official Google project. See [LICENSE](./LICENSE).
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/example-config.json b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/example-config.json
new file mode 100644
index 00000000..298f00b6
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/example-config.json
@@ -0,0 +1,28 @@
+{
+ "hideMemberFields": [
+ "TypeMeta"
+ ],
+ "hideTypePatterns": [
+ "ParseError$",
+ "List$"
+ ],
+ "externalPackages": [
+ {
+ "typeMatchPrefix": "^k8s\\.io/apimachinery/pkg/apis/meta/v1\\.Duration$",
+ "docsURLTemplate": "https://pkg.go.dev/k8s.io/apimachinery/pkg/apis/meta/v1#Duration"
+ },
+ {
+ "typeMatchPrefix": "^k8s\\.io/(api|apimachinery/pkg/apis)/",
+ "docsURLTemplate": "https://v1-18.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#{{lower .TypeIdentifier}}-{{arrIndex .PackageSegments -1}}-{{arrIndex .PackageSegments -2}}"
+ },
+ {
+ "typeMatchPrefix": "^github\\.com/knative/pkg/apis/duck/",
+ "docsURLTemplate": "https://pkg.go.dev/github.com/knative/pkg/apis/duck/{{arrIndex .PackageSegments -1}}#{{.TypeIdentifier}}"
+ }
+ ],
+ "typeDisplayNamePrefixOverrides": {
+ "k8s.io/api/": "Kubernetes ",
+ "k8s.io/apimachinery/pkg/apis/": "Kubernetes "
+ },
+ "markdownDisabled": false
+}
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/main.go b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/main.go
new file mode 100644
index 00000000..dae42e11
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/main.go
@@ -0,0 +1,701 @@
+package main
+
+import (
+ "bytes"
+ "encoding/json"
+ "flag"
+ "fmt"
+ "html/template"
+ "io"
+ "io/ioutil"
+ "net/http"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "reflect"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+ texttemplate "text/template"
+ "time"
+ "unicode"
+
+ "github.com/pkg/errors"
+ "github.com/russross/blackfriday/v2"
+ "k8s.io/gengo/parser"
+ "k8s.io/gengo/types"
+ "k8s.io/klog"
+)
+
+var (
+ flConfig = flag.String("config", "", "path to config file")
+ flAPIDir = flag.String("api-dir", "", "api directory (or import path), point this to pkg/apis")
+ flTemplateDir = flag.String("template-dir", "template", "path to template/ dir")
+
+ flHTTPAddr = flag.String("http-addr", "", "start an HTTP server on specified addr to view the result (e.g. :8080)")
+ flOutFile = flag.String("out-file", "", "path to output file to save the result")
+)
+
+const (
+ docCommentForceIncludes = "// +gencrdrefdocs:force"
+)
+
+type generatorConfig struct {
+ // HiddenMemberFields hides fields with specified names on all types.
+ HiddenMemberFields []string `json:"hideMemberFields"`
+
+ // HideTypePatterns hides types matching the specified patterns from the
+ // output.
+ HideTypePatterns []string `json:"hideTypePatterns"`
+
+ // ExternalPackages lists recognized external package references and how to
+ // link to them.
+ ExternalPackages []externalPackage `json:"externalPackages"`
+
+ // TypeDisplayNamePrefixOverrides is a mapping of how to override displayed
+ // name for types with certain prefixes with what value.
+ TypeDisplayNamePrefixOverrides map[string]string `json:"typeDisplayNamePrefixOverrides"`
+
+ // MarkdownDisabled controls markdown rendering for comment lines.
+ MarkdownDisabled bool `json:"markdownDisabled"`
+
+ // GitCommitDisabled causes the git commit information to be excluded from the output.
+ GitCommitDisabled bool `json:"gitCommitDisabled"`
+}
+
+type externalPackage struct {
+ TypeMatchPrefix string `json:"typeMatchPrefix"`
+ DocsURLTemplate string `json:"docsURLTemplate"`
+}
+
+type apiPackage struct {
+ apiGroup string
+ apiVersion string
+ GoPackages []*types.Package
+ Types []*types.Type // because multiple 'types.Package's can add types to an apiVersion
+ Constants []*types.Type
+}
+
+func (v *apiPackage) identifier() string { return fmt.Sprintf("%s/%s", v.apiGroup, v.apiVersion) }
+
+func init() {
+ klog.InitFlags(nil)
+ flag.Set("alsologtostderr", "true") // for klog
+ flag.Parse()
+
+ if *flConfig == "" {
+ panic("-config not specified")
+ }
+ if *flAPIDir == "" {
+ panic("-api-dir not specified")
+ }
+ if *flHTTPAddr == "" && *flOutFile == "" {
+ panic("-out-file or -http-addr must be specified")
+ }
+ if *flHTTPAddr != "" && *flOutFile != "" {
+ panic("only -out-file or -http-addr can be specified")
+ }
+ if err := resolveTemplateDir(*flTemplateDir); err != nil {
+ panic(err)
+ }
+
+}
+
+func resolveTemplateDir(dir string) error {
+ path, err := filepath.Abs(dir)
+ if err != nil {
+ return err
+ }
+ if fi, err := os.Stat(path); err != nil {
+ return errors.Wrapf(err, "cannot read the %s directory", path)
+ } else if !fi.IsDir() {
+ return errors.Errorf("%s path is not a directory", path)
+ }
+ return nil
+}
+
+func main() {
+ defer klog.Flush()
+
+ f, err := os.Open(*flConfig)
+ if err != nil {
+ klog.Fatalf("failed to open config file: %+v", err)
+ }
+ d := json.NewDecoder(f)
+ d.DisallowUnknownFields()
+ var config generatorConfig
+ if err := d.Decode(&config); err != nil {
+ klog.Fatalf("failed to parse config file: %+v", err)
+ }
+
+ klog.Infof("parsing go packages in directory %s", *flAPIDir)
+ pkgs, err := parseAPIPackages(*flAPIDir)
+ if err != nil {
+ klog.Fatal(err)
+ }
+ if len(pkgs) == 0 {
+ klog.Fatalf("no API packages found in %s", *flAPIDir)
+ }
+
+ apiPackages, err := combineAPIPackages(pkgs)
+ if err != nil {
+ klog.Fatal(err)
+ }
+
+ mkOutput := func() (string, error) {
+ var b bytes.Buffer
+ err := render(&b, apiPackages, config)
+ if err != nil {
+ return "", errors.Wrap(err, "failed to render the result")
+ }
+
+ // remove trailing whitespace from each html line for markdown renderers
+ s := regexp.MustCompile(`(?m)^\s+`).ReplaceAllString(b.String(), "")
+ return s, nil
+ }
+
+ if *flOutFile != "" {
+ dir := filepath.Dir(*flOutFile)
+ if err := os.MkdirAll(dir, 0755); err != nil {
+ klog.Fatalf("failed to create dir %s: %v", dir, err)
+ }
+ s, err := mkOutput()
+ if err != nil {
+ klog.Fatalf("failed: %+v", err)
+ }
+ if err := ioutil.WriteFile(*flOutFile, []byte(s), 0644); err != nil {
+ klog.Fatalf("failed to write to out file: %v", err)
+ }
+ klog.Infof("written to %s", *flOutFile)
+ }
+
+ if *flHTTPAddr != "" {
+ h := func(w http.ResponseWriter, r *http.Request) {
+ now := time.Now()
+ defer func() { klog.Infof("request took %v", time.Since(now)) }()
+ s, err := mkOutput()
+ if err != nil {
+ fmt.Fprintf(w, "error: %+v", err)
+ klog.Warningf("failed: %+v", err)
+ }
+ if _, err := fmt.Fprint(w, s); err != nil {
+ klog.Warningf("response write error: %v", err)
+ }
+ }
+ http.HandleFunc("/", h)
+ klog.Infof("server listening at %s", *flHTTPAddr)
+ klog.Fatal(http.ListenAndServe(*flHTTPAddr, nil))
+ }
+}
+
+// groupName extracts the "//+groupName" meta-comment from the specified
+// package's comments, or returns empty string if it cannot be found.
+func groupName(pkg *types.Package) string {
+ m := types.ExtractCommentTags("+", pkg.Comments)
+ v := m["groupName"]
+ if len(v) == 1 {
+ return v[0]
+ }
+ return ""
+}
+
+func parseAPIPackages(dir string) ([]*types.Package, error) {
+ b := parser.New()
+ // the following will silently fail (turn on -v=4 to see logs)
+ if err := b.AddDirRecursive(*flAPIDir); err != nil {
+ return nil, err
+ }
+ scan, err := b.FindTypes()
+ if err != nil {
+ return nil, errors.Wrap(err, "failed to parse pkgs and types")
+ }
+ var pkgNames []string
+ for p := range scan {
+ pkg := scan[p]
+ klog.V(3).Infof("trying package=%v groupName=%s", p, groupName(pkg))
+
+ // Do not pick up packages that are in vendor/ as API packages. (This
+ // happened in knative/eventing-sources/vendor/..., where a package
+ // matched the pattern, but it didn't have a compatible import path).
+ if isVendorPackage(pkg) {
+ klog.V(3).Infof("package=%v coming from vendor/, ignoring.", p)
+ continue
+ }
+
+ if groupName(pkg) != "" && len(pkg.Types) > 0 || containsString(pkg.DocComments, docCommentForceIncludes) {
+ klog.V(3).Infof("package=%v has groupName and has types", p)
+ pkgNames = append(pkgNames, p)
+ }
+ }
+ sort.Strings(pkgNames)
+ var pkgs []*types.Package
+ for _, p := range pkgNames {
+ klog.Infof("using package=%s", p)
+ pkgs = append(pkgs, scan[p])
+ }
+ return pkgs, nil
+}
+
+func containsString(sl []string, str string) bool {
+ for _, s := range sl {
+ if str == s {
+ return true
+ }
+ }
+ return false
+}
+
+// combineAPIPackages groups the Go packages by the they
+// offer, and combines the types in them.
+func combineAPIPackages(pkgs []*types.Package) ([]*apiPackage, error) {
+ pkgMap := make(map[string]*apiPackage)
+ var pkgIds []string
+
+ flattenTypes := func(typeMap map[string]*types.Type) []*types.Type {
+ typeList := make([]*types.Type, 0, len(typeMap))
+
+ for _, t := range typeMap {
+ typeList = append(typeList, t)
+ }
+
+ return typeList
+ }
+
+ for _, pkg := range pkgs {
+ apiGroup, apiVersion, err := apiVersionForPackage(pkg)
+ if err != nil {
+ return nil, errors.Wrapf(err, "could not get apiVersion for package %s", pkg.Path)
+ }
+
+ typeList := make([]*types.Type, 0, len(pkg.Types))
+ for _, t := range pkg.Types {
+ typeList = append(typeList, t)
+ }
+
+ id := fmt.Sprintf("%s/%s", apiGroup, apiVersion)
+ v, ok := pkgMap[id]
+ if !ok {
+ pkgMap[id] = &apiPackage{
+ apiGroup: apiGroup,
+ apiVersion: apiVersion,
+ Types: flattenTypes(pkg.Types),
+ Constants: flattenTypes(pkg.Constants),
+ GoPackages: []*types.Package{pkg},
+ }
+ pkgIds = append(pkgIds, id)
+ } else {
+ v.Types = append(v.Types, flattenTypes(pkg.Types)...)
+ v.Constants = append(v.Types, flattenTypes(pkg.Constants)...)
+ v.GoPackages = append(v.GoPackages, pkg)
+ }
+ }
+
+ sort.Sort(sort.StringSlice(pkgIds))
+
+ out := make([]*apiPackage, 0, len(pkgMap))
+ for _, id := range pkgIds {
+ out = append(out, pkgMap[id])
+ }
+ return out, nil
+}
+
+// isVendorPackage determines if package is coming from vendor/ dir.
+func isVendorPackage(pkg *types.Package) bool {
+ vendorPattern := string(os.PathSeparator) + "vendor" + string(os.PathSeparator)
+ return strings.Contains(pkg.SourcePath, vendorPattern)
+}
+
+func findTypeReferences(pkgs []*apiPackage) map[*types.Type][]*types.Type {
+ m := make(map[*types.Type][]*types.Type)
+ for _, pkg := range pkgs {
+ for _, typ := range pkg.Types {
+ for _, member := range typ.Members {
+ t := member.Type
+ t = tryDereference(t)
+ m[t] = append(m[t], typ)
+ }
+ }
+ }
+ return m
+}
+
+func isExportedType(t *types.Type) bool {
+ // TODO(ahmetb) use types.ExtractSingleBoolCommentTag() to parse +genclient
+ // https://godoc.org/k8s.io/gengo/types#ExtractCommentTags
+ return strings.Contains(strings.Join(t.SecondClosestCommentLines, "\n"), "+genclient")
+}
+
+func fieldName(m types.Member) string {
+ v := reflect.StructTag(m.Tags).Get("json")
+ v = strings.TrimSuffix(v, ",omitempty")
+ v = strings.TrimSuffix(v, ",inline")
+ if v != "" {
+ return v
+ }
+ return m.Name
+}
+
+func fieldEmbedded(m types.Member) bool {
+ return strings.Contains(reflect.StructTag(m.Tags).Get("json"), ",inline")
+}
+
+func isLocalType(t *types.Type, typePkgMap map[*types.Type]*apiPackage) bool {
+ t = tryDereference(t)
+ _, ok := typePkgMap[t]
+ return ok
+}
+
+func renderComments(s []string, markdown bool) string {
+ s = filterCommentTags(s)
+ doc := strings.Join(s, "\n")
+
+ if markdown {
+ // TODO(ahmetb): when a comment includes stuff like "http://"
+ // we treat this as a HTML tag with markdown renderer below. solve this.
+ return string(blackfriday.Run([]byte(doc)))
+ }
+ return nl2br(doc)
+}
+
+func safe(s string) template.HTML { return template.HTML(s) }
+
+func nl2br(s string) string {
+ return strings.Replace(s, "\n\n", string(template.HTML("
")), -1)
+}
+
+func hiddenMember(m types.Member, c generatorConfig) bool {
+ for _, v := range c.HiddenMemberFields {
+ if m.Name == v {
+ return true
+ }
+ }
+ return false
+}
+
+func typeIdentifier(t *types.Type) string {
+ t = tryDereference(t)
+ return t.Name.String() // {PackagePath.Name}
+}
+
+// apiGroupForType looks up apiGroup for the given type
+func apiGroupForType(t *types.Type, typePkgMap map[*types.Type]*apiPackage) string {
+ t = tryDereference(t)
+
+ v := typePkgMap[t]
+ if v == nil {
+ klog.Warningf("WARNING: cannot read apiVersion for %s from type=>pkg map", t.Name.String())
+ return ""
+ }
+
+ return v.identifier()
+}
+
+// anchorIDForLocalType returns the #anchor string for the local type
+func anchorIDForLocalType(t *types.Type, typePkgMap map[*types.Type]*apiPackage) string {
+ return fmt.Sprintf("%s.%s", apiGroupForType(t, typePkgMap), t.Name.Name)
+}
+
+// linkForType returns an anchor to the type if it can be generated. returns
+// empty string if it is not a local type or unrecognized external type.
+func linkForType(t *types.Type, c generatorConfig, typePkgMap map[*types.Type]*apiPackage) (string, error) {
+ t = tryDereference(t) // dereference kind=Pointer
+
+ if isLocalType(t, typePkgMap) {
+ return "#" + anchorIDForLocalType(t, typePkgMap), nil
+ }
+
+ var arrIndex = func(a []string, i int) string {
+ return a[(len(a)+i)%len(a)]
+ }
+
+ // types like k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta,
+ // k8s.io/api/core/v1.Container, k8s.io/api/autoscaling/v1.CrossVersionObjectReference,
+ // github.com/knative/build/pkg/apis/build/v1alpha1.BuildSpec
+ if t.Kind == types.Struct || t.Kind == types.Pointer || t.Kind == types.Interface || t.Kind == types.Alias {
+ id := typeIdentifier(t) // gives {{ImportPath.Identifier}} for type
+ segments := strings.Split(t.Name.Package, "/") // to parse [meta, v1] from "k8s.io/apimachinery/pkg/apis/meta/v1"
+
+ for _, v := range c.ExternalPackages {
+ r, err := regexp.Compile(v.TypeMatchPrefix)
+ if err != nil {
+ return "", errors.Wrapf(err, "pattern %q failed to compile", v.TypeMatchPrefix)
+ }
+ if r.MatchString(id) {
+ tpl, err := texttemplate.New("").Funcs(map[string]interface{}{
+ "lower": strings.ToLower,
+ "arrIndex": arrIndex,
+ }).Parse(v.DocsURLTemplate)
+ if err != nil {
+ return "", errors.Wrap(err, "docs URL template failed to parse")
+ }
+
+ var b bytes.Buffer
+ if err := tpl.
+ Execute(&b, map[string]interface{}{
+ "TypeIdentifier": t.Name.Name,
+ "PackagePath": t.Name.Package,
+ "PackageSegments": segments,
+ }); err != nil {
+ return "", errors.Wrap(err, "docs url template execution error")
+ }
+ return b.String(), nil
+ }
+ }
+ klog.Warningf("not found external link source for type %v", t.Name)
+ }
+ return "", nil
+}
+
+// tryDereference returns the underlying type when t is a pointer, map, or slice.
+func tryDereference(t *types.Type) *types.Type {
+ if t.Elem != nil {
+ return t.Elem
+ }
+ return t
+}
+
+// finalUnderlyingTypeOf walks the type hierarchy for t and returns
+// its base type (i.e. the type that has no further underlying type).
+func finalUnderlyingTypeOf(t *types.Type) *types.Type {
+ for {
+ if t.Underlying == nil {
+ return t
+ }
+
+ t = t.Underlying
+ }
+}
+
+func typeDisplayName(t *types.Type, c generatorConfig, typePkgMap map[*types.Type]*apiPackage) string {
+ s := typeIdentifier(t)
+ if isLocalType(t, typePkgMap) {
+ s = tryDereference(t).Name.Name
+ }
+ if t.Kind == types.Pointer {
+ s = strings.TrimLeft(s, "*")
+ }
+
+ switch t.Kind {
+ case types.Struct,
+ types.Interface,
+ types.Alias,
+ types.Pointer,
+ types.Slice,
+ types.Builtin:
+ // noop
+ case types.Map:
+ // return original name
+ return t.Name.Name
+ case types.DeclarationOf:
+ // For constants, we want to display the value
+ // rather than the name of the constant, since the
+ // value is what users will need to write into YAML
+ // specs.
+ if t.ConstValue != nil {
+ u := finalUnderlyingTypeOf(t)
+ // Quote string constants to make it clear to the documentation reader.
+ if u.Kind == types.Builtin && u.Name.Name == "string" {
+ return strconv.Quote(*t.ConstValue)
+ }
+
+ return *t.ConstValue
+ }
+ klog.Fatalf("type %s is a non-const declaration, which is unhandled", t.Name)
+ default:
+ klog.Fatalf("type %s has kind=%v which is unhandled", t.Name, t.Kind)
+ }
+
+ // substitute prefix, if registered
+ for prefix, replacement := range c.TypeDisplayNamePrefixOverrides {
+ if strings.HasPrefix(s, prefix) {
+ s = strings.Replace(s, prefix, replacement, 1)
+ }
+ }
+
+ if t.Kind == types.Slice {
+ s = "[]" + s
+ }
+
+ return s
+}
+
+func hideType(t *types.Type, c generatorConfig) bool {
+ for _, pattern := range c.HideTypePatterns {
+ if regexp.MustCompile(pattern).MatchString(t.Name.String()) {
+ return true
+ }
+ }
+ if !isExportedType(t) && unicode.IsLower(rune(t.Name.Name[0])) {
+ // types that start with lowercase
+ return true
+ }
+ return false
+}
+
+func typeReferences(t *types.Type, c generatorConfig, references map[*types.Type][]*types.Type) []*types.Type {
+ var out []*types.Type
+ m := make(map[*types.Type]struct{})
+ for _, ref := range references[t] {
+ if !hideType(ref, c) {
+ m[ref] = struct{}{}
+ }
+ }
+ for k := range m {
+ out = append(out, k)
+ }
+ sortTypes(out)
+ return out
+}
+
+func sortTypes(typs []*types.Type) []*types.Type {
+ sort.Slice(typs, func(i, j int) bool {
+ t1, t2 := typs[i], typs[j]
+ if isExportedType(t1) && !isExportedType(t2) {
+ return true
+ } else if !isExportedType(t1) && isExportedType(t2) {
+ return false
+ }
+ return t1.Name.String() < t2.Name.String()
+ })
+ return typs
+}
+
+func visibleTypes(in []*types.Type, c generatorConfig) []*types.Type {
+ var out []*types.Type
+ for _, t := range in {
+ if !hideType(t, c) {
+ out = append(out, t)
+ }
+ }
+ return out
+}
+
+func packageDisplayName(pkg *types.Package, apiVersions map[string]string) string {
+ apiGroupVersion, ok := apiVersions[pkg.Path]
+ if ok {
+ return apiGroupVersion
+ }
+ return pkg.Path // go import path
+}
+
+func filterCommentTags(comments []string) []string {
+ var out []string
+ for _, v := range comments {
+ if !strings.HasPrefix(strings.TrimSpace(v), "+") {
+ out = append(out, v)
+ }
+ }
+ return out
+}
+
+func isOptionalMember(m types.Member) bool {
+ tags := types.ExtractCommentTags("+", m.CommentLines)
+ _, ok := tags["optional"]
+ return ok
+}
+
+func apiVersionForPackage(pkg *types.Package) (string, string, error) {
+ group := groupName(pkg)
+ version := pkg.Name // assumes basename (i.e. "v1" in "core/v1") is apiVersion
+ r := `^v\d+((alpha|beta)\d+)?$`
+ if !regexp.MustCompile(r).MatchString(version) {
+ return "", "", errors.Errorf("cannot infer kubernetes apiVersion of go package %s (basename %q doesn't match expected pattern %s that's used to determine apiVersion)", pkg.Path, version, r)
+ }
+ return group, version, nil
+}
+
+// extractTypeToPackageMap creates a *types.Type map to apiPackage
+func extractTypeToPackageMap(pkgs []*apiPackage) map[*types.Type]*apiPackage {
+ out := make(map[*types.Type]*apiPackage)
+ for _, ap := range pkgs {
+ for _, t := range ap.Types {
+ out[t] = ap
+ }
+ for _, t := range ap.Constants {
+ out[t] = ap
+ }
+ }
+ return out
+}
+
+// packageMapToList flattens the map.
+func packageMapToList(pkgs map[string]*apiPackage) []*apiPackage {
+ // TODO(ahmetb): we should probably not deal with maps, this type can be
+ // a list everywhere.
+ out := make([]*apiPackage, 0, len(pkgs))
+ for _, v := range pkgs {
+ out = append(out, v)
+ }
+ return out
+}
+
+// constantsOfType finds all the constants in pkg that have the
+// same underlying type as t. This is intended for use by enum
+// type validation, where users need to specify one of a specific
+// set of constant values for a field.
+func constantsOfType(t *types.Type, pkg *apiPackage) []*types.Type {
+ constants := []*types.Type{}
+
+ for _, c := range pkg.Constants {
+ if c.Underlying == t {
+ constants = append(constants, c)
+ }
+ }
+
+ return sortTypes(constants)
+}
+
+func render(w io.Writer, pkgs []*apiPackage, config generatorConfig) error {
+ references := findTypeReferences(pkgs)
+ typePkgMap := extractTypeToPackageMap(pkgs)
+
+ t, err := template.New("").Funcs(map[string]interface{}{
+ "isExportedType": isExportedType,
+ "fieldName": fieldName,
+ "fieldEmbedded": fieldEmbedded,
+ "typeIdentifier": func(t *types.Type) string { return typeIdentifier(t) },
+ "typeDisplayName": func(t *types.Type) string { return typeDisplayName(t, config, typePkgMap) },
+ "visibleTypes": func(t []*types.Type) []*types.Type { return visibleTypes(t, config) },
+ "renderComments": func(s []string) string { return renderComments(s, !config.MarkdownDisabled) },
+ "packageDisplayName": func(p *apiPackage) string { return p.identifier() },
+ "apiGroup": func(t *types.Type) string { return apiGroupForType(t, typePkgMap) },
+ "packageAnchorID": func(p *apiPackage) string {
+ // TODO(ahmetb): currently this is the same as packageDisplayName
+ // func, and it's fine since it retuns valid DOM id strings like
+ // 'serving.knative.dev/v1alpha1' which is valid per HTML5, except
+ // spaces, so just trim those.
+ return strings.Replace(p.identifier(), " ", "", -1)
+ },
+ "linkForType": func(t *types.Type) string {
+ v, err := linkForType(t, config, typePkgMap)
+ if err != nil {
+ klog.Fatal(errors.Wrapf(err, "error getting link for type=%s", t.Name))
+ return ""
+ }
+ return v
+ },
+ "anchorIDForType": func(t *types.Type) string { return anchorIDForLocalType(t, typePkgMap) },
+ "safe": safe,
+ "sortedTypes": sortTypes,
+ "typeReferences": func(t *types.Type) []*types.Type { return typeReferences(t, config, references) },
+ "hiddenMember": func(m types.Member) bool { return hiddenMember(m, config) },
+ "isLocalType": isLocalType,
+ "isOptionalMember": isOptionalMember,
+ "constantsOfType": func(t *types.Type) []*types.Type { return constantsOfType(t, typePkgMap[t]) },
+ }).ParseGlob(filepath.Join(*flTemplateDir, "*.tpl"))
+ if err != nil {
+ return errors.Wrap(err, "parse error")
+ }
+
+ var gitCommit []byte
+ if !config.GitCommitDisabled {
+ gitCommit, _ = exec.Command("git", "rev-parse", "--short", "HEAD").Output()
+ }
+
+ return errors.Wrap(t.ExecuteTemplate(w, "packages", map[string]interface{}{
+ "packages": pkgs,
+ "config": config,
+ "gitCommit": strings.TrimSpace(string(gitCommit)),
+ }), "template execution error")
+}
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/members.tpl b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/members.tpl
new file mode 100644
index 00000000..a529c671
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/members.tpl
@@ -0,0 +1,48 @@
+{{ define "members" }}
+
+{{ range .Members }}
+{{ if not (hiddenMember .)}}
+
+
+ {{ fieldName . }}
+
+ {{ if linkForType .Type }}
+
+ {{ typeDisplayName .Type }}
+
+ {{ else }}
+ {{ typeDisplayName .Type }}
+ {{ end }}
+
+ |
+
+ {{ if fieldEmbedded . }}
+
+ (Members of {{ fieldName . }} are embedded into this type.)
+
+ {{ end}}
+
+ {{ if isOptionalMember .}}
+ (Optional)
+ {{ end }}
+
+ {{ safe (renderComments .CommentLines) }}
+
+ {{ if and (eq (.Type.Name.Name) "ObjectMeta") }}
+ Refer to the Kubernetes API documentation for the fields of the
+ metadata field.
+ {{ end }}
+
+ {{ if or (eq (fieldName .) "spec") }}
+
+
+
+ {{ template "members" .Type }}
+
+ {{ end }}
+ |
+
+{{ end }}
+{{ end }}
+
+{{ end }}
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/pkg.tpl b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/pkg.tpl
new file mode 100644
index 00000000..2f03a803
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/pkg.tpl
@@ -0,0 +1,49 @@
+{{ define "packages" }}
+
+{{ with .packages}}
+Packages:
+
+{{ end}}
+
+{{ range .packages }}
+
+ {{- packageDisplayName . -}}
+
+
+ {{ with (index .GoPackages 0 )}}
+ {{ with .DocComments }}
+
+ {{ safe (renderComments .) }}
+
+ {{ end }}
+ {{ end }}
+
+ Resource Types:
+
+ {{- range (visibleTypes (sortedTypes .Types)) -}}
+ {{ if isExportedType . -}}
+ -
+ {{ typeDisplayName . }}
+
+ {{- end }}
+ {{- end -}}
+
+
+ {{ range (visibleTypes (sortedTypes .Types))}}
+ {{ template "type" . }}
+ {{ end }}
+
+{{ end }}
+
+
+ Generated with gen-crd-api-reference-docs
+ {{ with .gitCommit }} on git commit {{ . }}
{{end}}.
+
+
+{{ end }}
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/placeholder.go b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/placeholder.go
new file mode 100644
index 00000000..cc8f1453
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/placeholder.go
@@ -0,0 +1,2 @@
+// Placeholder file to make Go vendor this directory properly.
+package template
diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/type.tpl b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/type.tpl
new file mode 100644
index 00000000..a52e597d
--- /dev/null
+++ b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/template/type.tpl
@@ -0,0 +1,81 @@
+{{ define "type" }}
+
+
+ {{- .Name.Name }}
+ {{ if eq .Kind "Alias" }}({{.Underlying}}
alias)
{{ end -}}
+
+{{ with (typeReferences .) }}
+
+ (Appears on:
+ {{- $prev := "" -}}
+ {{- range . -}}
+ {{- if $prev -}}, {{ end -}}
+ {{- $prev = . -}}
+ {{ typeDisplayName . }}
+ {{- end -}}
+ )
+
+{{ end }}
+
+
+ {{ safe (renderComments .CommentLines) }}
+
+
+{{ with (constantsOfType .) }}
+
+
+
+ Value |
+ Description |
+
+
+
+ {{- range . -}}
+
+ {{- /*
+ renderComments implicitly creates a element, so we
+ add one to the display name as well to make the contents
+ of the two cells align evenly.
+ */ -}}
+
{{ typeDisplayName . }} |
+ {{ safe (renderComments .CommentLines) }} |
+
+ {{- end -}}
+
+
+{{ end }}
+
+{{ if .Members }}
+
+
+
+ Field |
+ Description |
+
+
+
+ {{ if isExportedType . }}
+
+
+ apiVersion
+ string |
+
+
+ {{apiGroup .}}
+
+ |
+
+
+
+ kind
+ string
+ |
+ {{.Name.Name}} |
+
+ {{ end }}
+ {{ template "members" .}}
+
+
+{{ end }}
+
+{{ end }}
diff --git a/vendor/github.com/cloudevents/conformance/LICENSE b/vendor/github.com/cloudevents/conformance/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/vendor/github.com/cloudevents/conformance/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/vendor/github.com/cloudevents/conformance/pkg/event/event.go b/vendor/github.com/cloudevents/conformance/pkg/event/event.go
new file mode 100644
index 00000000..c02c9777
--- /dev/null
+++ b/vendor/github.com/cloudevents/conformance/pkg/event/event.go
@@ -0,0 +1,36 @@
+package event
+
+type MutationFn func(Event) (Event, error)
+
+// Mode of encoding.
+const (
+ DefaultMode = ""
+ BinaryMode = "binary"
+ StructuredMode = "structured"
+)
+
+type Event struct {
+ Mode string `yaml:"Mode,omitempty"`
+ Attributes ContextAttributes `yaml:"ContextAttributes"`
+ TransportExtensions Extensions `yaml:"TransportExtensions,omitempty"`
+ Data string `yaml:"Data"`
+ // TODO: add support for data_base64
+}
+
+type ContextAttributes struct {
+ SpecVersion string `yaml:"specversion,omitempty"`
+ Type string `yaml:"type,omitempty"`
+ Time string `yaml:"time,omitempty"`
+ ID string `yaml:"id,omitempty"`
+ Source string `yaml:"source,omitempty"`
+ Subject string `yaml:"subject,omitempty"`
+ // SchemaURL replaced by DataSchema in 1.0
+ SchemaURL string `yaml:"schemaurl,omitempty"`
+ DataSchema string `yaml:"dataschema,omitempty"`
+ // DataContentEncoding removed in 1.0
+ DataContentEncoding string `yaml:"dataecontentncoding,omitempty"`
+ DataContentType string `yaml:"datacontenttype,omitempty"`
+ Extensions Extensions `yaml:"Extensions,omitempty"`
+}
+
+type Extensions map[string]string
diff --git a/vendor/github.com/cloudevents/conformance/pkg/event/read.go b/vendor/github.com/cloudevents/conformance/pkg/event/read.go
new file mode 100644
index 00000000..3cfc9e6b
--- /dev/null
+++ b/vendor/github.com/cloudevents/conformance/pkg/event/read.go
@@ -0,0 +1,124 @@
+package event
+
+import (
+ "gopkg.in/yaml.v2"
+ "io"
+ "io/ioutil"
+ "net/http"
+ "net/url"
+ "os"
+ "path"
+ "strings"
+)
+
+func FromYaml(files string, recursive bool) ([]Event, error) {
+ pathNames := strings.Split(files, ",")
+ events := make([]Event, 0)
+ for _, pathName := range pathNames {
+ var event []Event
+ var err error
+
+ switch {
+ case pathName == "-":
+ event, err = decode(os.Stdin)
+ case isURL(pathName):
+ event, err = readURL(pathName)
+ default:
+ event, err = readPath(pathName, recursive)
+ }
+
+ if err != nil {
+ return nil, err
+ }
+ events = append(events, event...)
+ }
+ return events, nil
+}
+
+func isURL(pathname string) bool {
+ if _, err := os.Lstat(pathname); err == nil {
+ return false
+ }
+ uri, err := url.ParseRequestURI(pathname)
+ return err == nil && uri.Scheme != ""
+}
+
+func readURL(uri string) ([]Event, error) {
+ resp, err := http.Get(uri)
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+
+ return decode(resp.Body)
+}
+
+func readPath(pathName string, recursive bool) ([]Event, error) {
+ info, err := os.Stat(pathName)
+ if err != nil {
+ return nil, err
+ }
+
+ if info.IsDir() {
+ return readDir(pathName, recursive)
+ }
+ return readFile(pathName)
+}
+
+func readFile(pathName string) ([]Event, error) {
+ file, err := os.Open(pathName)
+ if err != nil {
+ return nil, err
+ }
+ defer func() {
+ if err := file.Close(); err != nil {
+ panic(err)
+ }
+ }()
+
+ return decode(file)
+}
+
+func readDir(pathName string, recursive bool) ([]Event, error) {
+ list, err := ioutil.ReadDir(pathName)
+ if err != nil {
+ return nil, err
+ }
+
+ events := make([]Event, 0)
+ for _, f := range list {
+ name := path.Join(pathName, f.Name())
+ var evs []Event
+
+ switch {
+ case f.IsDir() && recursive:
+ evs, err = readDir(name, recursive)
+ case !f.IsDir():
+ evs, err = readFile(name)
+ }
+
+ if err != nil {
+ return nil, err
+ }
+ events = append(events, evs...)
+ }
+ return events, nil
+}
+
+func decode(reader io.Reader) ([]Event, error) {
+ decoder := yaml.NewDecoder(reader)
+ events := make([]Event, 0)
+ var err error
+ for {
+ out := Event{}
+ err = decoder.Decode(&out)
+ if err != nil {
+ break
+ }
+ events = append(events, out)
+ }
+ if err != io.EOF {
+ return nil, err
+ }
+ return events, nil
+}
diff --git a/vendor/github.com/cloudevents/conformance/pkg/event/write.go b/vendor/github.com/cloudevents/conformance/pkg/event/write.go
new file mode 100644
index 00000000..51f548d1
--- /dev/null
+++ b/vendor/github.com/cloudevents/conformance/pkg/event/write.go
@@ -0,0 +1,9 @@
+package event
+
+import (
+ "gopkg.in/yaml.v2"
+)
+
+func ToYaml(event Event) ([]byte, error) {
+ return yaml.Marshal(event)
+}
diff --git a/vendor/github.com/cloudevents/conformance/pkg/http/http.go b/vendor/github.com/cloudevents/conformance/pkg/http/http.go
new file mode 100644
index 00000000..e326463f
--- /dev/null
+++ b/vendor/github.com/cloudevents/conformance/pkg/http/http.go
@@ -0,0 +1,271 @@
+package http
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "strings"
+
+ "github.com/cloudevents/conformance/pkg/event"
+)
+
+type ResultsFn func(*http.Request, *http.Response, error)
+
+func addHeader(req *http.Request, key, value string) {
+ value = strings.TrimSpace(value)
+ if value != "" {
+ req.Header.Add(key, value)
+ }
+}
+
+func addStructured(env map[string]interface{}, key, value string) {
+ value = strings.TrimSpace(value)
+ if value != "" {
+ env[key] = value
+ }
+}
+
+func EventToRequest(url string, in event.Event) (*http.Request, error) {
+ switch in.Mode {
+ case event.StructuredMode:
+ return structuredEventToRequest(url, in)
+ case event.DefaultMode, event.BinaryMode:
+ return binaryEventToRequest(url, in)
+ }
+ return nil, fmt.Errorf("unknown content mode: %q", in.Mode)
+}
+
+func structuredEventToRequest(url string, event event.Event) (*http.Request, error) {
+ env := make(map[string]interface{})
+
+ // CloudEvents attributes.
+ addStructured(env, "specversion", event.Attributes.SpecVersion)
+ addStructured(env, "type", event.Attributes.Type)
+ addStructured(env, "time", event.Attributes.Time)
+ addStructured(env, "id", event.Attributes.ID)
+ addStructured(env, "source", event.Attributes.Source)
+ addStructured(env, "subject", event.Attributes.Subject)
+ addStructured(env, "schemaurl", event.Attributes.SchemaURL)
+ addStructured(env, "datacontenttype", event.Attributes.DataContentType)
+ addStructured(env, "datacontentencoding", event.Attributes.DataContentEncoding)
+
+ // CloudEvents attribute extensions.
+ for k, v := range event.Attributes.Extensions {
+ addStructured(env, k, v)
+ }
+
+ // TODO: based on datacontenttype, we should parse data and then set the result in the envelope.
+ if len(event.Data) > 0 {
+ data := json.RawMessage{}
+ if err := json.Unmarshal([]byte(event.Data), &data); err != nil {
+ return nil, err
+ }
+ env["data"] = data
+ }
+
+ // To JSON.
+ body, err := json.Marshal(env)
+ if err != nil {
+ return nil, err
+ }
+
+ req, err := http.NewRequest("POST", url, bytes.NewBuffer(body))
+ if err != nil {
+ return nil, err
+ }
+
+ // Transport extensions.
+ hasContentType := false
+ for k, v := range event.TransportExtensions {
+ if strings.EqualFold(v, "Content-Type") {
+ hasContentType = true
+ }
+ addHeader(req, k, v)
+ }
+
+ if !hasContentType {
+ addHeader(req, "Content-Type", "application/cloudevents+json; charset=UTF-8")
+ }
+
+ return req, nil
+}
+
+func binaryEventToRequest(url string, event event.Event) (*http.Request, error) {
+ req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(event.Data)))
+ if err != nil {
+ return nil, err
+ }
+
+ // CloudEvents attributes.
+ addHeader(req, "ce-specversion", event.Attributes.SpecVersion)
+ addHeader(req, "ce-type", event.Attributes.Type)
+ addHeader(req, "ce-time", event.Attributes.Time)
+ addHeader(req, "ce-id", event.Attributes.ID)
+ addHeader(req, "ce-source", event.Attributes.Source)
+ addHeader(req, "ce-subject", event.Attributes.Subject)
+ addHeader(req, "ce-schemaurl", event.Attributes.SchemaURL)
+ addHeader(req, "Content-Type", event.Attributes.DataContentType)
+ addHeader(req, "ce-datacontentencoding", event.Attributes.DataContentEncoding)
+
+ // CloudEvents attribute extensions.
+ for k, v := range event.Attributes.Extensions {
+ addHeader(req, "ce-"+k, v)
+ }
+
+ // Transport extensions.
+ for k, v := range event.TransportExtensions {
+ addHeader(req, k, v)
+ }
+
+ return req, nil
+}
+
+func RequestToEvent(req *http.Request) (*event.Event, error) {
+ if strings.HasPrefix(req.Header.Get("Content-Type"), "application/cloudevents+json") {
+ req.Header.Del("Content-Type")
+ return structuredRequestToEvent(req)
+ }
+ return binaryRequestToEvent(req)
+}
+
+func structuredRequestToEvent(req *http.Request) (*event.Event, error) {
+ out := &event.Event{
+ Mode: event.StructuredMode,
+ }
+
+ body, err := ioutil.ReadAll(req.Body)
+ if err != nil {
+ return nil, err
+ }
+ _ = body
+
+ env := make(map[string]json.RawMessage)
+ if err := json.Unmarshal(body, &env); err != nil {
+ return nil, err
+ }
+
+ insert := func(key string, into *string) {
+ if _, found := env[key]; found {
+ if err := json.Unmarshal(env[key], into); err != nil {
+ *into = err.Error()
+ }
+ delete(env, key)
+ }
+ }
+
+ // CloudEvents attributes.
+ insert("specversion", &out.Attributes.SpecVersion)
+ insert("type", &out.Attributes.Type)
+ insert("time", &out.Attributes.Time)
+ insert("id", &out.Attributes.ID)
+ insert("source", &out.Attributes.Source)
+ insert("subject", &out.Attributes.Subject)
+ insert("schemaurl", &out.Attributes.SchemaURL)
+ insert("datacontenttype", &out.Attributes.DataContentType)
+ insert("datacontentencoding", &out.Attributes.DataContentEncoding)
+
+ // CloudEvents Data.
+ if _, found := env["data"]; found {
+ out.Data = string(env["data"]) + "\n"
+ delete(env, "data")
+ }
+
+ // CloudEvents attribute extensions.
+ out.Attributes.Extensions = make(map[string]string)
+ for key, b := range env {
+ var into string
+ if err := json.Unmarshal(b, &into); err != nil {
+ into = err.Error()
+ }
+ out.Attributes.Extensions[key] = into
+ delete(env, key)
+ }
+
+ // Transport extensions.
+ out.TransportExtensions = make(map[string]string)
+ for k := range req.Header {
+ if k == "Accept-Encoding" || k == "Content-Length" {
+ continue
+ }
+ out.TransportExtensions[k] = req.Header.Get(k)
+ req.Header.Del(k)
+ }
+
+ return out, nil
+}
+
+func binaryRequestToEvent(req *http.Request) (*event.Event, error) {
+ body, err := ioutil.ReadAll(req.Body)
+ if err != nil {
+ return nil, err
+ }
+ _ = body
+
+ out := &event.Event{
+ Mode: event.BinaryMode,
+ Data: string(body),
+ }
+
+ // CloudEvents attributes.
+ out.Attributes.SpecVersion = req.Header.Get("ce-specversion")
+ req.Header.Del("ce-specversion")
+ out.Attributes.Type = req.Header.Get("ce-type")
+ req.Header.Del("ce-type")
+ out.Attributes.Time = req.Header.Get("ce-time")
+ req.Header.Del("ce-time")
+ out.Attributes.ID = req.Header.Get("ce-id")
+ req.Header.Del("ce-id")
+ out.Attributes.Source = req.Header.Get("ce-source")
+ req.Header.Del("ce-source")
+ out.Attributes.Subject = req.Header.Get("ce-subject")
+ req.Header.Del("ce-subject")
+ out.Attributes.SchemaURL = req.Header.Get("ce-schemaurl")
+ req.Header.Del("ce-schemaurl")
+ out.Attributes.DataContentType = req.Header.Get("Content-Type")
+ req.Header.Del("Content-Type")
+ out.Attributes.DataContentEncoding = req.Header.Get("ce-datacontentencoding")
+ req.Header.Del("ce-datacontentencoding")
+
+ // CloudEvents attribute extensions.
+ out.Attributes.Extensions = make(map[string]string)
+ for k := range req.Header {
+ if strings.HasPrefix(strings.ToLower(k), "ce-") {
+ out.Attributes.Extensions[k[len("ce-"):]] = req.Header.Get(k)
+ req.Header.Del(k)
+ }
+ }
+
+ // Transport extensions.
+ out.TransportExtensions = make(map[string]string)
+ for k := range req.Header {
+ if k == "Accept-Encoding" || k == "Content-Length" {
+ continue
+ }
+ out.TransportExtensions[k] = req.Header.Get(k)
+ req.Header.Del(k)
+ }
+
+ return out, nil
+}
+
+func Do(req *http.Request, hook ResultsFn) error {
+ resp, err := http.DefaultClient.Do(req)
+
+ if hook != nil {
+ // Non-blocking.
+ go hook(req, resp, err)
+ }
+
+ if err != nil {
+ return err
+ }
+
+ if resp.StatusCode < 200 || resp.StatusCode > 299 {
+ return fmt.Errorf("expected 200 level response, got %s", resp.Status)
+ }
+
+ // TODO might want something from resp.
+ return nil
+}
diff --git a/vendor/github.com/cloudevents/conformance/pkg/http/raw.go b/vendor/github.com/cloudevents/conformance/pkg/http/raw.go
new file mode 100644
index 00000000..dd7b7f47
--- /dev/null
+++ b/vendor/github.com/cloudevents/conformance/pkg/http/raw.go
@@ -0,0 +1,27 @@
+package http
+
+import (
+ "fmt"
+ "io"
+ "net/http"
+ "net/http/httputil"
+)
+
+type Raw struct {
+ Out io.Writer
+ Port int `envconfig:"PORT" default:"8080"`
+}
+
+func (raw *Raw) Do() error {
+ _, _ = fmt.Fprintf(raw.Out, "listening on :%d\n", raw.Port)
+ return http.ListenAndServe(fmt.Sprintf(":%d", raw.Port), raw)
+}
+func (raw *Raw) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusOK)
+ if reqBytes, err := httputil.DumpRequest(r, true); err == nil {
+ _, _ = fmt.Fprintf(raw.Out, "%+v\n", string(reqBytes))
+ } else {
+ _, _ = fmt.Fprintf(raw.Out, "Failed to call DumpRequest: %s\n", err)
+ }
+ _, _ = fmt.Fprintln(raw.Out, "================")
+}
diff --git a/vendor/github.com/cloudevents/sdk-go/v2/test/doc.go b/vendor/github.com/cloudevents/sdk-go/v2/test/doc.go
new file mode 100644
index 00000000..7ae8ea29
--- /dev/null
+++ b/vendor/github.com/cloudevents/sdk-go/v2/test/doc.go
@@ -0,0 +1,9 @@
+/*
+ Copyright 2021 The CloudEvents Authors
+ SPDX-License-Identifier: Apache-2.0
+*/
+
+/*
+Package test has utilities (asserts, mocks, ...) to use cloudevents in your tests
+*/
+package test
diff --git a/vendor/github.com/cloudevents/sdk-go/v2/test/event_asserts.go b/vendor/github.com/cloudevents/sdk-go/v2/test/event_asserts.go
new file mode 100644
index 00000000..8f5ba988
--- /dev/null
+++ b/vendor/github.com/cloudevents/sdk-go/v2/test/event_asserts.go
@@ -0,0 +1,34 @@
+/*
+ Copyright 2021 The CloudEvents Authors
+ SPDX-License-Identifier: Apache-2.0
+*/
+
+package test
+
+import (
+ "testing"
+
+ "github.com/cloudevents/sdk-go/v2/event"
+)
+
+// AssertEvent is a "matcher like" assertion method to test the properties of an event
+func AssertEvent(t testing.TB, have event.Event, matchers ...EventMatcher) {
+ err := AllOf(matchers...)(have)
+ if err != nil {
+ t.Fatalf("Error while matching event: %s", err.Error())
+ }
+}
+
+// AssertEventContextEquals asserts that two event.Event contexts are equals
+func AssertEventContextEquals(t testing.TB, want event.EventContext, have event.EventContext) {
+ if err := IsContextEqualTo(want)(event.Event{Context: have}); err != nil {
+ t.Fatalf("Error while matching event context: %s", err.Error())
+ }
+}
+
+// AssertEventEquals asserts that two event.Event are equals
+func AssertEventEquals(t testing.TB, want event.Event, have event.Event) {
+ if err := IsEqualTo(want)(have); err != nil {
+ t.Fatalf("Error while matching event: %s", err.Error())
+ }
+}
diff --git a/vendor/github.com/cloudevents/sdk-go/v2/test/event_matchers.go b/vendor/github.com/cloudevents/sdk-go/v2/test/event_matchers.go
new file mode 100644
index 00000000..712fc7b0
--- /dev/null
+++ b/vendor/github.com/cloudevents/sdk-go/v2/test/event_matchers.go
@@ -0,0 +1,304 @@
+/*
+ Copyright 2021 The CloudEvents Authors
+ SPDX-License-Identifier: Apache-2.0
+*/
+
+package test
+
+import (
+ "errors"
+ "fmt"
+ "reflect"
+ "strings"
+ "time"
+
+ "github.com/google/go-cmp/cmp"
+
+ "github.com/cloudevents/sdk-go/v2/binding/spec"
+ "github.com/cloudevents/sdk-go/v2/event"
+)
+
+type EventMatcher func(have event.Event) error
+
+// AllOf combines matchers together
+func AllOf(matchers ...EventMatcher) EventMatcher {
+ return func(have event.Event) error {
+ for _, m := range matchers {
+ if err := m(have); err != nil {
+ return err
+ }
+ }
+ return nil
+ }
+}
+
+// AnyOf returns a matcher which match if at least one of the provided matchers matches
+func AnyOf(matchers ...EventMatcher) EventMatcher {
+ return func(have event.Event) error {
+ var errs []error
+ for _, m := range matchers {
+ if err := m(have); err == nil {
+ return nil
+ } else {
+ errs = append(errs, err)
+ }
+ }
+ var sb strings.Builder
+ sb.WriteString("Cannot match any of the provided matchers\n")
+ for i, err := range errs {
+ sb.WriteString(fmt.Sprintf("%d: %s\n", i+1, err))
+ }
+ return errors.New(sb.String())
+ }
+}
+
+func HasId(id string) EventMatcher {
+ return HasAttributeKind(spec.ID, id)
+}
+
+func HasType(ty string) EventMatcher {
+ return HasAttributeKind(spec.Type, ty)
+}
+
+func HasSpecVersion(specVersion string) EventMatcher {
+ return HasAttributeKind(spec.SpecVersion, specVersion)
+}
+
+func HasSource(source string) EventMatcher {
+ return HasAttributeKind(spec.Source, source)
+}
+
+func HasDataContentType(dataContentType string) EventMatcher {
+ return HasAttributeKind(spec.DataContentType, dataContentType)
+}
+
+func HasDataSchema(schema string) EventMatcher {
+ return HasAttributeKind(spec.DataSchema, schema)
+}
+
+func HasSubject(subject string) EventMatcher {
+ return HasAttributeKind(spec.Subject, subject)
+}
+
+func HasTime(t time.Time) EventMatcher {
+ return HasAttributeKind(spec.Time, t)
+}
+
+// ContainsAttributes checks if the event contains at least the provided context attributes
+func ContainsAttributes(attrs ...spec.Kind) EventMatcher {
+ return func(have event.Event) error {
+ haveVersion := spec.VS.Version(have.SpecVersion())
+ for _, k := range attrs {
+ attr := haveVersion.AttributeFromKind(k)
+ if isEmpty(attr) {
+ return fmt.Errorf("attribute name '%s' unrecognized", k.String())
+ }
+ if isEmpty(attr.Get(have.Context)) {
+ return fmt.Errorf("missing or nil/empty attribute '%s'", k.String())
+ }
+ }
+ return nil
+ }
+}
+
+// ContainsExtensions checks if the event contains at least the provided extension names
+func ContainsExtensions(exts ...string) EventMatcher {
+ return func(have event.Event) error {
+ for _, ext := range exts {
+ if _, ok := have.Extensions()[ext]; !ok {
+ return fmt.Errorf("expecting extension '%s'", ext)
+ }
+ }
+ return nil
+ }
+}
+
+// ContainsExactlyExtensions checks if the event contains only the provided extension names and no more
+func ContainsExactlyExtensions(exts ...string) EventMatcher {
+ return func(have event.Event) error {
+ // Copy in a temporary set first
+ extsInEvent := map[string]struct{}{}
+ for k := range have.Extensions() {
+ extsInEvent[k] = struct{}{}
+ }
+
+ for _, ext := range exts {
+ if _, ok := have.Extensions()[ext]; !ok {
+ return fmt.Errorf("expecting extension '%s'", ext)
+ } else {
+ delete(extsInEvent, ext)
+ }
+ }
+
+ if len(extsInEvent) != 0 {
+ var unexpectedKeys []string
+ for k := range extsInEvent {
+ unexpectedKeys = append(unexpectedKeys, k)
+ }
+ return fmt.Errorf("not expecting extensions '%v'", unexpectedKeys)
+ }
+ return nil
+ }
+}
+
+// HasExactlyAttributesEqualTo checks if the event has exactly the provided spec attributes (excluding extension attributes)
+func HasExactlyAttributesEqualTo(want event.EventContext) EventMatcher {
+ return func(have event.Event) error {
+ if want.GetSpecVersion() != have.SpecVersion() {
+ return fmt.Errorf("not matching specversion: want = '%s', got = '%s'", want.GetSpecVersion(), have.SpecVersion())
+ }
+ vs := spec.VS.Version(want.GetSpecVersion())
+
+ for _, a := range vs.Attributes() {
+ if !reflect.DeepEqual(a.Get(want), a.Get(have.Context)) {
+ return fmt.Errorf("expecting attribute '%s' equal to '%s', got '%s'", a.PrefixedName(), a.Get(want), a.Get(have.Context))
+ }
+ }
+
+ return nil
+ }
+}
+
+// HasExactlyExtensions checks if the event contains exactly the provided extensions
+func HasExactlyExtensions(ext map[string]interface{}) EventMatcher {
+ return func(have event.Event) error {
+ if diff := cmp.Diff(ext, have.Extensions()); diff != "" {
+ return fmt.Errorf("unexpected extensions (-want, +got) = %v", diff)
+ }
+ return nil
+ }
+}
+
+// HasExtensions checks if the event contains at least the provided extensions
+func HasExtensions(ext map[string]interface{}) EventMatcher {
+ return func(have event.Event) error {
+ for k, v := range ext {
+ if _, ok := have.Extensions()[k]; !ok {
+ return fmt.Errorf("expecting extension '%s'", ext)
+ }
+ if !reflect.DeepEqual(v, have.Extensions()[k]) {
+ return fmt.Errorf("expecting extension '%s' equal to '%s', got '%s'", k, v, have.Extensions()[k])
+ }
+ }
+ return nil
+ }
+}
+
+// HasExtension checks if the event contains the provided extension
+func HasExtension(key string, value interface{}) EventMatcher {
+ return HasExtensions(map[string]interface{}{key: value})
+}
+
+// HasData checks if the event contains the provided data
+func HasData(want []byte) EventMatcher {
+ return func(have event.Event) error {
+ if diff := cmp.Diff(string(want), string(have.Data())); diff != "" {
+ return fmt.Errorf("data not matching (-want, +got) = %v", diff)
+ }
+ return nil
+ }
+}
+
+// DataContains matches that the data field of the event, converted to a string, contains the provided string
+func DataContains(expectedContainedString string) EventMatcher {
+ return func(have event.Event) error {
+ dataAsString := string(have.Data())
+ if !strings.Contains(dataAsString, expectedContainedString) {
+ return fmt.Errorf("data '%s' doesn't contain '%s'", dataAsString, expectedContainedString)
+ }
+ return nil
+ }
+}
+
+// HasNoData checks if the event doesn't contain data
+func HasNoData() EventMatcher {
+ return func(have event.Event) error {
+ if have.Data() != nil {
+ return fmt.Errorf("expecting nil data, got = '%v'", string(have.Data()))
+ }
+ return nil
+ }
+}
+
+// IsEqualTo performs a semantic equality check of the event (like AssertEventEquals)
+func IsEqualTo(want event.Event) EventMatcher {
+ return AllOf(IsContextEqualTo(want.Context), IsDataEqualTo(want))
+}
+
+// IsContextEqualTo performs a semantic equality check of the event context, including extension attributes (like AssertEventContextEquals)
+func IsContextEqualTo(want event.EventContext) EventMatcher {
+ return AllOf(HasExactlyAttributesEqualTo(want), HasExactlyExtensions(want.GetExtensions()))
+}
+
+// IsDataEqualTo checks if the data field matches with want
+func IsDataEqualTo(want event.Event) EventMatcher {
+ if want.Data() == nil {
+ return HasNoData()
+ } else {
+ return HasData(want.Data())
+ }
+}
+
+// IsValid checks if the event is valid
+func IsValid() EventMatcher {
+ return func(have event.Event) error {
+ if err := have.Validate(); err != nil {
+ return fmt.Errorf("expecting valid event: %s", err.Error())
+ }
+ return nil
+ }
+}
+
+// IsInvalid checks if the event is invalid
+func IsInvalid() EventMatcher {
+ return func(have event.Event) error {
+ if err := have.Validate(); err == nil {
+ return fmt.Errorf("expecting invalid event")
+ }
+ return nil
+ }
+}
+
+func HasAttributeKind(kind spec.Kind, value interface{}) EventMatcher {
+ return func(have event.Event) error {
+ haveVersion := spec.VS.Version(have.SpecVersion())
+ attr := haveVersion.AttributeFromKind(kind)
+ if isEmpty(attr) {
+ return fmt.Errorf("attribute '%s' not existing in the spec version '%s' of this event", kind.String(), haveVersion.String())
+ }
+ if !reflect.DeepEqual(value, attr.Get(have.Context)) {
+ return fmt.Errorf("expecting attribute '%s' equal to '%s', got '%s'", kind.String(), value, attr.Get(have.Context))
+ }
+ return nil
+ }
+}
+
+// Code took from https://github.com/stretchr/testify
+// LICENSE: MIT License
+
+func isEmpty(object interface{}) bool {
+
+ // get nil case out of the way
+ if object == nil {
+ return true
+ }
+
+ objValue := reflect.ValueOf(object)
+
+ switch objValue.Kind() {
+ // collection types are empty when they have no element
+ case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
+ return objValue.Len() == 0
+ // pointers are empty if nil or if the value they point to is empty
+ case reflect.Ptr:
+ if objValue.IsNil() {
+ return true
+ }
+ deref := objValue.Elem().Interface()
+ return isEmpty(deref)
+ // for all other types, compare against the zero value
+ default:
+ zero := reflect.Zero(objValue.Type())
+ return reflect.DeepEqual(object, zero.Interface())
+ }
+}
diff --git a/vendor/github.com/cloudevents/sdk-go/v2/test/event_mocks.go b/vendor/github.com/cloudevents/sdk-go/v2/test/event_mocks.go
new file mode 100644
index 00000000..bc32daa1
--- /dev/null
+++ b/vendor/github.com/cloudevents/sdk-go/v2/test/event_mocks.go
@@ -0,0 +1,99 @@
+/*
+ Copyright 2021 The CloudEvents Authors
+ SPDX-License-Identifier: Apache-2.0
+*/
+
+// Package test contains test data and generic tests for testing bindings.
+package test
+
+import (
+ "fmt"
+ "net/url"
+ "time"
+
+ "github.com/cloudevents/sdk-go/v2/binding"
+ "github.com/cloudevents/sdk-go/v2/binding/spec"
+ "github.com/cloudevents/sdk-go/v2/event"
+ "github.com/cloudevents/sdk-go/v2/types"
+)
+
+func strptr(s string) *string { return &s }
+
+var (
+ Source = types.URIRef{URL: url.URL{Scheme: "http", Host: "example.com", Path: "/source"}}
+ Timestamp = types.Timestamp{Time: time.Date(2020, 03, 21, 12, 34, 56, 780000000, time.UTC)}
+ Schema = types.URI{URL: url.URL{Scheme: "http", Host: "example.com", Path: "/schema"}}
+)
+
+// FullEvent has all context attributes set and JSON string data.
+func FullEvent() event.Event {
+ e := event.Event{
+ Context: event.EventContextV1{
+ Type: "com.example.FullEvent",
+ Source: Source,
+ ID: "full-event",
+ Time: &Timestamp,
+ DataSchema: &Schema,
+ Subject: strptr("topic"),
+ }.AsV1(),
+ }
+
+ e.SetExtension("exbool", true)
+ e.SetExtension("exint", 42)
+ e.SetExtension("exstring", "exstring")
+ e.SetExtension("exbinary", []byte{0, 1, 2, 3})
+ e.SetExtension("exurl", Source)
+ e.SetExtension("extime", Timestamp)
+
+ if err := e.SetData("text/json", "hello"); err != nil {
+ panic(err)
+ }
+ return e
+}
+
+// MinEvent has only required attributes set.
+func MinEvent() event.Event {
+ return event.Event{
+ Context: event.EventContextV1{
+ Type: "com.example.MinEvent",
+ Source: Source,
+ ID: "min-event",
+ }.AsV1(),
+ }
+}
+
+// FullMessage returns the same event of FullEvent but wrapped as Message.
+func FullMessage() binding.Message {
+ ev := FullEvent()
+ return binding.ToMessage(&ev)
+}
+
+// MinMessage returns the same event of MinEvent but wrapped as Message.
+func MinMessage() binding.Message {
+ ev := MinEvent()
+ return binding.ToMessage(&ev)
+}
+
+// AllVersions returns all versions of each event in events.
+// ID gets a -number suffix so IDs are unique.
+func AllVersions(events []event.Event) []event.Event {
+ versions := spec.New()
+ all := versions.Versions()
+ result := make([]event.Event, len(events)*len(all))
+ i := 0
+ for _, e := range events {
+ for _, v := range all {
+ result[i] = e
+ result[i].Context = v.Convert(e.Context)
+ result[i].SetID(fmt.Sprintf("%v-%v", e.ID(), i)) // Unique IDs
+ i++
+ }
+ }
+ return result
+}
+
+// Events is a set of test events that should be handled correctly by
+// all event-processing code.
+func Events() []event.Event {
+ return AllVersions([]event.Event{FullEvent(), MinEvent()})
+}
diff --git a/vendor/github.com/cloudevents/sdk-go/v2/test/helpers.go b/vendor/github.com/cloudevents/sdk-go/v2/test/helpers.go
new file mode 100644
index 00000000..f4e93a6a
--- /dev/null
+++ b/vendor/github.com/cloudevents/sdk-go/v2/test/helpers.go
@@ -0,0 +1,99 @@
+/*
+ Copyright 2021 The CloudEvents Authors
+ SPDX-License-Identifier: Apache-2.0
+*/
+
+package test
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "reflect"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ "github.com/cloudevents/sdk-go/v2/binding"
+ "github.com/cloudevents/sdk-go/v2/binding/format"
+ "github.com/cloudevents/sdk-go/v2/event"
+ "github.com/cloudevents/sdk-go/v2/types"
+)
+
+// WithoutExtensions returns a copy of events with no Extensions.
+// Use for testing where extensions are not supported.
+func WithoutExtensions(events []event.Event) []event.Event {
+ result := make([]event.Event, len(events))
+ for i, e := range events {
+ result[i] = e
+ result[i].Context = e.Context.Clone()
+ ctx := reflect.ValueOf(result[i].Context).Elem()
+ ext := ctx.FieldByName("Extensions")
+ ext.Set(reflect.Zero(ext.Type()))
+ }
+ return result
+}
+
+// MustJSON marshals the event.Event to JSON structured representation or panics
+func MustJSON(t testing.TB, e event.Event) []byte {
+ b, err := format.JSON.Marshal(&e)
+ require.NoError(t, err)
+ return b
+}
+
+// MustToEvent converts a Message to event.Event
+func MustToEvent(t testing.TB, ctx context.Context, m binding.Message) event.Event {
+ e, err := binding.ToEvent(ctx, m)
+ require.NoError(t, err)
+ return *e
+}
+
+// ConvertEventExtensionsToString returns a copy of the event.Event where all extensions are converted to strings. Fails the test if conversion fails
+func ConvertEventExtensionsToString(t testing.TB, e event.Event) event.Event {
+ out := e.Clone()
+ for k, v := range e.Extensions() {
+ var vParsed interface{}
+ var err error
+
+ switch v := v.(type) {
+ case json.RawMessage:
+ err = json.Unmarshal(v, &vParsed)
+ require.NoError(t, err)
+ default:
+ vParsed, err = types.Format(v)
+ require.NoError(t, err)
+ }
+ out.SetExtension(k, vParsed)
+ }
+ return out
+}
+
+// TestNameOf generates a string test name from x, esp. for ce.Event and ce.Message.
+func TestNameOf(x interface{}) string {
+ switch x := x.(type) {
+ case event.Event:
+ b, err := json.Marshal(x)
+ if err == nil {
+ return fmt.Sprintf("Event%s", b)
+ }
+ case binding.Message:
+ return fmt.Sprintf("Message{%s}", reflect.TypeOf(x).String())
+ }
+ return fmt.Sprintf("%T(%#v)", x, x)
+}
+
+// EachEvent runs f as a test for each event in events
+func EachEvent(t *testing.T, events []event.Event, f func(*testing.T, event.Event)) {
+ for _, e := range events {
+ in := e
+ t.Run(TestNameOf(in), func(t *testing.T) { f(t, in) })
+ }
+}
+
+// EachMessage runs f as a test for each message in messages
+func EachMessage(t *testing.T, messages []binding.Message, f func(*testing.T, binding.Message)) {
+ for _, m := range messages {
+ in := m
+ t.Run(TestNameOf(in), func(t *testing.T) { f(t, in) })
+ }
+}
diff --git a/vendor/github.com/google/mako/LICENSE b/vendor/github.com/google/mako/LICENSE
new file mode 100644
index 00000000..fef7d967
--- /dev/null
+++ b/vendor/github.com/google/mako/LICENSE
@@ -0,0 +1,204 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
+
+
\ No newline at end of file
diff --git a/vendor/github.com/google/mako/clients/proto/analyzers/threshold_analyzer_go_proto/threshold_analyzer.pb.go b/vendor/github.com/google/mako/clients/proto/analyzers/threshold_analyzer_go_proto/threshold_analyzer.pb.go
new file mode 100644
index 00000000..7f984541
--- /dev/null
+++ b/vendor/github.com/google/mako/clients/proto/analyzers/threshold_analyzer_go_proto/threshold_analyzer.pb.go
@@ -0,0 +1,420 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: clients/proto/analyzers/threshold_analyzer.proto
+
+package mako_analyzers_threshold_analyzer
+
+import (
+ fmt "fmt"
+ proto "github.com/golang/protobuf/proto"
+ mako_go_proto "github.com/google/mako/spec/proto/mako_go_proto"
+ math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type ThresholdConfig struct {
+ Min *float64 `protobuf:"fixed64,1,opt,name=min" json:"min,omitempty"`
+ Max *float64 `protobuf:"fixed64,2,opt,name=max" json:"max,omitempty"`
+ OutlierPercentMax *float64 `protobuf:"fixed64,3,opt,name=outlier_percent_max,json=outlierPercentMax" json:"outlier_percent_max,omitempty"`
+ DataFilter *mako_go_proto.DataFilter `protobuf:"bytes,4,opt,name=data_filter,json=dataFilter" json:"data_filter,omitempty"`
+ ConfigName *string `protobuf:"bytes,5,opt,name=config_name,json=configName" json:"config_name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ThresholdConfig) Reset() { *m = ThresholdConfig{} }
+func (m *ThresholdConfig) String() string { return proto.CompactTextString(m) }
+func (*ThresholdConfig) ProtoMessage() {}
+func (*ThresholdConfig) Descriptor() ([]byte, []int) {
+ return fileDescriptor_efc166777e6a25c0, []int{0}
+}
+
+func (m *ThresholdConfig) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ThresholdConfig.Unmarshal(m, b)
+}
+func (m *ThresholdConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ThresholdConfig.Marshal(b, m, deterministic)
+}
+func (m *ThresholdConfig) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ThresholdConfig.Merge(m, src)
+}
+func (m *ThresholdConfig) XXX_Size() int {
+ return xxx_messageInfo_ThresholdConfig.Size(m)
+}
+func (m *ThresholdConfig) XXX_DiscardUnknown() {
+ xxx_messageInfo_ThresholdConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ThresholdConfig proto.InternalMessageInfo
+
+func (m *ThresholdConfig) GetMin() float64 {
+ if m != nil && m.Min != nil {
+ return *m.Min
+ }
+ return 0
+}
+
+func (m *ThresholdConfig) GetMax() float64 {
+ if m != nil && m.Max != nil {
+ return *m.Max
+ }
+ return 0
+}
+
+func (m *ThresholdConfig) GetOutlierPercentMax() float64 {
+ if m != nil && m.OutlierPercentMax != nil {
+ return *m.OutlierPercentMax
+ }
+ return 0
+}
+
+func (m *ThresholdConfig) GetDataFilter() *mako_go_proto.DataFilter {
+ if m != nil {
+ return m.DataFilter
+ }
+ return nil
+}
+
+func (m *ThresholdConfig) GetConfigName() string {
+ if m != nil && m.ConfigName != nil {
+ return *m.ConfigName
+ }
+ return ""
+}
+
+type CrossRunConfig struct {
+ RunInfoQueryList []*mako_go_proto.RunInfoQuery `protobuf:"bytes,1,rep,name=run_info_query_list,json=runInfoQueryList" json:"run_info_query_list,omitempty"`
+ MinRunCount *int32 `protobuf:"varint,3,opt,name=min_run_count,json=minRunCount" json:"min_run_count,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CrossRunConfig) Reset() { *m = CrossRunConfig{} }
+func (m *CrossRunConfig) String() string { return proto.CompactTextString(m) }
+func (*CrossRunConfig) ProtoMessage() {}
+func (*CrossRunConfig) Descriptor() ([]byte, []int) {
+ return fileDescriptor_efc166777e6a25c0, []int{1}
+}
+
+func (m *CrossRunConfig) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CrossRunConfig.Unmarshal(m, b)
+}
+func (m *CrossRunConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CrossRunConfig.Marshal(b, m, deterministic)
+}
+func (m *CrossRunConfig) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CrossRunConfig.Merge(m, src)
+}
+func (m *CrossRunConfig) XXX_Size() int {
+ return xxx_messageInfo_CrossRunConfig.Size(m)
+}
+func (m *CrossRunConfig) XXX_DiscardUnknown() {
+ xxx_messageInfo_CrossRunConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CrossRunConfig proto.InternalMessageInfo
+
+func (m *CrossRunConfig) GetRunInfoQueryList() []*mako_go_proto.RunInfoQuery {
+ if m != nil {
+ return m.RunInfoQueryList
+ }
+ return nil
+}
+
+func (m *CrossRunConfig) GetMinRunCount() int32 {
+ if m != nil && m.MinRunCount != nil {
+ return *m.MinRunCount
+ }
+ return 0
+}
+
+type ThresholdAnalyzerInput struct {
+ Configs []*ThresholdConfig `protobuf:"bytes,1,rep,name=configs" json:"configs,omitempty"`
+ Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
+ HistoricalContextTags []string `protobuf:"bytes,3,rep,name=historical_context_tags,json=historicalContextTags" json:"historical_context_tags,omitempty"`
+ CrossRunConfig *CrossRunConfig `protobuf:"bytes,4,opt,name=cross_run_config,json=crossRunConfig" json:"cross_run_config,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ThresholdAnalyzerInput) Reset() { *m = ThresholdAnalyzerInput{} }
+func (m *ThresholdAnalyzerInput) String() string { return proto.CompactTextString(m) }
+func (*ThresholdAnalyzerInput) ProtoMessage() {}
+func (*ThresholdAnalyzerInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_efc166777e6a25c0, []int{2}
+}
+
+func (m *ThresholdAnalyzerInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ThresholdAnalyzerInput.Unmarshal(m, b)
+}
+func (m *ThresholdAnalyzerInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ThresholdAnalyzerInput.Marshal(b, m, deterministic)
+}
+func (m *ThresholdAnalyzerInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ThresholdAnalyzerInput.Merge(m, src)
+}
+func (m *ThresholdAnalyzerInput) XXX_Size() int {
+ return xxx_messageInfo_ThresholdAnalyzerInput.Size(m)
+}
+func (m *ThresholdAnalyzerInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_ThresholdAnalyzerInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ThresholdAnalyzerInput proto.InternalMessageInfo
+
+func (m *ThresholdAnalyzerInput) GetConfigs() []*ThresholdConfig {
+ if m != nil {
+ return m.Configs
+ }
+ return nil
+}
+
+func (m *ThresholdAnalyzerInput) GetName() string {
+ if m != nil && m.Name != nil {
+ return *m.Name
+ }
+ return ""
+}
+
+func (m *ThresholdAnalyzerInput) GetHistoricalContextTags() []string {
+ if m != nil {
+ return m.HistoricalContextTags
+ }
+ return nil
+}
+
+func (m *ThresholdAnalyzerInput) GetCrossRunConfig() *CrossRunConfig {
+ if m != nil {
+ return m.CrossRunConfig
+ }
+ return nil
+}
+
+type ThresholdAnalyzerOutput struct {
+ ConfigResults []*ThresholdConfigResult `protobuf:"bytes,1,rep,name=config_results,json=configResults" json:"config_results,omitempty"`
+ MinTimestampMs *float64 `protobuf:"fixed64,2,opt,name=min_timestamp_ms,json=minTimestampMs" json:"min_timestamp_ms,omitempty"`
+ MaxTimestampMs *float64 `protobuf:"fixed64,3,opt,name=max_timestamp_ms,json=maxTimestampMs" json:"max_timestamp_ms,omitempty"`
+ MinBuildId *float64 `protobuf:"fixed64,4,opt,name=min_build_id,json=minBuildId" json:"min_build_id,omitempty"`
+ MaxBuildId *float64 `protobuf:"fixed64,5,opt,name=max_build_id,json=maxBuildId" json:"max_build_id,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ThresholdAnalyzerOutput) Reset() { *m = ThresholdAnalyzerOutput{} }
+func (m *ThresholdAnalyzerOutput) String() string { return proto.CompactTextString(m) }
+func (*ThresholdAnalyzerOutput) ProtoMessage() {}
+func (*ThresholdAnalyzerOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_efc166777e6a25c0, []int{3}
+}
+
+func (m *ThresholdAnalyzerOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ThresholdAnalyzerOutput.Unmarshal(m, b)
+}
+func (m *ThresholdAnalyzerOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ThresholdAnalyzerOutput.Marshal(b, m, deterministic)
+}
+func (m *ThresholdAnalyzerOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ThresholdAnalyzerOutput.Merge(m, src)
+}
+func (m *ThresholdAnalyzerOutput) XXX_Size() int {
+ return xxx_messageInfo_ThresholdAnalyzerOutput.Size(m)
+}
+func (m *ThresholdAnalyzerOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_ThresholdAnalyzerOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ThresholdAnalyzerOutput proto.InternalMessageInfo
+
+func (m *ThresholdAnalyzerOutput) GetConfigResults() []*ThresholdConfigResult {
+ if m != nil {
+ return m.ConfigResults
+ }
+ return nil
+}
+
+func (m *ThresholdAnalyzerOutput) GetMinTimestampMs() float64 {
+ if m != nil && m.MinTimestampMs != nil {
+ return *m.MinTimestampMs
+ }
+ return 0
+}
+
+func (m *ThresholdAnalyzerOutput) GetMaxTimestampMs() float64 {
+ if m != nil && m.MaxTimestampMs != nil {
+ return *m.MaxTimestampMs
+ }
+ return 0
+}
+
+func (m *ThresholdAnalyzerOutput) GetMinBuildId() float64 {
+ if m != nil && m.MinBuildId != nil {
+ return *m.MinBuildId
+ }
+ return 0
+}
+
+func (m *ThresholdAnalyzerOutput) GetMaxBuildId() float64 {
+ if m != nil && m.MaxBuildId != nil {
+ return *m.MaxBuildId
+ }
+ return 0
+}
+
+type ThresholdConfigResult struct {
+ PercentAboveMax *float64 `protobuf:"fixed64,1,opt,name=percent_above_max,json=percentAboveMax" json:"percent_above_max,omitempty"`
+ PercentBelowMin *float64 `protobuf:"fixed64,2,opt,name=percent_below_min,json=percentBelowMin" json:"percent_below_min,omitempty"`
+ ValueOutsideThreshold *float64 `protobuf:"fixed64,3,opt,name=value_outside_threshold,json=valueOutsideThreshold" json:"value_outside_threshold,omitempty"`
+ MetricLabel *string `protobuf:"bytes,4,opt,name=metric_label,json=metricLabel" json:"metric_label,omitempty"`
+ Config *ThresholdConfig `protobuf:"bytes,5,opt,name=config" json:"config,omitempty"`
+ Regression *bool `protobuf:"varint,6,opt,name=regression" json:"regression,omitempty"`
+ CrossRunConfigExercised *bool `protobuf:"varint,7,opt,name=cross_run_config_exercised,json=crossRunConfigExercised,def=0" json:"cross_run_config_exercised,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ThresholdConfigResult) Reset() { *m = ThresholdConfigResult{} }
+func (m *ThresholdConfigResult) String() string { return proto.CompactTextString(m) }
+func (*ThresholdConfigResult) ProtoMessage() {}
+func (*ThresholdConfigResult) Descriptor() ([]byte, []int) {
+ return fileDescriptor_efc166777e6a25c0, []int{4}
+}
+
+func (m *ThresholdConfigResult) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ThresholdConfigResult.Unmarshal(m, b)
+}
+func (m *ThresholdConfigResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ThresholdConfigResult.Marshal(b, m, deterministic)
+}
+func (m *ThresholdConfigResult) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ThresholdConfigResult.Merge(m, src)
+}
+func (m *ThresholdConfigResult) XXX_Size() int {
+ return xxx_messageInfo_ThresholdConfigResult.Size(m)
+}
+func (m *ThresholdConfigResult) XXX_DiscardUnknown() {
+ xxx_messageInfo_ThresholdConfigResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ThresholdConfigResult proto.InternalMessageInfo
+
+const Default_ThresholdConfigResult_CrossRunConfigExercised bool = false
+
+func (m *ThresholdConfigResult) GetPercentAboveMax() float64 {
+ if m != nil && m.PercentAboveMax != nil {
+ return *m.PercentAboveMax
+ }
+ return 0
+}
+
+func (m *ThresholdConfigResult) GetPercentBelowMin() float64 {
+ if m != nil && m.PercentBelowMin != nil {
+ return *m.PercentBelowMin
+ }
+ return 0
+}
+
+func (m *ThresholdConfigResult) GetValueOutsideThreshold() float64 {
+ if m != nil && m.ValueOutsideThreshold != nil {
+ return *m.ValueOutsideThreshold
+ }
+ return 0
+}
+
+func (m *ThresholdConfigResult) GetMetricLabel() string {
+ if m != nil && m.MetricLabel != nil {
+ return *m.MetricLabel
+ }
+ return ""
+}
+
+func (m *ThresholdConfigResult) GetConfig() *ThresholdConfig {
+ if m != nil {
+ return m.Config
+ }
+ return nil
+}
+
+func (m *ThresholdConfigResult) GetRegression() bool {
+ if m != nil && m.Regression != nil {
+ return *m.Regression
+ }
+ return false
+}
+
+func (m *ThresholdConfigResult) GetCrossRunConfigExercised() bool {
+ if m != nil && m.CrossRunConfigExercised != nil {
+ return *m.CrossRunConfigExercised
+ }
+ return Default_ThresholdConfigResult_CrossRunConfigExercised
+}
+
+func init() {
+ proto.RegisterType((*ThresholdConfig)(nil), "mako.analyzers.threshold_analyzer.ThresholdConfig")
+ proto.RegisterType((*CrossRunConfig)(nil), "mako.analyzers.threshold_analyzer.CrossRunConfig")
+ proto.RegisterType((*ThresholdAnalyzerInput)(nil), "mako.analyzers.threshold_analyzer.ThresholdAnalyzerInput")
+ proto.RegisterType((*ThresholdAnalyzerOutput)(nil), "mako.analyzers.threshold_analyzer.ThresholdAnalyzerOutput")
+ proto.RegisterType((*ThresholdConfigResult)(nil), "mako.analyzers.threshold_analyzer.ThresholdConfigResult")
+}
+
+func init() {
+ proto.RegisterFile("clients/proto/analyzers/threshold_analyzer.proto", fileDescriptor_efc166777e6a25c0)
+}
+
+var fileDescriptor_efc166777e6a25c0 = []byte{
+ // 654 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0xcf, 0x4e, 0x1b, 0x31,
+ 0x10, 0xc6, 0xb5, 0x09, 0xe1, 0xcf, 0x04, 0x42, 0x30, 0x4a, 0x59, 0x71, 0x68, 0x43, 0x4e, 0x51,
+ 0x0f, 0x4b, 0xe1, 0x50, 0x55, 0xbd, 0x01, 0x6d, 0x25, 0x10, 0x94, 0xd6, 0xe2, 0xd6, 0x83, 0xe5,
+ 0xec, 0x3a, 0xc1, 0xaa, 0xd7, 0x4e, 0x6d, 0x2f, 0x5d, 0x2a, 0xf5, 0x19, 0x2a, 0xf5, 0x6d, 0xfa,
+ 0x6a, 0x3d, 0x55, 0xf6, 0x7a, 0x43, 0x02, 0x95, 0x5a, 0x71, 0xb3, 0xbf, 0xf9, 0x69, 0x3c, 0xfe,
+ 0x66, 0x06, 0x5e, 0xa4, 0x82, 0x33, 0x69, 0xcd, 0xfe, 0x54, 0x2b, 0xab, 0xf6, 0xa9, 0xa4, 0xe2,
+ 0xf6, 0x1b, 0xd3, 0x66, 0xdf, 0x5e, 0x6b, 0x66, 0xae, 0x95, 0xc8, 0x48, 0xad, 0x25, 0x1e, 0x41,
+ 0x7b, 0x39, 0xfd, 0xac, 0x92, 0x19, 0x98, 0x3c, 0x04, 0x77, 0x7b, 0x66, 0xca, 0xd2, 0x90, 0xd1,
+ 0xd3, 0xfe, 0x38, 0xf8, 0x15, 0xc1, 0xe6, 0x55, 0x4d, 0x9f, 0x28, 0x39, 0xe6, 0x13, 0xd4, 0x85,
+ 0x66, 0xce, 0x65, 0x1c, 0xf5, 0xa3, 0x61, 0x84, 0xdd, 0xd1, 0x2b, 0xb4, 0x8c, 0x1b, 0x41, 0xa1,
+ 0x25, 0x4a, 0x60, 0x5b, 0x15, 0x56, 0x70, 0xa6, 0xc9, 0x94, 0xe9, 0x94, 0x49, 0x4b, 0x1c, 0xd1,
+ 0xf4, 0xc4, 0x56, 0x08, 0x7d, 0xa8, 0x22, 0x17, 0xb4, 0x44, 0x07, 0xd0, 0xce, 0xa8, 0xa5, 0x64,
+ 0xcc, 0x85, 0x65, 0x3a, 0x5e, 0xea, 0x47, 0xc3, 0xf6, 0x61, 0x37, 0xf1, 0x95, 0xbc, 0xa1, 0x96,
+ 0xbe, 0xf3, 0x3a, 0x86, 0x6c, 0x76, 0x46, 0xcf, 0xa0, 0x9d, 0xfa, 0x82, 0x88, 0xa4, 0x39, 0x8b,
+ 0x5b, 0xfd, 0x68, 0xb8, 0x86, 0xa1, 0x92, 0xde, 0xd3, 0x9c, 0x0d, 0xbe, 0x43, 0xe7, 0x44, 0x2b,
+ 0x63, 0x70, 0x21, 0x43, 0xe5, 0x47, 0xb0, 0xad, 0x0b, 0x49, 0xb8, 0x1c, 0x2b, 0xf2, 0xa5, 0x60,
+ 0xfa, 0x96, 0x08, 0x6e, 0x6c, 0x1c, 0xf5, 0x9b, 0xc3, 0xf6, 0x21, 0xaa, 0x5e, 0xc3, 0x85, 0x3c,
+ 0x95, 0x63, 0xf5, 0xd1, 0x85, 0x71, 0x57, 0xcf, 0xdd, 0xce, 0xb9, 0xb1, 0x68, 0x00, 0x1b, 0x39,
+ 0x97, 0xc4, 0xa5, 0x49, 0x55, 0x21, 0xad, 0xff, 0x52, 0x0b, 0xb7, 0x73, 0x2e, 0xfd, 0x3b, 0x85,
+ 0xb4, 0x67, 0x4b, 0xab, 0x8d, 0x6e, 0x73, 0xf0, 0xa3, 0x01, 0x4f, 0x66, 0xd6, 0x1d, 0x05, 0x9f,
+ 0x4f, 0xe5, 0xb4, 0xb0, 0xe8, 0x1c, 0x56, 0xaa, 0x3a, 0x4d, 0x78, 0xfb, 0x30, 0xf9, 0x67, 0x87,
+ 0x92, 0x7b, 0x6d, 0xc0, 0x75, 0x0a, 0x84, 0x60, 0xc9, 0x3b, 0xd0, 0xf0, 0x0e, 0xf8, 0x33, 0x7a,
+ 0x09, 0x3b, 0xd7, 0xdc, 0x58, 0xa5, 0x79, 0x4a, 0x05, 0x49, 0x95, 0xb4, 0xac, 0xb4, 0xc4, 0xd2,
+ 0x89, 0x89, 0x9b, 0xfd, 0xe6, 0x70, 0x0d, 0xf7, 0xee, 0xc2, 0x27, 0x55, 0xf4, 0x8a, 0x4e, 0x0c,
+ 0xfa, 0x04, 0xdd, 0xd4, 0x79, 0x16, 0x3e, 0xe8, 0x1e, 0x08, 0xcd, 0x38, 0xf8, 0x8f, 0x12, 0x17,
+ 0xed, 0xc6, 0x9d, 0x74, 0xe1, 0x3e, 0xf8, 0xd9, 0x80, 0x9d, 0x07, 0x8e, 0x5c, 0x16, 0xd6, 0x59,
+ 0x42, 0xa0, 0x13, 0xba, 0xa9, 0x99, 0x29, 0x84, 0xad, 0x9d, 0x79, 0xf5, 0x08, 0x67, 0x7c, 0x02,
+ 0xbc, 0x91, 0xce, 0xdd, 0x0c, 0x1a, 0x42, 0xd7, 0x35, 0xce, 0xf2, 0x9c, 0x19, 0x4b, 0xf3, 0x29,
+ 0xc9, 0x4d, 0x18, 0xd8, 0x4e, 0xce, 0xe5, 0x55, 0x2d, 0x5f, 0x54, 0x24, 0x2d, 0x17, 0xc9, 0x66,
+ 0x20, 0x69, 0x39, 0x4f, 0xf6, 0x61, 0xdd, 0xe5, 0x1c, 0x15, 0x5c, 0x64, 0x84, 0x67, 0xde, 0xa9,
+ 0x08, 0x43, 0xce, 0xe5, 0xb1, 0x93, 0x4e, 0x33, 0x4f, 0xd0, 0xf2, 0x8e, 0x68, 0x05, 0x82, 0x96,
+ 0x81, 0x18, 0xfc, 0x6e, 0x40, 0xef, 0xaf, 0x1f, 0x40, 0xcf, 0x61, 0xab, 0xde, 0x1d, 0x3a, 0x52,
+ 0x37, 0xcc, 0x6f, 0x50, 0xb5, 0x75, 0x9b, 0x21, 0x70, 0xe4, 0x74, 0xb7, 0x3f, 0x73, 0xec, 0x88,
+ 0x09, 0xf5, 0x95, 0xb8, 0x0d, 0x6d, 0x2c, 0xb0, 0xc7, 0x4e, 0xbf, 0xe0, 0xd2, 0xcd, 0xc6, 0x0d,
+ 0x15, 0x05, 0x23, 0xaa, 0xb0, 0x86, 0x67, 0x8c, 0xcc, 0x2c, 0x0d, 0xdf, 0xec, 0xf9, 0xf0, 0x65,
+ 0x15, 0x9d, 0xd5, 0x86, 0xf6, 0x60, 0x3d, 0x67, 0x56, 0xf3, 0x94, 0x08, 0x3a, 0x62, 0xc2, 0xff,
+ 0x76, 0x0d, 0xb7, 0x2b, 0xed, 0xdc, 0x49, 0xe8, 0x0c, 0x96, 0xc3, 0xd0, 0xb4, 0xfc, 0xd0, 0x3c,
+ 0x66, 0xae, 0x43, 0x06, 0xf4, 0x14, 0x40, 0xb3, 0x89, 0x66, 0xc6, 0x70, 0x25, 0xe3, 0xe5, 0x7e,
+ 0x34, 0x5c, 0xc5, 0x73, 0x0a, 0x3a, 0x86, 0xdd, 0xfb, 0xa3, 0x4a, 0x58, 0xc9, 0x74, 0xca, 0x0d,
+ 0xcb, 0xe2, 0x15, 0xc7, 0xbf, 0x6e, 0x8d, 0xa9, 0x30, 0x0c, 0xef, 0x2c, 0x0e, 0xe2, 0xdb, 0x9a,
+ 0xfa, 0x13, 0x00, 0x00, 0xff, 0xff, 0xda, 0x96, 0x85, 0xd7, 0x4b, 0x05, 0x00, 0x00,
+}
diff --git a/vendor/github.com/google/mako/clients/proto/analyzers/utest_analyzer_go_proto/utest_analyzer.pb.go b/vendor/github.com/google/mako/clients/proto/analyzers/utest_analyzer_go_proto/utest_analyzer.pb.go
new file mode 100644
index 00000000..4c8d437d
--- /dev/null
+++ b/vendor/github.com/google/mako/clients/proto/analyzers/utest_analyzer_go_proto/utest_analyzer.pb.go
@@ -0,0 +1,495 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: clients/proto/analyzers/utest_analyzer.proto
+
+package mako_utest_analyzer
+
+import (
+ fmt "fmt"
+ proto "github.com/golang/protobuf/proto"
+ mako_go_proto "github.com/google/mako/spec/proto/mako_go_proto"
+ math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type UTestConfig_DirectionBias int32
+
+const (
+ UTestConfig_NO_BIAS UTestConfig_DirectionBias = 0
+ UTestConfig_IGNORE_INCREASE UTestConfig_DirectionBias = 1
+ UTestConfig_IGNORE_DECREASE UTestConfig_DirectionBias = 2
+)
+
+var UTestConfig_DirectionBias_name = map[int32]string{
+ 0: "NO_BIAS",
+ 1: "IGNORE_INCREASE",
+ 2: "IGNORE_DECREASE",
+}
+
+var UTestConfig_DirectionBias_value = map[string]int32{
+ "NO_BIAS": 0,
+ "IGNORE_INCREASE": 1,
+ "IGNORE_DECREASE": 2,
+}
+
+func (x UTestConfig_DirectionBias) Enum() *UTestConfig_DirectionBias {
+ p := new(UTestConfig_DirectionBias)
+ *p = x
+ return p
+}
+
+func (x UTestConfig_DirectionBias) String() string {
+ return proto.EnumName(UTestConfig_DirectionBias_name, int32(x))
+}
+
+func (x *UTestConfig_DirectionBias) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(UTestConfig_DirectionBias_value, data, "UTestConfig_DirectionBias")
+ if err != nil {
+ return err
+ }
+ *x = UTestConfig_DirectionBias(value)
+ return nil
+}
+
+func (UTestConfig_DirectionBias) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_e2b697cdbf0773fa, []int{1, 0}
+}
+
+type UTestAnalyzerInput struct {
+ ASample *UTestSample `protobuf:"bytes,1,opt,name=a_sample,json=aSample" json:"a_sample,omitempty"`
+ BSample *UTestSample `protobuf:"bytes,2,opt,name=b_sample,json=bSample" json:"b_sample,omitempty"`
+ ConfigList []*UTestConfig `protobuf:"bytes,3,rep,name=config_list,json=configList" json:"config_list,omitempty"`
+ Name *string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *UTestAnalyzerInput) Reset() { *m = UTestAnalyzerInput{} }
+func (m *UTestAnalyzerInput) String() string { return proto.CompactTextString(m) }
+func (*UTestAnalyzerInput) ProtoMessage() {}
+func (*UTestAnalyzerInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_e2b697cdbf0773fa, []int{0}
+}
+
+func (m *UTestAnalyzerInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_UTestAnalyzerInput.Unmarshal(m, b)
+}
+func (m *UTestAnalyzerInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_UTestAnalyzerInput.Marshal(b, m, deterministic)
+}
+func (m *UTestAnalyzerInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UTestAnalyzerInput.Merge(m, src)
+}
+func (m *UTestAnalyzerInput) XXX_Size() int {
+ return xxx_messageInfo_UTestAnalyzerInput.Size(m)
+}
+func (m *UTestAnalyzerInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_UTestAnalyzerInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UTestAnalyzerInput proto.InternalMessageInfo
+
+func (m *UTestAnalyzerInput) GetASample() *UTestSample {
+ if m != nil {
+ return m.ASample
+ }
+ return nil
+}
+
+func (m *UTestAnalyzerInput) GetBSample() *UTestSample {
+ if m != nil {
+ return m.BSample
+ }
+ return nil
+}
+
+func (m *UTestAnalyzerInput) GetConfigList() []*UTestConfig {
+ if m != nil {
+ return m.ConfigList
+ }
+ return nil
+}
+
+func (m *UTestAnalyzerInput) GetName() string {
+ if m != nil && m.Name != nil {
+ return *m.Name
+ }
+ return ""
+}
+
+type UTestConfig struct {
+ AMetricKey *string `protobuf:"bytes,1,opt,name=a_metric_key,json=aMetricKey" json:"a_metric_key,omitempty"`
+ ADataFilter *mako_go_proto.DataFilter `protobuf:"bytes,8,opt,name=a_data_filter,json=aDataFilter" json:"a_data_filter,omitempty"`
+ BMetricKey *string `protobuf:"bytes,2,opt,name=b_metric_key,json=bMetricKey" json:"b_metric_key,omitempty"`
+ BDataFilter *mako_go_proto.DataFilter `protobuf:"bytes,9,opt,name=b_data_filter,json=bDataFilter" json:"b_data_filter,omitempty"`
+ ShiftValue *float64 `protobuf:"fixed64,3,opt,name=shift_value,json=shiftValue" json:"shift_value,omitempty"`
+ RelativeShiftValue *float64 `protobuf:"fixed64,7,opt,name=relative_shift_value,json=relativeShiftValue" json:"relative_shift_value,omitempty"`
+ DirectionBias *UTestConfig_DirectionBias `protobuf:"varint,4,opt,name=direction_bias,json=directionBias,enum=mako.utest_analyzer.UTestConfig_DirectionBias,def=0" json:"direction_bias,omitempty"`
+ SignificanceLevel *float64 `protobuf:"fixed64,5,opt,name=significance_level,json=significanceLevel" json:"significance_level,omitempty"`
+ ConfigName *string `protobuf:"bytes,6,opt,name=config_name,json=configName" json:"config_name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *UTestConfig) Reset() { *m = UTestConfig{} }
+func (m *UTestConfig) String() string { return proto.CompactTextString(m) }
+func (*UTestConfig) ProtoMessage() {}
+func (*UTestConfig) Descriptor() ([]byte, []int) {
+ return fileDescriptor_e2b697cdbf0773fa, []int{1}
+}
+
+func (m *UTestConfig) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_UTestConfig.Unmarshal(m, b)
+}
+func (m *UTestConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_UTestConfig.Marshal(b, m, deterministic)
+}
+func (m *UTestConfig) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UTestConfig.Merge(m, src)
+}
+func (m *UTestConfig) XXX_Size() int {
+ return xxx_messageInfo_UTestConfig.Size(m)
+}
+func (m *UTestConfig) XXX_DiscardUnknown() {
+ xxx_messageInfo_UTestConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UTestConfig proto.InternalMessageInfo
+
+const Default_UTestConfig_DirectionBias UTestConfig_DirectionBias = UTestConfig_NO_BIAS
+
+func (m *UTestConfig) GetAMetricKey() string {
+ if m != nil && m.AMetricKey != nil {
+ return *m.AMetricKey
+ }
+ return ""
+}
+
+func (m *UTestConfig) GetADataFilter() *mako_go_proto.DataFilter {
+ if m != nil {
+ return m.ADataFilter
+ }
+ return nil
+}
+
+func (m *UTestConfig) GetBMetricKey() string {
+ if m != nil && m.BMetricKey != nil {
+ return *m.BMetricKey
+ }
+ return ""
+}
+
+func (m *UTestConfig) GetBDataFilter() *mako_go_proto.DataFilter {
+ if m != nil {
+ return m.BDataFilter
+ }
+ return nil
+}
+
+func (m *UTestConfig) GetShiftValue() float64 {
+ if m != nil && m.ShiftValue != nil {
+ return *m.ShiftValue
+ }
+ return 0
+}
+
+func (m *UTestConfig) GetRelativeShiftValue() float64 {
+ if m != nil && m.RelativeShiftValue != nil {
+ return *m.RelativeShiftValue
+ }
+ return 0
+}
+
+func (m *UTestConfig) GetDirectionBias() UTestConfig_DirectionBias {
+ if m != nil && m.DirectionBias != nil {
+ return *m.DirectionBias
+ }
+ return Default_UTestConfig_DirectionBias
+}
+
+func (m *UTestConfig) GetSignificanceLevel() float64 {
+ if m != nil && m.SignificanceLevel != nil {
+ return *m.SignificanceLevel
+ }
+ return 0
+}
+
+func (m *UTestConfig) GetConfigName() string {
+ if m != nil && m.ConfigName != nil {
+ return *m.ConfigName
+ }
+ return ""
+}
+
+type UTestSample struct {
+ RunQueryList []*mako_go_proto.RunInfoQuery `protobuf:"bytes,1,rep,name=run_query_list,json=runQueryList" json:"run_query_list,omitempty"`
+ IncludeCurrentRun *bool `protobuf:"varint,2,opt,name=include_current_run,json=includeCurrentRun,def=0" json:"include_current_run,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *UTestSample) Reset() { *m = UTestSample{} }
+func (m *UTestSample) String() string { return proto.CompactTextString(m) }
+func (*UTestSample) ProtoMessage() {}
+func (*UTestSample) Descriptor() ([]byte, []int) {
+ return fileDescriptor_e2b697cdbf0773fa, []int{2}
+}
+
+func (m *UTestSample) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_UTestSample.Unmarshal(m, b)
+}
+func (m *UTestSample) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_UTestSample.Marshal(b, m, deterministic)
+}
+func (m *UTestSample) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UTestSample.Merge(m, src)
+}
+func (m *UTestSample) XXX_Size() int {
+ return xxx_messageInfo_UTestSample.Size(m)
+}
+func (m *UTestSample) XXX_DiscardUnknown() {
+ xxx_messageInfo_UTestSample.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UTestSample proto.InternalMessageInfo
+
+const Default_UTestSample_IncludeCurrentRun bool = false
+
+func (m *UTestSample) GetRunQueryList() []*mako_go_proto.RunInfoQuery {
+ if m != nil {
+ return m.RunQueryList
+ }
+ return nil
+}
+
+func (m *UTestSample) GetIncludeCurrentRun() bool {
+ if m != nil && m.IncludeCurrentRun != nil {
+ return *m.IncludeCurrentRun
+ }
+ return Default_UTestSample_IncludeCurrentRun
+}
+
+type UTestAnalyzerOutput struct {
+ Summary *string `protobuf:"bytes,1,opt,name=summary" json:"summary,omitempty"`
+ ConfigResultList []*UTestConfigResult `protobuf:"bytes,2,rep,name=config_result_list,json=configResultList" json:"config_result_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *UTestAnalyzerOutput) Reset() { *m = UTestAnalyzerOutput{} }
+func (m *UTestAnalyzerOutput) String() string { return proto.CompactTextString(m) }
+func (*UTestAnalyzerOutput) ProtoMessage() {}
+func (*UTestAnalyzerOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_e2b697cdbf0773fa, []int{3}
+}
+
+func (m *UTestAnalyzerOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_UTestAnalyzerOutput.Unmarshal(m, b)
+}
+func (m *UTestAnalyzerOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_UTestAnalyzerOutput.Marshal(b, m, deterministic)
+}
+func (m *UTestAnalyzerOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UTestAnalyzerOutput.Merge(m, src)
+}
+func (m *UTestAnalyzerOutput) XXX_Size() int {
+ return xxx_messageInfo_UTestAnalyzerOutput.Size(m)
+}
+func (m *UTestAnalyzerOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_UTestAnalyzerOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UTestAnalyzerOutput proto.InternalMessageInfo
+
+func (m *UTestAnalyzerOutput) GetSummary() string {
+ if m != nil && m.Summary != nil {
+ return *m.Summary
+ }
+ return ""
+}
+
+func (m *UTestAnalyzerOutput) GetConfigResultList() []*UTestConfigResult {
+ if m != nil {
+ return m.ConfigResultList
+ }
+ return nil
+}
+
+type UTestConfigResult struct {
+ Config *UTestConfig `protobuf:"bytes,5,opt,name=config" json:"config,omitempty"`
+ AMetricLabel *string `protobuf:"bytes,6,opt,name=a_metric_label,json=aMetricLabel" json:"a_metric_label,omitempty"`
+ BMetricLabel *string `protobuf:"bytes,7,opt,name=b_metric_label,json=bMetricLabel" json:"b_metric_label,omitempty"`
+ AMedian *float64 `protobuf:"fixed64,8,opt,name=a_median,json=aMedian" json:"a_median,omitempty"`
+ BMedian *float64 `protobuf:"fixed64,9,opt,name=b_median,json=bMedian" json:"b_median,omitempty"`
+ ZStatistic *float64 `protobuf:"fixed64,1,opt,name=z_statistic,json=zStatistic" json:"z_statistic,omitempty"`
+ PValue *float64 `protobuf:"fixed64,2,opt,name=p_value,json=pValue" json:"p_value,omitempty"`
+ RegressionFound *bool `protobuf:"varint,3,opt,name=regression_found,json=regressionFound" json:"regression_found,omitempty"`
+ ConfigName *string `protobuf:"bytes,4,opt,name=config_name,json=configName" json:"config_name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *UTestConfigResult) Reset() { *m = UTestConfigResult{} }
+func (m *UTestConfigResult) String() string { return proto.CompactTextString(m) }
+func (*UTestConfigResult) ProtoMessage() {}
+func (*UTestConfigResult) Descriptor() ([]byte, []int) {
+ return fileDescriptor_e2b697cdbf0773fa, []int{4}
+}
+
+func (m *UTestConfigResult) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_UTestConfigResult.Unmarshal(m, b)
+}
+func (m *UTestConfigResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_UTestConfigResult.Marshal(b, m, deterministic)
+}
+func (m *UTestConfigResult) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UTestConfigResult.Merge(m, src)
+}
+func (m *UTestConfigResult) XXX_Size() int {
+ return xxx_messageInfo_UTestConfigResult.Size(m)
+}
+func (m *UTestConfigResult) XXX_DiscardUnknown() {
+ xxx_messageInfo_UTestConfigResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UTestConfigResult proto.InternalMessageInfo
+
+func (m *UTestConfigResult) GetConfig() *UTestConfig {
+ if m != nil {
+ return m.Config
+ }
+ return nil
+}
+
+func (m *UTestConfigResult) GetAMetricLabel() string {
+ if m != nil && m.AMetricLabel != nil {
+ return *m.AMetricLabel
+ }
+ return ""
+}
+
+func (m *UTestConfigResult) GetBMetricLabel() string {
+ if m != nil && m.BMetricLabel != nil {
+ return *m.BMetricLabel
+ }
+ return ""
+}
+
+func (m *UTestConfigResult) GetAMedian() float64 {
+ if m != nil && m.AMedian != nil {
+ return *m.AMedian
+ }
+ return 0
+}
+
+func (m *UTestConfigResult) GetBMedian() float64 {
+ if m != nil && m.BMedian != nil {
+ return *m.BMedian
+ }
+ return 0
+}
+
+func (m *UTestConfigResult) GetZStatistic() float64 {
+ if m != nil && m.ZStatistic != nil {
+ return *m.ZStatistic
+ }
+ return 0
+}
+
+func (m *UTestConfigResult) GetPValue() float64 {
+ if m != nil && m.PValue != nil {
+ return *m.PValue
+ }
+ return 0
+}
+
+func (m *UTestConfigResult) GetRegressionFound() bool {
+ if m != nil && m.RegressionFound != nil {
+ return *m.RegressionFound
+ }
+ return false
+}
+
+func (m *UTestConfigResult) GetConfigName() string {
+ if m != nil && m.ConfigName != nil {
+ return *m.ConfigName
+ }
+ return ""
+}
+
+func init() {
+ proto.RegisterEnum("mako.utest_analyzer.UTestConfig_DirectionBias", UTestConfig_DirectionBias_name, UTestConfig_DirectionBias_value)
+ proto.RegisterType((*UTestAnalyzerInput)(nil), "mako.utest_analyzer.UTestAnalyzerInput")
+ proto.RegisterType((*UTestConfig)(nil), "mako.utest_analyzer.UTestConfig")
+ proto.RegisterType((*UTestSample)(nil), "mako.utest_analyzer.UTestSample")
+ proto.RegisterType((*UTestAnalyzerOutput)(nil), "mako.utest_analyzer.UTestAnalyzerOutput")
+ proto.RegisterType((*UTestConfigResult)(nil), "mako.utest_analyzer.UTestConfigResult")
+}
+
+func init() {
+ proto.RegisterFile("clients/proto/analyzers/utest_analyzer.proto", fileDescriptor_e2b697cdbf0773fa)
+}
+
+var fileDescriptor_e2b697cdbf0773fa = []byte{
+ // 728 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdd, 0x4e, 0xdb, 0x30,
+ 0x14, 0x5e, 0x4a, 0xa1, 0xed, 0x29, 0x94, 0xe2, 0x6e, 0x5a, 0xb7, 0x1b, 0xaa, 0x6a, 0x9a, 0x98,
+ 0xb4, 0x85, 0x09, 0x0d, 0x09, 0xb1, 0xab, 0x16, 0xca, 0x54, 0x01, 0x65, 0x73, 0xd9, 0x2e, 0x67,
+ 0x39, 0xa9, 0xd3, 0x59, 0x24, 0x4e, 0x67, 0x3b, 0x48, 0xe5, 0x62, 0x77, 0x93, 0xf6, 0x82, 0x7b,
+ 0x84, 0xbd, 0xc7, 0x64, 0x27, 0x81, 0x94, 0xfd, 0xc0, 0x9d, 0xfd, 0xfd, 0x9c, 0x38, 0xc7, 0xe7,
+ 0x33, 0xbc, 0xf4, 0x43, 0xce, 0x84, 0x56, 0xdb, 0x33, 0x19, 0xeb, 0x78, 0x9b, 0x0a, 0x1a, 0xce,
+ 0xaf, 0x98, 0x54, 0xdb, 0x89, 0x66, 0x4a, 0x93, 0x7c, 0xef, 0x5a, 0x1a, 0xb5, 0x22, 0x7a, 0x11,
+ 0xbb, 0x8b, 0xd4, 0xd3, 0x47, 0x6a, 0xc6, 0xfc, 0xcc, 0x6f, 0x79, 0xbb, 0xec, 0xfe, 0x72, 0x00,
+ 0x7d, 0x3c, 0x67, 0x4a, 0xf7, 0x32, 0xe1, 0x50, 0xcc, 0x12, 0x8d, 0xde, 0x42, 0x95, 0x12, 0x45,
+ 0xa3, 0x59, 0xc8, 0xda, 0x4e, 0xc7, 0xd9, 0xaa, 0xef, 0x74, 0xdc, 0xbf, 0x54, 0x75, 0xad, 0x75,
+ 0x6c, 0x75, 0xb8, 0x42, 0xd3, 0x85, 0x31, 0x7b, 0xb9, 0xb9, 0x74, 0x5f, 0xb3, 0x97, 0x99, 0x7b,
+ 0x50, 0xf7, 0x63, 0x11, 0xf0, 0x29, 0x09, 0xb9, 0xd2, 0xed, 0xa5, 0xce, 0xd2, 0xff, 0xfd, 0x07,
+ 0x56, 0x8c, 0x21, 0x35, 0x9d, 0x70, 0xa5, 0x11, 0x82, 0xb2, 0xa0, 0x11, 0x6b, 0x97, 0x3b, 0xce,
+ 0x56, 0x0d, 0xdb, 0x75, 0xf7, 0x47, 0x19, 0xea, 0x05, 0x3d, 0xea, 0xc0, 0x2a, 0x25, 0x11, 0xd3,
+ 0x92, 0xfb, 0xe4, 0x82, 0xcd, 0xed, 0x4f, 0xd6, 0x30, 0xd0, 0x53, 0x0b, 0x1d, 0xb3, 0x39, 0x7a,
+ 0x03, 0x6b, 0x94, 0x4c, 0xa8, 0xa6, 0x24, 0xe0, 0xa1, 0x66, 0xb2, 0x5d, 0xb5, 0xbf, 0xd2, 0x4c,
+ 0x8f, 0x72, 0x48, 0x35, 0x3d, 0xb2, 0x38, 0xae, 0xd3, 0x9b, 0x8d, 0xa9, 0xeb, 0x15, 0xeb, 0x96,
+ 0xd2, 0xba, 0xde, 0x42, 0x5d, 0x6f, 0xa1, 0x6e, 0xed, 0x5f, 0x75, 0xbd, 0x42, 0xdd, 0x4d, 0xa8,
+ 0xab, 0x2f, 0x3c, 0xd0, 0xe4, 0x92, 0x86, 0x09, 0x6b, 0x2f, 0x75, 0x9c, 0x2d, 0x07, 0x83, 0x85,
+ 0x3e, 0x19, 0x04, 0xbd, 0x86, 0x87, 0x92, 0x85, 0x54, 0xf3, 0x4b, 0x46, 0x8a, 0xca, 0x8a, 0x55,
+ 0xa2, 0x9c, 0x1b, 0xdf, 0x38, 0x3e, 0x43, 0x63, 0xc2, 0x25, 0xf3, 0x35, 0x8f, 0x05, 0xf1, 0x38,
+ 0x55, 0xb6, 0x61, 0x8d, 0x1d, 0xf7, 0xae, 0x66, 0xbb, 0x87, 0xb9, 0xad, 0xcf, 0xa9, 0xda, 0xaf,
+ 0x8c, 0xce, 0x48, 0x7f, 0xd8, 0x1b, 0xe3, 0xb5, 0x49, 0x11, 0x47, 0xaf, 0x00, 0x29, 0x3e, 0x15,
+ 0x3c, 0xe0, 0x3e, 0x15, 0x3e, 0x23, 0x21, 0xbb, 0x64, 0x61, 0x7b, 0xd9, 0x9e, 0x67, 0xa3, 0xc8,
+ 0x9c, 0x18, 0xc2, 0xfc, 0x61, 0x76, 0xf1, 0xf6, 0xf2, 0x56, 0xd2, 0xc6, 0xa5, 0xd0, 0xc8, 0x5c,
+ 0xe1, 0x11, 0xac, 0x2d, 0x7c, 0x18, 0xd5, 0x21, 0xff, 0x74, 0xf3, 0x01, 0x6a, 0xc1, 0xfa, 0xf0,
+ 0xdd, 0xe8, 0x0c, 0x0f, 0xc8, 0x70, 0x74, 0x80, 0x07, 0xbd, 0xf1, 0xa0, 0xe9, 0x14, 0xc0, 0xc3,
+ 0x41, 0x06, 0x96, 0xba, 0xdf, 0xb2, 0x49, 0xc8, 0x06, 0x6e, 0x0f, 0x1a, 0x32, 0x11, 0xe4, 0x6b,
+ 0xc2, 0xe4, 0x3c, 0x9d, 0x39, 0xc7, 0xce, 0x1c, 0x4a, 0xdb, 0x80, 0x13, 0x31, 0x14, 0x41, 0xfc,
+ 0xc1, 0xd0, 0x78, 0x55, 0x26, 0xc2, 0xae, 0xec, 0x9c, 0xed, 0x42, 0x8b, 0x0b, 0x3f, 0x4c, 0x26,
+ 0x8c, 0xf8, 0x89, 0x94, 0x4c, 0x68, 0x22, 0x13, 0x61, 0xaf, 0xbc, 0xba, 0xbf, 0x1c, 0xd0, 0x50,
+ 0x31, 0xbc, 0x91, 0x29, 0x0e, 0x52, 0x01, 0x4e, 0x44, 0xf7, 0xbb, 0x03, 0xad, 0x85, 0xc8, 0x9d,
+ 0x25, 0xda, 0x64, 0xae, 0x0d, 0x15, 0x95, 0x44, 0x11, 0x95, 0xf9, 0x34, 0xe6, 0x5b, 0x74, 0x0e,
+ 0x28, 0x6b, 0x8d, 0x64, 0x2a, 0x09, 0x75, 0x7a, 0xcc, 0x92, 0x3d, 0xe6, 0xf3, 0x3b, 0xa3, 0x61,
+ 0x2d, 0xb8, 0xe9, 0x17, 0x76, 0xe6, 0xf8, 0xdd, 0x9f, 0x25, 0xd8, 0xf8, 0x43, 0x87, 0xf6, 0x60,
+ 0x25, 0x55, 0xda, 0x9b, 0xba, 0x4f, 0xf4, 0x32, 0x3d, 0x7a, 0x06, 0x8d, 0xeb, 0x48, 0x85, 0xd4,
+ 0x63, 0x61, 0x76, 0x87, 0xab, 0x59, 0xa8, 0x4e, 0x0c, 0x66, 0x54, 0xde, 0xa2, 0xaa, 0x92, 0xaa,
+ 0xbc, 0xa2, 0xea, 0x89, 0x79, 0x7f, 0x22, 0x36, 0xe1, 0x54, 0xd8, 0xdc, 0x39, 0xb8, 0x42, 0x4f,
+ 0xed, 0xd6, 0x50, 0x5e, 0x4e, 0xd5, 0x52, 0xca, 0xcb, 0xa8, 0x4d, 0xa8, 0x5f, 0x11, 0xa5, 0xa9,
+ 0xe6, 0x4a, 0x73, 0xdf, 0x76, 0xd1, 0xc1, 0x70, 0x35, 0xce, 0x11, 0xf4, 0x18, 0x2a, 0xb3, 0x2c,
+ 0x17, 0x25, 0x4b, 0xae, 0xcc, 0xd2, 0x2c, 0xbc, 0x80, 0xa6, 0x64, 0x53, 0xc9, 0x94, 0x32, 0x61,
+ 0x08, 0xe2, 0x44, 0x4c, 0x6c, 0xc6, 0xaa, 0x78, 0xfd, 0x06, 0x3f, 0x32, 0xf0, 0xed, 0x39, 0x2d,
+ 0xdf, 0x9e, 0xd3, 0xfe, 0x31, 0xec, 0xfa, 0x71, 0xe4, 0x4e, 0xe3, 0x78, 0x1a, 0x32, 0xd7, 0xf4,
+ 0x8d, 0x8b, 0xa9, 0x3b, 0x63, 0x32, 0x88, 0x65, 0x64, 0xe6, 0x3d, 0xed, 0x68, 0xf6, 0xa4, 0xbb,
+ 0xd7, 0x8f, 0x79, 0x7f, 0xf1, 0x21, 0x7e, 0x6f, 0xde, 0xe7, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff,
+ 0xf0, 0xc0, 0xec, 0x97, 0xfa, 0x05, 0x00, 0x00,
+}
diff --git a/vendor/github.com/google/mako/clients/proto/analyzers/window_deviation_go_proto/window_deviation.pb.go b/vendor/github.com/google/mako/clients/proto/analyzers/window_deviation_go_proto/window_deviation.pb.go
new file mode 100644
index 00000000..5fe8856b
--- /dev/null
+++ b/vendor/github.com/google/mako/clients/proto/analyzers/window_deviation_go_proto/window_deviation.pb.go
@@ -0,0 +1,855 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: clients/proto/analyzers/window_deviation.proto
+
+package mako_window_deviation
+
+import (
+ fmt "fmt"
+ proto "github.com/golang/protobuf/proto"
+ mako_go_proto "github.com/google/mako/spec/proto/mako_go_proto"
+ math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type ToleranceCheck_DirectionBias int32
+
+const (
+ ToleranceCheck_NO_BIAS ToleranceCheck_DirectionBias = 0
+ ToleranceCheck_IGNORE_INCREASE ToleranceCheck_DirectionBias = 1
+ ToleranceCheck_IGNORE_DECREASE ToleranceCheck_DirectionBias = 2
+)
+
+var ToleranceCheck_DirectionBias_name = map[int32]string{
+ 0: "NO_BIAS",
+ 1: "IGNORE_INCREASE",
+ 2: "IGNORE_DECREASE",
+}
+
+var ToleranceCheck_DirectionBias_value = map[string]int32{
+ "NO_BIAS": 0,
+ "IGNORE_INCREASE": 1,
+ "IGNORE_DECREASE": 2,
+}
+
+func (x ToleranceCheck_DirectionBias) Enum() *ToleranceCheck_DirectionBias {
+ p := new(ToleranceCheck_DirectionBias)
+ *p = x
+ return p
+}
+
+func (x ToleranceCheck_DirectionBias) String() string {
+ return proto.EnumName(ToleranceCheck_DirectionBias_name, int32(x))
+}
+
+func (x *ToleranceCheck_DirectionBias) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(ToleranceCheck_DirectionBias_value, data, "ToleranceCheck_DirectionBias")
+ if err != nil {
+ return err
+ }
+ *x = ToleranceCheck_DirectionBias(value)
+ return nil
+}
+
+func (ToleranceCheck_DirectionBias) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{1, 0}
+}
+
+type WindowDeviationOutput_ToleranceCheckOutput_CheckResult int32
+
+const (
+ WindowDeviationOutput_ToleranceCheckOutput_UNDEFINED WindowDeviationOutput_ToleranceCheckOutput_CheckResult = 0
+ WindowDeviationOutput_ToleranceCheckOutput_REGRESSED WindowDeviationOutput_ToleranceCheckOutput_CheckResult = 1
+ WindowDeviationOutput_ToleranceCheckOutput_SKIPPED WindowDeviationOutput_ToleranceCheckOutput_CheckResult = 2
+ WindowDeviationOutput_ToleranceCheckOutput_PASSED WindowDeviationOutput_ToleranceCheckOutput_CheckResult = 3
+)
+
+var WindowDeviationOutput_ToleranceCheckOutput_CheckResult_name = map[int32]string{
+ 0: "UNDEFINED",
+ 1: "REGRESSED",
+ 2: "SKIPPED",
+ 3: "PASSED",
+}
+
+var WindowDeviationOutput_ToleranceCheckOutput_CheckResult_value = map[string]int32{
+ "UNDEFINED": 0,
+ "REGRESSED": 1,
+ "SKIPPED": 2,
+ "PASSED": 3,
+}
+
+func (x WindowDeviationOutput_ToleranceCheckOutput_CheckResult) Enum() *WindowDeviationOutput_ToleranceCheckOutput_CheckResult {
+ p := new(WindowDeviationOutput_ToleranceCheckOutput_CheckResult)
+ *p = x
+ return p
+}
+
+func (x WindowDeviationOutput_ToleranceCheckOutput_CheckResult) String() string {
+ return proto.EnumName(WindowDeviationOutput_ToleranceCheckOutput_CheckResult_name, int32(x))
+}
+
+func (x *WindowDeviationOutput_ToleranceCheckOutput_CheckResult) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(WindowDeviationOutput_ToleranceCheckOutput_CheckResult_value, data, "WindowDeviationOutput_ToleranceCheckOutput_CheckResult")
+ if err != nil {
+ return err
+ }
+ *x = WindowDeviationOutput_ToleranceCheckOutput_CheckResult(value)
+ return nil
+}
+
+func (WindowDeviationOutput_ToleranceCheckOutput_CheckResult) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{4, 0, 0}
+}
+
+type WindowDeviationInput struct {
+ RunInfoQueryList []*mako_go_proto.RunInfoQuery `protobuf:"bytes,1,rep,name=run_info_query_list,json=runInfoQueryList" json:"run_info_query_list,omitempty"`
+ ToleranceCheckList []*ToleranceCheck `protobuf:"bytes,2,rep,name=tolerance_check_list,json=toleranceCheckList" json:"tolerance_check_list,omitempty"`
+ Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *WindowDeviationInput) Reset() { *m = WindowDeviationInput{} }
+func (m *WindowDeviationInput) String() string { return proto.CompactTextString(m) }
+func (*WindowDeviationInput) ProtoMessage() {}
+func (*WindowDeviationInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{0}
+}
+
+func (m *WindowDeviationInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_WindowDeviationInput.Unmarshal(m, b)
+}
+func (m *WindowDeviationInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_WindowDeviationInput.Marshal(b, m, deterministic)
+}
+func (m *WindowDeviationInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_WindowDeviationInput.Merge(m, src)
+}
+func (m *WindowDeviationInput) XXX_Size() int {
+ return xxx_messageInfo_WindowDeviationInput.Size(m)
+}
+func (m *WindowDeviationInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_WindowDeviationInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WindowDeviationInput proto.InternalMessageInfo
+
+func (m *WindowDeviationInput) GetRunInfoQueryList() []*mako_go_proto.RunInfoQuery {
+ if m != nil {
+ return m.RunInfoQueryList
+ }
+ return nil
+}
+
+func (m *WindowDeviationInput) GetToleranceCheckList() []*ToleranceCheck {
+ if m != nil {
+ return m.ToleranceCheckList
+ }
+ return nil
+}
+
+func (m *WindowDeviationInput) GetName() string {
+ if m != nil && m.Name != nil {
+ return *m.Name
+ }
+ return ""
+}
+
+type ToleranceCheck struct {
+ DataFilter *mako_go_proto.DataFilter `protobuf:"bytes,1,opt,name=data_filter,json=dataFilter" json:"data_filter,omitempty"`
+ RecentWindowSize *int32 `protobuf:"varint,2,opt,name=recent_window_size,json=recentWindowSize,def=1" json:"recent_window_size,omitempty"`
+ MinimumHistoricalWindowSize *int32 `protobuf:"varint,6,opt,name=minimum_historical_window_size,json=minimumHistoricalWindowSize,def=3" json:"minimum_historical_window_size,omitempty"`
+ DirectionBias *ToleranceCheck_DirectionBias `protobuf:"varint,3,opt,name=direction_bias,json=directionBias,enum=mako.window_deviation.ToleranceCheck_DirectionBias,def=0" json:"direction_bias,omitempty"`
+ MeanToleranceParamsList []*MeanToleranceParams `protobuf:"bytes,4,rep,name=mean_tolerance_params_list,json=meanToleranceParamsList" json:"mean_tolerance_params_list,omitempty"`
+ MedianToleranceParamsList []*MedianToleranceParams `protobuf:"bytes,5,rep,name=median_tolerance_params_list,json=medianToleranceParamsList" json:"median_tolerance_params_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ToleranceCheck) Reset() { *m = ToleranceCheck{} }
+func (m *ToleranceCheck) String() string { return proto.CompactTextString(m) }
+func (*ToleranceCheck) ProtoMessage() {}
+func (*ToleranceCheck) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{1}
+}
+
+func (m *ToleranceCheck) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ToleranceCheck.Unmarshal(m, b)
+}
+func (m *ToleranceCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ToleranceCheck.Marshal(b, m, deterministic)
+}
+func (m *ToleranceCheck) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ToleranceCheck.Merge(m, src)
+}
+func (m *ToleranceCheck) XXX_Size() int {
+ return xxx_messageInfo_ToleranceCheck.Size(m)
+}
+func (m *ToleranceCheck) XXX_DiscardUnknown() {
+ xxx_messageInfo_ToleranceCheck.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ToleranceCheck proto.InternalMessageInfo
+
+const Default_ToleranceCheck_RecentWindowSize int32 = 1
+const Default_ToleranceCheck_MinimumHistoricalWindowSize int32 = 3
+const Default_ToleranceCheck_DirectionBias ToleranceCheck_DirectionBias = ToleranceCheck_NO_BIAS
+
+func (m *ToleranceCheck) GetDataFilter() *mako_go_proto.DataFilter {
+ if m != nil {
+ return m.DataFilter
+ }
+ return nil
+}
+
+func (m *ToleranceCheck) GetRecentWindowSize() int32 {
+ if m != nil && m.RecentWindowSize != nil {
+ return *m.RecentWindowSize
+ }
+ return Default_ToleranceCheck_RecentWindowSize
+}
+
+func (m *ToleranceCheck) GetMinimumHistoricalWindowSize() int32 {
+ if m != nil && m.MinimumHistoricalWindowSize != nil {
+ return *m.MinimumHistoricalWindowSize
+ }
+ return Default_ToleranceCheck_MinimumHistoricalWindowSize
+}
+
+func (m *ToleranceCheck) GetDirectionBias() ToleranceCheck_DirectionBias {
+ if m != nil && m.DirectionBias != nil {
+ return *m.DirectionBias
+ }
+ return Default_ToleranceCheck_DirectionBias
+}
+
+func (m *ToleranceCheck) GetMeanToleranceParamsList() []*MeanToleranceParams {
+ if m != nil {
+ return m.MeanToleranceParamsList
+ }
+ return nil
+}
+
+func (m *ToleranceCheck) GetMedianToleranceParamsList() []*MedianToleranceParams {
+ if m != nil {
+ return m.MedianToleranceParamsList
+ }
+ return nil
+}
+
+type MeanToleranceParams struct {
+ ConstTerm *float64 `protobuf:"fixed64,1,opt,name=const_term,json=constTerm,def=0" json:"const_term,omitempty"`
+ MeanCoeff *float64 `protobuf:"fixed64,2,opt,name=mean_coeff,json=meanCoeff,def=0" json:"mean_coeff,omitempty"`
+ StddevCoeff *float64 `protobuf:"fixed64,3,opt,name=stddev_coeff,json=stddevCoeff,def=0" json:"stddev_coeff,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *MeanToleranceParams) Reset() { *m = MeanToleranceParams{} }
+func (m *MeanToleranceParams) String() string { return proto.CompactTextString(m) }
+func (*MeanToleranceParams) ProtoMessage() {}
+func (*MeanToleranceParams) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{2}
+}
+
+func (m *MeanToleranceParams) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_MeanToleranceParams.Unmarshal(m, b)
+}
+func (m *MeanToleranceParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_MeanToleranceParams.Marshal(b, m, deterministic)
+}
+func (m *MeanToleranceParams) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MeanToleranceParams.Merge(m, src)
+}
+func (m *MeanToleranceParams) XXX_Size() int {
+ return xxx_messageInfo_MeanToleranceParams.Size(m)
+}
+func (m *MeanToleranceParams) XXX_DiscardUnknown() {
+ xxx_messageInfo_MeanToleranceParams.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MeanToleranceParams proto.InternalMessageInfo
+
+const Default_MeanToleranceParams_ConstTerm float64 = 0
+const Default_MeanToleranceParams_MeanCoeff float64 = 0
+const Default_MeanToleranceParams_StddevCoeff float64 = 0
+
+func (m *MeanToleranceParams) GetConstTerm() float64 {
+ if m != nil && m.ConstTerm != nil {
+ return *m.ConstTerm
+ }
+ return Default_MeanToleranceParams_ConstTerm
+}
+
+func (m *MeanToleranceParams) GetMeanCoeff() float64 {
+ if m != nil && m.MeanCoeff != nil {
+ return *m.MeanCoeff
+ }
+ return Default_MeanToleranceParams_MeanCoeff
+}
+
+func (m *MeanToleranceParams) GetStddevCoeff() float64 {
+ if m != nil && m.StddevCoeff != nil {
+ return *m.StddevCoeff
+ }
+ return Default_MeanToleranceParams_StddevCoeff
+}
+
+type MedianToleranceParams struct {
+ ConstTerm *float64 `protobuf:"fixed64,1,opt,name=const_term,json=constTerm,def=0" json:"const_term,omitempty"`
+ MedianCoeff *float64 `protobuf:"fixed64,2,opt,name=median_coeff,json=medianCoeff,def=0" json:"median_coeff,omitempty"`
+ MadCoeff *float64 `protobuf:"fixed64,3,opt,name=mad_coeff,json=madCoeff,def=0" json:"mad_coeff,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *MedianToleranceParams) Reset() { *m = MedianToleranceParams{} }
+func (m *MedianToleranceParams) String() string { return proto.CompactTextString(m) }
+func (*MedianToleranceParams) ProtoMessage() {}
+func (*MedianToleranceParams) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{3}
+}
+
+func (m *MedianToleranceParams) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_MedianToleranceParams.Unmarshal(m, b)
+}
+func (m *MedianToleranceParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_MedianToleranceParams.Marshal(b, m, deterministic)
+}
+func (m *MedianToleranceParams) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MedianToleranceParams.Merge(m, src)
+}
+func (m *MedianToleranceParams) XXX_Size() int {
+ return xxx_messageInfo_MedianToleranceParams.Size(m)
+}
+func (m *MedianToleranceParams) XXX_DiscardUnknown() {
+ xxx_messageInfo_MedianToleranceParams.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MedianToleranceParams proto.InternalMessageInfo
+
+const Default_MedianToleranceParams_ConstTerm float64 = 0
+const Default_MedianToleranceParams_MedianCoeff float64 = 0
+const Default_MedianToleranceParams_MadCoeff float64 = 0
+
+func (m *MedianToleranceParams) GetConstTerm() float64 {
+ if m != nil && m.ConstTerm != nil {
+ return *m.ConstTerm
+ }
+ return Default_MedianToleranceParams_ConstTerm
+}
+
+func (m *MedianToleranceParams) GetMedianCoeff() float64 {
+ if m != nil && m.MedianCoeff != nil {
+ return *m.MedianCoeff
+ }
+ return Default_MedianToleranceParams_MedianCoeff
+}
+
+func (m *MedianToleranceParams) GetMadCoeff() float64 {
+ if m != nil && m.MadCoeff != nil {
+ return *m.MadCoeff
+ }
+ return Default_MedianToleranceParams_MadCoeff
+}
+
+type WindowDeviationOutput struct {
+ OutputMessage *string `protobuf:"bytes,1,opt,name=output_message,json=outputMessage" json:"output_message,omitempty"`
+ Checks []*WindowDeviationOutput_ToleranceCheckOutput `protobuf:"bytes,3,rep,name=checks" json:"checks,omitempty"`
+ ChecksSkippedForMissingData []*ToleranceCheck `protobuf:"bytes,2,rep,name=checks_skipped_for_missing_data,json=checksSkippedForMissingData" json:"checks_skipped_for_missing_data,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *WindowDeviationOutput) Reset() { *m = WindowDeviationOutput{} }
+func (m *WindowDeviationOutput) String() string { return proto.CompactTextString(m) }
+func (*WindowDeviationOutput) ProtoMessage() {}
+func (*WindowDeviationOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{4}
+}
+
+func (m *WindowDeviationOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_WindowDeviationOutput.Unmarshal(m, b)
+}
+func (m *WindowDeviationOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_WindowDeviationOutput.Marshal(b, m, deterministic)
+}
+func (m *WindowDeviationOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_WindowDeviationOutput.Merge(m, src)
+}
+func (m *WindowDeviationOutput) XXX_Size() int {
+ return xxx_messageInfo_WindowDeviationOutput.Size(m)
+}
+func (m *WindowDeviationOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_WindowDeviationOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WindowDeviationOutput proto.InternalMessageInfo
+
+func (m *WindowDeviationOutput) GetOutputMessage() string {
+ if m != nil && m.OutputMessage != nil {
+ return *m.OutputMessage
+ }
+ return ""
+}
+
+func (m *WindowDeviationOutput) GetChecks() []*WindowDeviationOutput_ToleranceCheckOutput {
+ if m != nil {
+ return m.Checks
+ }
+ return nil
+}
+
+func (m *WindowDeviationOutput) GetChecksSkippedForMissingData() []*ToleranceCheck {
+ if m != nil {
+ return m.ChecksSkippedForMissingData
+ }
+ return nil
+}
+
+type WindowDeviationOutput_ToleranceCheckOutput struct {
+ ToleranceCheck *ToleranceCheck `protobuf:"bytes,1,opt,name=tolerance_check,json=toleranceCheck" json:"tolerance_check,omitempty"`
+ Result *WindowDeviationOutput_ToleranceCheckOutput_CheckResult `protobuf:"varint,2,opt,name=result,enum=mako.window_deviation.WindowDeviationOutput_ToleranceCheckOutput_CheckResult,def=0" json:"result,omitempty"`
+ MetricLabel *string `protobuf:"bytes,3,opt,name=metric_label,json=metricLabel" json:"metric_label,omitempty"`
+ Stats *ToleranceCheckStats `protobuf:"bytes,4,opt,name=stats" json:"stats,omitempty"`
+ HistoricalWindowMinTimestampMs *float64 `protobuf:"fixed64,5,opt,name=historical_window_min_timestamp_ms,json=historicalWindowMinTimestampMs" json:"historical_window_min_timestamp_ms,omitempty"`
+ HistoricalWindowMaxTimestampMs *float64 `protobuf:"fixed64,6,opt,name=historical_window_max_timestamp_ms,json=historicalWindowMaxTimestampMs" json:"historical_window_max_timestamp_ms,omitempty"`
+ HistoricalWindowMinBuildId *float64 `protobuf:"fixed64,7,opt,name=historical_window_min_build_id,json=historicalWindowMinBuildId" json:"historical_window_min_build_id,omitempty"`
+ HistoricalWindowMaxBuildId *float64 `protobuf:"fixed64,8,opt,name=historical_window_max_build_id,json=historicalWindowMaxBuildId" json:"historical_window_max_build_id,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *WindowDeviationOutput_ToleranceCheckOutput) Reset() {
+ *m = WindowDeviationOutput_ToleranceCheckOutput{}
+}
+func (m *WindowDeviationOutput_ToleranceCheckOutput) String() string {
+ return proto.CompactTextString(m)
+}
+func (*WindowDeviationOutput_ToleranceCheckOutput) ProtoMessage() {}
+func (*WindowDeviationOutput_ToleranceCheckOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{4, 0}
+}
+
+func (m *WindowDeviationOutput_ToleranceCheckOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_WindowDeviationOutput_ToleranceCheckOutput.Unmarshal(m, b)
+}
+func (m *WindowDeviationOutput_ToleranceCheckOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_WindowDeviationOutput_ToleranceCheckOutput.Marshal(b, m, deterministic)
+}
+func (m *WindowDeviationOutput_ToleranceCheckOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_WindowDeviationOutput_ToleranceCheckOutput.Merge(m, src)
+}
+func (m *WindowDeviationOutput_ToleranceCheckOutput) XXX_Size() int {
+ return xxx_messageInfo_WindowDeviationOutput_ToleranceCheckOutput.Size(m)
+}
+func (m *WindowDeviationOutput_ToleranceCheckOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_WindowDeviationOutput_ToleranceCheckOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WindowDeviationOutput_ToleranceCheckOutput proto.InternalMessageInfo
+
+const Default_WindowDeviationOutput_ToleranceCheckOutput_Result WindowDeviationOutput_ToleranceCheckOutput_CheckResult = WindowDeviationOutput_ToleranceCheckOutput_UNDEFINED
+
+func (m *WindowDeviationOutput_ToleranceCheckOutput) GetToleranceCheck() *ToleranceCheck {
+ if m != nil {
+ return m.ToleranceCheck
+ }
+ return nil
+}
+
+func (m *WindowDeviationOutput_ToleranceCheckOutput) GetResult() WindowDeviationOutput_ToleranceCheckOutput_CheckResult {
+ if m != nil && m.Result != nil {
+ return *m.Result
+ }
+ return Default_WindowDeviationOutput_ToleranceCheckOutput_Result
+}
+
+func (m *WindowDeviationOutput_ToleranceCheckOutput) GetMetricLabel() string {
+ if m != nil && m.MetricLabel != nil {
+ return *m.MetricLabel
+ }
+ return ""
+}
+
+func (m *WindowDeviationOutput_ToleranceCheckOutput) GetStats() *ToleranceCheckStats {
+ if m != nil {
+ return m.Stats
+ }
+ return nil
+}
+
+func (m *WindowDeviationOutput_ToleranceCheckOutput) GetHistoricalWindowMinTimestampMs() float64 {
+ if m != nil && m.HistoricalWindowMinTimestampMs != nil {
+ return *m.HistoricalWindowMinTimestampMs
+ }
+ return 0
+}
+
+func (m *WindowDeviationOutput_ToleranceCheckOutput) GetHistoricalWindowMaxTimestampMs() float64 {
+ if m != nil && m.HistoricalWindowMaxTimestampMs != nil {
+ return *m.HistoricalWindowMaxTimestampMs
+ }
+ return 0
+}
+
+func (m *WindowDeviationOutput_ToleranceCheckOutput) GetHistoricalWindowMinBuildId() float64 {
+ if m != nil && m.HistoricalWindowMinBuildId != nil {
+ return *m.HistoricalWindowMinBuildId
+ }
+ return 0
+}
+
+func (m *WindowDeviationOutput_ToleranceCheckOutput) GetHistoricalWindowMaxBuildId() float64 {
+ if m != nil && m.HistoricalWindowMaxBuildId != nil {
+ return *m.HistoricalWindowMaxBuildId
+ }
+ return 0
+}
+
+type ToleranceCheckStats struct {
+ HistoricDataLength *int32 `protobuf:"varint,1,opt,name=historic_data_length,json=historicDataLength" json:"historic_data_length,omitempty"`
+ RecentDataLength *int32 `protobuf:"varint,2,opt,name=recent_data_length,json=recentDataLength" json:"recent_data_length,omitempty"`
+ HistoricMean *float64 `protobuf:"fixed64,3,opt,name=historic_mean,json=historicMean" json:"historic_mean,omitempty"`
+ HistoricMedian *float64 `protobuf:"fixed64,4,opt,name=historic_median,json=historicMedian" json:"historic_median,omitempty"`
+ HistoricStddev *float64 `protobuf:"fixed64,5,opt,name=historic_stddev,json=historicStddev" json:"historic_stddev,omitempty"`
+ HistoricMad *float64 `protobuf:"fixed64,6,opt,name=historic_mad,json=historicMad" json:"historic_mad,omitempty"`
+ RecentMean *float64 `protobuf:"fixed64,7,opt,name=recent_mean,json=recentMean" json:"recent_mean,omitempty"`
+ RecentMedian *float64 `protobuf:"fixed64,8,opt,name=recent_median,json=recentMedian" json:"recent_median,omitempty"`
+ DeltaMean *float64 `protobuf:"fixed64,9,opt,name=delta_mean,json=deltaMean" json:"delta_mean,omitempty"`
+ DeltaMedian *float64 `protobuf:"fixed64,10,opt,name=delta_median,json=deltaMedian" json:"delta_median,omitempty"`
+ MeanToleranceCheckResult []*MeanToleranceCheckResult `protobuf:"bytes,11,rep,name=mean_tolerance_check_result,json=meanToleranceCheckResult" json:"mean_tolerance_check_result,omitempty"`
+ MedianToleranceCheckResult []*MedianToleranceCheckResult `protobuf:"bytes,12,rep,name=median_tolerance_check_result,json=medianToleranceCheckResult" json:"median_tolerance_check_result,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ToleranceCheckStats) Reset() { *m = ToleranceCheckStats{} }
+func (m *ToleranceCheckStats) String() string { return proto.CompactTextString(m) }
+func (*ToleranceCheckStats) ProtoMessage() {}
+func (*ToleranceCheckStats) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{5}
+}
+
+func (m *ToleranceCheckStats) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ToleranceCheckStats.Unmarshal(m, b)
+}
+func (m *ToleranceCheckStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ToleranceCheckStats.Marshal(b, m, deterministic)
+}
+func (m *ToleranceCheckStats) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ToleranceCheckStats.Merge(m, src)
+}
+func (m *ToleranceCheckStats) XXX_Size() int {
+ return xxx_messageInfo_ToleranceCheckStats.Size(m)
+}
+func (m *ToleranceCheckStats) XXX_DiscardUnknown() {
+ xxx_messageInfo_ToleranceCheckStats.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ToleranceCheckStats proto.InternalMessageInfo
+
+func (m *ToleranceCheckStats) GetHistoricDataLength() int32 {
+ if m != nil && m.HistoricDataLength != nil {
+ return *m.HistoricDataLength
+ }
+ return 0
+}
+
+func (m *ToleranceCheckStats) GetRecentDataLength() int32 {
+ if m != nil && m.RecentDataLength != nil {
+ return *m.RecentDataLength
+ }
+ return 0
+}
+
+func (m *ToleranceCheckStats) GetHistoricMean() float64 {
+ if m != nil && m.HistoricMean != nil {
+ return *m.HistoricMean
+ }
+ return 0
+}
+
+func (m *ToleranceCheckStats) GetHistoricMedian() float64 {
+ if m != nil && m.HistoricMedian != nil {
+ return *m.HistoricMedian
+ }
+ return 0
+}
+
+func (m *ToleranceCheckStats) GetHistoricStddev() float64 {
+ if m != nil && m.HistoricStddev != nil {
+ return *m.HistoricStddev
+ }
+ return 0
+}
+
+func (m *ToleranceCheckStats) GetHistoricMad() float64 {
+ if m != nil && m.HistoricMad != nil {
+ return *m.HistoricMad
+ }
+ return 0
+}
+
+func (m *ToleranceCheckStats) GetRecentMean() float64 {
+ if m != nil && m.RecentMean != nil {
+ return *m.RecentMean
+ }
+ return 0
+}
+
+func (m *ToleranceCheckStats) GetRecentMedian() float64 {
+ if m != nil && m.RecentMedian != nil {
+ return *m.RecentMedian
+ }
+ return 0
+}
+
+func (m *ToleranceCheckStats) GetDeltaMean() float64 {
+ if m != nil && m.DeltaMean != nil {
+ return *m.DeltaMean
+ }
+ return 0
+}
+
+func (m *ToleranceCheckStats) GetDeltaMedian() float64 {
+ if m != nil && m.DeltaMedian != nil {
+ return *m.DeltaMedian
+ }
+ return 0
+}
+
+func (m *ToleranceCheckStats) GetMeanToleranceCheckResult() []*MeanToleranceCheckResult {
+ if m != nil {
+ return m.MeanToleranceCheckResult
+ }
+ return nil
+}
+
+func (m *ToleranceCheckStats) GetMedianToleranceCheckResult() []*MedianToleranceCheckResult {
+ if m != nil {
+ return m.MedianToleranceCheckResult
+ }
+ return nil
+}
+
+type MeanToleranceCheckResult struct {
+ Params *MeanToleranceParams `protobuf:"bytes,1,opt,name=params" json:"params,omitempty"`
+ Tolerance *float64 `protobuf:"fixed64,2,opt,name=tolerance" json:"tolerance,omitempty"`
+ IsRegressed *bool `protobuf:"varint,3,opt,name=is_regressed,json=isRegressed" json:"is_regressed,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *MeanToleranceCheckResult) Reset() { *m = MeanToleranceCheckResult{} }
+func (m *MeanToleranceCheckResult) String() string { return proto.CompactTextString(m) }
+func (*MeanToleranceCheckResult) ProtoMessage() {}
+func (*MeanToleranceCheckResult) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{6}
+}
+
+func (m *MeanToleranceCheckResult) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_MeanToleranceCheckResult.Unmarshal(m, b)
+}
+func (m *MeanToleranceCheckResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_MeanToleranceCheckResult.Marshal(b, m, deterministic)
+}
+func (m *MeanToleranceCheckResult) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MeanToleranceCheckResult.Merge(m, src)
+}
+func (m *MeanToleranceCheckResult) XXX_Size() int {
+ return xxx_messageInfo_MeanToleranceCheckResult.Size(m)
+}
+func (m *MeanToleranceCheckResult) XXX_DiscardUnknown() {
+ xxx_messageInfo_MeanToleranceCheckResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MeanToleranceCheckResult proto.InternalMessageInfo
+
+func (m *MeanToleranceCheckResult) GetParams() *MeanToleranceParams {
+ if m != nil {
+ return m.Params
+ }
+ return nil
+}
+
+func (m *MeanToleranceCheckResult) GetTolerance() float64 {
+ if m != nil && m.Tolerance != nil {
+ return *m.Tolerance
+ }
+ return 0
+}
+
+func (m *MeanToleranceCheckResult) GetIsRegressed() bool {
+ if m != nil && m.IsRegressed != nil {
+ return *m.IsRegressed
+ }
+ return false
+}
+
+type MedianToleranceCheckResult struct {
+ Params *MedianToleranceParams `protobuf:"bytes,1,opt,name=params" json:"params,omitempty"`
+ Tolerance *float64 `protobuf:"fixed64,2,opt,name=tolerance" json:"tolerance,omitempty"`
+ IsRegressed *bool `protobuf:"varint,3,opt,name=is_regressed,json=isRegressed" json:"is_regressed,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *MedianToleranceCheckResult) Reset() { *m = MedianToleranceCheckResult{} }
+func (m *MedianToleranceCheckResult) String() string { return proto.CompactTextString(m) }
+func (*MedianToleranceCheckResult) ProtoMessage() {}
+func (*MedianToleranceCheckResult) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b20e6734acd2d200, []int{7}
+}
+
+func (m *MedianToleranceCheckResult) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_MedianToleranceCheckResult.Unmarshal(m, b)
+}
+func (m *MedianToleranceCheckResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_MedianToleranceCheckResult.Marshal(b, m, deterministic)
+}
+func (m *MedianToleranceCheckResult) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MedianToleranceCheckResult.Merge(m, src)
+}
+func (m *MedianToleranceCheckResult) XXX_Size() int {
+ return xxx_messageInfo_MedianToleranceCheckResult.Size(m)
+}
+func (m *MedianToleranceCheckResult) XXX_DiscardUnknown() {
+ xxx_messageInfo_MedianToleranceCheckResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MedianToleranceCheckResult proto.InternalMessageInfo
+
+func (m *MedianToleranceCheckResult) GetParams() *MedianToleranceParams {
+ if m != nil {
+ return m.Params
+ }
+ return nil
+}
+
+func (m *MedianToleranceCheckResult) GetTolerance() float64 {
+ if m != nil && m.Tolerance != nil {
+ return *m.Tolerance
+ }
+ return 0
+}
+
+func (m *MedianToleranceCheckResult) GetIsRegressed() bool {
+ if m != nil && m.IsRegressed != nil {
+ return *m.IsRegressed
+ }
+ return false
+}
+
+func init() {
+ proto.RegisterEnum("mako.window_deviation.ToleranceCheck_DirectionBias", ToleranceCheck_DirectionBias_name, ToleranceCheck_DirectionBias_value)
+ proto.RegisterEnum("mako.window_deviation.WindowDeviationOutput_ToleranceCheckOutput_CheckResult", WindowDeviationOutput_ToleranceCheckOutput_CheckResult_name, WindowDeviationOutput_ToleranceCheckOutput_CheckResult_value)
+ proto.RegisterType((*WindowDeviationInput)(nil), "mako.window_deviation.WindowDeviationInput")
+ proto.RegisterType((*ToleranceCheck)(nil), "mako.window_deviation.ToleranceCheck")
+ proto.RegisterType((*MeanToleranceParams)(nil), "mako.window_deviation.MeanToleranceParams")
+ proto.RegisterType((*MedianToleranceParams)(nil), "mako.window_deviation.MedianToleranceParams")
+ proto.RegisterType((*WindowDeviationOutput)(nil), "mako.window_deviation.WindowDeviationOutput")
+ proto.RegisterType((*WindowDeviationOutput_ToleranceCheckOutput)(nil), "mako.window_deviation.WindowDeviationOutput.ToleranceCheckOutput")
+ proto.RegisterType((*ToleranceCheckStats)(nil), "mako.window_deviation.ToleranceCheckStats")
+ proto.RegisterType((*MeanToleranceCheckResult)(nil), "mako.window_deviation.MeanToleranceCheckResult")
+ proto.RegisterType((*MedianToleranceCheckResult)(nil), "mako.window_deviation.MedianToleranceCheckResult")
+}
+
+func init() {
+ proto.RegisterFile("clients/proto/analyzers/window_deviation.proto", fileDescriptor_b20e6734acd2d200)
+}
+
+var fileDescriptor_b20e6734acd2d200 = []byte{
+ // 1160 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcf, 0x6f, 0xdb, 0x36,
+ 0x14, 0xae, 0x92, 0xd8, 0xad, 0x9f, 0x6c, 0xd7, 0x60, 0x12, 0xcc, 0x73, 0xdb, 0x34, 0x75, 0x5b,
+ 0x2c, 0x28, 0x0a, 0xa5, 0x4d, 0xb1, 0x4b, 0x4e, 0x8b, 0x6b, 0xa7, 0xf3, 0x56, 0xbb, 0x19, 0xdd,
+ 0xa1, 0xd8, 0x89, 0x60, 0x25, 0xda, 0x21, 0x22, 0x4a, 0x9e, 0x48, 0xb7, 0x69, 0x2f, 0xfd, 0x53,
+ 0x76, 0xe8, 0x75, 0xff, 0xc4, 0x2e, 0xfb, 0xaf, 0x06, 0x0c, 0x24, 0x25, 0xff, 0x8a, 0x05, 0x38,
+ 0xd8, 0x6e, 0xf2, 0xc7, 0xef, 0x7d, 0xef, 0x23, 0xdf, 0xd3, 0xa3, 0x0c, 0x9e, 0x1f, 0x72, 0x16,
+ 0x29, 0x79, 0x38, 0x4e, 0x62, 0x15, 0x1f, 0xd2, 0x88, 0x86, 0x9f, 0x3e, 0xb3, 0x44, 0x1e, 0x7e,
+ 0xe4, 0x51, 0x10, 0x7f, 0x24, 0x01, 0xfb, 0xc0, 0xa9, 0xe2, 0x71, 0xe4, 0x19, 0x02, 0xda, 0x15,
+ 0xf4, 0x22, 0xf6, 0x96, 0x17, 0x1b, 0xbb, 0x72, 0xcc, 0xfc, 0x54, 0xc3, 0x30, 0xcc, 0x63, 0xf3,
+ 0x6f, 0x07, 0x76, 0xde, 0x19, 0x6e, 0x3b, 0xa3, 0x76, 0xa3, 0xf1, 0x44, 0xa1, 0x13, 0xd8, 0x4e,
+ 0x26, 0x11, 0xe1, 0xd1, 0x30, 0x26, 0xbf, 0x4f, 0x58, 0xf2, 0x89, 0x84, 0x5c, 0xaa, 0xba, 0xb3,
+ 0xbf, 0x79, 0xe0, 0x1e, 0x21, 0xcf, 0x48, 0xe0, 0x49, 0xd4, 0x8d, 0x86, 0xf1, 0x2f, 0x7a, 0x19,
+ 0xd7, 0x92, 0xb9, 0x5f, 0xaf, 0xb9, 0x54, 0xe8, 0x1d, 0xec, 0xa8, 0x38, 0x64, 0x09, 0x8d, 0x7c,
+ 0x46, 0xfc, 0x73, 0xe6, 0x5f, 0x58, 0x8d, 0x0d, 0xa3, 0xf1, 0xd8, 0x5b, 0x69, 0xd4, 0x7b, 0x9b,
+ 0x85, 0xbc, 0xd4, 0x11, 0x18, 0xa9, 0x85, 0xdf, 0x46, 0x18, 0xc1, 0x56, 0x44, 0x05, 0xab, 0x6f,
+ 0xee, 0x3b, 0x07, 0x25, 0x6c, 0x9e, 0x9b, 0x7f, 0x6d, 0x41, 0x75, 0x31, 0x14, 0x3d, 0x07, 0x37,
+ 0xa0, 0x8a, 0x92, 0x21, 0x0f, 0x15, 0x4b, 0xea, 0xce, 0xbe, 0x73, 0xe0, 0x1e, 0xd5, 0x6c, 0xda,
+ 0x36, 0x55, 0xf4, 0xd4, 0xe0, 0x18, 0x82, 0xe9, 0x33, 0x3a, 0x04, 0x94, 0x30, 0x9f, 0x45, 0x8a,
+ 0xa4, 0xbe, 0x24, 0xff, 0xcc, 0xea, 0x1b, 0xfb, 0xce, 0x41, 0xe1, 0xd8, 0x79, 0x8e, 0x6b, 0x76,
+ 0xd1, 0x1e, 0xd8, 0x80, 0x7f, 0x66, 0xe8, 0x14, 0xf6, 0x04, 0x8f, 0xb8, 0x98, 0x08, 0x72, 0xce,
+ 0xa5, 0x8a, 0x13, 0xee, 0xd3, 0x70, 0x21, 0xb8, 0x68, 0x83, 0x5f, 0xe0, 0x3b, 0x29, 0xf1, 0xc7,
+ 0x29, 0x6f, 0x4e, 0xc7, 0x87, 0x6a, 0xc0, 0x13, 0xe6, 0xeb, 0x23, 0x20, 0xef, 0x39, 0x95, 0x66,
+ 0x73, 0xd5, 0xa3, 0x17, 0x6b, 0x9d, 0x92, 0xd7, 0xce, 0x62, 0x5b, 0x9c, 0xca, 0xe3, 0x9b, 0xfd,
+ 0x37, 0xa4, 0xd5, 0x3d, 0x19, 0xe0, 0x4a, 0x30, 0x8f, 0xa3, 0x11, 0x34, 0x04, 0xa3, 0x11, 0x99,
+ 0x55, 0x65, 0x4c, 0x13, 0x2a, 0xa4, 0x2d, 0xcb, 0x96, 0x29, 0xcb, 0x93, 0x9c, 0x84, 0x3d, 0x46,
+ 0xa3, 0x69, 0xd2, 0x33, 0x13, 0x86, 0xbf, 0x11, 0x57, 0x41, 0x53, 0x20, 0x01, 0x77, 0x05, 0x0b,
+ 0x78, 0x6e, 0xaa, 0x82, 0x49, 0xf5, 0x34, 0x37, 0x95, 0x0e, 0x5d, 0x4e, 0xf6, 0xad, 0x58, 0x05,
+ 0xeb, 0x74, 0xcd, 0x53, 0xa8, 0x2c, 0x1c, 0x00, 0x72, 0x21, 0x3b, 0x82, 0xda, 0x0d, 0xb4, 0x0d,
+ 0xb7, 0xbb, 0xaf, 0xfa, 0x6f, 0x70, 0x87, 0x74, 0xfb, 0x2f, 0x71, 0xe7, 0x64, 0xd0, 0xa9, 0x39,
+ 0x73, 0x60, 0xbb, 0x93, 0x82, 0x1b, 0xcd, 0x2f, 0xb0, 0xbd, 0x62, 0x9b, 0x68, 0x1f, 0xc0, 0x8f,
+ 0x23, 0xa9, 0x88, 0x62, 0x89, 0x30, 0x6d, 0xe4, 0x1c, 0x3b, 0xcf, 0x70, 0xc9, 0x80, 0x6f, 0x59,
+ 0x22, 0x34, 0xc3, 0x1c, 0xac, 0x1f, 0xb3, 0xe1, 0xd0, 0xb4, 0x8b, 0x65, 0x68, 0xf0, 0xa5, 0xc6,
+ 0xd0, 0x23, 0x28, 0x4b, 0x15, 0x04, 0xec, 0x43, 0xca, 0xd9, 0xcc, 0x38, 0xae, 0x85, 0x0d, 0xab,
+ 0xf9, 0x05, 0x76, 0x57, 0x6e, 0x7e, 0x0d, 0x0b, 0x8f, 0xa0, 0x9c, 0x1e, 0xf9, 0x92, 0x09, 0xd7,
+ 0xc2, 0xd6, 0xc6, 0x1e, 0x94, 0x04, 0x0d, 0x96, 0x3d, 0xdc, 0x12, 0x34, 0xb0, 0x06, 0xfe, 0xbc,
+ 0x09, 0xbb, 0x4b, 0xe3, 0xe0, 0xcd, 0x44, 0xe9, 0x79, 0xf0, 0x18, 0xaa, 0xb1, 0x79, 0x22, 0x82,
+ 0x49, 0x49, 0x47, 0xcc, 0xb8, 0x28, 0xe1, 0x8a, 0x45, 0x7b, 0x16, 0x44, 0xbf, 0x41, 0xd1, 0xbc,
+ 0xe9, 0xba, 0x7f, 0x75, 0x8d, 0x4f, 0x72, 0x6a, 0xbc, 0x32, 0xc9, 0x52, 0x57, 0x5b, 0x10, 0xa7,
+ 0x82, 0xe8, 0x02, 0xee, 0xdb, 0x27, 0x22, 0x2f, 0xf8, 0x78, 0xcc, 0x02, 0x32, 0x8c, 0x13, 0x22,
+ 0xb8, 0x94, 0x3c, 0x1a, 0x11, 0xfd, 0x12, 0x5f, 0x6f, 0xb2, 0xdc, 0xb1, 0x6a, 0x03, 0x2b, 0x76,
+ 0x1a, 0x27, 0x3d, 0x2b, 0xa5, 0x47, 0x43, 0xe3, 0x6b, 0x01, 0x76, 0x56, 0xb9, 0x41, 0x7d, 0xb8,
+ 0xbd, 0x34, 0xd4, 0xd2, 0xc1, 0xb2, 0x66, 0xd6, 0xea, 0xe2, 0x3c, 0x43, 0x63, 0x28, 0x26, 0x4c,
+ 0x4e, 0x42, 0x65, 0x2a, 0x56, 0x3d, 0xea, 0xfd, 0xe7, 0x03, 0xf3, 0x6c, 0x22, 0x23, 0x7a, 0x5c,
+ 0xfa, 0xb5, 0xdf, 0xee, 0x9c, 0x76, 0xfb, 0x9d, 0x36, 0x4e, 0xf3, 0xa0, 0x07, 0xba, 0x53, 0x54,
+ 0xc2, 0x7d, 0x12, 0xd2, 0xf7, 0x2c, 0x4c, 0xa7, 0xa8, 0x6b, 0xb1, 0xd7, 0x1a, 0x42, 0x3f, 0x40,
+ 0x41, 0x2a, 0xaa, 0x64, 0x7d, 0xcb, 0x6c, 0xed, 0xc9, 0x5a, 0x5b, 0x1b, 0xe8, 0x08, 0x6c, 0x03,
+ 0xd1, 0x4f, 0xd0, 0xbc, 0x3a, 0x0f, 0x05, 0x8f, 0x88, 0xe2, 0x82, 0x49, 0x45, 0xc5, 0x98, 0x08,
+ 0x59, 0x2f, 0xe8, 0x0e, 0xc4, 0x7b, 0xe7, 0x4b, 0x13, 0xb1, 0xc7, 0xa3, 0xb7, 0x19, 0xad, 0x97,
+ 0xa7, 0x45, 0x2f, 0x17, 0xb5, 0x8a, 0x39, 0x5a, 0xf4, 0x72, 0x5e, 0xab, 0x05, 0x7b, 0xab, 0x7d,
+ 0xbd, 0x9f, 0xf0, 0x30, 0x20, 0x3c, 0xa8, 0xdf, 0x34, 0x3a, 0x8d, 0x15, 0x9e, 0x5a, 0x9a, 0xd2,
+ 0x0d, 0x72, 0x34, 0xe8, 0xe5, 0x4c, 0xe3, 0x56, 0x8e, 0x06, 0xbd, 0x4c, 0x35, 0x9a, 0x6d, 0x70,
+ 0xe7, 0xca, 0x84, 0x2a, 0x30, 0x2b, 0x54, 0xed, 0x86, 0xfe, 0x89, 0x3b, 0xaf, 0x70, 0x67, 0x30,
+ 0xe8, 0xb4, 0x6b, 0x8e, 0x1e, 0x67, 0x83, 0x9f, 0xbb, 0x67, 0x67, 0x9d, 0x76, 0x6d, 0x03, 0x01,
+ 0x14, 0xcf, 0x4e, 0xcc, 0xc2, 0x66, 0xf3, 0x9f, 0x2d, 0xd8, 0x5e, 0x51, 0x04, 0xf4, 0x0c, 0x76,
+ 0xb2, 0xdc, 0xe6, 0xc5, 0x20, 0x21, 0x8b, 0x46, 0xea, 0xdc, 0x74, 0x6a, 0x01, 0xa3, 0x6c, 0x4d,
+ 0x77, 0xfa, 0x6b, 0xb3, 0x82, 0x9e, 0x4e, 0x2f, 0xbe, 0x79, 0xbe, 0xb9, 0xf8, 0xb2, 0x5b, 0x6f,
+ 0x8e, 0xfd, 0x10, 0x2a, 0x53, 0x7d, 0x3d, 0xe3, 0xec, 0x28, 0xc1, 0xe5, 0x0c, 0xd4, 0x53, 0x14,
+ 0x7d, 0x07, 0xb7, 0xe7, 0x48, 0x7a, 0x06, 0x99, 0x76, 0x72, 0x70, 0x75, 0x46, 0xd3, 0xe8, 0x02,
+ 0xd1, 0x4e, 0xc3, 0xb4, 0x31, 0xa6, 0xc4, 0x81, 0x41, 0x75, 0xe7, 0xce, 0x14, 0x69, 0x90, 0x96,
+ 0xdc, 0x9d, 0xca, 0xd1, 0x00, 0xdd, 0x07, 0x37, 0xdd, 0x87, 0xf1, 0x65, 0x8b, 0x09, 0x16, 0x32,
+ 0xae, 0x1e, 0x42, 0x65, 0x4a, 0x30, 0x9e, 0x6c, 0xad, 0xca, 0x19, 0xc5, 0x38, 0xba, 0x07, 0x10,
+ 0xb0, 0x50, 0x51, 0x2b, 0x52, 0x32, 0x8c, 0x92, 0x41, 0x8c, 0xc6, 0x03, 0x28, 0x67, 0xcb, 0x46,
+ 0x02, 0xac, 0x8f, 0x94, 0x60, 0x14, 0x22, 0xb8, 0xb3, 0x74, 0xd5, 0xda, 0x0f, 0xa0, 0xf4, 0x5d,
+ 0x77, 0xcd, 0xa0, 0x3a, 0x5c, 0xe7, 0xae, 0x9d, 0x6b, 0x13, 0x5c, 0x17, 0x39, 0x2b, 0x48, 0xc1,
+ 0xbd, 0x2b, 0x37, 0xee, 0x42, 0xc6, 0xb2, 0xc9, 0xf8, 0x7c, 0xbd, 0x2b, 0x77, 0x3e, 0x67, 0x43,
+ 0xe4, 0xae, 0x35, 0xff, 0x70, 0xa0, 0x9e, 0x67, 0x16, 0xb5, 0xa0, 0x68, 0xef, 0xfc, 0x74, 0x40,
+ 0x5e, 0xe7, 0xcb, 0x22, 0x8d, 0x44, 0x77, 0xa1, 0x34, 0xdd, 0x8f, 0xbd, 0xd2, 0xf0, 0x0c, 0xd0,
+ 0x75, 0xe0, 0x92, 0x24, 0x6c, 0x94, 0x30, 0x29, 0x59, 0x60, 0xba, 0xf0, 0x16, 0x76, 0xb9, 0xc4,
+ 0x19, 0xd4, 0xfc, 0xea, 0x40, 0x23, 0x7f, 0x73, 0xa8, 0xbd, 0xe4, 0xf1, 0x7a, 0x9f, 0x24, 0xff,
+ 0x97, 0xcb, 0x56, 0x0f, 0xbe, 0xf7, 0x63, 0xe1, 0x8d, 0xe2, 0x78, 0x14, 0x32, 0x4f, 0x31, 0xa9,
+ 0x78, 0x34, 0xf2, 0xc6, 0x2c, 0x19, 0xc6, 0x89, 0xd0, 0x22, 0xd6, 0x56, 0xfa, 0x4f, 0xc0, 0x9b,
+ 0xfe, 0x07, 0x68, 0x2d, 0x7f, 0xbb, 0x9f, 0xe9, 0x8f, 0xfa, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff,
+ 0x42, 0x5b, 0xd8, 0x0f, 0x33, 0x0c, 0x00, 0x00,
+}
diff --git a/vendor/github.com/google/mako/proto/quickstore/quickstore_go_proto/quickstore.pb.go b/vendor/github.com/google/mako/proto/quickstore/quickstore_go_proto/quickstore.pb.go
new file mode 100644
index 00000000..0bf4b457
--- /dev/null
+++ b/vendor/github.com/google/mako/proto/quickstore/quickstore_go_proto/quickstore.pb.go
@@ -0,0 +1,439 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: proto/quickstore/quickstore.proto
+
+package mako_quickstore
+
+import (
+ fmt "fmt"
+ proto "github.com/golang/protobuf/proto"
+ threshold_analyzer_go_proto "github.com/google/mako/clients/proto/analyzers/threshold_analyzer_go_proto"
+ utest_analyzer_go_proto "github.com/google/mako/clients/proto/analyzers/utest_analyzer_go_proto"
+ window_deviation_go_proto "github.com/google/mako/clients/proto/analyzers/window_deviation_go_proto"
+ mako_go_proto "github.com/google/mako/spec/proto/mako_go_proto"
+ math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type QuickstoreOutput_Status int32
+
+const (
+ QuickstoreOutput_SUCCESS QuickstoreOutput_Status = 1
+ QuickstoreOutput_ERROR QuickstoreOutput_Status = 2
+ QuickstoreOutput_ANALYSIS_FAIL QuickstoreOutput_Status = 4
+)
+
+var QuickstoreOutput_Status_name = map[int32]string{
+ 1: "SUCCESS",
+ 2: "ERROR",
+ 4: "ANALYSIS_FAIL",
+}
+
+var QuickstoreOutput_Status_value = map[string]int32{
+ "SUCCESS": 1,
+ "ERROR": 2,
+ "ANALYSIS_FAIL": 4,
+}
+
+func (x QuickstoreOutput_Status) Enum() *QuickstoreOutput_Status {
+ p := new(QuickstoreOutput_Status)
+ *p = x
+ return p
+}
+
+func (x QuickstoreOutput_Status) String() string {
+ return proto.EnumName(QuickstoreOutput_Status_name, int32(x))
+}
+
+func (x *QuickstoreOutput_Status) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(QuickstoreOutput_Status_value, data, "QuickstoreOutput_Status")
+ if err != nil {
+ return err
+ }
+ *x = QuickstoreOutput_Status(value)
+ return nil
+}
+
+func (QuickstoreOutput_Status) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_1383215e6ee55b1f, []int{1, 0}
+}
+
+type QuickstoreInput struct {
+ BenchmarkKey *string `protobuf:"bytes,1,opt,name=benchmark_key,json=benchmarkKey" json:"benchmark_key,omitempty"`
+ TimestampMs *float64 `protobuf:"fixed64,2,opt,name=timestamp_ms,json=timestampMs" json:"timestamp_ms,omitempty"`
+ BuildId *int64 `protobuf:"varint,20,opt,name=build_id,json=buildId" json:"build_id,omitempty"`
+ DurationTimeMs *float64 `protobuf:"fixed64,3,opt,name=duration_time_ms,json=durationTimeMs" json:"duration_time_ms,omitempty"`
+ Tags []string `protobuf:"bytes,4,rep,name=tags" json:"tags,omitempty"`
+ HoverText *string `protobuf:"bytes,14,opt,name=hover_text,json=hoverText" json:"hover_text,omitempty"`
+ Description *string `protobuf:"bytes,6,opt,name=description" json:"description,omitempty"`
+ TestPassId *string `protobuf:"bytes,18,opt,name=test_pass_id,json=testPassId" json:"test_pass_id,omitempty"`
+ AnnotationList []*mako_go_proto.RunAnnotation `protobuf:"bytes,7,rep,name=annotation_list,json=annotationList" json:"annotation_list,omitempty"`
+ HyperlinkList []*mako_go_proto.NamedData `protobuf:"bytes,8,rep,name=hyperlink_list,json=hyperlinkList" json:"hyperlink_list,omitempty"`
+ AuxData []*mako_go_proto.NamedData `protobuf:"bytes,17,rep,name=aux_data,json=auxData" json:"aux_data,omitempty"`
+ IgnoreRangeList []*mako_go_proto.LabeledRange `protobuf:"bytes,9,rep,name=ignore_range_list,json=ignoreRangeList" json:"ignore_range_list,omitempty"`
+ TempDir *string `protobuf:"bytes,21,opt,name=temp_dir,json=tempDir" json:"temp_dir,omitempty"`
+ DeleteSampleFiles *bool `protobuf:"varint,22,opt,name=delete_sample_files,json=deleteSampleFiles,def=1" json:"delete_sample_files,omitempty"`
+ AnalysisPass *QuickstoreInput_ConditionalFields `protobuf:"bytes,10,opt,name=analysis_pass,json=analysisPass" json:"analysis_pass,omitempty"`
+ AnalysisFail *QuickstoreInput_ConditionalFields `protobuf:"bytes,11,opt,name=analysis_fail,json=analysisFail" json:"analysis_fail,omitempty"`
+ ThresholdInputs []*threshold_analyzer_go_proto.ThresholdAnalyzerInput `protobuf:"bytes,12,rep,name=threshold_inputs,json=thresholdInputs" json:"threshold_inputs,omitempty"`
+ WdaInputs []*window_deviation_go_proto.WindowDeviationInput `protobuf:"bytes,13,rep,name=wda_inputs,json=wdaInputs" json:"wda_inputs,omitempty"`
+ UtestInputs []*utest_analyzer_go_proto.UTestAnalyzerInput `protobuf:"bytes,16,rep,name=utest_inputs,json=utestInputs" json:"utest_inputs,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *QuickstoreInput) Reset() { *m = QuickstoreInput{} }
+func (m *QuickstoreInput) String() string { return proto.CompactTextString(m) }
+func (*QuickstoreInput) ProtoMessage() {}
+func (*QuickstoreInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_1383215e6ee55b1f, []int{0}
+}
+
+func (m *QuickstoreInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_QuickstoreInput.Unmarshal(m, b)
+}
+func (m *QuickstoreInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_QuickstoreInput.Marshal(b, m, deterministic)
+}
+func (m *QuickstoreInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QuickstoreInput.Merge(m, src)
+}
+func (m *QuickstoreInput) XXX_Size() int {
+ return xxx_messageInfo_QuickstoreInput.Size(m)
+}
+func (m *QuickstoreInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_QuickstoreInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QuickstoreInput proto.InternalMessageInfo
+
+const Default_QuickstoreInput_DeleteSampleFiles bool = true
+
+func (m *QuickstoreInput) GetBenchmarkKey() string {
+ if m != nil && m.BenchmarkKey != nil {
+ return *m.BenchmarkKey
+ }
+ return ""
+}
+
+func (m *QuickstoreInput) GetTimestampMs() float64 {
+ if m != nil && m.TimestampMs != nil {
+ return *m.TimestampMs
+ }
+ return 0
+}
+
+func (m *QuickstoreInput) GetBuildId() int64 {
+ if m != nil && m.BuildId != nil {
+ return *m.BuildId
+ }
+ return 0
+}
+
+func (m *QuickstoreInput) GetDurationTimeMs() float64 {
+ if m != nil && m.DurationTimeMs != nil {
+ return *m.DurationTimeMs
+ }
+ return 0
+}
+
+func (m *QuickstoreInput) GetTags() []string {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+func (m *QuickstoreInput) GetHoverText() string {
+ if m != nil && m.HoverText != nil {
+ return *m.HoverText
+ }
+ return ""
+}
+
+func (m *QuickstoreInput) GetDescription() string {
+ if m != nil && m.Description != nil {
+ return *m.Description
+ }
+ return ""
+}
+
+func (m *QuickstoreInput) GetTestPassId() string {
+ if m != nil && m.TestPassId != nil {
+ return *m.TestPassId
+ }
+ return ""
+}
+
+func (m *QuickstoreInput) GetAnnotationList() []*mako_go_proto.RunAnnotation {
+ if m != nil {
+ return m.AnnotationList
+ }
+ return nil
+}
+
+func (m *QuickstoreInput) GetHyperlinkList() []*mako_go_proto.NamedData {
+ if m != nil {
+ return m.HyperlinkList
+ }
+ return nil
+}
+
+func (m *QuickstoreInput) GetAuxData() []*mako_go_proto.NamedData {
+ if m != nil {
+ return m.AuxData
+ }
+ return nil
+}
+
+func (m *QuickstoreInput) GetIgnoreRangeList() []*mako_go_proto.LabeledRange {
+ if m != nil {
+ return m.IgnoreRangeList
+ }
+ return nil
+}
+
+func (m *QuickstoreInput) GetTempDir() string {
+ if m != nil && m.TempDir != nil {
+ return *m.TempDir
+ }
+ return ""
+}
+
+func (m *QuickstoreInput) GetDeleteSampleFiles() bool {
+ if m != nil && m.DeleteSampleFiles != nil {
+ return *m.DeleteSampleFiles
+ }
+ return Default_QuickstoreInput_DeleteSampleFiles
+}
+
+func (m *QuickstoreInput) GetAnalysisPass() *QuickstoreInput_ConditionalFields {
+ if m != nil {
+ return m.AnalysisPass
+ }
+ return nil
+}
+
+func (m *QuickstoreInput) GetAnalysisFail() *QuickstoreInput_ConditionalFields {
+ if m != nil {
+ return m.AnalysisFail
+ }
+ return nil
+}
+
+func (m *QuickstoreInput) GetThresholdInputs() []*threshold_analyzer_go_proto.ThresholdAnalyzerInput {
+ if m != nil {
+ return m.ThresholdInputs
+ }
+ return nil
+}
+
+func (m *QuickstoreInput) GetWdaInputs() []*window_deviation_go_proto.WindowDeviationInput {
+ if m != nil {
+ return m.WdaInputs
+ }
+ return nil
+}
+
+func (m *QuickstoreInput) GetUtestInputs() []*utest_analyzer_go_proto.UTestAnalyzerInput {
+ if m != nil {
+ return m.UtestInputs
+ }
+ return nil
+}
+
+type QuickstoreInput_ConditionalFields struct {
+ Tags []string `protobuf:"bytes,1,rep,name=tags" json:"tags,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *QuickstoreInput_ConditionalFields) Reset() { *m = QuickstoreInput_ConditionalFields{} }
+func (m *QuickstoreInput_ConditionalFields) String() string { return proto.CompactTextString(m) }
+func (*QuickstoreInput_ConditionalFields) ProtoMessage() {}
+func (*QuickstoreInput_ConditionalFields) Descriptor() ([]byte, []int) {
+ return fileDescriptor_1383215e6ee55b1f, []int{0, 0}
+}
+
+func (m *QuickstoreInput_ConditionalFields) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_QuickstoreInput_ConditionalFields.Unmarshal(m, b)
+}
+func (m *QuickstoreInput_ConditionalFields) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_QuickstoreInput_ConditionalFields.Marshal(b, m, deterministic)
+}
+func (m *QuickstoreInput_ConditionalFields) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QuickstoreInput_ConditionalFields.Merge(m, src)
+}
+func (m *QuickstoreInput_ConditionalFields) XXX_Size() int {
+ return xxx_messageInfo_QuickstoreInput_ConditionalFields.Size(m)
+}
+func (m *QuickstoreInput_ConditionalFields) XXX_DiscardUnknown() {
+ xxx_messageInfo_QuickstoreInput_ConditionalFields.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QuickstoreInput_ConditionalFields proto.InternalMessageInfo
+
+func (m *QuickstoreInput_ConditionalFields) GetTags() []string {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+type QuickstoreOutput struct {
+ Status *QuickstoreOutput_Status `protobuf:"varint,1,opt,name=status,enum=mako.quickstore.QuickstoreOutput_Status" json:"status,omitempty"`
+ AnalyzerOutputList []*mako_go_proto.AnalyzerOutput `protobuf:"bytes,2,rep,name=analyzer_output_list,json=analyzerOutputList" json:"analyzer_output_list,omitempty"`
+ SummaryOutput *string `protobuf:"bytes,3,opt,name=summary_output,json=summaryOutput" json:"summary_output,omitempty"`
+ RunChartLink *string `protobuf:"bytes,4,opt,name=run_chart_link,json=runChartLink" json:"run_chart_link,omitempty"`
+ RunKey *string `protobuf:"bytes,5,opt,name=run_key,json=runKey" json:"run_key,omitempty"`
+ GeneratedSampleFiles []string `protobuf:"bytes,6,rep,name=generated_sample_files,json=generatedSampleFiles" json:"generated_sample_files,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *QuickstoreOutput) Reset() { *m = QuickstoreOutput{} }
+func (m *QuickstoreOutput) String() string { return proto.CompactTextString(m) }
+func (*QuickstoreOutput) ProtoMessage() {}
+func (*QuickstoreOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_1383215e6ee55b1f, []int{1}
+}
+
+func (m *QuickstoreOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_QuickstoreOutput.Unmarshal(m, b)
+}
+func (m *QuickstoreOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_QuickstoreOutput.Marshal(b, m, deterministic)
+}
+func (m *QuickstoreOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QuickstoreOutput.Merge(m, src)
+}
+func (m *QuickstoreOutput) XXX_Size() int {
+ return xxx_messageInfo_QuickstoreOutput.Size(m)
+}
+func (m *QuickstoreOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_QuickstoreOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QuickstoreOutput proto.InternalMessageInfo
+
+func (m *QuickstoreOutput) GetStatus() QuickstoreOutput_Status {
+ if m != nil && m.Status != nil {
+ return *m.Status
+ }
+ return QuickstoreOutput_SUCCESS
+}
+
+func (m *QuickstoreOutput) GetAnalyzerOutputList() []*mako_go_proto.AnalyzerOutput {
+ if m != nil {
+ return m.AnalyzerOutputList
+ }
+ return nil
+}
+
+func (m *QuickstoreOutput) GetSummaryOutput() string {
+ if m != nil && m.SummaryOutput != nil {
+ return *m.SummaryOutput
+ }
+ return ""
+}
+
+func (m *QuickstoreOutput) GetRunChartLink() string {
+ if m != nil && m.RunChartLink != nil {
+ return *m.RunChartLink
+ }
+ return ""
+}
+
+func (m *QuickstoreOutput) GetRunKey() string {
+ if m != nil && m.RunKey != nil {
+ return *m.RunKey
+ }
+ return ""
+}
+
+func (m *QuickstoreOutput) GetGeneratedSampleFiles() []string {
+ if m != nil {
+ return m.GeneratedSampleFiles
+ }
+ return nil
+}
+
+func init() {
+ proto.RegisterEnum("mako.quickstore.QuickstoreOutput_Status", QuickstoreOutput_Status_name, QuickstoreOutput_Status_value)
+ proto.RegisterType((*QuickstoreInput)(nil), "mako.quickstore.QuickstoreInput")
+ proto.RegisterType((*QuickstoreInput_ConditionalFields)(nil), "mako.quickstore.QuickstoreInput.ConditionalFields")
+ proto.RegisterType((*QuickstoreOutput)(nil), "mako.quickstore.QuickstoreOutput")
+}
+
+func init() { proto.RegisterFile("proto/quickstore/quickstore.proto", fileDescriptor_1383215e6ee55b1f) }
+
+var fileDescriptor_1383215e6ee55b1f = []byte{
+ // 871 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x6d, 0x6f, 0xdb, 0x36,
+ 0x10, 0x86, 0x13, 0xd7, 0x2f, 0xf4, 0x9b, 0xcc, 0xb8, 0x9d, 0x1a, 0x60, 0x80, 0x9b, 0x6d, 0xa8,
+ 0xb0, 0x6e, 0xca, 0x90, 0x15, 0x03, 0x36, 0x0c, 0xc3, 0xbc, 0xa4, 0x06, 0x9c, 0xb9, 0xed, 0x26,
+ 0xa7, 0x28, 0xf6, 0x49, 0x60, 0xcc, 0x8b, 0x4d, 0x58, 0xa2, 0x34, 0x92, 0x6a, 0xe2, 0xfd, 0xad,
+ 0xfd, 0xae, 0xfd, 0x87, 0x81, 0x47, 0x5b, 0x4e, 0xd2, 0x76, 0x5f, 0xf6, 0x8d, 0x7c, 0xee, 0x79,
+ 0x1e, 0x1e, 0x8f, 0xbc, 0x23, 0x4f, 0x72, 0x95, 0x99, 0xec, 0xf8, 0xcf, 0x42, 0xcc, 0x57, 0xda,
+ 0x64, 0x0a, 0x6e, 0x2d, 0x43, 0x8c, 0xd1, 0x5e, 0xca, 0x56, 0x59, 0xb8, 0x83, 0x0f, 0xbf, 0x99,
+ 0x27, 0x02, 0xa4, 0xd1, 0xc7, 0x4e, 0xcb, 0x24, 0x4b, 0xd6, 0x7f, 0x81, 0xd2, 0xc7, 0x66, 0xa9,
+ 0x40, 0x2f, 0xb3, 0x84, 0xc7, 0x5b, 0xcc, 0x59, 0x1c, 0x7e, 0xf5, 0x31, 0x45, 0x61, 0x40, 0x9b,
+ 0xfb, 0xec, 0xf0, 0x63, 0xec, 0x6b, 0x21, 0x79, 0x76, 0x1d, 0x73, 0x78, 0x27, 0x98, 0x11, 0x99,
+ 0xdc, 0xf0, 0x1f, 0xea, 0x1c, 0xe6, 0x1b, 0x32, 0xe6, 0x8a, 0xcb, 0xa3, 0xbf, 0x1b, 0xa4, 0xf7,
+ 0x7b, 0x99, 0xf5, 0x44, 0xe6, 0x85, 0xa1, 0x9f, 0x91, 0xce, 0x25, 0xc8, 0xf9, 0x32, 0x65, 0x6a,
+ 0x15, 0xaf, 0x60, 0xed, 0x57, 0x86, 0x95, 0xa0, 0x19, 0xb5, 0x4b, 0xf0, 0x57, 0x58, 0xd3, 0x27,
+ 0xa4, 0x6d, 0x44, 0x0a, 0xda, 0xb0, 0x34, 0x8f, 0x53, 0xed, 0xef, 0x0d, 0x2b, 0x41, 0x25, 0x6a,
+ 0x95, 0xd8, 0x4b, 0x4d, 0x1f, 0x93, 0xc6, 0x65, 0x21, 0x12, 0x1e, 0x0b, 0xee, 0x0f, 0x86, 0x95,
+ 0x60, 0x3f, 0xaa, 0xe3, 0x7e, 0xc2, 0x69, 0x40, 0x3c, 0x5e, 0x28, 0xcc, 0x2f, 0xb6, 0x12, 0xeb,
+ 0xb0, 0x8f, 0x0e, 0xdd, 0x2d, 0x7e, 0x21, 0x52, 0x78, 0xa9, 0x29, 0x25, 0x55, 0xc3, 0x16, 0xda,
+ 0xaf, 0x0e, 0xf7, 0x83, 0x66, 0x84, 0x6b, 0xfa, 0x29, 0x21, 0xcb, 0xec, 0x1d, 0xa8, 0xd8, 0xc0,
+ 0x8d, 0xf1, 0xbb, 0x98, 0x5d, 0x13, 0x91, 0x0b, 0xb8, 0x31, 0x74, 0x48, 0x5a, 0x1c, 0xf4, 0x5c,
+ 0x89, 0xdc, 0xfa, 0xf8, 0x35, 0x8c, 0xdf, 0x86, 0xe8, 0x90, 0xb4, 0xb1, 0xa6, 0x39, 0xd3, 0xda,
+ 0x66, 0x47, 0x91, 0x42, 0x2c, 0xf6, 0x1b, 0xd3, 0x7a, 0xc2, 0xe9, 0x8f, 0xa4, 0xc7, 0xa4, 0xcc,
+ 0x8c, 0x4b, 0x31, 0x11, 0xda, 0xf8, 0xf5, 0xe1, 0x7e, 0xd0, 0x3a, 0x39, 0x08, 0xb1, 0x7a, 0x51,
+ 0x21, 0x47, 0x65, 0x3c, 0xea, 0xee, 0xb8, 0x53, 0xa1, 0x0d, 0xfd, 0x8e, 0x74, 0x97, 0xeb, 0x1c,
+ 0x54, 0x22, 0xe4, 0xca, 0x89, 0x1b, 0x28, 0xee, 0x39, 0xf1, 0x2b, 0x96, 0x02, 0x3f, 0x63, 0x86,
+ 0x45, 0x9d, 0x92, 0x86, 0xba, 0x2f, 0x49, 0x83, 0x15, 0x37, 0x31, 0x67, 0x86, 0xf9, 0xfd, 0x0f,
+ 0x2b, 0xea, 0xac, 0xb8, 0xb1, 0x0b, 0xfa, 0x13, 0xe9, 0x8b, 0x85, 0xcc, 0x14, 0xc4, 0x8a, 0xc9,
+ 0x05, 0xb8, 0x63, 0x9a, 0x28, 0xa2, 0x4e, 0x34, 0x65, 0x97, 0x90, 0x00, 0x8f, 0x6c, 0x38, 0xea,
+ 0x39, 0x32, 0x6e, 0xf0, 0xac, 0xc7, 0xa4, 0x61, 0x20, 0xcd, 0x63, 0x2e, 0x94, 0xff, 0x10, 0xef,
+ 0x5f, 0xb7, 0xfb, 0x33, 0xa1, 0xe8, 0x73, 0x72, 0xc0, 0x21, 0x01, 0x03, 0xb1, 0x66, 0x69, 0x9e,
+ 0x40, 0x7c, 0x25, 0x12, 0xd0, 0xfe, 0xa3, 0x61, 0x25, 0x68, 0xfc, 0x50, 0x35, 0xaa, 0x80, 0xa8,
+ 0xef, 0x08, 0x33, 0x8c, 0x8f, 0x6d, 0x98, 0xbe, 0x25, 0x1d, 0xfc, 0x85, 0x5a, 0x68, 0x2c, 0xac,
+ 0x4f, 0x86, 0x95, 0xa0, 0x75, 0x72, 0x12, 0xde, 0x6b, 0x8d, 0xf0, 0xde, 0x7f, 0x0b, 0x4f, 0x33,
+ 0xc9, 0x85, 0xad, 0x1d, 0x4b, 0xc6, 0x02, 0x12, 0xae, 0xa3, 0xf6, 0xd6, 0xc8, 0xbe, 0xc6, 0x1d,
+ 0xe3, 0x2b, 0x26, 0x12, 0xbf, 0xf5, 0xff, 0x8d, 0xc7, 0x4c, 0x24, 0x94, 0x13, 0x6f, 0xd7, 0x8d,
+ 0xc2, 0x4a, 0xb4, 0xdf, 0xc6, 0x0a, 0x7e, 0xef, 0xbc, 0xcb, 0xae, 0x0a, 0x3f, 0xd0, 0xb5, 0x17,
+ 0x5b, 0x68, 0xb4, 0x41, 0xf0, 0xd0, 0xa8, 0x57, 0x52, 0x71, 0xaf, 0xe9, 0x39, 0x21, 0xd7, 0x9c,
+ 0x6d, 0xfd, 0x3b, 0xe8, 0xff, 0xcc, 0xf9, 0xbf, 0xd7, 0xab, 0x6f, 0x11, 0x38, 0xdb, 0xee, 0x9d,
+ 0x63, 0xf3, 0x9a, 0xb3, 0xd2, 0xab, 0xed, 0xa6, 0xc1, 0xc6, 0xcd, 0x43, 0xb7, 0xa7, 0xce, 0xed,
+ 0xde, 0x9c, 0x78, 0x73, 0x01, 0xda, 0xdc, 0xcd, 0xad, 0x85, 0x14, 0xe7, 0x75, 0xf8, 0x94, 0xf4,
+ 0xdf, 0x2b, 0x50, 0xd9, 0x6e, 0x95, 0x5d, 0xbb, 0x9d, 0x57, 0x1b, 0x3d, 0xcf, 0x3b, 0xaf, 0x36,
+ 0x0e, 0xbc, 0xc1, 0x79, 0xb5, 0xf1, 0xc0, 0xab, 0x1d, 0xfd, 0xb3, 0x47, 0xbc, 0x5d, 0xb1, 0x5f,
+ 0x17, 0xc6, 0x8e, 0x8d, 0x9f, 0x49, 0x4d, 0x1b, 0x66, 0x0a, 0x8d, 0xf3, 0xa2, 0x7b, 0x12, 0xfc,
+ 0xc7, 0xfb, 0x38, 0x49, 0x38, 0x43, 0x7e, 0xb4, 0xd1, 0xd1, 0x31, 0x19, 0x6c, 0xb3, 0x8f, 0x33,
+ 0x64, 0xb8, 0x5f, 0xbd, 0x87, 0xb7, 0x1c, 0x38, 0xbf, 0xed, 0x8d, 0x9c, 0x45, 0x44, 0xd9, 0x9d,
+ 0x3d, 0x7e, 0xed, 0x2f, 0x48, 0x57, 0x17, 0x69, 0xca, 0xd4, 0x7a, 0x63, 0x83, 0xb3, 0xa5, 0x19,
+ 0x75, 0x36, 0xe8, 0x26, 0xe1, 0xcf, 0x49, 0x57, 0x15, 0x32, 0x9e, 0x2f, 0x99, 0xb2, 0x07, 0xc9,
+ 0x95, 0x5f, 0x75, 0x83, 0x4e, 0x15, 0xf2, 0xd4, 0x82, 0x53, 0x21, 0x57, 0xf4, 0x13, 0x52, 0xb7,
+ 0x2c, 0x3b, 0x07, 0x1f, 0x60, 0xb8, 0xa6, 0x0a, 0x69, 0x27, 0xe0, 0x73, 0xf2, 0x68, 0x01, 0x12,
+ 0x14, 0x33, 0xc0, 0xef, 0x36, 0x4a, 0x0d, 0x8b, 0x37, 0x28, 0xa3, 0xb7, 0xba, 0xe4, 0xe8, 0x5b,
+ 0x52, 0x73, 0xb7, 0xa6, 0x2d, 0x52, 0x9f, 0xbd, 0x39, 0x3d, 0x7d, 0x31, 0x9b, 0x79, 0x15, 0xda,
+ 0x24, 0x0f, 0x5e, 0x44, 0xd1, 0xeb, 0xc8, 0xdb, 0xa3, 0x7d, 0xd2, 0x19, 0xbd, 0x1a, 0x4d, 0xff,
+ 0x98, 0x4d, 0x66, 0xf1, 0x78, 0x34, 0x99, 0x7a, 0xd5, 0x5f, 0xbe, 0x26, 0xcf, 0xe6, 0x59, 0x1a,
+ 0x2e, 0xb2, 0x6c, 0x91, 0x40, 0x68, 0xdf, 0x50, 0xc8, 0x45, 0x98, 0x83, 0xba, 0xca, 0x54, 0xca,
+ 0xe4, 0x1c, 0x5c, 0x69, 0x96, 0x90, 0xe4, 0xa0, 0xf4, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7a,
+ 0x4c, 0x30, 0x63, 0xb0, 0x06, 0x00, 0x00,
+}
diff --git a/vendor/github.com/google/mako/spec/proto/mako_go_proto/mako.pb.go b/vendor/github.com/google/mako/spec/proto/mako_go_proto/mako.pb.go
new file mode 100644
index 00000000..0437f5e9
--- /dev/null
+++ b/vendor/github.com/google/mako/spec/proto/mako_go_proto/mako.pb.go
@@ -0,0 +1,4052 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: spec/proto/mako.proto
+
+package mako
+
+import (
+ fmt "fmt"
+ proto "github.com/golang/protobuf/proto"
+ math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type RunOrder int32
+
+const (
+ RunOrder_UNSPECIFIED RunOrder = 0
+ RunOrder_TIMESTAMP RunOrder = 1
+ RunOrder_BUILD_ID RunOrder = 2
+)
+
+var RunOrder_name = map[int32]string{
+ 0: "UNSPECIFIED",
+ 1: "TIMESTAMP",
+ 2: "BUILD_ID",
+}
+
+var RunOrder_value = map[string]int32{
+ "UNSPECIFIED": 0,
+ "TIMESTAMP": 1,
+ "BUILD_ID": 2,
+}
+
+func (x RunOrder) Enum() *RunOrder {
+ p := new(RunOrder)
+ *p = x
+ return p
+}
+
+func (x RunOrder) String() string {
+ return proto.EnumName(RunOrder_name, int32(x))
+}
+
+func (x *RunOrder) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(RunOrder_value, data, "RunOrder")
+ if err != nil {
+ return err
+ }
+ *x = RunOrder(value)
+ return nil
+}
+
+func (RunOrder) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{0}
+}
+
+type Status_Code int32
+
+const (
+ Status_SUCCESS Status_Code = 0
+ Status_FAIL Status_Code = 1
+)
+
+var Status_Code_name = map[int32]string{
+ 0: "SUCCESS",
+ 1: "FAIL",
+}
+
+var Status_Code_value = map[string]int32{
+ "SUCCESS": 0,
+ "FAIL": 1,
+}
+
+func (x Status_Code) Enum() *Status_Code {
+ p := new(Status_Code)
+ *p = x
+ return p
+}
+
+func (x Status_Code) String() string {
+ return proto.EnumName(Status_Code_name, int32(x))
+}
+
+func (x *Status_Code) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(Status_Code_value, data, "Status_Code")
+ if err != nil {
+ return err
+ }
+ *x = Status_Code(value)
+ return nil
+}
+
+func (Status_Code) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{0, 0}
+}
+
+type ValueInfo_Type int32
+
+const (
+ ValueInfo_NUMERIC ValueInfo_Type = 1
+ ValueInfo_TIMESTAMP ValueInfo_Type = 2
+)
+
+var ValueInfo_Type_name = map[int32]string{
+ 1: "NUMERIC",
+ 2: "TIMESTAMP",
+}
+
+var ValueInfo_Type_value = map[string]int32{
+ "NUMERIC": 1,
+ "TIMESTAMP": 2,
+}
+
+func (x ValueInfo_Type) Enum() *ValueInfo_Type {
+ p := new(ValueInfo_Type)
+ *p = x
+ return p
+}
+
+func (x ValueInfo_Type) String() string {
+ return proto.EnumName(ValueInfo_Type_name, int32(x))
+}
+
+func (x *ValueInfo_Type) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(ValueInfo_Type_value, data, "ValueInfo_Type")
+ if err != nil {
+ return err
+ }
+ *x = ValueInfo_Type(value)
+ return nil
+}
+
+func (ValueInfo_Type) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{1, 0}
+}
+
+type DataFilter_DataType int32
+
+const (
+ DataFilter_METRIC_AGGREGATE_COUNT DataFilter_DataType = 11
+ DataFilter_METRIC_AGGREGATE_MIN DataFilter_DataType = 1
+ DataFilter_METRIC_AGGREGATE_MAX DataFilter_DataType = 2
+ DataFilter_METRIC_AGGREGATE_MEAN DataFilter_DataType = 3
+ DataFilter_METRIC_AGGREGATE_MEDIAN DataFilter_DataType = 4
+ DataFilter_METRIC_AGGREGATE_STDDEV DataFilter_DataType = 5
+ DataFilter_METRIC_AGGREGATE_MAD DataFilter_DataType = 12
+ DataFilter_METRIC_AGGREGATE_PERCENTILE DataFilter_DataType = 6
+ DataFilter_CUSTOM_AGGREGATE DataFilter_DataType = 7
+ DataFilter_METRIC_SAMPLEPOINTS DataFilter_DataType = 8
+ DataFilter_BENCHMARK_SCORE DataFilter_DataType = 9
+ DataFilter_ERROR_COUNT DataFilter_DataType = 10
+)
+
+var DataFilter_DataType_name = map[int32]string{
+ 11: "METRIC_AGGREGATE_COUNT",
+ 1: "METRIC_AGGREGATE_MIN",
+ 2: "METRIC_AGGREGATE_MAX",
+ 3: "METRIC_AGGREGATE_MEAN",
+ 4: "METRIC_AGGREGATE_MEDIAN",
+ 5: "METRIC_AGGREGATE_STDDEV",
+ 12: "METRIC_AGGREGATE_MAD",
+ 6: "METRIC_AGGREGATE_PERCENTILE",
+ 7: "CUSTOM_AGGREGATE",
+ 8: "METRIC_SAMPLEPOINTS",
+ 9: "BENCHMARK_SCORE",
+ 10: "ERROR_COUNT",
+}
+
+var DataFilter_DataType_value = map[string]int32{
+ "METRIC_AGGREGATE_COUNT": 11,
+ "METRIC_AGGREGATE_MIN": 1,
+ "METRIC_AGGREGATE_MAX": 2,
+ "METRIC_AGGREGATE_MEAN": 3,
+ "METRIC_AGGREGATE_MEDIAN": 4,
+ "METRIC_AGGREGATE_STDDEV": 5,
+ "METRIC_AGGREGATE_MAD": 12,
+ "METRIC_AGGREGATE_PERCENTILE": 6,
+ "CUSTOM_AGGREGATE": 7,
+ "METRIC_SAMPLEPOINTS": 8,
+ "BENCHMARK_SCORE": 9,
+ "ERROR_COUNT": 10,
+}
+
+func (x DataFilter_DataType) Enum() *DataFilter_DataType {
+ p := new(DataFilter_DataType)
+ *p = x
+ return p
+}
+
+func (x DataFilter_DataType) String() string {
+ return proto.EnumName(DataFilter_DataType_name, int32(x))
+}
+
+func (x *DataFilter_DataType) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(DataFilter_DataType_value, data, "DataFilter_DataType")
+ if err != nil {
+ return err
+ }
+ *x = DataFilter_DataType(value)
+ return nil
+}
+
+func (DataFilter_DataType) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{6, 0}
+}
+
+type AnalysisTriageInfo_AnalysisTriageType int32
+
+const (
+ AnalysisTriageInfo_NONE AnalysisTriageInfo_AnalysisTriageType = 0
+ AnalysisTriageInfo_REGRESSION AnalysisTriageInfo_AnalysisTriageType = 1
+ AnalysisTriageInfo_IGNORE AnalysisTriageInfo_AnalysisTriageType = 2
+ AnalysisTriageInfo_FALSE_POSITIVE AnalysisTriageInfo_AnalysisTriageType = 3
+ AnalysisTriageInfo_UNKNOWN AnalysisTriageInfo_AnalysisTriageType = 4
+)
+
+var AnalysisTriageInfo_AnalysisTriageType_name = map[int32]string{
+ 0: "NONE",
+ 1: "REGRESSION",
+ 2: "IGNORE",
+ 3: "FALSE_POSITIVE",
+ 4: "UNKNOWN",
+}
+
+var AnalysisTriageInfo_AnalysisTriageType_value = map[string]int32{
+ "NONE": 0,
+ "REGRESSION": 1,
+ "IGNORE": 2,
+ "FALSE_POSITIVE": 3,
+ "UNKNOWN": 4,
+}
+
+func (x AnalysisTriageInfo_AnalysisTriageType) Enum() *AnalysisTriageInfo_AnalysisTriageType {
+ p := new(AnalysisTriageInfo_AnalysisTriageType)
+ *p = x
+ return p
+}
+
+func (x AnalysisTriageInfo_AnalysisTriageType) String() string {
+ return proto.EnumName(AnalysisTriageInfo_AnalysisTriageType_name, int32(x))
+}
+
+func (x *AnalysisTriageInfo_AnalysisTriageType) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(AnalysisTriageInfo_AnalysisTriageType_value, data, "AnalysisTriageInfo_AnalysisTriageType")
+ if err != nil {
+ return err
+ }
+ *x = AnalysisTriageInfo_AnalysisTriageType(value)
+ return nil
+}
+
+func (AnalysisTriageInfo_AnalysisTriageType) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{37, 0}
+}
+
+type AnalysisTriageInfo_EnvironmentType int32
+
+const (
+ AnalysisTriageInfo_UNSPECIFIED AnalysisTriageInfo_EnvironmentType = 0
+ AnalysisTriageInfo_PRESUBMIT AnalysisTriageInfo_EnvironmentType = 1
+ AnalysisTriageInfo_POSTSUBMIT AnalysisTriageInfo_EnvironmentType = 2
+ AnalysisTriageInfo_PRODUCTION AnalysisTriageInfo_EnvironmentType = 3
+)
+
+var AnalysisTriageInfo_EnvironmentType_name = map[int32]string{
+ 0: "UNSPECIFIED",
+ 1: "PRESUBMIT",
+ 2: "POSTSUBMIT",
+ 3: "PRODUCTION",
+}
+
+var AnalysisTriageInfo_EnvironmentType_value = map[string]int32{
+ "UNSPECIFIED": 0,
+ "PRESUBMIT": 1,
+ "POSTSUBMIT": 2,
+ "PRODUCTION": 3,
+}
+
+func (x AnalysisTriageInfo_EnvironmentType) Enum() *AnalysisTriageInfo_EnvironmentType {
+ p := new(AnalysisTriageInfo_EnvironmentType)
+ *p = x
+ return p
+}
+
+func (x AnalysisTriageInfo_EnvironmentType) String() string {
+ return proto.EnumName(AnalysisTriageInfo_EnvironmentType_name, int32(x))
+}
+
+func (x *AnalysisTriageInfo_EnvironmentType) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(AnalysisTriageInfo_EnvironmentType_value, data, "AnalysisTriageInfo_EnvironmentType")
+ if err != nil {
+ return err
+ }
+ *x = AnalysisTriageInfo_EnvironmentType(value)
+ return nil
+}
+
+func (AnalysisTriageInfo_EnvironmentType) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{37, 1}
+}
+
+type TestOutput_TestStatus int32
+
+const (
+ TestOutput_PASS TestOutput_TestStatus = 1
+ TestOutput_RATE_FAIL TestOutput_TestStatus = 2
+ TestOutput_FATAL_FAIL TestOutput_TestStatus = 3
+ TestOutput_ANALYSIS_FAIL TestOutput_TestStatus = 4
+ TestOutput_IN_PROGRESS TestOutput_TestStatus = 5
+)
+
+var TestOutput_TestStatus_name = map[int32]string{
+ 1: "PASS",
+ 2: "RATE_FAIL",
+ 3: "FATAL_FAIL",
+ 4: "ANALYSIS_FAIL",
+ 5: "IN_PROGRESS",
+}
+
+var TestOutput_TestStatus_value = map[string]int32{
+ "PASS": 1,
+ "RATE_FAIL": 2,
+ "FATAL_FAIL": 3,
+ "ANALYSIS_FAIL": 4,
+ "IN_PROGRESS": 5,
+}
+
+func (x TestOutput_TestStatus) Enum() *TestOutput_TestStatus {
+ p := new(TestOutput_TestStatus)
+ *p = x
+ return p
+}
+
+func (x TestOutput_TestStatus) String() string {
+ return proto.EnumName(TestOutput_TestStatus_name, int32(x))
+}
+
+func (x *TestOutput_TestStatus) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(TestOutput_TestStatus_value, data, "TestOutput_TestStatus")
+ if err != nil {
+ return err
+ }
+ *x = TestOutput_TestStatus(value)
+ return nil
+}
+
+func (TestOutput_TestStatus) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{45, 0}
+}
+
+type TestOutput_RetryableFailureType int32
+
+const (
+ TestOutput_UNKNOWN_OR_UNSET_TYPE TestOutput_RetryableFailureType = 0
+ TestOutput_MASTER_RESTART TestOutput_RetryableFailureType = 1
+ TestOutput_JOB_MANAGER_RESTART TestOutput_RetryableFailureType = 2
+ TestOutput_SAMPLER_RESTART TestOutput_RetryableFailureType = 3
+)
+
+var TestOutput_RetryableFailureType_name = map[int32]string{
+ 0: "UNKNOWN_OR_UNSET_TYPE",
+ 1: "MASTER_RESTART",
+ 2: "JOB_MANAGER_RESTART",
+ 3: "SAMPLER_RESTART",
+}
+
+var TestOutput_RetryableFailureType_value = map[string]int32{
+ "UNKNOWN_OR_UNSET_TYPE": 0,
+ "MASTER_RESTART": 1,
+ "JOB_MANAGER_RESTART": 2,
+ "SAMPLER_RESTART": 3,
+}
+
+func (x TestOutput_RetryableFailureType) Enum() *TestOutput_RetryableFailureType {
+ p := new(TestOutput_RetryableFailureType)
+ *p = x
+ return p
+}
+
+func (x TestOutput_RetryableFailureType) String() string {
+ return proto.EnumName(TestOutput_RetryableFailureType_name, int32(x))
+}
+
+func (x *TestOutput_RetryableFailureType) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(TestOutput_RetryableFailureType_value, data, "TestOutput_RetryableFailureType")
+ if err != nil {
+ return err
+ }
+ *x = TestOutput_RetryableFailureType(value)
+ return nil
+}
+
+func (TestOutput_RetryableFailureType) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{45, 1}
+}
+
+type Status struct {
+ Code *Status_Code `protobuf:"varint,1,opt,name=code,enum=mako.Status_Code" json:"code,omitempty"`
+ FailMessage *string `protobuf:"bytes,2,opt,name=fail_message,json=failMessage" json:"fail_message,omitempty"`
+ Retry *bool `protobuf:"varint,3,opt,name=retry,def=0" json:"retry,omitempty"`
+ WarningMessages []string `protobuf:"bytes,4,rep,name=warning_messages,json=warningMessages" json:"warning_messages,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Status) Reset() { *m = Status{} }
+func (m *Status) String() string { return proto.CompactTextString(m) }
+func (*Status) ProtoMessage() {}
+func (*Status) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{0}
+}
+
+func (m *Status) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Status.Unmarshal(m, b)
+}
+func (m *Status) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Status.Marshal(b, m, deterministic)
+}
+func (m *Status) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Status.Merge(m, src)
+}
+func (m *Status) XXX_Size() int {
+ return xxx_messageInfo_Status.Size(m)
+}
+func (m *Status) XXX_DiscardUnknown() {
+ xxx_messageInfo_Status.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Status proto.InternalMessageInfo
+
+const Default_Status_Retry bool = false
+
+func (m *Status) GetCode() Status_Code {
+ if m != nil && m.Code != nil {
+ return *m.Code
+ }
+ return Status_SUCCESS
+}
+
+func (m *Status) GetFailMessage() string {
+ if m != nil && m.FailMessage != nil {
+ return *m.FailMessage
+ }
+ return ""
+}
+
+func (m *Status) GetRetry() bool {
+ if m != nil && m.Retry != nil {
+ return *m.Retry
+ }
+ return Default_Status_Retry
+}
+
+func (m *Status) GetWarningMessages() []string {
+ if m != nil {
+ return m.WarningMessages
+ }
+ return nil
+}
+
+type ValueInfo struct {
+ ValueKey *string `protobuf:"bytes,1,opt,name=value_key,json=valueKey" json:"value_key,omitempty"`
+ Label *string `protobuf:"bytes,2,opt,name=label" json:"label,omitempty"`
+ Type *ValueInfo_Type `protobuf:"varint,3,opt,name=type,enum=mako.ValueInfo_Type" json:"type,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ValueInfo) Reset() { *m = ValueInfo{} }
+func (m *ValueInfo) String() string { return proto.CompactTextString(m) }
+func (*ValueInfo) ProtoMessage() {}
+func (*ValueInfo) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{1}
+}
+
+func (m *ValueInfo) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ValueInfo.Unmarshal(m, b)
+}
+func (m *ValueInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ValueInfo.Marshal(b, m, deterministic)
+}
+func (m *ValueInfo) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ValueInfo.Merge(m, src)
+}
+func (m *ValueInfo) XXX_Size() int {
+ return xxx_messageInfo_ValueInfo.Size(m)
+}
+func (m *ValueInfo) XXX_DiscardUnknown() {
+ xxx_messageInfo_ValueInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ValueInfo proto.InternalMessageInfo
+
+func (m *ValueInfo) GetValueKey() string {
+ if m != nil && m.ValueKey != nil {
+ return *m.ValueKey
+ }
+ return ""
+}
+
+func (m *ValueInfo) GetLabel() string {
+ if m != nil && m.Label != nil {
+ return *m.Label
+ }
+ return ""
+}
+
+func (m *ValueInfo) GetType() ValueInfo_Type {
+ if m != nil && m.Type != nil {
+ return *m.Type
+ }
+ return ValueInfo_NUMERIC
+}
+
+type KeyedValue struct {
+ ValueKey *string `protobuf:"bytes,1,opt,name=value_key,json=valueKey" json:"value_key,omitempty"`
+ Value *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *KeyedValue) Reset() { *m = KeyedValue{} }
+func (m *KeyedValue) String() string { return proto.CompactTextString(m) }
+func (*KeyedValue) ProtoMessage() {}
+func (*KeyedValue) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{2}
+}
+
+func (m *KeyedValue) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_KeyedValue.Unmarshal(m, b)
+}
+func (m *KeyedValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_KeyedValue.Marshal(b, m, deterministic)
+}
+func (m *KeyedValue) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_KeyedValue.Merge(m, src)
+}
+func (m *KeyedValue) XXX_Size() int {
+ return xxx_messageInfo_KeyedValue.Size(m)
+}
+func (m *KeyedValue) XXX_DiscardUnknown() {
+ xxx_messageInfo_KeyedValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeyedValue proto.InternalMessageInfo
+
+func (m *KeyedValue) GetValueKey() string {
+ if m != nil && m.ValueKey != nil {
+ return *m.ValueKey
+ }
+ return ""
+}
+
+func (m *KeyedValue) GetValue() float64 {
+ if m != nil && m.Value != nil {
+ return *m.Value
+ }
+ return 0
+}
+
+type NamedData struct {
+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+ Data *string `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *NamedData) Reset() { *m = NamedData{} }
+func (m *NamedData) String() string { return proto.CompactTextString(m) }
+func (*NamedData) ProtoMessage() {}
+func (*NamedData) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{3}
+}
+
+func (m *NamedData) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_NamedData.Unmarshal(m, b)
+}
+func (m *NamedData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_NamedData.Marshal(b, m, deterministic)
+}
+func (m *NamedData) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_NamedData.Merge(m, src)
+}
+func (m *NamedData) XXX_Size() int {
+ return xxx_messageInfo_NamedData.Size(m)
+}
+func (m *NamedData) XXX_DiscardUnknown() {
+ xxx_messageInfo_NamedData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NamedData proto.InternalMessageInfo
+
+func (m *NamedData) GetName() string {
+ if m != nil && m.Name != nil {
+ return *m.Name
+ }
+ return ""
+}
+
+func (m *NamedData) GetData() string {
+ if m != nil && m.Data != nil {
+ return *m.Data
+ }
+ return ""
+}
+
+type Range struct {
+ Start *float64 `protobuf:"fixed64,1,opt,name=start" json:"start,omitempty"`
+ End *float64 `protobuf:"fixed64,2,opt,name=end" json:"end,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Range) Reset() { *m = Range{} }
+func (m *Range) String() string { return proto.CompactTextString(m) }
+func (*Range) ProtoMessage() {}
+func (*Range) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{4}
+}
+
+func (m *Range) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Range.Unmarshal(m, b)
+}
+func (m *Range) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Range.Marshal(b, m, deterministic)
+}
+func (m *Range) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Range.Merge(m, src)
+}
+func (m *Range) XXX_Size() int {
+ return xxx_messageInfo_Range.Size(m)
+}
+func (m *Range) XXX_DiscardUnknown() {
+ xxx_messageInfo_Range.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Range proto.InternalMessageInfo
+
+func (m *Range) GetStart() float64 {
+ if m != nil && m.Start != nil {
+ return *m.Start
+ }
+ return 0
+}
+
+func (m *Range) GetEnd() float64 {
+ if m != nil && m.End != nil {
+ return *m.End
+ }
+ return 0
+}
+
+type LabeledRange struct {
+ Label *string `protobuf:"bytes,1,opt,name=label" json:"label,omitempty"`
+ Range *Range `protobuf:"bytes,2,opt,name=range" json:"range,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LabeledRange) Reset() { *m = LabeledRange{} }
+func (m *LabeledRange) String() string { return proto.CompactTextString(m) }
+func (*LabeledRange) ProtoMessage() {}
+func (*LabeledRange) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{5}
+}
+
+func (m *LabeledRange) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LabeledRange.Unmarshal(m, b)
+}
+func (m *LabeledRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LabeledRange.Marshal(b, m, deterministic)
+}
+func (m *LabeledRange) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LabeledRange.Merge(m, src)
+}
+func (m *LabeledRange) XXX_Size() int {
+ return xxx_messageInfo_LabeledRange.Size(m)
+}
+func (m *LabeledRange) XXX_DiscardUnknown() {
+ xxx_messageInfo_LabeledRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LabeledRange proto.InternalMessageInfo
+
+func (m *LabeledRange) GetLabel() string {
+ if m != nil && m.Label != nil {
+ return *m.Label
+ }
+ return ""
+}
+
+func (m *LabeledRange) GetRange() *Range {
+ if m != nil {
+ return m.Range
+ }
+ return nil
+}
+
+type DataFilter struct {
+ DataType *DataFilter_DataType `protobuf:"varint,1,opt,name=data_type,json=dataType,enum=mako.DataFilter_DataType" json:"data_type,omitempty"`
+ ValueKey *string `protobuf:"bytes,2,opt,name=value_key,json=valueKey" json:"value_key,omitempty"`
+ PercentileMilliRank *int32 `protobuf:"varint,3,opt,name=percentile_milli_rank,json=percentileMilliRank" json:"percentile_milli_rank,omitempty"`
+ IgnoreMissingData *bool `protobuf:"varint,4,opt,name=ignore_missing_data,json=ignoreMissingData,def=1" json:"ignore_missing_data,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DataFilter) Reset() { *m = DataFilter{} }
+func (m *DataFilter) String() string { return proto.CompactTextString(m) }
+func (*DataFilter) ProtoMessage() {}
+func (*DataFilter) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{6}
+}
+
+func (m *DataFilter) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DataFilter.Unmarshal(m, b)
+}
+func (m *DataFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DataFilter.Marshal(b, m, deterministic)
+}
+func (m *DataFilter) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DataFilter.Merge(m, src)
+}
+func (m *DataFilter) XXX_Size() int {
+ return xxx_messageInfo_DataFilter.Size(m)
+}
+func (m *DataFilter) XXX_DiscardUnknown() {
+ xxx_messageInfo_DataFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DataFilter proto.InternalMessageInfo
+
+const Default_DataFilter_IgnoreMissingData bool = true
+
+func (m *DataFilter) GetDataType() DataFilter_DataType {
+ if m != nil && m.DataType != nil {
+ return *m.DataType
+ }
+ return DataFilter_METRIC_AGGREGATE_COUNT
+}
+
+func (m *DataFilter) GetValueKey() string {
+ if m != nil && m.ValueKey != nil {
+ return *m.ValueKey
+ }
+ return ""
+}
+
+func (m *DataFilter) GetPercentileMilliRank() int32 {
+ if m != nil && m.PercentileMilliRank != nil {
+ return *m.PercentileMilliRank
+ }
+ return 0
+}
+
+func (m *DataFilter) GetIgnoreMissingData() bool {
+ if m != nil && m.IgnoreMissingData != nil {
+ return *m.IgnoreMissingData
+ }
+ return Default_DataFilter_IgnoreMissingData
+}
+
+type RunBundle struct {
+ BenchmarkInfo *BenchmarkInfo `protobuf:"bytes,1,opt,name=benchmark_info,json=benchmarkInfo" json:"benchmark_info,omitempty"`
+ RunInfo *RunInfo `protobuf:"bytes,2,opt,name=run_info,json=runInfo" json:"run_info,omitempty"`
+ BatchList []*SampleBatch `protobuf:"bytes,3,rep,name=batch_list,json=batchList" json:"batch_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *RunBundle) Reset() { *m = RunBundle{} }
+func (m *RunBundle) String() string { return proto.CompactTextString(m) }
+func (*RunBundle) ProtoMessage() {}
+func (*RunBundle) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{7}
+}
+
+func (m *RunBundle) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_RunBundle.Unmarshal(m, b)
+}
+func (m *RunBundle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_RunBundle.Marshal(b, m, deterministic)
+}
+func (m *RunBundle) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RunBundle.Merge(m, src)
+}
+func (m *RunBundle) XXX_Size() int {
+ return xxx_messageInfo_RunBundle.Size(m)
+}
+func (m *RunBundle) XXX_DiscardUnknown() {
+ xxx_messageInfo_RunBundle.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RunBundle proto.InternalMessageInfo
+
+func (m *RunBundle) GetBenchmarkInfo() *BenchmarkInfo {
+ if m != nil {
+ return m.BenchmarkInfo
+ }
+ return nil
+}
+
+func (m *RunBundle) GetRunInfo() *RunInfo {
+ if m != nil {
+ return m.RunInfo
+ }
+ return nil
+}
+
+func (m *RunBundle) GetBatchList() []*SampleBatch {
+ if m != nil {
+ return m.BatchList
+ }
+ return nil
+}
+
+type BenchmarkInfo struct {
+ BenchmarkKey *string `protobuf:"bytes,1,opt,name=benchmark_key,json=benchmarkKey" json:"benchmark_key,omitempty"`
+ BenchmarkName *string `protobuf:"bytes,2,opt,name=benchmark_name,json=benchmarkName" json:"benchmark_name,omitempty"`
+ ProjectName *string `protobuf:"bytes,3,opt,name=project_name,json=projectName" json:"project_name,omitempty"`
+ OwnerList []string `protobuf:"bytes,4,rep,name=owner_list,json=ownerList" json:"owner_list,omitempty"`
+ InputValueInfo *ValueInfo `protobuf:"bytes,5,opt,name=input_value_info,json=inputValueInfo" json:"input_value_info,omitempty"`
+ MetricInfoList []*ValueInfo `protobuf:"bytes,6,rep,name=metric_info_list,json=metricInfoList" json:"metric_info_list,omitempty"`
+ CustomAggregationInfoList []*ValueInfo `protobuf:"bytes,7,rep,name=custom_aggregation_info_list,json=customAggregationInfoList" json:"custom_aggregation_info_list,omitempty"`
+ Description *string `protobuf:"bytes,8,opt,name=description" json:"description,omitempty"`
+ PercentileMilliRankList []int32 `protobuf:"varint,9,rep,name=percentile_milli_rank_list,json=percentileMilliRankList" json:"percentile_milli_rank_list,omitempty"`
+ AuxData []*NamedData `protobuf:"bytes,10,rep,name=aux_data,json=auxData" json:"aux_data,omitempty"`
+ RetainedRunTag *string `protobuf:"bytes,11,opt,name=retained_run_tag,json=retainedRunTag" json:"retained_run_tag,omitempty"`
+ BuildIdLabel *string `protobuf:"bytes,12,opt,name=build_id_label,json=buildIdLabel,def=Changelist" json:"build_id_label,omitempty"`
+ BuildIdUrlFormat *string `protobuf:"bytes,13,opt,name=build_id_url_format,json=buildIdUrlFormat,def=http://cl/%d" json:"build_id_url_format,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *BenchmarkInfo) Reset() { *m = BenchmarkInfo{} }
+func (m *BenchmarkInfo) String() string { return proto.CompactTextString(m) }
+func (*BenchmarkInfo) ProtoMessage() {}
+func (*BenchmarkInfo) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{8}
+}
+
+func (m *BenchmarkInfo) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_BenchmarkInfo.Unmarshal(m, b)
+}
+func (m *BenchmarkInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_BenchmarkInfo.Marshal(b, m, deterministic)
+}
+func (m *BenchmarkInfo) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_BenchmarkInfo.Merge(m, src)
+}
+func (m *BenchmarkInfo) XXX_Size() int {
+ return xxx_messageInfo_BenchmarkInfo.Size(m)
+}
+func (m *BenchmarkInfo) XXX_DiscardUnknown() {
+ xxx_messageInfo_BenchmarkInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BenchmarkInfo proto.InternalMessageInfo
+
+const Default_BenchmarkInfo_BuildIdLabel string = "Changelist"
+const Default_BenchmarkInfo_BuildIdUrlFormat string = "http://cl/%d"
+
+func (m *BenchmarkInfo) GetBenchmarkKey() string {
+ if m != nil && m.BenchmarkKey != nil {
+ return *m.BenchmarkKey
+ }
+ return ""
+}
+
+func (m *BenchmarkInfo) GetBenchmarkName() string {
+ if m != nil && m.BenchmarkName != nil {
+ return *m.BenchmarkName
+ }
+ return ""
+}
+
+func (m *BenchmarkInfo) GetProjectName() string {
+ if m != nil && m.ProjectName != nil {
+ return *m.ProjectName
+ }
+ return ""
+}
+
+func (m *BenchmarkInfo) GetOwnerList() []string {
+ if m != nil {
+ return m.OwnerList
+ }
+ return nil
+}
+
+func (m *BenchmarkInfo) GetInputValueInfo() *ValueInfo {
+ if m != nil {
+ return m.InputValueInfo
+ }
+ return nil
+}
+
+func (m *BenchmarkInfo) GetMetricInfoList() []*ValueInfo {
+ if m != nil {
+ return m.MetricInfoList
+ }
+ return nil
+}
+
+func (m *BenchmarkInfo) GetCustomAggregationInfoList() []*ValueInfo {
+ if m != nil {
+ return m.CustomAggregationInfoList
+ }
+ return nil
+}
+
+func (m *BenchmarkInfo) GetDescription() string {
+ if m != nil && m.Description != nil {
+ return *m.Description
+ }
+ return ""
+}
+
+func (m *BenchmarkInfo) GetPercentileMilliRankList() []int32 {
+ if m != nil {
+ return m.PercentileMilliRankList
+ }
+ return nil
+}
+
+func (m *BenchmarkInfo) GetAuxData() []*NamedData {
+ if m != nil {
+ return m.AuxData
+ }
+ return nil
+}
+
+func (m *BenchmarkInfo) GetRetainedRunTag() string {
+ if m != nil && m.RetainedRunTag != nil {
+ return *m.RetainedRunTag
+ }
+ return ""
+}
+
+func (m *BenchmarkInfo) GetBuildIdLabel() string {
+ if m != nil && m.BuildIdLabel != nil {
+ return *m.BuildIdLabel
+ }
+ return Default_BenchmarkInfo_BuildIdLabel
+}
+
+func (m *BenchmarkInfo) GetBuildIdUrlFormat() string {
+ if m != nil && m.BuildIdUrlFormat != nil {
+ return *m.BuildIdUrlFormat
+ }
+ return Default_BenchmarkInfo_BuildIdUrlFormat
+}
+
+type RunAnnotation struct {
+ ValueKey *string `protobuf:"bytes,1,opt,name=value_key,json=valueKey" json:"value_key,omitempty"`
+ Label *string `protobuf:"bytes,2,opt,name=label" json:"label,omitempty"`
+ Description *string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *RunAnnotation) Reset() { *m = RunAnnotation{} }
+func (m *RunAnnotation) String() string { return proto.CompactTextString(m) }
+func (*RunAnnotation) ProtoMessage() {}
+func (*RunAnnotation) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{9}
+}
+
+func (m *RunAnnotation) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_RunAnnotation.Unmarshal(m, b)
+}
+func (m *RunAnnotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_RunAnnotation.Marshal(b, m, deterministic)
+}
+func (m *RunAnnotation) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RunAnnotation.Merge(m, src)
+}
+func (m *RunAnnotation) XXX_Size() int {
+ return xxx_messageInfo_RunAnnotation.Size(m)
+}
+func (m *RunAnnotation) XXX_DiscardUnknown() {
+ xxx_messageInfo_RunAnnotation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RunAnnotation proto.InternalMessageInfo
+
+func (m *RunAnnotation) GetValueKey() string {
+ if m != nil && m.ValueKey != nil {
+ return *m.ValueKey
+ }
+ return ""
+}
+
+func (m *RunAnnotation) GetLabel() string {
+ if m != nil && m.Label != nil {
+ return *m.Label
+ }
+ return ""
+}
+
+func (m *RunAnnotation) GetDescription() string {
+ if m != nil && m.Description != nil {
+ return *m.Description
+ }
+ return ""
+}
+
+type RunInfo struct {
+ BenchmarkKey *string `protobuf:"bytes,1,opt,name=benchmark_key,json=benchmarkKey" json:"benchmark_key,omitempty"`
+ RunKey *string `protobuf:"bytes,2,opt,name=run_key,json=runKey" json:"run_key,omitempty"`
+ TimestampMs *float64 `protobuf:"fixed64,3,opt,name=timestamp_ms,json=timestampMs" json:"timestamp_ms,omitempty"`
+ BuildId *int64 `protobuf:"varint,18,opt,name=build_id,json=buildId" json:"build_id,omitempty"`
+ DurationTimeMs *float64 `protobuf:"fixed64,4,opt,name=duration_time_ms,json=durationTimeMs,def=0" json:"duration_time_ms,omitempty"`
+ Tags []string `protobuf:"bytes,5,rep,name=tags" json:"tags,omitempty"`
+ IgnoreRangeList []*LabeledRange `protobuf:"bytes,6,rep,name=ignore_range_list,json=ignoreRangeList" json:"ignore_range_list,omitempty"`
+ Aggregate *Aggregate `protobuf:"bytes,7,opt,name=aggregate" json:"aggregate,omitempty"`
+ BatchKeyList []string `protobuf:"bytes,8,rep,name=batch_key_list,json=batchKeyList" json:"batch_key_list,omitempty"`
+ Description *string `protobuf:"bytes,9,opt,name=description" json:"description,omitempty"`
+ AnnotationList []*RunAnnotation `protobuf:"bytes,10,rep,name=annotation_list,json=annotationList" json:"annotation_list,omitempty"`
+ HoverText *string `protobuf:"bytes,15,opt,name=hover_text,json=hoverText" json:"hover_text,omitempty"`
+ TestOutput *TestOutput `protobuf:"bytes,12,opt,name=test_output,json=testOutput" json:"test_output,omitempty"`
+ HyperlinkList []*NamedData `protobuf:"bytes,13,rep,name=hyperlink_list,json=hyperlinkList" json:"hyperlink_list,omitempty"`
+ AuxData []*NamedData `protobuf:"bytes,16,rep,name=aux_data,json=auxData" json:"aux_data,omitempty"`
+ TestPassId *string `protobuf:"bytes,17,opt,name=test_pass_id,json=testPassId" json:"test_pass_id,omitempty"`
+ TestOptionList []*TestOption `protobuf:"bytes,14,rep,name=test_option_list,json=testOptionList" json:"test_option_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *RunInfo) Reset() { *m = RunInfo{} }
+func (m *RunInfo) String() string { return proto.CompactTextString(m) }
+func (*RunInfo) ProtoMessage() {}
+func (*RunInfo) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{10}
+}
+
+func (m *RunInfo) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_RunInfo.Unmarshal(m, b)
+}
+func (m *RunInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_RunInfo.Marshal(b, m, deterministic)
+}
+func (m *RunInfo) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RunInfo.Merge(m, src)
+}
+func (m *RunInfo) XXX_Size() int {
+ return xxx_messageInfo_RunInfo.Size(m)
+}
+func (m *RunInfo) XXX_DiscardUnknown() {
+ xxx_messageInfo_RunInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RunInfo proto.InternalMessageInfo
+
+const Default_RunInfo_DurationTimeMs float64 = 0
+
+func (m *RunInfo) GetBenchmarkKey() string {
+ if m != nil && m.BenchmarkKey != nil {
+ return *m.BenchmarkKey
+ }
+ return ""
+}
+
+func (m *RunInfo) GetRunKey() string {
+ if m != nil && m.RunKey != nil {
+ return *m.RunKey
+ }
+ return ""
+}
+
+func (m *RunInfo) GetTimestampMs() float64 {
+ if m != nil && m.TimestampMs != nil {
+ return *m.TimestampMs
+ }
+ return 0
+}
+
+func (m *RunInfo) GetBuildId() int64 {
+ if m != nil && m.BuildId != nil {
+ return *m.BuildId
+ }
+ return 0
+}
+
+func (m *RunInfo) GetDurationTimeMs() float64 {
+ if m != nil && m.DurationTimeMs != nil {
+ return *m.DurationTimeMs
+ }
+ return Default_RunInfo_DurationTimeMs
+}
+
+func (m *RunInfo) GetTags() []string {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+func (m *RunInfo) GetIgnoreRangeList() []*LabeledRange {
+ if m != nil {
+ return m.IgnoreRangeList
+ }
+ return nil
+}
+
+func (m *RunInfo) GetAggregate() *Aggregate {
+ if m != nil {
+ return m.Aggregate
+ }
+ return nil
+}
+
+func (m *RunInfo) GetBatchKeyList() []string {
+ if m != nil {
+ return m.BatchKeyList
+ }
+ return nil
+}
+
+func (m *RunInfo) GetDescription() string {
+ if m != nil && m.Description != nil {
+ return *m.Description
+ }
+ return ""
+}
+
+func (m *RunInfo) GetAnnotationList() []*RunAnnotation {
+ if m != nil {
+ return m.AnnotationList
+ }
+ return nil
+}
+
+func (m *RunInfo) GetHoverText() string {
+ if m != nil && m.HoverText != nil {
+ return *m.HoverText
+ }
+ return ""
+}
+
+func (m *RunInfo) GetTestOutput() *TestOutput {
+ if m != nil {
+ return m.TestOutput
+ }
+ return nil
+}
+
+func (m *RunInfo) GetHyperlinkList() []*NamedData {
+ if m != nil {
+ return m.HyperlinkList
+ }
+ return nil
+}
+
+func (m *RunInfo) GetAuxData() []*NamedData {
+ if m != nil {
+ return m.AuxData
+ }
+ return nil
+}
+
+func (m *RunInfo) GetTestPassId() string {
+ if m != nil && m.TestPassId != nil {
+ return *m.TestPassId
+ }
+ return ""
+}
+
+func (m *RunInfo) GetTestOptionList() []*TestOption {
+ if m != nil {
+ return m.TestOptionList
+ }
+ return nil
+}
+
+type SamplePoint struct {
+ InputValue *float64 `protobuf:"fixed64,1,opt,name=input_value,json=inputValue" json:"input_value,omitempty"`
+ MetricValueList []*KeyedValue `protobuf:"bytes,2,rep,name=metric_value_list,json=metricValueList" json:"metric_value_list,omitempty"`
+ SampleAnnotationsList []*SampleAnnotation `protobuf:"bytes,3,rep,name=sample_annotations_list,json=sampleAnnotationsList" json:"sample_annotations_list,omitempty"`
+ AuxData map[string][]byte `protobuf:"bytes,4,rep,name=aux_data,json=auxData" json:"aux_data,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SamplePoint) Reset() { *m = SamplePoint{} }
+func (m *SamplePoint) String() string { return proto.CompactTextString(m) }
+func (*SamplePoint) ProtoMessage() {}
+func (*SamplePoint) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{11}
+}
+
+func (m *SamplePoint) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SamplePoint.Unmarshal(m, b)
+}
+func (m *SamplePoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SamplePoint.Marshal(b, m, deterministic)
+}
+func (m *SamplePoint) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SamplePoint.Merge(m, src)
+}
+func (m *SamplePoint) XXX_Size() int {
+ return xxx_messageInfo_SamplePoint.Size(m)
+}
+func (m *SamplePoint) XXX_DiscardUnknown() {
+ xxx_messageInfo_SamplePoint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SamplePoint proto.InternalMessageInfo
+
+func (m *SamplePoint) GetInputValue() float64 {
+ if m != nil && m.InputValue != nil {
+ return *m.InputValue
+ }
+ return 0
+}
+
+func (m *SamplePoint) GetMetricValueList() []*KeyedValue {
+ if m != nil {
+ return m.MetricValueList
+ }
+ return nil
+}
+
+func (m *SamplePoint) GetSampleAnnotationsList() []*SampleAnnotation {
+ if m != nil {
+ return m.SampleAnnotationsList
+ }
+ return nil
+}
+
+func (m *SamplePoint) GetAuxData() map[string][]byte {
+ if m != nil {
+ return m.AuxData
+ }
+ return nil
+}
+
+type SampleAnnotation struct {
+ // Types that are valid to be assigned to Annotation:
+ // *SampleAnnotation_Text
+ // *SampleAnnotation_Hyperlink
+ Annotation isSampleAnnotation_Annotation `protobuf_oneof:"annotation"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SampleAnnotation) Reset() { *m = SampleAnnotation{} }
+func (m *SampleAnnotation) String() string { return proto.CompactTextString(m) }
+func (*SampleAnnotation) ProtoMessage() {}
+func (*SampleAnnotation) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{12}
+}
+
+func (m *SampleAnnotation) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SampleAnnotation.Unmarshal(m, b)
+}
+func (m *SampleAnnotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SampleAnnotation.Marshal(b, m, deterministic)
+}
+func (m *SampleAnnotation) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SampleAnnotation.Merge(m, src)
+}
+func (m *SampleAnnotation) XXX_Size() int {
+ return xxx_messageInfo_SampleAnnotation.Size(m)
+}
+func (m *SampleAnnotation) XXX_DiscardUnknown() {
+ xxx_messageInfo_SampleAnnotation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SampleAnnotation proto.InternalMessageInfo
+
+type isSampleAnnotation_Annotation interface {
+ isSampleAnnotation_Annotation()
+}
+
+type SampleAnnotation_Text struct {
+ Text string `protobuf:"bytes,1,opt,name=text,oneof"`
+}
+
+type SampleAnnotation_Hyperlink struct {
+ Hyperlink *NamedData `protobuf:"bytes,2,opt,name=hyperlink,oneof"`
+}
+
+func (*SampleAnnotation_Text) isSampleAnnotation_Annotation() {}
+
+func (*SampleAnnotation_Hyperlink) isSampleAnnotation_Annotation() {}
+
+func (m *SampleAnnotation) GetAnnotation() isSampleAnnotation_Annotation {
+ if m != nil {
+ return m.Annotation
+ }
+ return nil
+}
+
+func (m *SampleAnnotation) GetText() string {
+ if x, ok := m.GetAnnotation().(*SampleAnnotation_Text); ok {
+ return x.Text
+ }
+ return ""
+}
+
+func (m *SampleAnnotation) GetHyperlink() *NamedData {
+ if x, ok := m.GetAnnotation().(*SampleAnnotation_Hyperlink); ok {
+ return x.Hyperlink
+ }
+ return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*SampleAnnotation) XXX_OneofWrappers() []interface{} {
+ return []interface{}{
+ (*SampleAnnotation_Text)(nil),
+ (*SampleAnnotation_Hyperlink)(nil),
+ }
+}
+
+type SampleError struct {
+ InputValue *float64 `protobuf:"fixed64,1,opt,name=input_value,json=inputValue" json:"input_value,omitempty"`
+ SamplerName *string `protobuf:"bytes,2,opt,name=sampler_name,json=samplerName" json:"sampler_name,omitempty"`
+ ErrorMessage *string `protobuf:"bytes,3,opt,name=error_message,json=errorMessage" json:"error_message,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SampleError) Reset() { *m = SampleError{} }
+func (m *SampleError) String() string { return proto.CompactTextString(m) }
+func (*SampleError) ProtoMessage() {}
+func (*SampleError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{13}
+}
+
+func (m *SampleError) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SampleError.Unmarshal(m, b)
+}
+func (m *SampleError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SampleError.Marshal(b, m, deterministic)
+}
+func (m *SampleError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SampleError.Merge(m, src)
+}
+func (m *SampleError) XXX_Size() int {
+ return xxx_messageInfo_SampleError.Size(m)
+}
+func (m *SampleError) XXX_DiscardUnknown() {
+ xxx_messageInfo_SampleError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SampleError proto.InternalMessageInfo
+
+func (m *SampleError) GetInputValue() float64 {
+ if m != nil && m.InputValue != nil {
+ return *m.InputValue
+ }
+ return 0
+}
+
+func (m *SampleError) GetSamplerName() string {
+ if m != nil && m.SamplerName != nil {
+ return *m.SamplerName
+ }
+ return ""
+}
+
+func (m *SampleError) GetErrorMessage() string {
+ if m != nil && m.ErrorMessage != nil {
+ return *m.ErrorMessage
+ }
+ return ""
+}
+
+type SampleBatch struct {
+ BenchmarkKey *string `protobuf:"bytes,1,opt,name=benchmark_key,json=benchmarkKey" json:"benchmark_key,omitempty"`
+ RunKey *string `protobuf:"bytes,2,opt,name=run_key,json=runKey" json:"run_key,omitempty"`
+ BatchKey *string `protobuf:"bytes,3,opt,name=batch_key,json=batchKey" json:"batch_key,omitempty"`
+ SamplePointList []*SamplePoint `protobuf:"bytes,4,rep,name=sample_point_list,json=samplePointList" json:"sample_point_list,omitempty"`
+ SampleErrorList []*SampleError `protobuf:"bytes,5,rep,name=sample_error_list,json=sampleErrorList" json:"sample_error_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SampleBatch) Reset() { *m = SampleBatch{} }
+func (m *SampleBatch) String() string { return proto.CompactTextString(m) }
+func (*SampleBatch) ProtoMessage() {}
+func (*SampleBatch) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{14}
+}
+
+func (m *SampleBatch) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SampleBatch.Unmarshal(m, b)
+}
+func (m *SampleBatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SampleBatch.Marshal(b, m, deterministic)
+}
+func (m *SampleBatch) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SampleBatch.Merge(m, src)
+}
+func (m *SampleBatch) XXX_Size() int {
+ return xxx_messageInfo_SampleBatch.Size(m)
+}
+func (m *SampleBatch) XXX_DiscardUnknown() {
+ xxx_messageInfo_SampleBatch.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SampleBatch proto.InternalMessageInfo
+
+func (m *SampleBatch) GetBenchmarkKey() string {
+ if m != nil && m.BenchmarkKey != nil {
+ return *m.BenchmarkKey
+ }
+ return ""
+}
+
+func (m *SampleBatch) GetRunKey() string {
+ if m != nil && m.RunKey != nil {
+ return *m.RunKey
+ }
+ return ""
+}
+
+func (m *SampleBatch) GetBatchKey() string {
+ if m != nil && m.BatchKey != nil {
+ return *m.BatchKey
+ }
+ return ""
+}
+
+func (m *SampleBatch) GetSamplePointList() []*SamplePoint {
+ if m != nil {
+ return m.SamplePointList
+ }
+ return nil
+}
+
+func (m *SampleBatch) GetSampleErrorList() []*SampleError {
+ if m != nil {
+ return m.SampleErrorList
+ }
+ return nil
+}
+
+type MetricAggregate struct {
+ MetricKey *string `protobuf:"bytes,1,opt,name=metric_key,json=metricKey" json:"metric_key,omitempty"`
+ Min *float64 `protobuf:"fixed64,2,opt,name=min" json:"min,omitempty"`
+ Max *float64 `protobuf:"fixed64,3,opt,name=max" json:"max,omitempty"`
+ Mean *float64 `protobuf:"fixed64,4,opt,name=mean" json:"mean,omitempty"`
+ Median *float64 `protobuf:"fixed64,5,opt,name=median" json:"median,omitempty"`
+ StandardDeviation *float64 `protobuf:"fixed64,6,opt,name=standard_deviation,json=standardDeviation" json:"standard_deviation,omitempty"`
+ MedianAbsoluteDeviation *float64 `protobuf:"fixed64,9,opt,name=median_absolute_deviation,json=medianAbsoluteDeviation" json:"median_absolute_deviation,omitempty"`
+ PercentileList []float64 `protobuf:"fixed64,7,rep,name=percentile_list,json=percentileList" json:"percentile_list,omitempty"`
+ Count *int64 `protobuf:"varint,8,opt,name=count" json:"count,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *MetricAggregate) Reset() { *m = MetricAggregate{} }
+func (m *MetricAggregate) String() string { return proto.CompactTextString(m) }
+func (*MetricAggregate) ProtoMessage() {}
+func (*MetricAggregate) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{15}
+}
+
+func (m *MetricAggregate) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_MetricAggregate.Unmarshal(m, b)
+}
+func (m *MetricAggregate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_MetricAggregate.Marshal(b, m, deterministic)
+}
+func (m *MetricAggregate) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MetricAggregate.Merge(m, src)
+}
+func (m *MetricAggregate) XXX_Size() int {
+ return xxx_messageInfo_MetricAggregate.Size(m)
+}
+func (m *MetricAggregate) XXX_DiscardUnknown() {
+ xxx_messageInfo_MetricAggregate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MetricAggregate proto.InternalMessageInfo
+
+func (m *MetricAggregate) GetMetricKey() string {
+ if m != nil && m.MetricKey != nil {
+ return *m.MetricKey
+ }
+ return ""
+}
+
+func (m *MetricAggregate) GetMin() float64 {
+ if m != nil && m.Min != nil {
+ return *m.Min
+ }
+ return 0
+}
+
+func (m *MetricAggregate) GetMax() float64 {
+ if m != nil && m.Max != nil {
+ return *m.Max
+ }
+ return 0
+}
+
+func (m *MetricAggregate) GetMean() float64 {
+ if m != nil && m.Mean != nil {
+ return *m.Mean
+ }
+ return 0
+}
+
+func (m *MetricAggregate) GetMedian() float64 {
+ if m != nil && m.Median != nil {
+ return *m.Median
+ }
+ return 0
+}
+
+func (m *MetricAggregate) GetStandardDeviation() float64 {
+ if m != nil && m.StandardDeviation != nil {
+ return *m.StandardDeviation
+ }
+ return 0
+}
+
+func (m *MetricAggregate) GetMedianAbsoluteDeviation() float64 {
+ if m != nil && m.MedianAbsoluteDeviation != nil {
+ return *m.MedianAbsoluteDeviation
+ }
+ return 0
+}
+
+func (m *MetricAggregate) GetPercentileList() []float64 {
+ if m != nil {
+ return m.PercentileList
+ }
+ return nil
+}
+
+func (m *MetricAggregate) GetCount() int64 {
+ if m != nil && m.Count != nil {
+ return *m.Count
+ }
+ return 0
+}
+
+type RunAggregate struct {
+ UsableSampleCount *int64 `protobuf:"varint,1,opt,name=usable_sample_count,json=usableSampleCount" json:"usable_sample_count,omitempty"`
+ IgnoreSampleCount *int64 `protobuf:"varint,2,opt,name=ignore_sample_count,json=ignoreSampleCount,def=0" json:"ignore_sample_count,omitempty"`
+ ErrorSampleCount *int64 `protobuf:"varint,3,opt,name=error_sample_count,json=errorSampleCount,def=0" json:"error_sample_count,omitempty"`
+ BenchmarkScore *int32 `protobuf:"varint,4,opt,name=benchmark_score,json=benchmarkScore,def=0" json:"benchmark_score,omitempty"`
+ CustomAggregateList []*KeyedValue `protobuf:"bytes,5,rep,name=custom_aggregate_list,json=customAggregateList" json:"custom_aggregate_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *RunAggregate) Reset() { *m = RunAggregate{} }
+func (m *RunAggregate) String() string { return proto.CompactTextString(m) }
+func (*RunAggregate) ProtoMessage() {}
+func (*RunAggregate) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{16}
+}
+
+func (m *RunAggregate) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_RunAggregate.Unmarshal(m, b)
+}
+func (m *RunAggregate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_RunAggregate.Marshal(b, m, deterministic)
+}
+func (m *RunAggregate) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RunAggregate.Merge(m, src)
+}
+func (m *RunAggregate) XXX_Size() int {
+ return xxx_messageInfo_RunAggregate.Size(m)
+}
+func (m *RunAggregate) XXX_DiscardUnknown() {
+ xxx_messageInfo_RunAggregate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RunAggregate proto.InternalMessageInfo
+
+const Default_RunAggregate_IgnoreSampleCount int64 = 0
+const Default_RunAggregate_ErrorSampleCount int64 = 0
+const Default_RunAggregate_BenchmarkScore int32 = 0
+
+func (m *RunAggregate) GetUsableSampleCount() int64 {
+ if m != nil && m.UsableSampleCount != nil {
+ return *m.UsableSampleCount
+ }
+ return 0
+}
+
+func (m *RunAggregate) GetIgnoreSampleCount() int64 {
+ if m != nil && m.IgnoreSampleCount != nil {
+ return *m.IgnoreSampleCount
+ }
+ return Default_RunAggregate_IgnoreSampleCount
+}
+
+func (m *RunAggregate) GetErrorSampleCount() int64 {
+ if m != nil && m.ErrorSampleCount != nil {
+ return *m.ErrorSampleCount
+ }
+ return Default_RunAggregate_ErrorSampleCount
+}
+
+func (m *RunAggregate) GetBenchmarkScore() int32 {
+ if m != nil && m.BenchmarkScore != nil {
+ return *m.BenchmarkScore
+ }
+ return Default_RunAggregate_BenchmarkScore
+}
+
+func (m *RunAggregate) GetCustomAggregateList() []*KeyedValue {
+ if m != nil {
+ return m.CustomAggregateList
+ }
+ return nil
+}
+
+type Aggregate struct {
+ MetricAggregateList []*MetricAggregate `protobuf:"bytes,1,rep,name=metric_aggregate_list,json=metricAggregateList" json:"metric_aggregate_list,omitempty"`
+ RunAggregate *RunAggregate `protobuf:"bytes,2,opt,name=run_aggregate,json=runAggregate" json:"run_aggregate,omitempty"`
+ PercentileMilliRankList []int32 `protobuf:"varint,3,rep,name=percentile_milli_rank_list,json=percentileMilliRankList" json:"percentile_milli_rank_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Aggregate) Reset() { *m = Aggregate{} }
+func (m *Aggregate) String() string { return proto.CompactTextString(m) }
+func (*Aggregate) ProtoMessage() {}
+func (*Aggregate) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{17}
+}
+
+func (m *Aggregate) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Aggregate.Unmarshal(m, b)
+}
+func (m *Aggregate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Aggregate.Marshal(b, m, deterministic)
+}
+func (m *Aggregate) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Aggregate.Merge(m, src)
+}
+func (m *Aggregate) XXX_Size() int {
+ return xxx_messageInfo_Aggregate.Size(m)
+}
+func (m *Aggregate) XXX_DiscardUnknown() {
+ xxx_messageInfo_Aggregate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Aggregate proto.InternalMessageInfo
+
+func (m *Aggregate) GetMetricAggregateList() []*MetricAggregate {
+ if m != nil {
+ return m.MetricAggregateList
+ }
+ return nil
+}
+
+func (m *Aggregate) GetRunAggregate() *RunAggregate {
+ if m != nil {
+ return m.RunAggregate
+ }
+ return nil
+}
+
+func (m *Aggregate) GetPercentileMilliRankList() []int32 {
+ if m != nil {
+ return m.PercentileMilliRankList
+ }
+ return nil
+}
+
+type BenchmarkInfoQuery struct {
+ Cursor *string `protobuf:"bytes,1,opt,name=cursor" json:"cursor,omitempty"`
+ Limit *int32 `protobuf:"varint,2,opt,name=limit" json:"limit,omitempty"`
+ BenchmarkKey *string `protobuf:"bytes,3,opt,name=benchmark_key,json=benchmarkKey" json:"benchmark_key,omitempty"`
+ BenchmarkName *string `protobuf:"bytes,4,opt,name=benchmark_name,json=benchmarkName" json:"benchmark_name,omitempty"`
+ ProjectName *string `protobuf:"bytes,5,opt,name=project_name,json=projectName" json:"project_name,omitempty"`
+ Owner *string `protobuf:"bytes,6,opt,name=owner" json:"owner,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *BenchmarkInfoQuery) Reset() { *m = BenchmarkInfoQuery{} }
+func (m *BenchmarkInfoQuery) String() string { return proto.CompactTextString(m) }
+func (*BenchmarkInfoQuery) ProtoMessage() {}
+func (*BenchmarkInfoQuery) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{18}
+}
+
+func (m *BenchmarkInfoQuery) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_BenchmarkInfoQuery.Unmarshal(m, b)
+}
+func (m *BenchmarkInfoQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_BenchmarkInfoQuery.Marshal(b, m, deterministic)
+}
+func (m *BenchmarkInfoQuery) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_BenchmarkInfoQuery.Merge(m, src)
+}
+func (m *BenchmarkInfoQuery) XXX_Size() int {
+ return xxx_messageInfo_BenchmarkInfoQuery.Size(m)
+}
+func (m *BenchmarkInfoQuery) XXX_DiscardUnknown() {
+ xxx_messageInfo_BenchmarkInfoQuery.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BenchmarkInfoQuery proto.InternalMessageInfo
+
+func (m *BenchmarkInfoQuery) GetCursor() string {
+ if m != nil && m.Cursor != nil {
+ return *m.Cursor
+ }
+ return ""
+}
+
+func (m *BenchmarkInfoQuery) GetLimit() int32 {
+ if m != nil && m.Limit != nil {
+ return *m.Limit
+ }
+ return 0
+}
+
+func (m *BenchmarkInfoQuery) GetBenchmarkKey() string {
+ if m != nil && m.BenchmarkKey != nil {
+ return *m.BenchmarkKey
+ }
+ return ""
+}
+
+func (m *BenchmarkInfoQuery) GetBenchmarkName() string {
+ if m != nil && m.BenchmarkName != nil {
+ return *m.BenchmarkName
+ }
+ return ""
+}
+
+func (m *BenchmarkInfoQuery) GetProjectName() string {
+ if m != nil && m.ProjectName != nil {
+ return *m.ProjectName
+ }
+ return ""
+}
+
+func (m *BenchmarkInfoQuery) GetOwner() string {
+ if m != nil && m.Owner != nil {
+ return *m.Owner
+ }
+ return ""
+}
+
+type BenchmarkInfoQueryResponse struct {
+ Status *Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
+ Cursor *string `protobuf:"bytes,2,opt,name=cursor" json:"cursor,omitempty"`
+ BenchmarkInfoList []*BenchmarkInfo `protobuf:"bytes,4,rep,name=benchmark_info_list,json=benchmarkInfoList" json:"benchmark_info_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *BenchmarkInfoQueryResponse) Reset() { *m = BenchmarkInfoQueryResponse{} }
+func (m *BenchmarkInfoQueryResponse) String() string { return proto.CompactTextString(m) }
+func (*BenchmarkInfoQueryResponse) ProtoMessage() {}
+func (*BenchmarkInfoQueryResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{19}
+}
+
+func (m *BenchmarkInfoQueryResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_BenchmarkInfoQueryResponse.Unmarshal(m, b)
+}
+func (m *BenchmarkInfoQueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_BenchmarkInfoQueryResponse.Marshal(b, m, deterministic)
+}
+func (m *BenchmarkInfoQueryResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_BenchmarkInfoQueryResponse.Merge(m, src)
+}
+func (m *BenchmarkInfoQueryResponse) XXX_Size() int {
+ return xxx_messageInfo_BenchmarkInfoQueryResponse.Size(m)
+}
+func (m *BenchmarkInfoQueryResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_BenchmarkInfoQueryResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BenchmarkInfoQueryResponse proto.InternalMessageInfo
+
+func (m *BenchmarkInfoQueryResponse) GetStatus() *Status {
+ if m != nil {
+ return m.Status
+ }
+ return nil
+}
+
+func (m *BenchmarkInfoQueryResponse) GetCursor() string {
+ if m != nil && m.Cursor != nil {
+ return *m.Cursor
+ }
+ return ""
+}
+
+func (m *BenchmarkInfoQueryResponse) GetBenchmarkInfoList() []*BenchmarkInfo {
+ if m != nil {
+ return m.BenchmarkInfoList
+ }
+ return nil
+}
+
+type RunInfoQuery struct {
+ Cursor *string `protobuf:"bytes,1,opt,name=cursor" json:"cursor,omitempty"`
+ Limit *int32 `protobuf:"varint,2,opt,name=limit" json:"limit,omitempty"`
+ BenchmarkKey *string `protobuf:"bytes,3,opt,name=benchmark_key,json=benchmarkKey" json:"benchmark_key,omitempty"`
+ RunKey *string `protobuf:"bytes,4,opt,name=run_key,json=runKey" json:"run_key,omitempty"`
+ TestPassId *string `protobuf:"bytes,11,opt,name=test_pass_id,json=testPassId" json:"test_pass_id,omitempty"`
+ RunOrder *RunOrder `protobuf:"varint,8,opt,name=run_order,json=runOrder,enum=mako.RunOrder,def=1" json:"run_order,omitempty"`
+ MinTimestampMs *float64 `protobuf:"fixed64,5,opt,name=min_timestamp_ms,json=minTimestampMs" json:"min_timestamp_ms,omitempty"`
+ MaxTimestampMs *float64 `protobuf:"fixed64,6,opt,name=max_timestamp_ms,json=maxTimestampMs" json:"max_timestamp_ms,omitempty"`
+ MinBuildId *int64 `protobuf:"varint,9,opt,name=min_build_id,json=minBuildId" json:"min_build_id,omitempty"`
+ MaxBuildId *int64 `protobuf:"varint,10,opt,name=max_build_id,json=maxBuildId" json:"max_build_id,omitempty"`
+ Tags []string `protobuf:"bytes,7,rep,name=tags" json:"tags,omitempty"`
+ Fields []string `protobuf:"bytes,12,rep,name=fields" json:"fields,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *RunInfoQuery) Reset() { *m = RunInfoQuery{} }
+func (m *RunInfoQuery) String() string { return proto.CompactTextString(m) }
+func (*RunInfoQuery) ProtoMessage() {}
+func (*RunInfoQuery) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{20}
+}
+
+func (m *RunInfoQuery) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_RunInfoQuery.Unmarshal(m, b)
+}
+func (m *RunInfoQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_RunInfoQuery.Marshal(b, m, deterministic)
+}
+func (m *RunInfoQuery) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RunInfoQuery.Merge(m, src)
+}
+func (m *RunInfoQuery) XXX_Size() int {
+ return xxx_messageInfo_RunInfoQuery.Size(m)
+}
+func (m *RunInfoQuery) XXX_DiscardUnknown() {
+ xxx_messageInfo_RunInfoQuery.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RunInfoQuery proto.InternalMessageInfo
+
+const Default_RunInfoQuery_RunOrder RunOrder = RunOrder_TIMESTAMP
+
+func (m *RunInfoQuery) GetCursor() string {
+ if m != nil && m.Cursor != nil {
+ return *m.Cursor
+ }
+ return ""
+}
+
+func (m *RunInfoQuery) GetLimit() int32 {
+ if m != nil && m.Limit != nil {
+ return *m.Limit
+ }
+ return 0
+}
+
+func (m *RunInfoQuery) GetBenchmarkKey() string {
+ if m != nil && m.BenchmarkKey != nil {
+ return *m.BenchmarkKey
+ }
+ return ""
+}
+
+func (m *RunInfoQuery) GetRunKey() string {
+ if m != nil && m.RunKey != nil {
+ return *m.RunKey
+ }
+ return ""
+}
+
+func (m *RunInfoQuery) GetTestPassId() string {
+ if m != nil && m.TestPassId != nil {
+ return *m.TestPassId
+ }
+ return ""
+}
+
+func (m *RunInfoQuery) GetRunOrder() RunOrder {
+ if m != nil && m.RunOrder != nil {
+ return *m.RunOrder
+ }
+ return Default_RunInfoQuery_RunOrder
+}
+
+func (m *RunInfoQuery) GetMinTimestampMs() float64 {
+ if m != nil && m.MinTimestampMs != nil {
+ return *m.MinTimestampMs
+ }
+ return 0
+}
+
+func (m *RunInfoQuery) GetMaxTimestampMs() float64 {
+ if m != nil && m.MaxTimestampMs != nil {
+ return *m.MaxTimestampMs
+ }
+ return 0
+}
+
+func (m *RunInfoQuery) GetMinBuildId() int64 {
+ if m != nil && m.MinBuildId != nil {
+ return *m.MinBuildId
+ }
+ return 0
+}
+
+func (m *RunInfoQuery) GetMaxBuildId() int64 {
+ if m != nil && m.MaxBuildId != nil {
+ return *m.MaxBuildId
+ }
+ return 0
+}
+
+func (m *RunInfoQuery) GetTags() []string {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+func (m *RunInfoQuery) GetFields() []string {
+ if m != nil {
+ return m.Fields
+ }
+ return nil
+}
+
+type RunInfoQueryResponse struct {
+ Status *Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
+ Cursor *string `protobuf:"bytes,2,opt,name=cursor" json:"cursor,omitempty"`
+ RunInfoList []*RunInfo `protobuf:"bytes,4,rep,name=run_info_list,json=runInfoList" json:"run_info_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *RunInfoQueryResponse) Reset() { *m = RunInfoQueryResponse{} }
+func (m *RunInfoQueryResponse) String() string { return proto.CompactTextString(m) }
+func (*RunInfoQueryResponse) ProtoMessage() {}
+func (*RunInfoQueryResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{21}
+}
+
+func (m *RunInfoQueryResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_RunInfoQueryResponse.Unmarshal(m, b)
+}
+func (m *RunInfoQueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_RunInfoQueryResponse.Marshal(b, m, deterministic)
+}
+func (m *RunInfoQueryResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RunInfoQueryResponse.Merge(m, src)
+}
+func (m *RunInfoQueryResponse) XXX_Size() int {
+ return xxx_messageInfo_RunInfoQueryResponse.Size(m)
+}
+func (m *RunInfoQueryResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_RunInfoQueryResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RunInfoQueryResponse proto.InternalMessageInfo
+
+func (m *RunInfoQueryResponse) GetStatus() *Status {
+ if m != nil {
+ return m.Status
+ }
+ return nil
+}
+
+func (m *RunInfoQueryResponse) GetCursor() string {
+ if m != nil && m.Cursor != nil {
+ return *m.Cursor
+ }
+ return ""
+}
+
+func (m *RunInfoQueryResponse) GetRunInfoList() []*RunInfo {
+ if m != nil {
+ return m.RunInfoList
+ }
+ return nil
+}
+
+type SampleBatchQuery struct {
+ Cursor *string `protobuf:"bytes,1,opt,name=cursor" json:"cursor,omitempty"`
+ Limit *int32 `protobuf:"varint,2,opt,name=limit" json:"limit,omitempty"`
+ BenchmarkKey *string `protobuf:"bytes,3,opt,name=benchmark_key,json=benchmarkKey" json:"benchmark_key,omitempty"`
+ RunKey *string `protobuf:"bytes,4,opt,name=run_key,json=runKey" json:"run_key,omitempty"`
+ BatchKey *string `protobuf:"bytes,5,opt,name=batch_key,json=batchKey" json:"batch_key,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SampleBatchQuery) Reset() { *m = SampleBatchQuery{} }
+func (m *SampleBatchQuery) String() string { return proto.CompactTextString(m) }
+func (*SampleBatchQuery) ProtoMessage() {}
+func (*SampleBatchQuery) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{22}
+}
+
+func (m *SampleBatchQuery) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SampleBatchQuery.Unmarshal(m, b)
+}
+func (m *SampleBatchQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SampleBatchQuery.Marshal(b, m, deterministic)
+}
+func (m *SampleBatchQuery) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SampleBatchQuery.Merge(m, src)
+}
+func (m *SampleBatchQuery) XXX_Size() int {
+ return xxx_messageInfo_SampleBatchQuery.Size(m)
+}
+func (m *SampleBatchQuery) XXX_DiscardUnknown() {
+ xxx_messageInfo_SampleBatchQuery.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SampleBatchQuery proto.InternalMessageInfo
+
+func (m *SampleBatchQuery) GetCursor() string {
+ if m != nil && m.Cursor != nil {
+ return *m.Cursor
+ }
+ return ""
+}
+
+func (m *SampleBatchQuery) GetLimit() int32 {
+ if m != nil && m.Limit != nil {
+ return *m.Limit
+ }
+ return 0
+}
+
+func (m *SampleBatchQuery) GetBenchmarkKey() string {
+ if m != nil && m.BenchmarkKey != nil {
+ return *m.BenchmarkKey
+ }
+ return ""
+}
+
+func (m *SampleBatchQuery) GetRunKey() string {
+ if m != nil && m.RunKey != nil {
+ return *m.RunKey
+ }
+ return ""
+}
+
+func (m *SampleBatchQuery) GetBatchKey() string {
+ if m != nil && m.BatchKey != nil {
+ return *m.BatchKey
+ }
+ return ""
+}
+
+type SampleBatchQueryResponse struct {
+ Status *Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
+ Cursor *string `protobuf:"bytes,2,opt,name=cursor" json:"cursor,omitempty"`
+ SampleBatchList []*SampleBatch `protobuf:"bytes,4,rep,name=sample_batch_list,json=sampleBatchList" json:"sample_batch_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SampleBatchQueryResponse) Reset() { *m = SampleBatchQueryResponse{} }
+func (m *SampleBatchQueryResponse) String() string { return proto.CompactTextString(m) }
+func (*SampleBatchQueryResponse) ProtoMessage() {}
+func (*SampleBatchQueryResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{23}
+}
+
+func (m *SampleBatchQueryResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SampleBatchQueryResponse.Unmarshal(m, b)
+}
+func (m *SampleBatchQueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SampleBatchQueryResponse.Marshal(b, m, deterministic)
+}
+func (m *SampleBatchQueryResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SampleBatchQueryResponse.Merge(m, src)
+}
+func (m *SampleBatchQueryResponse) XXX_Size() int {
+ return xxx_messageInfo_SampleBatchQueryResponse.Size(m)
+}
+func (m *SampleBatchQueryResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_SampleBatchQueryResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SampleBatchQueryResponse proto.InternalMessageInfo
+
+func (m *SampleBatchQueryResponse) GetStatus() *Status {
+ if m != nil {
+ return m.Status
+ }
+ return nil
+}
+
+func (m *SampleBatchQueryResponse) GetCursor() string {
+ if m != nil && m.Cursor != nil {
+ return *m.Cursor
+ }
+ return ""
+}
+
+func (m *SampleBatchQueryResponse) GetSampleBatchList() []*SampleBatch {
+ if m != nil {
+ return m.SampleBatchList
+ }
+ return nil
+}
+
+type CreationResponse struct {
+ Status *Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
+ Key *string `protobuf:"bytes,2,opt,name=key" json:"key,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CreationResponse) Reset() { *m = CreationResponse{} }
+func (m *CreationResponse) String() string { return proto.CompactTextString(m) }
+func (*CreationResponse) ProtoMessage() {}
+func (*CreationResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{24}
+}
+
+func (m *CreationResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CreationResponse.Unmarshal(m, b)
+}
+func (m *CreationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CreationResponse.Marshal(b, m, deterministic)
+}
+func (m *CreationResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CreationResponse.Merge(m, src)
+}
+func (m *CreationResponse) XXX_Size() int {
+ return xxx_messageInfo_CreationResponse.Size(m)
+}
+func (m *CreationResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_CreationResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreationResponse proto.InternalMessageInfo
+
+func (m *CreationResponse) GetStatus() *Status {
+ if m != nil {
+ return m.Status
+ }
+ return nil
+}
+
+func (m *CreationResponse) GetKey() string {
+ if m != nil && m.Key != nil {
+ return *m.Key
+ }
+ return ""
+}
+
+type ModificationResponse struct {
+ Status *Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
+ Count *int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ModificationResponse) Reset() { *m = ModificationResponse{} }
+func (m *ModificationResponse) String() string { return proto.CompactTextString(m) }
+func (*ModificationResponse) ProtoMessage() {}
+func (*ModificationResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{25}
+}
+
+func (m *ModificationResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ModificationResponse.Unmarshal(m, b)
+}
+func (m *ModificationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ModificationResponse.Marshal(b, m, deterministic)
+}
+func (m *ModificationResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ModificationResponse.Merge(m, src)
+}
+func (m *ModificationResponse) XXX_Size() int {
+ return xxx_messageInfo_ModificationResponse.Size(m)
+}
+func (m *ModificationResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_ModificationResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ModificationResponse proto.InternalMessageInfo
+
+func (m *ModificationResponse) GetStatus() *Status {
+ if m != nil {
+ return m.Status
+ }
+ return nil
+}
+
+func (m *ModificationResponse) GetCount() int64 {
+ if m != nil && m.Count != nil {
+ return *m.Count
+ }
+ return 0
+}
+
+type CountResponse struct {
+ Status *Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
+ Count *int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CountResponse) Reset() { *m = CountResponse{} }
+func (m *CountResponse) String() string { return proto.CompactTextString(m) }
+func (*CountResponse) ProtoMessage() {}
+func (*CountResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{26}
+}
+
+func (m *CountResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CountResponse.Unmarshal(m, b)
+}
+func (m *CountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CountResponse.Marshal(b, m, deterministic)
+}
+func (m *CountResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CountResponse.Merge(m, src)
+}
+func (m *CountResponse) XXX_Size() int {
+ return xxx_messageInfo_CountResponse.Size(m)
+}
+func (m *CountResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_CountResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CountResponse proto.InternalMessageInfo
+
+func (m *CountResponse) GetStatus() *Status {
+ if m != nil {
+ return m.Status
+ }
+ return nil
+}
+
+func (m *CountResponse) GetCount() int64 {
+ if m != nil && m.Count != nil {
+ return *m.Count
+ }
+ return 0
+}
+
+type SecondaryStorageWriteInput struct {
+ Bundle *RunBundle `protobuf:"bytes,1,opt,name=bundle" json:"bundle,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SecondaryStorageWriteInput) Reset() { *m = SecondaryStorageWriteInput{} }
+func (m *SecondaryStorageWriteInput) String() string { return proto.CompactTextString(m) }
+func (*SecondaryStorageWriteInput) ProtoMessage() {}
+func (*SecondaryStorageWriteInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{27}
+}
+
+func (m *SecondaryStorageWriteInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SecondaryStorageWriteInput.Unmarshal(m, b)
+}
+func (m *SecondaryStorageWriteInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SecondaryStorageWriteInput.Marshal(b, m, deterministic)
+}
+func (m *SecondaryStorageWriteInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SecondaryStorageWriteInput.Merge(m, src)
+}
+func (m *SecondaryStorageWriteInput) XXX_Size() int {
+ return xxx_messageInfo_SecondaryStorageWriteInput.Size(m)
+}
+func (m *SecondaryStorageWriteInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_SecondaryStorageWriteInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SecondaryStorageWriteInput proto.InternalMessageInfo
+
+func (m *SecondaryStorageWriteInput) GetBundle() *RunBundle {
+ if m != nil {
+ return m.Bundle
+ }
+ return nil
+}
+
+type SecondaryStorageWriteOutput struct {
+ Status *Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
+ Links []*NamedData `protobuf:"bytes,2,rep,name=links" json:"links,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SecondaryStorageWriteOutput) Reset() { *m = SecondaryStorageWriteOutput{} }
+func (m *SecondaryStorageWriteOutput) String() string { return proto.CompactTextString(m) }
+func (*SecondaryStorageWriteOutput) ProtoMessage() {}
+func (*SecondaryStorageWriteOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{28}
+}
+
+func (m *SecondaryStorageWriteOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SecondaryStorageWriteOutput.Unmarshal(m, b)
+}
+func (m *SecondaryStorageWriteOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SecondaryStorageWriteOutput.Marshal(b, m, deterministic)
+}
+func (m *SecondaryStorageWriteOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SecondaryStorageWriteOutput.Merge(m, src)
+}
+func (m *SecondaryStorageWriteOutput) XXX_Size() int {
+ return xxx_messageInfo_SecondaryStorageWriteOutput.Size(m)
+}
+func (m *SecondaryStorageWriteOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_SecondaryStorageWriteOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SecondaryStorageWriteOutput proto.InternalMessageInfo
+
+func (m *SecondaryStorageWriteOutput) GetStatus() *Status {
+ if m != nil {
+ return m.Status
+ }
+ return nil
+}
+
+func (m *SecondaryStorageWriteOutput) GetLinks() []*NamedData {
+ if m != nil {
+ return m.Links
+ }
+ return nil
+}
+
+type AggregatorInput struct {
+ BenchmarkInfo *BenchmarkInfo `protobuf:"bytes,1,opt,name=benchmark_info,json=benchmarkInfo" json:"benchmark_info,omitempty"`
+ RunInfo *RunInfo `protobuf:"bytes,2,opt,name=run_info,json=runInfo" json:"run_info,omitempty"`
+ SampleFileList []*SampleFile `protobuf:"bytes,3,rep,name=sample_file_list,json=sampleFileList" json:"sample_file_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AggregatorInput) Reset() { *m = AggregatorInput{} }
+func (m *AggregatorInput) String() string { return proto.CompactTextString(m) }
+func (*AggregatorInput) ProtoMessage() {}
+func (*AggregatorInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{29}
+}
+
+func (m *AggregatorInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AggregatorInput.Unmarshal(m, b)
+}
+func (m *AggregatorInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AggregatorInput.Marshal(b, m, deterministic)
+}
+func (m *AggregatorInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AggregatorInput.Merge(m, src)
+}
+func (m *AggregatorInput) XXX_Size() int {
+ return xxx_messageInfo_AggregatorInput.Size(m)
+}
+func (m *AggregatorInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_AggregatorInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AggregatorInput proto.InternalMessageInfo
+
+func (m *AggregatorInput) GetBenchmarkInfo() *BenchmarkInfo {
+ if m != nil {
+ return m.BenchmarkInfo
+ }
+ return nil
+}
+
+func (m *AggregatorInput) GetRunInfo() *RunInfo {
+ if m != nil {
+ return m.RunInfo
+ }
+ return nil
+}
+
+func (m *AggregatorInput) GetSampleFileList() []*SampleFile {
+ if m != nil {
+ return m.SampleFileList
+ }
+ return nil
+}
+
+type AggregatorOutput struct {
+ Aggregate *Aggregate `protobuf:"bytes,1,opt,name=aggregate" json:"aggregate,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AggregatorOutput) Reset() { *m = AggregatorOutput{} }
+func (m *AggregatorOutput) String() string { return proto.CompactTextString(m) }
+func (*AggregatorOutput) ProtoMessage() {}
+func (*AggregatorOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{30}
+}
+
+func (m *AggregatorOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AggregatorOutput.Unmarshal(m, b)
+}
+func (m *AggregatorOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AggregatorOutput.Marshal(b, m, deterministic)
+}
+func (m *AggregatorOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AggregatorOutput.Merge(m, src)
+}
+func (m *AggregatorOutput) XXX_Size() int {
+ return xxx_messageInfo_AggregatorOutput.Size(m)
+}
+func (m *AggregatorOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_AggregatorOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AggregatorOutput proto.InternalMessageInfo
+
+func (m *AggregatorOutput) GetAggregate() *Aggregate {
+ if m != nil {
+ return m.Aggregate
+ }
+ return nil
+}
+
+type DownsamplerInput struct {
+ RunInfo *RunInfo `protobuf:"bytes,1,opt,name=run_info,json=runInfo" json:"run_info,omitempty"`
+ SampleFileList []*SampleFile `protobuf:"bytes,2,rep,name=sample_file_list,json=sampleFileList" json:"sample_file_list,omitempty"`
+ MetricValueCountMax *int64 `protobuf:"varint,6,opt,name=metric_value_count_max,json=metricValueCountMax" json:"metric_value_count_max,omitempty"`
+ SampleErrorCountMax *int64 `protobuf:"varint,4,opt,name=sample_error_count_max,json=sampleErrorCountMax" json:"sample_error_count_max,omitempty"`
+ BatchSizeMax *int64 `protobuf:"varint,5,opt,name=batch_size_max,json=batchSizeMax" json:"batch_size_max,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DownsamplerInput) Reset() { *m = DownsamplerInput{} }
+func (m *DownsamplerInput) String() string { return proto.CompactTextString(m) }
+func (*DownsamplerInput) ProtoMessage() {}
+func (*DownsamplerInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{31}
+}
+
+func (m *DownsamplerInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DownsamplerInput.Unmarshal(m, b)
+}
+func (m *DownsamplerInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DownsamplerInput.Marshal(b, m, deterministic)
+}
+func (m *DownsamplerInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DownsamplerInput.Merge(m, src)
+}
+func (m *DownsamplerInput) XXX_Size() int {
+ return xxx_messageInfo_DownsamplerInput.Size(m)
+}
+func (m *DownsamplerInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_DownsamplerInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DownsamplerInput proto.InternalMessageInfo
+
+func (m *DownsamplerInput) GetRunInfo() *RunInfo {
+ if m != nil {
+ return m.RunInfo
+ }
+ return nil
+}
+
+func (m *DownsamplerInput) GetSampleFileList() []*SampleFile {
+ if m != nil {
+ return m.SampleFileList
+ }
+ return nil
+}
+
+func (m *DownsamplerInput) GetMetricValueCountMax() int64 {
+ if m != nil && m.MetricValueCountMax != nil {
+ return *m.MetricValueCountMax
+ }
+ return 0
+}
+
+func (m *DownsamplerInput) GetSampleErrorCountMax() int64 {
+ if m != nil && m.SampleErrorCountMax != nil {
+ return *m.SampleErrorCountMax
+ }
+ return 0
+}
+
+func (m *DownsamplerInput) GetBatchSizeMax() int64 {
+ if m != nil && m.BatchSizeMax != nil {
+ return *m.BatchSizeMax
+ }
+ return 0
+}
+
+type DownsamplerOutput struct {
+ SampleBatchList []*SampleBatch `protobuf:"bytes,1,rep,name=sample_batch_list,json=sampleBatchList" json:"sample_batch_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DownsamplerOutput) Reset() { *m = DownsamplerOutput{} }
+func (m *DownsamplerOutput) String() string { return proto.CompactTextString(m) }
+func (*DownsamplerOutput) ProtoMessage() {}
+func (*DownsamplerOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{32}
+}
+
+func (m *DownsamplerOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DownsamplerOutput.Unmarshal(m, b)
+}
+func (m *DownsamplerOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DownsamplerOutput.Marshal(b, m, deterministic)
+}
+func (m *DownsamplerOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DownsamplerOutput.Merge(m, src)
+}
+func (m *DownsamplerOutput) XXX_Size() int {
+ return xxx_messageInfo_DownsamplerOutput.Size(m)
+}
+func (m *DownsamplerOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_DownsamplerOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DownsamplerOutput proto.InternalMessageInfo
+
+func (m *DownsamplerOutput) GetSampleBatchList() []*SampleBatch {
+ if m != nil {
+ return m.SampleBatchList
+ }
+ return nil
+}
+
+type AnalyzerHistoricQueryInput struct {
+ BenchmarkInfo *BenchmarkInfo `protobuf:"bytes,1,opt,name=benchmark_info,json=benchmarkInfo" json:"benchmark_info,omitempty"`
+ RunInfo *RunInfo `protobuf:"bytes,2,opt,name=run_info,json=runInfo" json:"run_info,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AnalyzerHistoricQueryInput) Reset() { *m = AnalyzerHistoricQueryInput{} }
+func (m *AnalyzerHistoricQueryInput) String() string { return proto.CompactTextString(m) }
+func (*AnalyzerHistoricQueryInput) ProtoMessage() {}
+func (*AnalyzerHistoricQueryInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{33}
+}
+
+func (m *AnalyzerHistoricQueryInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AnalyzerHistoricQueryInput.Unmarshal(m, b)
+}
+func (m *AnalyzerHistoricQueryInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AnalyzerHistoricQueryInput.Marshal(b, m, deterministic)
+}
+func (m *AnalyzerHistoricQueryInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AnalyzerHistoricQueryInput.Merge(m, src)
+}
+func (m *AnalyzerHistoricQueryInput) XXX_Size() int {
+ return xxx_messageInfo_AnalyzerHistoricQueryInput.Size(m)
+}
+func (m *AnalyzerHistoricQueryInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_AnalyzerHistoricQueryInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AnalyzerHistoricQueryInput proto.InternalMessageInfo
+
+func (m *AnalyzerHistoricQueryInput) GetBenchmarkInfo() *BenchmarkInfo {
+ if m != nil {
+ return m.BenchmarkInfo
+ }
+ return nil
+}
+
+func (m *AnalyzerHistoricQueryInput) GetRunInfo() *RunInfo {
+ if m != nil {
+ return m.RunInfo
+ }
+ return nil
+}
+
+type AnalyzerHistoricQueryOutput struct {
+ Status *Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
+ RunInfoQueryList []*RunInfoQuery `protobuf:"bytes,2,rep,name=run_info_query_list,json=runInfoQueryList" json:"run_info_query_list,omitempty"`
+ GetBatches *bool `protobuf:"varint,3,opt,name=get_batches,json=getBatches,def=1" json:"get_batches,omitempty"`
+ RunInfoQueryMap map[string]*AnalyzerHistoricQueryOutput_RunInfoQueries `protobuf:"bytes,4,rep,name=run_info_query_map,json=runInfoQueryMap" json:"run_info_query_map,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AnalyzerHistoricQueryOutput) Reset() { *m = AnalyzerHistoricQueryOutput{} }
+func (m *AnalyzerHistoricQueryOutput) String() string { return proto.CompactTextString(m) }
+func (*AnalyzerHistoricQueryOutput) ProtoMessage() {}
+func (*AnalyzerHistoricQueryOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{34}
+}
+
+func (m *AnalyzerHistoricQueryOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AnalyzerHistoricQueryOutput.Unmarshal(m, b)
+}
+func (m *AnalyzerHistoricQueryOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AnalyzerHistoricQueryOutput.Marshal(b, m, deterministic)
+}
+func (m *AnalyzerHistoricQueryOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AnalyzerHistoricQueryOutput.Merge(m, src)
+}
+func (m *AnalyzerHistoricQueryOutput) XXX_Size() int {
+ return xxx_messageInfo_AnalyzerHistoricQueryOutput.Size(m)
+}
+func (m *AnalyzerHistoricQueryOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_AnalyzerHistoricQueryOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AnalyzerHistoricQueryOutput proto.InternalMessageInfo
+
+const Default_AnalyzerHistoricQueryOutput_GetBatches bool = true
+
+func (m *AnalyzerHistoricQueryOutput) GetStatus() *Status {
+ if m != nil {
+ return m.Status
+ }
+ return nil
+}
+
+func (m *AnalyzerHistoricQueryOutput) GetRunInfoQueryList() []*RunInfoQuery {
+ if m != nil {
+ return m.RunInfoQueryList
+ }
+ return nil
+}
+
+func (m *AnalyzerHistoricQueryOutput) GetGetBatches() bool {
+ if m != nil && m.GetBatches != nil {
+ return *m.GetBatches
+ }
+ return Default_AnalyzerHistoricQueryOutput_GetBatches
+}
+
+func (m *AnalyzerHistoricQueryOutput) GetRunInfoQueryMap() map[string]*AnalyzerHistoricQueryOutput_RunInfoQueries {
+ if m != nil {
+ return m.RunInfoQueryMap
+ }
+ return nil
+}
+
+type AnalyzerHistoricQueryOutput_RunInfoQueries struct {
+ RunInfoQueryList []*RunInfoQuery `protobuf:"bytes,1,rep,name=run_info_query_list,json=runInfoQueryList" json:"run_info_query_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AnalyzerHistoricQueryOutput_RunInfoQueries) Reset() {
+ *m = AnalyzerHistoricQueryOutput_RunInfoQueries{}
+}
+func (m *AnalyzerHistoricQueryOutput_RunInfoQueries) String() string {
+ return proto.CompactTextString(m)
+}
+func (*AnalyzerHistoricQueryOutput_RunInfoQueries) ProtoMessage() {}
+func (*AnalyzerHistoricQueryOutput_RunInfoQueries) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{34, 0}
+}
+
+func (m *AnalyzerHistoricQueryOutput_RunInfoQueries) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AnalyzerHistoricQueryOutput_RunInfoQueries.Unmarshal(m, b)
+}
+func (m *AnalyzerHistoricQueryOutput_RunInfoQueries) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AnalyzerHistoricQueryOutput_RunInfoQueries.Marshal(b, m, deterministic)
+}
+func (m *AnalyzerHistoricQueryOutput_RunInfoQueries) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AnalyzerHistoricQueryOutput_RunInfoQueries.Merge(m, src)
+}
+func (m *AnalyzerHistoricQueryOutput_RunInfoQueries) XXX_Size() int {
+ return xxx_messageInfo_AnalyzerHistoricQueryOutput_RunInfoQueries.Size(m)
+}
+func (m *AnalyzerHistoricQueryOutput_RunInfoQueries) XXX_DiscardUnknown() {
+ xxx_messageInfo_AnalyzerHistoricQueryOutput_RunInfoQueries.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AnalyzerHistoricQueryOutput_RunInfoQueries proto.InternalMessageInfo
+
+func (m *AnalyzerHistoricQueryOutput_RunInfoQueries) GetRunInfoQueryList() []*RunInfoQuery {
+ if m != nil {
+ return m.RunInfoQueryList
+ }
+ return nil
+}
+
+type AnalyzerInput struct {
+ RunToBeAnalyzed *RunBundle `protobuf:"bytes,1,opt,name=run_to_be_analyzed,json=runToBeAnalyzed" json:"run_to_be_analyzed,omitempty"`
+ HistoricalRunList []*RunBundle `protobuf:"bytes,2,rep,name=historical_run_list,json=historicalRunList" json:"historical_run_list,omitempty"`
+ HistoricalRunMap map[string]*AnalyzerInput_RunBundles `protobuf:"bytes,3,rep,name=historical_run_map,json=historicalRunMap" json:"historical_run_map,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AnalyzerInput) Reset() { *m = AnalyzerInput{} }
+func (m *AnalyzerInput) String() string { return proto.CompactTextString(m) }
+func (*AnalyzerInput) ProtoMessage() {}
+func (*AnalyzerInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{35}
+}
+
+func (m *AnalyzerInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AnalyzerInput.Unmarshal(m, b)
+}
+func (m *AnalyzerInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AnalyzerInput.Marshal(b, m, deterministic)
+}
+func (m *AnalyzerInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AnalyzerInput.Merge(m, src)
+}
+func (m *AnalyzerInput) XXX_Size() int {
+ return xxx_messageInfo_AnalyzerInput.Size(m)
+}
+func (m *AnalyzerInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_AnalyzerInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AnalyzerInput proto.InternalMessageInfo
+
+func (m *AnalyzerInput) GetRunToBeAnalyzed() *RunBundle {
+ if m != nil {
+ return m.RunToBeAnalyzed
+ }
+ return nil
+}
+
+func (m *AnalyzerInput) GetHistoricalRunList() []*RunBundle {
+ if m != nil {
+ return m.HistoricalRunList
+ }
+ return nil
+}
+
+func (m *AnalyzerInput) GetHistoricalRunMap() map[string]*AnalyzerInput_RunBundles {
+ if m != nil {
+ return m.HistoricalRunMap
+ }
+ return nil
+}
+
+type AnalyzerInput_RunBundles struct {
+ HistoricalRunList []*RunBundle `protobuf:"bytes,1,rep,name=historical_run_list,json=historicalRunList" json:"historical_run_list,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AnalyzerInput_RunBundles) Reset() { *m = AnalyzerInput_RunBundles{} }
+func (m *AnalyzerInput_RunBundles) String() string { return proto.CompactTextString(m) }
+func (*AnalyzerInput_RunBundles) ProtoMessage() {}
+func (*AnalyzerInput_RunBundles) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{35, 0}
+}
+
+func (m *AnalyzerInput_RunBundles) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AnalyzerInput_RunBundles.Unmarshal(m, b)
+}
+func (m *AnalyzerInput_RunBundles) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AnalyzerInput_RunBundles.Marshal(b, m, deterministic)
+}
+func (m *AnalyzerInput_RunBundles) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AnalyzerInput_RunBundles.Merge(m, src)
+}
+func (m *AnalyzerInput_RunBundles) XXX_Size() int {
+ return xxx_messageInfo_AnalyzerInput_RunBundles.Size(m)
+}
+func (m *AnalyzerInput_RunBundles) XXX_DiscardUnknown() {
+ xxx_messageInfo_AnalyzerInput_RunBundles.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AnalyzerInput_RunBundles proto.InternalMessageInfo
+
+func (m *AnalyzerInput_RunBundles) GetHistoricalRunList() []*RunBundle {
+ if m != nil {
+ return m.HistoricalRunList
+ }
+ return nil
+}
+
+type AnalyzerOutput struct {
+ Status *Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
+ Regression *bool `protobuf:"varint,2,opt,name=regression" json:"regression,omitempty"`
+ RunKey *string `protobuf:"bytes,7,opt,name=run_key,json=runKey" json:"run_key,omitempty"`
+ AnalysisKey *string `protobuf:"bytes,8,opt,name=analysis_key,json=analysisKey" json:"analysis_key,omitempty"`
+ AnalysisTriageInfo *AnalysisTriageInfo `protobuf:"bytes,10,opt,name=analysis_triage_info,json=analysisTriageInfo" json:"analysis_triage_info,omitempty"`
+ InputConfig *string `protobuf:"bytes,6,opt,name=input_config,json=inputConfig" json:"input_config,omitempty"`
+ SerializedInputConfig []byte `protobuf:"bytes,11,opt,name=serialized_input_config,json=serializedInputConfig" json:"serialized_input_config,omitempty"`
+ Output *string `protobuf:"bytes,3,opt,name=output" json:"output,omitempty"`
+ SerializedOutput []byte `protobuf:"bytes,12,opt,name=serialized_output,json=serializedOutput" json:"serialized_output,omitempty"`
+ AnalyzerType *string `protobuf:"bytes,4,opt,name=analyzer_type,json=analyzerType" json:"analyzer_type,omitempty"`
+ AnalyzerName *string `protobuf:"bytes,5,opt,name=analyzer_name,json=analyzerName" json:"analyzer_name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AnalyzerOutput) Reset() { *m = AnalyzerOutput{} }
+func (m *AnalyzerOutput) String() string { return proto.CompactTextString(m) }
+func (*AnalyzerOutput) ProtoMessage() {}
+func (*AnalyzerOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{36}
+}
+
+func (m *AnalyzerOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AnalyzerOutput.Unmarshal(m, b)
+}
+func (m *AnalyzerOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AnalyzerOutput.Marshal(b, m, deterministic)
+}
+func (m *AnalyzerOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AnalyzerOutput.Merge(m, src)
+}
+func (m *AnalyzerOutput) XXX_Size() int {
+ return xxx_messageInfo_AnalyzerOutput.Size(m)
+}
+func (m *AnalyzerOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_AnalyzerOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AnalyzerOutput proto.InternalMessageInfo
+
+func (m *AnalyzerOutput) GetStatus() *Status {
+ if m != nil {
+ return m.Status
+ }
+ return nil
+}
+
+func (m *AnalyzerOutput) GetRegression() bool {
+ if m != nil && m.Regression != nil {
+ return *m.Regression
+ }
+ return false
+}
+
+func (m *AnalyzerOutput) GetRunKey() string {
+ if m != nil && m.RunKey != nil {
+ return *m.RunKey
+ }
+ return ""
+}
+
+func (m *AnalyzerOutput) GetAnalysisKey() string {
+ if m != nil && m.AnalysisKey != nil {
+ return *m.AnalysisKey
+ }
+ return ""
+}
+
+func (m *AnalyzerOutput) GetAnalysisTriageInfo() *AnalysisTriageInfo {
+ if m != nil {
+ return m.AnalysisTriageInfo
+ }
+ return nil
+}
+
+func (m *AnalyzerOutput) GetInputConfig() string {
+ if m != nil && m.InputConfig != nil {
+ return *m.InputConfig
+ }
+ return ""
+}
+
+func (m *AnalyzerOutput) GetSerializedInputConfig() []byte {
+ if m != nil {
+ return m.SerializedInputConfig
+ }
+ return nil
+}
+
+func (m *AnalyzerOutput) GetOutput() string {
+ if m != nil && m.Output != nil {
+ return *m.Output
+ }
+ return ""
+}
+
+func (m *AnalyzerOutput) GetSerializedOutput() []byte {
+ if m != nil {
+ return m.SerializedOutput
+ }
+ return nil
+}
+
+func (m *AnalyzerOutput) GetAnalyzerType() string {
+ if m != nil && m.AnalyzerType != nil {
+ return *m.AnalyzerType
+ }
+ return ""
+}
+
+func (m *AnalyzerOutput) GetAnalyzerName() string {
+ if m != nil && m.AnalyzerName != nil {
+ return *m.AnalyzerName
+ }
+ return ""
+}
+
+type AnalysisTriageInfo struct {
+ AnalysisState *AnalysisTriageInfo_AnalysisTriageType `protobuf:"varint,1,opt,name=analysis_state,json=analysisState,enum=mako.AnalysisTriageInfo_AnalysisTriageType" json:"analysis_state,omitempty"`
+ Environment *AnalysisTriageInfo_EnvironmentType `protobuf:"varint,2,opt,name=environment,enum=mako.AnalysisTriageInfo_EnvironmentType" json:"environment,omitempty"`
+ Comment *string `protobuf:"bytes,3,opt,name=comment" json:"comment,omitempty"`
+ BuganizerId *string `protobuf:"bytes,4,opt,name=buganizer_id,json=buganizerId" json:"buganizer_id,omitempty"`
+ RunKey *string `protobuf:"bytes,5,opt,name=run_key,json=runKey" json:"run_key,omitempty"`
+ AnalysisKey *string `protobuf:"bytes,6,opt,name=analysis_key,json=analysisKey" json:"analysis_key,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AnalysisTriageInfo) Reset() { *m = AnalysisTriageInfo{} }
+func (m *AnalysisTriageInfo) String() string { return proto.CompactTextString(m) }
+func (*AnalysisTriageInfo) ProtoMessage() {}
+func (*AnalysisTriageInfo) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{37}
+}
+
+func (m *AnalysisTriageInfo) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AnalysisTriageInfo.Unmarshal(m, b)
+}
+func (m *AnalysisTriageInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AnalysisTriageInfo.Marshal(b, m, deterministic)
+}
+func (m *AnalysisTriageInfo) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AnalysisTriageInfo.Merge(m, src)
+}
+func (m *AnalysisTriageInfo) XXX_Size() int {
+ return xxx_messageInfo_AnalysisTriageInfo.Size(m)
+}
+func (m *AnalysisTriageInfo) XXX_DiscardUnknown() {
+ xxx_messageInfo_AnalysisTriageInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AnalysisTriageInfo proto.InternalMessageInfo
+
+func (m *AnalysisTriageInfo) GetAnalysisState() AnalysisTriageInfo_AnalysisTriageType {
+ if m != nil && m.AnalysisState != nil {
+ return *m.AnalysisState
+ }
+ return AnalysisTriageInfo_NONE
+}
+
+func (m *AnalysisTriageInfo) GetEnvironment() AnalysisTriageInfo_EnvironmentType {
+ if m != nil && m.Environment != nil {
+ return *m.Environment
+ }
+ return AnalysisTriageInfo_UNSPECIFIED
+}
+
+func (m *AnalysisTriageInfo) GetComment() string {
+ if m != nil && m.Comment != nil {
+ return *m.Comment
+ }
+ return ""
+}
+
+func (m *AnalysisTriageInfo) GetBuganizerId() string {
+ if m != nil && m.BuganizerId != nil {
+ return *m.BuganizerId
+ }
+ return ""
+}
+
+func (m *AnalysisTriageInfo) GetRunKey() string {
+ if m != nil && m.RunKey != nil {
+ return *m.RunKey
+ }
+ return ""
+}
+
+func (m *AnalysisTriageInfo) GetAnalysisKey() string {
+ if m != nil && m.AnalysisKey != nil {
+ return *m.AnalysisKey
+ }
+ return ""
+}
+
+type DashboardAggregateChartInput struct {
+ BenchmarkKey *string `protobuf:"bytes,1,opt,name=benchmark_key,json=benchmarkKey" json:"benchmark_key,omitempty"`
+ ValueSelections []*DataFilter `protobuf:"bytes,2,rep,name=value_selections,json=valueSelections" json:"value_selections,omitempty"`
+ Tags []string `protobuf:"bytes,3,rep,name=tags" json:"tags,omitempty"`
+ RunOrder *RunOrder `protobuf:"varint,8,opt,name=run_order,json=runOrder,enum=mako.RunOrder,def=1" json:"run_order,omitempty"`
+ MinTimestampMs *float64 `protobuf:"fixed64,4,opt,name=min_timestamp_ms,json=minTimestampMs" json:"min_timestamp_ms,omitempty"`
+ MaxTimestampMs *float64 `protobuf:"fixed64,5,opt,name=max_timestamp_ms,json=maxTimestampMs" json:"max_timestamp_ms,omitempty"`
+ MinBuildId *int64 `protobuf:"varint,9,opt,name=min_build_id,json=minBuildId" json:"min_build_id,omitempty"`
+ MaxBuildId *int64 `protobuf:"varint,10,opt,name=max_build_id,json=maxBuildId" json:"max_build_id,omitempty"`
+ MaxRuns *int32 `protobuf:"varint,6,opt,name=max_runs,json=maxRuns" json:"max_runs,omitempty"`
+ HighlightSeriesOnHover *bool `protobuf:"varint,7,opt,name=highlight_series_on_hover,json=highlightSeriesOnHover" json:"highlight_series_on_hover,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DashboardAggregateChartInput) Reset() { *m = DashboardAggregateChartInput{} }
+func (m *DashboardAggregateChartInput) String() string { return proto.CompactTextString(m) }
+func (*DashboardAggregateChartInput) ProtoMessage() {}
+func (*DashboardAggregateChartInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{38}
+}
+
+func (m *DashboardAggregateChartInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DashboardAggregateChartInput.Unmarshal(m, b)
+}
+func (m *DashboardAggregateChartInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DashboardAggregateChartInput.Marshal(b, m, deterministic)
+}
+func (m *DashboardAggregateChartInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DashboardAggregateChartInput.Merge(m, src)
+}
+func (m *DashboardAggregateChartInput) XXX_Size() int {
+ return xxx_messageInfo_DashboardAggregateChartInput.Size(m)
+}
+func (m *DashboardAggregateChartInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_DashboardAggregateChartInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DashboardAggregateChartInput proto.InternalMessageInfo
+
+const Default_DashboardAggregateChartInput_RunOrder RunOrder = RunOrder_TIMESTAMP
+
+func (m *DashboardAggregateChartInput) GetBenchmarkKey() string {
+ if m != nil && m.BenchmarkKey != nil {
+ return *m.BenchmarkKey
+ }
+ return ""
+}
+
+func (m *DashboardAggregateChartInput) GetValueSelections() []*DataFilter {
+ if m != nil {
+ return m.ValueSelections
+ }
+ return nil
+}
+
+func (m *DashboardAggregateChartInput) GetTags() []string {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+func (m *DashboardAggregateChartInput) GetRunOrder() RunOrder {
+ if m != nil && m.RunOrder != nil {
+ return *m.RunOrder
+ }
+ return Default_DashboardAggregateChartInput_RunOrder
+}
+
+func (m *DashboardAggregateChartInput) GetMinTimestampMs() float64 {
+ if m != nil && m.MinTimestampMs != nil {
+ return *m.MinTimestampMs
+ }
+ return 0
+}
+
+func (m *DashboardAggregateChartInput) GetMaxTimestampMs() float64 {
+ if m != nil && m.MaxTimestampMs != nil {
+ return *m.MaxTimestampMs
+ }
+ return 0
+}
+
+func (m *DashboardAggregateChartInput) GetMinBuildId() int64 {
+ if m != nil && m.MinBuildId != nil {
+ return *m.MinBuildId
+ }
+ return 0
+}
+
+func (m *DashboardAggregateChartInput) GetMaxBuildId() int64 {
+ if m != nil && m.MaxBuildId != nil {
+ return *m.MaxBuildId
+ }
+ return 0
+}
+
+func (m *DashboardAggregateChartInput) GetMaxRuns() int32 {
+ if m != nil && m.MaxRuns != nil {
+ return *m.MaxRuns
+ }
+ return 0
+}
+
+func (m *DashboardAggregateChartInput) GetHighlightSeriesOnHover() bool {
+ if m != nil && m.HighlightSeriesOnHover != nil {
+ return *m.HighlightSeriesOnHover
+ }
+ return false
+}
+
+type DashboardRunChartInput struct {
+ RunKey *string `protobuf:"bytes,1,opt,name=run_key,json=runKey" json:"run_key,omitempty"`
+ MetricKeys []string `protobuf:"bytes,2,rep,name=metric_keys,json=metricKeys" json:"metric_keys,omitempty"`
+ HighlightSeriesOnHover *bool `protobuf:"varint,3,opt,name=highlight_series_on_hover,json=highlightSeriesOnHover" json:"highlight_series_on_hover,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DashboardRunChartInput) Reset() { *m = DashboardRunChartInput{} }
+func (m *DashboardRunChartInput) String() string { return proto.CompactTextString(m) }
+func (*DashboardRunChartInput) ProtoMessage() {}
+func (*DashboardRunChartInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{39}
+}
+
+func (m *DashboardRunChartInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DashboardRunChartInput.Unmarshal(m, b)
+}
+func (m *DashboardRunChartInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DashboardRunChartInput.Marshal(b, m, deterministic)
+}
+func (m *DashboardRunChartInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DashboardRunChartInput.Merge(m, src)
+}
+func (m *DashboardRunChartInput) XXX_Size() int {
+ return xxx_messageInfo_DashboardRunChartInput.Size(m)
+}
+func (m *DashboardRunChartInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_DashboardRunChartInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DashboardRunChartInput proto.InternalMessageInfo
+
+func (m *DashboardRunChartInput) GetRunKey() string {
+ if m != nil && m.RunKey != nil {
+ return *m.RunKey
+ }
+ return ""
+}
+
+func (m *DashboardRunChartInput) GetMetricKeys() []string {
+ if m != nil {
+ return m.MetricKeys
+ }
+ return nil
+}
+
+func (m *DashboardRunChartInput) GetHighlightSeriesOnHover() bool {
+ if m != nil && m.HighlightSeriesOnHover != nil {
+ return *m.HighlightSeriesOnHover
+ }
+ return false
+}
+
+type DashboardCompareAggregateChartInput struct {
+ SeriesList []*DashboardCompareAggregateChartInput_Series `protobuf:"bytes,1,rep,name=series_list,json=seriesList" json:"series_list,omitempty"`
+ MinTimestampMs *float64 `protobuf:"fixed64,2,opt,name=min_timestamp_ms,json=minTimestampMs" json:"min_timestamp_ms,omitempty"`
+ MaxTimestampMs *float64 `protobuf:"fixed64,3,opt,name=max_timestamp_ms,json=maxTimestampMs" json:"max_timestamp_ms,omitempty"`
+ MaxRuns *int32 `protobuf:"varint,4,opt,name=max_runs,json=maxRuns" json:"max_runs,omitempty"`
+ HighlightSeriesOnHover *bool `protobuf:"varint,5,opt,name=highlight_series_on_hover,json=highlightSeriesOnHover" json:"highlight_series_on_hover,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DashboardCompareAggregateChartInput) Reset() { *m = DashboardCompareAggregateChartInput{} }
+func (m *DashboardCompareAggregateChartInput) String() string { return proto.CompactTextString(m) }
+func (*DashboardCompareAggregateChartInput) ProtoMessage() {}
+func (*DashboardCompareAggregateChartInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{40}
+}
+
+func (m *DashboardCompareAggregateChartInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DashboardCompareAggregateChartInput.Unmarshal(m, b)
+}
+func (m *DashboardCompareAggregateChartInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DashboardCompareAggregateChartInput.Marshal(b, m, deterministic)
+}
+func (m *DashboardCompareAggregateChartInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DashboardCompareAggregateChartInput.Merge(m, src)
+}
+func (m *DashboardCompareAggregateChartInput) XXX_Size() int {
+ return xxx_messageInfo_DashboardCompareAggregateChartInput.Size(m)
+}
+func (m *DashboardCompareAggregateChartInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_DashboardCompareAggregateChartInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DashboardCompareAggregateChartInput proto.InternalMessageInfo
+
+func (m *DashboardCompareAggregateChartInput) GetSeriesList() []*DashboardCompareAggregateChartInput_Series {
+ if m != nil {
+ return m.SeriesList
+ }
+ return nil
+}
+
+func (m *DashboardCompareAggregateChartInput) GetMinTimestampMs() float64 {
+ if m != nil && m.MinTimestampMs != nil {
+ return *m.MinTimestampMs
+ }
+ return 0
+}
+
+func (m *DashboardCompareAggregateChartInput) GetMaxTimestampMs() float64 {
+ if m != nil && m.MaxTimestampMs != nil {
+ return *m.MaxTimestampMs
+ }
+ return 0
+}
+
+func (m *DashboardCompareAggregateChartInput) GetMaxRuns() int32 {
+ if m != nil && m.MaxRuns != nil {
+ return *m.MaxRuns
+ }
+ return 0
+}
+
+func (m *DashboardCompareAggregateChartInput) GetHighlightSeriesOnHover() bool {
+ if m != nil && m.HighlightSeriesOnHover != nil {
+ return *m.HighlightSeriesOnHover
+ }
+ return false
+}
+
+type DashboardCompareAggregateChartInput_Series struct {
+ SeriesLabel *string `protobuf:"bytes,1,opt,name=series_label,json=seriesLabel" json:"series_label,omitempty"`
+ BenchmarkKey *string `protobuf:"bytes,2,opt,name=benchmark_key,json=benchmarkKey" json:"benchmark_key,omitempty"`
+ ValueSelection *DataFilter `protobuf:"bytes,3,opt,name=value_selection,json=valueSelection" json:"value_selection,omitempty"`
+ Tags []string `protobuf:"bytes,4,rep,name=tags" json:"tags,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DashboardCompareAggregateChartInput_Series) Reset() {
+ *m = DashboardCompareAggregateChartInput_Series{}
+}
+func (m *DashboardCompareAggregateChartInput_Series) String() string {
+ return proto.CompactTextString(m)
+}
+func (*DashboardCompareAggregateChartInput_Series) ProtoMessage() {}
+func (*DashboardCompareAggregateChartInput_Series) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{40, 0}
+}
+
+func (m *DashboardCompareAggregateChartInput_Series) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DashboardCompareAggregateChartInput_Series.Unmarshal(m, b)
+}
+func (m *DashboardCompareAggregateChartInput_Series) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DashboardCompareAggregateChartInput_Series.Marshal(b, m, deterministic)
+}
+func (m *DashboardCompareAggregateChartInput_Series) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DashboardCompareAggregateChartInput_Series.Merge(m, src)
+}
+func (m *DashboardCompareAggregateChartInput_Series) XXX_Size() int {
+ return xxx_messageInfo_DashboardCompareAggregateChartInput_Series.Size(m)
+}
+func (m *DashboardCompareAggregateChartInput_Series) XXX_DiscardUnknown() {
+ xxx_messageInfo_DashboardCompareAggregateChartInput_Series.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DashboardCompareAggregateChartInput_Series proto.InternalMessageInfo
+
+func (m *DashboardCompareAggregateChartInput_Series) GetSeriesLabel() string {
+ if m != nil && m.SeriesLabel != nil {
+ return *m.SeriesLabel
+ }
+ return ""
+}
+
+func (m *DashboardCompareAggregateChartInput_Series) GetBenchmarkKey() string {
+ if m != nil && m.BenchmarkKey != nil {
+ return *m.BenchmarkKey
+ }
+ return ""
+}
+
+func (m *DashboardCompareAggregateChartInput_Series) GetValueSelection() *DataFilter {
+ if m != nil {
+ return m.ValueSelection
+ }
+ return nil
+}
+
+func (m *DashboardCompareAggregateChartInput_Series) GetTags() []string {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+type DashboardCompareRunChartInput struct {
+ RunKeys []string `protobuf:"bytes,1,rep,name=run_keys,json=runKeys" json:"run_keys,omitempty"`
+ MetricKeys []string `protobuf:"bytes,2,rep,name=metric_keys,json=metricKeys" json:"metric_keys,omitempty"`
+ HighlightSeriesOnHover *bool `protobuf:"varint,3,opt,name=highlight_series_on_hover,json=highlightSeriesOnHover" json:"highlight_series_on_hover,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DashboardCompareRunChartInput) Reset() { *m = DashboardCompareRunChartInput{} }
+func (m *DashboardCompareRunChartInput) String() string { return proto.CompactTextString(m) }
+func (*DashboardCompareRunChartInput) ProtoMessage() {}
+func (*DashboardCompareRunChartInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{41}
+}
+
+func (m *DashboardCompareRunChartInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DashboardCompareRunChartInput.Unmarshal(m, b)
+}
+func (m *DashboardCompareRunChartInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DashboardCompareRunChartInput.Marshal(b, m, deterministic)
+}
+func (m *DashboardCompareRunChartInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DashboardCompareRunChartInput.Merge(m, src)
+}
+func (m *DashboardCompareRunChartInput) XXX_Size() int {
+ return xxx_messageInfo_DashboardCompareRunChartInput.Size(m)
+}
+func (m *DashboardCompareRunChartInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_DashboardCompareRunChartInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DashboardCompareRunChartInput proto.InternalMessageInfo
+
+func (m *DashboardCompareRunChartInput) GetRunKeys() []string {
+ if m != nil {
+ return m.RunKeys
+ }
+ return nil
+}
+
+func (m *DashboardCompareRunChartInput) GetMetricKeys() []string {
+ if m != nil {
+ return m.MetricKeys
+ }
+ return nil
+}
+
+func (m *DashboardCompareRunChartInput) GetHighlightSeriesOnHover() bool {
+ if m != nil && m.HighlightSeriesOnHover != nil {
+ return *m.HighlightSeriesOnHover
+ }
+ return false
+}
+
+type DashboardVisualizeAnalysisInput struct {
+ RunKey *string `protobuf:"bytes,1,opt,name=run_key,json=runKey" json:"run_key,omitempty"`
+ AnalysisKey *string `protobuf:"bytes,2,opt,name=analysis_key,json=analysisKey" json:"analysis_key,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DashboardVisualizeAnalysisInput) Reset() { *m = DashboardVisualizeAnalysisInput{} }
+func (m *DashboardVisualizeAnalysisInput) String() string { return proto.CompactTextString(m) }
+func (*DashboardVisualizeAnalysisInput) ProtoMessage() {}
+func (*DashboardVisualizeAnalysisInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{42}
+}
+
+func (m *DashboardVisualizeAnalysisInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DashboardVisualizeAnalysisInput.Unmarshal(m, b)
+}
+func (m *DashboardVisualizeAnalysisInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DashboardVisualizeAnalysisInput.Marshal(b, m, deterministic)
+}
+func (m *DashboardVisualizeAnalysisInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DashboardVisualizeAnalysisInput.Merge(m, src)
+}
+func (m *DashboardVisualizeAnalysisInput) XXX_Size() int {
+ return xxx_messageInfo_DashboardVisualizeAnalysisInput.Size(m)
+}
+func (m *DashboardVisualizeAnalysisInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_DashboardVisualizeAnalysisInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DashboardVisualizeAnalysisInput proto.InternalMessageInfo
+
+func (m *DashboardVisualizeAnalysisInput) GetRunKey() string {
+ if m != nil && m.RunKey != nil {
+ return *m.RunKey
+ }
+ return ""
+}
+
+func (m *DashboardVisualizeAnalysisInput) GetAnalysisKey() string {
+ if m != nil && m.AnalysisKey != nil {
+ return *m.AnalysisKey
+ }
+ return ""
+}
+
+type TestOption struct {
+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+ Value *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *TestOption) Reset() { *m = TestOption{} }
+func (m *TestOption) String() string { return proto.CompactTextString(m) }
+func (*TestOption) ProtoMessage() {}
+func (*TestOption) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{43}
+}
+
+func (m *TestOption) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_TestOption.Unmarshal(m, b)
+}
+func (m *TestOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_TestOption.Marshal(b, m, deterministic)
+}
+func (m *TestOption) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestOption.Merge(m, src)
+}
+func (m *TestOption) XXX_Size() int {
+ return xxx_messageInfo_TestOption.Size(m)
+}
+func (m *TestOption) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestOption.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestOption proto.InternalMessageInfo
+
+func (m *TestOption) GetName() string {
+ if m != nil && m.Name != nil {
+ return *m.Name
+ }
+ return ""
+}
+
+func (m *TestOption) GetValue() string {
+ if m != nil && m.Value != nil {
+ return *m.Value
+ }
+ return ""
+}
+
+type TestInput struct {
+ BenchmarkKey *string `protobuf:"bytes,1,opt,name=benchmark_key,json=benchmarkKey" json:"benchmark_key,omitempty"`
+ TempDir *string `protobuf:"bytes,2,opt,name=temp_dir,json=tempDir" json:"temp_dir,omitempty"`
+ TimeoutSec *float64 `protobuf:"fixed64,3,opt,name=timeout_sec,json=timeoutSec" json:"timeout_sec,omitempty"`
+ TestOptionList []*TestOption `protobuf:"bytes,4,rep,name=test_option_list,json=testOptionList" json:"test_option_list,omitempty"`
+ Tags []string `protobuf:"bytes,6,rep,name=tags" json:"tags,omitempty"`
+ TestPassId *string `protobuf:"bytes,7,opt,name=test_pass_id,json=testPassId" json:"test_pass_id,omitempty"`
+ BuildId *int64 `protobuf:"varint,8,opt,name=build_id,json=buildId" json:"build_id,omitempty"`
+ InternalTestOptions map[string]string `protobuf:"bytes,10,rep,name=internal_test_options,json=internalTestOptions" json:"internal_test_options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *TestInput) Reset() { *m = TestInput{} }
+func (m *TestInput) String() string { return proto.CompactTextString(m) }
+func (*TestInput) ProtoMessage() {}
+func (*TestInput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{44}
+}
+
+func (m *TestInput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_TestInput.Unmarshal(m, b)
+}
+func (m *TestInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_TestInput.Marshal(b, m, deterministic)
+}
+func (m *TestInput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestInput.Merge(m, src)
+}
+func (m *TestInput) XXX_Size() int {
+ return xxx_messageInfo_TestInput.Size(m)
+}
+func (m *TestInput) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestInput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestInput proto.InternalMessageInfo
+
+func (m *TestInput) GetBenchmarkKey() string {
+ if m != nil && m.BenchmarkKey != nil {
+ return *m.BenchmarkKey
+ }
+ return ""
+}
+
+func (m *TestInput) GetTempDir() string {
+ if m != nil && m.TempDir != nil {
+ return *m.TempDir
+ }
+ return ""
+}
+
+func (m *TestInput) GetTimeoutSec() float64 {
+ if m != nil && m.TimeoutSec != nil {
+ return *m.TimeoutSec
+ }
+ return 0
+}
+
+func (m *TestInput) GetTestOptionList() []*TestOption {
+ if m != nil {
+ return m.TestOptionList
+ }
+ return nil
+}
+
+func (m *TestInput) GetTags() []string {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+func (m *TestInput) GetTestPassId() string {
+ if m != nil && m.TestPassId != nil {
+ return *m.TestPassId
+ }
+ return ""
+}
+
+func (m *TestInput) GetBuildId() int64 {
+ if m != nil && m.BuildId != nil {
+ return *m.BuildId
+ }
+ return 0
+}
+
+func (m *TestInput) GetInternalTestOptions() map[string]string {
+ if m != nil {
+ return m.InternalTestOptions
+ }
+ return nil
+}
+
+type TestOutput struct {
+ TestStatus *TestOutput_TestStatus `protobuf:"varint,1,opt,name=test_status,json=testStatus,enum=mako.TestOutput_TestStatus" json:"test_status,omitempty"`
+ AnalyzerOutputList []*AnalyzerOutput `protobuf:"bytes,2,rep,name=analyzer_output_list,json=analyzerOutputList" json:"analyzer_output_list,omitempty"`
+ SummaryOutput *string `protobuf:"bytes,3,opt,name=summary_output,json=summaryOutput" json:"summary_output,omitempty"`
+ RunChartLink *string `protobuf:"bytes,4,opt,name=run_chart_link,json=runChartLink" json:"run_chart_link,omitempty"`
+ RunKey *string `protobuf:"bytes,5,opt,name=run_key,json=runKey" json:"run_key,omitempty"`
+ RetryableFailureType *TestOutput_RetryableFailureType `protobuf:"varint,6,opt,name=retryable_failure_type,json=retryableFailureType,enum=mako.TestOutput_RetryableFailureType" json:"retryable_failure_type,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *TestOutput) Reset() { *m = TestOutput{} }
+func (m *TestOutput) String() string { return proto.CompactTextString(m) }
+func (*TestOutput) ProtoMessage() {}
+func (*TestOutput) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{45}
+}
+
+func (m *TestOutput) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_TestOutput.Unmarshal(m, b)
+}
+func (m *TestOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_TestOutput.Marshal(b, m, deterministic)
+}
+func (m *TestOutput) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestOutput.Merge(m, src)
+}
+func (m *TestOutput) XXX_Size() int {
+ return xxx_messageInfo_TestOutput.Size(m)
+}
+func (m *TestOutput) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestOutput proto.InternalMessageInfo
+
+func (m *TestOutput) GetTestStatus() TestOutput_TestStatus {
+ if m != nil && m.TestStatus != nil {
+ return *m.TestStatus
+ }
+ return TestOutput_PASS
+}
+
+func (m *TestOutput) GetAnalyzerOutputList() []*AnalyzerOutput {
+ if m != nil {
+ return m.AnalyzerOutputList
+ }
+ return nil
+}
+
+func (m *TestOutput) GetSummaryOutput() string {
+ if m != nil && m.SummaryOutput != nil {
+ return *m.SummaryOutput
+ }
+ return ""
+}
+
+func (m *TestOutput) GetRunChartLink() string {
+ if m != nil && m.RunChartLink != nil {
+ return *m.RunChartLink
+ }
+ return ""
+}
+
+func (m *TestOutput) GetRunKey() string {
+ if m != nil && m.RunKey != nil {
+ return *m.RunKey
+ }
+ return ""
+}
+
+func (m *TestOutput) GetRetryableFailureType() TestOutput_RetryableFailureType {
+ if m != nil && m.RetryableFailureType != nil {
+ return *m.RetryableFailureType
+ }
+ return TestOutput_UNKNOWN_OR_UNSET_TYPE
+}
+
+type SampleRecord struct {
+ SamplePoint *SamplePoint `protobuf:"bytes,1,opt,name=sample_point,json=samplePoint" json:"sample_point,omitempty"`
+ SampleError *SampleError `protobuf:"bytes,2,opt,name=sample_error,json=sampleError" json:"sample_error,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SampleRecord) Reset() { *m = SampleRecord{} }
+func (m *SampleRecord) String() string { return proto.CompactTextString(m) }
+func (*SampleRecord) ProtoMessage() {}
+func (*SampleRecord) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{46}
+}
+
+func (m *SampleRecord) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SampleRecord.Unmarshal(m, b)
+}
+func (m *SampleRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SampleRecord.Marshal(b, m, deterministic)
+}
+func (m *SampleRecord) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SampleRecord.Merge(m, src)
+}
+func (m *SampleRecord) XXX_Size() int {
+ return xxx_messageInfo_SampleRecord.Size(m)
+}
+func (m *SampleRecord) XXX_DiscardUnknown() {
+ xxx_messageInfo_SampleRecord.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SampleRecord proto.InternalMessageInfo
+
+func (m *SampleRecord) GetSamplePoint() *SamplePoint {
+ if m != nil {
+ return m.SamplePoint
+ }
+ return nil
+}
+
+func (m *SampleRecord) GetSampleError() *SampleError {
+ if m != nil {
+ return m.SampleError
+ }
+ return nil
+}
+
+type SampleFile struct {
+ SamplerName *string `protobuf:"bytes,1,opt,name=sampler_name,json=samplerName" json:"sampler_name,omitempty"`
+ FilePath *string `protobuf:"bytes,2,opt,name=file_path,json=filePath" json:"file_path,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SampleFile) Reset() { *m = SampleFile{} }
+func (m *SampleFile) String() string { return proto.CompactTextString(m) }
+func (*SampleFile) ProtoMessage() {}
+func (*SampleFile) Descriptor() ([]byte, []int) {
+ return fileDescriptor_b174f87a83ddb952, []int{47}
+}
+
+func (m *SampleFile) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SampleFile.Unmarshal(m, b)
+}
+func (m *SampleFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SampleFile.Marshal(b, m, deterministic)
+}
+func (m *SampleFile) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SampleFile.Merge(m, src)
+}
+func (m *SampleFile) XXX_Size() int {
+ return xxx_messageInfo_SampleFile.Size(m)
+}
+func (m *SampleFile) XXX_DiscardUnknown() {
+ xxx_messageInfo_SampleFile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SampleFile proto.InternalMessageInfo
+
+func (m *SampleFile) GetSamplerName() string {
+ if m != nil && m.SamplerName != nil {
+ return *m.SamplerName
+ }
+ return ""
+}
+
+func (m *SampleFile) GetFilePath() string {
+ if m != nil && m.FilePath != nil {
+ return *m.FilePath
+ }
+ return ""
+}
+
+func init() {
+ proto.RegisterEnum("mako.RunOrder", RunOrder_name, RunOrder_value)
+ proto.RegisterEnum("mako.Status_Code", Status_Code_name, Status_Code_value)
+ proto.RegisterEnum("mako.ValueInfo_Type", ValueInfo_Type_name, ValueInfo_Type_value)
+ proto.RegisterEnum("mako.DataFilter_DataType", DataFilter_DataType_name, DataFilter_DataType_value)
+ proto.RegisterEnum("mako.AnalysisTriageInfo_AnalysisTriageType", AnalysisTriageInfo_AnalysisTriageType_name, AnalysisTriageInfo_AnalysisTriageType_value)
+ proto.RegisterEnum("mako.AnalysisTriageInfo_EnvironmentType", AnalysisTriageInfo_EnvironmentType_name, AnalysisTriageInfo_EnvironmentType_value)
+ proto.RegisterEnum("mako.TestOutput_TestStatus", TestOutput_TestStatus_name, TestOutput_TestStatus_value)
+ proto.RegisterEnum("mako.TestOutput_RetryableFailureType", TestOutput_RetryableFailureType_name, TestOutput_RetryableFailureType_value)
+ proto.RegisterType((*Status)(nil), "mako.Status")
+ proto.RegisterType((*ValueInfo)(nil), "mako.ValueInfo")
+ proto.RegisterType((*KeyedValue)(nil), "mako.KeyedValue")
+ proto.RegisterType((*NamedData)(nil), "mako.NamedData")
+ proto.RegisterType((*Range)(nil), "mako.Range")
+ proto.RegisterType((*LabeledRange)(nil), "mako.LabeledRange")
+ proto.RegisterType((*DataFilter)(nil), "mako.DataFilter")
+ proto.RegisterType((*RunBundle)(nil), "mako.RunBundle")
+ proto.RegisterType((*BenchmarkInfo)(nil), "mako.BenchmarkInfo")
+ proto.RegisterType((*RunAnnotation)(nil), "mako.RunAnnotation")
+ proto.RegisterType((*RunInfo)(nil), "mako.RunInfo")
+ proto.RegisterType((*SamplePoint)(nil), "mako.SamplePoint")
+ proto.RegisterMapType((map[string][]byte)(nil), "mako.SamplePoint.AuxDataEntry")
+ proto.RegisterType((*SampleAnnotation)(nil), "mako.SampleAnnotation")
+ proto.RegisterType((*SampleError)(nil), "mako.SampleError")
+ proto.RegisterType((*SampleBatch)(nil), "mako.SampleBatch")
+ proto.RegisterType((*MetricAggregate)(nil), "mako.MetricAggregate")
+ proto.RegisterType((*RunAggregate)(nil), "mako.RunAggregate")
+ proto.RegisterType((*Aggregate)(nil), "mako.Aggregate")
+ proto.RegisterType((*BenchmarkInfoQuery)(nil), "mako.BenchmarkInfoQuery")
+ proto.RegisterType((*BenchmarkInfoQueryResponse)(nil), "mako.BenchmarkInfoQueryResponse")
+ proto.RegisterType((*RunInfoQuery)(nil), "mako.RunInfoQuery")
+ proto.RegisterType((*RunInfoQueryResponse)(nil), "mako.RunInfoQueryResponse")
+ proto.RegisterType((*SampleBatchQuery)(nil), "mako.SampleBatchQuery")
+ proto.RegisterType((*SampleBatchQueryResponse)(nil), "mako.SampleBatchQueryResponse")
+ proto.RegisterType((*CreationResponse)(nil), "mako.CreationResponse")
+ proto.RegisterType((*ModificationResponse)(nil), "mako.ModificationResponse")
+ proto.RegisterType((*CountResponse)(nil), "mako.CountResponse")
+ proto.RegisterType((*SecondaryStorageWriteInput)(nil), "mako.SecondaryStorageWriteInput")
+ proto.RegisterType((*SecondaryStorageWriteOutput)(nil), "mako.SecondaryStorageWriteOutput")
+ proto.RegisterType((*AggregatorInput)(nil), "mako.AggregatorInput")
+ proto.RegisterType((*AggregatorOutput)(nil), "mako.AggregatorOutput")
+ proto.RegisterType((*DownsamplerInput)(nil), "mako.DownsamplerInput")
+ proto.RegisterType((*DownsamplerOutput)(nil), "mako.DownsamplerOutput")
+ proto.RegisterType((*AnalyzerHistoricQueryInput)(nil), "mako.AnalyzerHistoricQueryInput")
+ proto.RegisterType((*AnalyzerHistoricQueryOutput)(nil), "mako.AnalyzerHistoricQueryOutput")
+ proto.RegisterMapType((map[string]*AnalyzerHistoricQueryOutput_RunInfoQueries)(nil), "mako.AnalyzerHistoricQueryOutput.RunInfoQueryMapEntry")
+ proto.RegisterType((*AnalyzerHistoricQueryOutput_RunInfoQueries)(nil), "mako.AnalyzerHistoricQueryOutput.RunInfoQueries")
+ proto.RegisterType((*AnalyzerInput)(nil), "mako.AnalyzerInput")
+ proto.RegisterMapType((map[string]*AnalyzerInput_RunBundles)(nil), "mako.AnalyzerInput.HistoricalRunMapEntry")
+ proto.RegisterType((*AnalyzerInput_RunBundles)(nil), "mako.AnalyzerInput.RunBundles")
+ proto.RegisterType((*AnalyzerOutput)(nil), "mako.AnalyzerOutput")
+ proto.RegisterType((*AnalysisTriageInfo)(nil), "mako.AnalysisTriageInfo")
+ proto.RegisterType((*DashboardAggregateChartInput)(nil), "mako.DashboardAggregateChartInput")
+ proto.RegisterType((*DashboardRunChartInput)(nil), "mako.DashboardRunChartInput")
+ proto.RegisterType((*DashboardCompareAggregateChartInput)(nil), "mako.DashboardCompareAggregateChartInput")
+ proto.RegisterType((*DashboardCompareAggregateChartInput_Series)(nil), "mako.DashboardCompareAggregateChartInput.Series")
+ proto.RegisterType((*DashboardCompareRunChartInput)(nil), "mako.DashboardCompareRunChartInput")
+ proto.RegisterType((*DashboardVisualizeAnalysisInput)(nil), "mako.DashboardVisualizeAnalysisInput")
+ proto.RegisterType((*TestOption)(nil), "mako.TestOption")
+ proto.RegisterType((*TestInput)(nil), "mako.TestInput")
+ proto.RegisterMapType((map[string]string)(nil), "mako.TestInput.InternalTestOptionsEntry")
+ proto.RegisterType((*TestOutput)(nil), "mako.TestOutput")
+ proto.RegisterType((*SampleRecord)(nil), "mako.SampleRecord")
+ proto.RegisterType((*SampleFile)(nil), "mako.SampleFile")
+}
+
+func init() { proto.RegisterFile("spec/proto/mako.proto", fileDescriptor_b174f87a83ddb952) }
+
+var fileDescriptor_b174f87a83ddb952 = []byte{
+ // 3822 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3a, 0x5d, 0x6f, 0x23, 0x47,
+ 0x72, 0x3b, 0xfc, 0x12, 0x59, 0xa4, 0xc8, 0x51, 0x4b, 0xda, 0xa5, 0xa4, 0xb3, 0x2d, 0x8f, 0xb3,
+ 0x38, 0x9d, 0x8d, 0xdb, 0x5d, 0xeb, 0x8c, 0xcd, 0x59, 0x76, 0x72, 0xa0, 0x28, 0x6a, 0x97, 0xbb,
+ 0x22, 0x29, 0x37, 0x29, 0x3b, 0xc6, 0x25, 0x18, 0xb4, 0xc8, 0x16, 0x35, 0xb7, 0xe4, 0x0c, 0x33,
+ 0x33, 0x5c, 0x4b, 0xfb, 0x18, 0x04, 0x48, 0x02, 0xe4, 0xde, 0x82, 0x24, 0xc0, 0x3d, 0xdc, 0x43,
+ 0x90, 0x97, 0xbc, 0x1e, 0xf2, 0x90, 0xbc, 0xe4, 0x25, 0x40, 0x5e, 0xf2, 0x17, 0xf2, 0x16, 0xe4,
+ 0x77, 0x04, 0x5d, 0xdd, 0x33, 0xd3, 0xfc, 0xd0, 0xae, 0xd6, 0x67, 0xfb, 0x6d, 0xba, 0xba, 0xaa,
+ 0xba, 0xba, 0xaa, 0xba, 0xba, 0xaa, 0x7a, 0x60, 0x33, 0x98, 0xf0, 0xfe, 0xc3, 0x89, 0xef, 0x85,
+ 0xde, 0xc3, 0x31, 0x7b, 0xe1, 0x3d, 0xc0, 0x4f, 0x92, 0x11, 0xdf, 0xd6, 0xbf, 0x19, 0x90, 0xeb,
+ 0x86, 0x2c, 0x9c, 0x06, 0xe4, 0x3e, 0x64, 0xfa, 0xde, 0x80, 0x57, 0x8d, 0x5d, 0x63, 0xaf, 0xbc,
+ 0xbf, 0xf6, 0x00, 0x71, 0xe5, 0xdc, 0x83, 0xba, 0x37, 0xe0, 0x14, 0xa7, 0xc9, 0xfb, 0x50, 0xba,
+ 0x60, 0xce, 0xc8, 0x1e, 0xf3, 0x20, 0x60, 0x43, 0x5e, 0x4d, 0xed, 0x1a, 0x7b, 0x05, 0x5a, 0x14,
+ 0xb0, 0x96, 0x04, 0x91, 0x1d, 0xc8, 0xfa, 0x3c, 0xf4, 0xaf, 0xab, 0xe9, 0x5d, 0x63, 0x2f, 0x7f,
+ 0x90, 0xbd, 0x60, 0xa3, 0x80, 0x53, 0x09, 0x23, 0x3f, 0x01, 0xf3, 0x1b, 0xe6, 0xbb, 0x8e, 0x3b,
+ 0x8c, 0x58, 0x04, 0xd5, 0xcc, 0x6e, 0x7a, 0xaf, 0x40, 0x2b, 0x0a, 0xae, 0xd8, 0x04, 0xd6, 0x3b,
+ 0x90, 0x11, 0x0b, 0x93, 0x22, 0xac, 0x74, 0xcf, 0xea, 0xf5, 0x46, 0xb7, 0x6b, 0xde, 0x21, 0x79,
+ 0xc8, 0x1c, 0xd7, 0x9a, 0x27, 0xa6, 0x61, 0xfd, 0xad, 0x01, 0x85, 0x2f, 0xd9, 0x68, 0xca, 0x9b,
+ 0xee, 0x85, 0x47, 0x76, 0xa0, 0xf0, 0x52, 0x0c, 0xec, 0x17, 0xfc, 0x1a, 0xf7, 0x50, 0xa0, 0x79,
+ 0x04, 0x3c, 0xe7, 0xd7, 0x64, 0x03, 0xb2, 0x23, 0x76, 0xce, 0x47, 0x4a, 0x5a, 0x39, 0x20, 0x7b,
+ 0x90, 0x09, 0xaf, 0x27, 0x1c, 0xc5, 0x2c, 0xef, 0x6f, 0xc8, 0x1d, 0xc7, 0x1c, 0x1f, 0xf4, 0xae,
+ 0x27, 0x9c, 0x22, 0x86, 0x65, 0x41, 0x46, 0x8c, 0x84, 0x24, 0xed, 0xb3, 0x56, 0x83, 0x36, 0xeb,
+ 0xa6, 0x41, 0x56, 0xa1, 0xd0, 0x6b, 0xb6, 0x1a, 0xdd, 0x5e, 0xad, 0x75, 0x6a, 0xa6, 0xac, 0x5f,
+ 0x00, 0x3c, 0xe7, 0xd7, 0x7c, 0x80, 0x0c, 0xde, 0x28, 0x0e, 0x7e, 0xa3, 0x38, 0x06, 0x95, 0x03,
+ 0xeb, 0x67, 0x50, 0x68, 0xb3, 0x31, 0x1f, 0x1c, 0xb1, 0x90, 0x11, 0x02, 0x19, 0x97, 0x8d, 0xb9,
+ 0x22, 0xc5, 0x6f, 0x01, 0x1b, 0xb0, 0x90, 0xa9, 0x4d, 0xe0, 0xb7, 0xf5, 0x10, 0xb2, 0x94, 0xb9,
+ 0x43, 0x2e, 0x78, 0x06, 0x21, 0xf3, 0x43, 0xa4, 0x30, 0xa8, 0x1c, 0x10, 0x13, 0xd2, 0xdc, 0x1d,
+ 0xa8, 0x75, 0xc4, 0xa7, 0xf5, 0x04, 0x4a, 0x27, 0x62, 0xf7, 0x7c, 0x10, 0xd3, 0x49, 0xd5, 0x18,
+ 0xba, 0x6a, 0xde, 0x87, 0xac, 0x2f, 0xa6, 0x91, 0xb2, 0xb8, 0x5f, 0x94, 0xba, 0x41, 0x0a, 0x2a,
+ 0x67, 0xac, 0x5f, 0x67, 0x00, 0x84, 0xa8, 0xc7, 0xce, 0x28, 0xe4, 0x3e, 0x79, 0x0c, 0x05, 0x21,
+ 0x90, 0x8d, 0x1a, 0x95, 0x3e, 0xb4, 0x25, 0xa9, 0x12, 0x24, 0xfc, 0x44, 0xb5, 0xe6, 0x07, 0xea,
+ 0x6b, 0x56, 0x51, 0xa9, 0x39, 0x45, 0xed, 0xc3, 0xe6, 0x84, 0xfb, 0x7d, 0xee, 0x86, 0xce, 0x88,
+ 0xdb, 0x63, 0x67, 0x34, 0x72, 0x6c, 0x9f, 0xb9, 0x2f, 0xd0, 0x64, 0x59, 0xba, 0x9e, 0x4c, 0xb6,
+ 0xc4, 0x1c, 0x65, 0xee, 0x0b, 0xf2, 0x09, 0xac, 0x3b, 0x43, 0xd7, 0xf3, 0x05, 0x7e, 0x10, 0x08,
+ 0x3f, 0x43, 0xa5, 0x65, 0xd0, 0x17, 0x33, 0xa1, 0x3f, 0xe5, 0x74, 0x4d, 0x22, 0xb4, 0xe4, 0xbc,
+ 0x10, 0xca, 0xfa, 0x8f, 0x14, 0xe4, 0x23, 0xe9, 0xc8, 0x36, 0xdc, 0x6d, 0x35, 0x7a, 0xb4, 0x59,
+ 0xb7, 0x6b, 0x4f, 0x9e, 0xd0, 0xc6, 0x93, 0x5a, 0xaf, 0x61, 0xd7, 0x3b, 0x67, 0xed, 0x9e, 0x59,
+ 0x24, 0x55, 0xd8, 0x58, 0x98, 0x6b, 0x35, 0xdb, 0xa6, 0xb1, 0x7c, 0xa6, 0xf6, 0x27, 0x66, 0x8a,
+ 0x6c, 0xc1, 0xe6, 0xe2, 0x4c, 0xa3, 0xd6, 0x36, 0xd3, 0x64, 0x07, 0xee, 0x2d, 0x99, 0x3a, 0x6a,
+ 0xd6, 0xda, 0x66, 0x66, 0xe9, 0x64, 0xb7, 0x77, 0x74, 0xd4, 0xf8, 0xd2, 0xcc, 0xde, 0xb0, 0xdc,
+ 0x91, 0x59, 0x22, 0xef, 0xc1, 0xce, 0xc2, 0xcc, 0x69, 0x83, 0xd6, 0x1b, 0xed, 0x5e, 0xf3, 0xa4,
+ 0x61, 0xe6, 0xc8, 0x06, 0x98, 0xf5, 0xb3, 0x6e, 0xaf, 0xd3, 0x4a, 0x10, 0xcc, 0x15, 0x72, 0x0f,
+ 0xd6, 0x15, 0x59, 0xb7, 0xd6, 0x3a, 0x3d, 0x69, 0x9c, 0x76, 0x9a, 0xed, 0x5e, 0xd7, 0xcc, 0x93,
+ 0x75, 0xa8, 0x1c, 0x36, 0xda, 0xf5, 0xa7, 0xad, 0x1a, 0x7d, 0x6e, 0x77, 0xeb, 0x1d, 0xda, 0x30,
+ 0x0b, 0xa4, 0x02, 0xc5, 0x06, 0xa5, 0x1d, 0xaa, 0x14, 0x03, 0xd6, 0x3f, 0x19, 0x50, 0xa0, 0x53,
+ 0xf7, 0x70, 0xea, 0x0e, 0x46, 0x9c, 0x1c, 0x40, 0xf9, 0x9c, 0xbb, 0xfd, 0xcb, 0x31, 0xf3, 0x5f,
+ 0xd8, 0x8e, 0x7b, 0xe1, 0xa1, 0x4f, 0x14, 0xf7, 0xd7, 0xa5, 0x4f, 0x1c, 0x46, 0x73, 0xe2, 0xa4,
+ 0xd1, 0xd5, 0x73, 0x7d, 0x48, 0xf6, 0x20, 0xef, 0x4f, 0x5d, 0x49, 0x25, 0xfd, 0x6f, 0x55, 0xf9,
+ 0xdf, 0xd4, 0x45, 0xfc, 0x15, 0x5f, 0x7e, 0x90, 0x47, 0x00, 0xe7, 0x2c, 0xec, 0x5f, 0xda, 0x23,
+ 0x27, 0x08, 0xab, 0xe9, 0xdd, 0xf4, 0x5e, 0x31, 0x8e, 0x5c, 0x6c, 0x3c, 0x19, 0xf1, 0x43, 0x31,
+ 0x4b, 0x0b, 0x88, 0x74, 0xe2, 0x04, 0xa1, 0xf5, 0x37, 0x59, 0x58, 0x9d, 0x59, 0x9c, 0x7c, 0x00,
+ 0xc9, 0xf2, 0xda, 0x69, 0x2d, 0xc5, 0x40, 0xe1, 0x88, 0xf7, 0xf5, 0xed, 0xe0, 0xc1, 0x94, 0xae,
+ 0x9a, 0x90, 0x8a, 0xa3, 0x2b, 0x82, 0xe3, 0xc4, 0xf7, 0x7e, 0xc5, 0xfb, 0xa1, 0x44, 0x4a, 0xcb,
+ 0xe0, 0xa8, 0x60, 0x88, 0xf2, 0x0e, 0x80, 0xf7, 0x8d, 0xcb, 0x7d, 0x29, 0xb2, 0x8c, 0x7c, 0x05,
+ 0x84, 0x08, 0xf9, 0xc8, 0xa7, 0x60, 0x3a, 0xee, 0x64, 0x1a, 0xda, 0xf2, 0x50, 0xa0, 0x0e, 0xb2,
+ 0xa8, 0x83, 0xca, 0x5c, 0x7c, 0xa2, 0x65, 0x44, 0x4c, 0x22, 0xe0, 0xa7, 0x60, 0x8e, 0x79, 0xe8,
+ 0x3b, 0x7d, 0xa4, 0x92, 0xfc, 0x73, 0xa8, 0x92, 0x45, 0x52, 0x89, 0x28, 0xbe, 0x71, 0xd5, 0x53,
+ 0xf8, 0x51, 0x7f, 0x1a, 0x84, 0xde, 0xd8, 0x66, 0xc3, 0xa1, 0xcf, 0x87, 0x2c, 0x74, 0x3c, 0x57,
+ 0x63, 0xb3, 0xb2, 0x9c, 0xcd, 0x96, 0x24, 0xaa, 0x25, 0x34, 0x31, 0xc7, 0x5d, 0x28, 0x0e, 0x78,
+ 0xd0, 0xf7, 0x9d, 0x89, 0x00, 0x57, 0xf3, 0x52, 0x11, 0x1a, 0x88, 0x7c, 0x06, 0xdb, 0x4b, 0xcf,
+ 0xb6, 0x5c, 0xb1, 0xb0, 0x9b, 0xde, 0xcb, 0xd2, 0x7b, 0x4b, 0x0e, 0x38, 0xb2, 0xff, 0x10, 0xf2,
+ 0x6c, 0x7a, 0x25, 0x4f, 0x36, 0xe8, 0xc2, 0xc5, 0x11, 0x94, 0xae, 0xb0, 0xe9, 0x15, 0x86, 0xd2,
+ 0x3d, 0x30, 0x7d, 0x1e, 0x32, 0xc7, 0xe5, 0x03, 0x5b, 0xf8, 0x55, 0xc8, 0x86, 0xd5, 0x22, 0xca,
+ 0x53, 0x8e, 0xe0, 0x74, 0xea, 0xf6, 0xd8, 0x90, 0x3c, 0x82, 0xf2, 0xf9, 0xd4, 0x19, 0x0d, 0x6c,
+ 0x67, 0x60, 0xcb, 0xa0, 0x58, 0x12, 0x78, 0x07, 0x50, 0xbf, 0x14, 0x21, 0x4f, 0x08, 0x46, 0x4b,
+ 0x88, 0xd1, 0x1c, 0x60, 0x10, 0x25, 0x9f, 0xc1, 0x7a, 0x4c, 0x31, 0xf5, 0x47, 0xf6, 0x85, 0xe7,
+ 0x8f, 0x59, 0x58, 0x5d, 0x45, 0xb2, 0xd2, 0x65, 0x18, 0x4e, 0x0e, 0x1e, 0x3e, 0xec, 0x8f, 0x1e,
+ 0xde, 0x1f, 0x50, 0x53, 0x11, 0x9e, 0xf9, 0xa3, 0x63, 0xc4, 0xb2, 0x06, 0xb0, 0x4a, 0xa7, 0x6e,
+ 0xcd, 0x75, 0xbd, 0x10, 0x95, 0xf7, 0x6d, 0xee, 0xb0, 0x39, 0x3d, 0xa7, 0x17, 0xf4, 0x6c, 0xfd,
+ 0x65, 0x0e, 0x56, 0xd4, 0xc1, 0xb9, 0x9d, 0xaf, 0xdf, 0x03, 0x71, 0xbe, 0xb4, 0x78, 0x9c, 0xf3,
+ 0xa7, 0xae, 0x98, 0x78, 0x1f, 0x4a, 0xa1, 0x33, 0xe6, 0x41, 0xc8, 0xc6, 0x13, 0x7b, 0x1c, 0xe0,
+ 0x62, 0x06, 0x2d, 0xc6, 0xb0, 0x56, 0x40, 0xb6, 0x20, 0x1f, 0xe9, 0xa3, 0x4a, 0x76, 0x8d, 0xbd,
+ 0x34, 0x5d, 0x51, 0xdb, 0x26, 0x1f, 0x81, 0x39, 0x98, 0xfa, 0xd2, 0xb3, 0x04, 0x89, 0xe0, 0x20,
+ 0x82, 0xb2, 0x71, 0x60, 0x3c, 0xa2, 0xe5, 0x68, 0xaa, 0xe7, 0x8c, 0x79, 0x2b, 0x10, 0x57, 0x5d,
+ 0xc8, 0x86, 0x41, 0x35, 0x8b, 0xe7, 0x03, 0xbf, 0xc9, 0x1f, 0x83, 0x8a, 0xdb, 0x36, 0x5e, 0x40,
+ 0xba, 0x83, 0x13, 0x69, 0x7c, 0xfd, 0x62, 0xa3, 0x15, 0x89, 0x8c, 0x03, 0xf4, 0x99, 0x9f, 0x42,
+ 0x21, 0xf2, 0x6e, 0x5e, 0x5d, 0xd1, 0xcf, 0x54, 0xe4, 0xc0, 0x9c, 0x26, 0x18, 0xe4, 0x0f, 0xa0,
+ 0x2c, 0x63, 0xcb, 0x0b, 0x7e, 0x2d, 0xd7, 0xca, 0xa3, 0x30, 0x25, 0x84, 0x3e, 0xe7, 0xd7, 0xcb,
+ 0xfc, 0xbc, 0xb0, 0xe8, 0xe7, 0x9f, 0x43, 0x85, 0xc5, 0x26, 0x96, 0x8c, 0xa4, 0xc7, 0xae, 0xc7,
+ 0x41, 0x2d, 0x71, 0x01, 0x5a, 0x4e, 0x70, 0x91, 0xff, 0x3b, 0x00, 0x97, 0xde, 0x4b, 0xee, 0xdb,
+ 0x21, 0xbf, 0x0a, 0xab, 0x15, 0x64, 0x5f, 0x40, 0x48, 0x8f, 0x5f, 0x85, 0xe4, 0x63, 0x28, 0x86,
+ 0x3c, 0x08, 0x6d, 0x6f, 0x1a, 0x4e, 0xa6, 0x21, 0xba, 0x6b, 0x71, 0xdf, 0x94, 0x8c, 0x7b, 0x3c,
+ 0x08, 0x3b, 0x08, 0xa7, 0x10, 0xc6, 0xdf, 0xe4, 0x31, 0x94, 0x2f, 0xaf, 0x27, 0xdc, 0x1f, 0x39,
+ 0xd1, 0x59, 0x5b, 0x5d, 0x7e, 0x80, 0x56, 0x63, 0xb4, 0x85, 0x23, 0x67, 0xbe, 0xe1, 0xc8, 0xed,
+ 0x42, 0x09, 0xc5, 0x9a, 0xb0, 0x20, 0x10, 0xae, 0xb0, 0x86, 0x72, 0xa3, 0x14, 0xa7, 0x2c, 0x08,
+ 0x9a, 0x03, 0x72, 0x00, 0xa6, 0x14, 0x7c, 0x92, 0xa8, 0xa5, 0x8c, 0x5c, 0x75, 0xe9, 0x27, 0x52,
+ 0x27, 0x61, 0xfc, 0x2d, 0x24, 0x79, 0x96, 0xc9, 0x17, 0xcd, 0x12, 0xdd, 0x19, 0xf0, 0x89, 0xcf,
+ 0xfb, 0x2c, 0xe4, 0x03, 0x9b, 0xb9, 0x6c, 0x74, 0xfd, 0x8a, 0xfb, 0xb6, 0xcf, 0x83, 0xe9, 0x28,
+ 0x0c, 0xa8, 0x39, 0x0f, 0xb1, 0x7e, 0x97, 0x82, 0xa2, 0xbc, 0x13, 0x4e, 0x3d, 0xc7, 0x0d, 0xc9,
+ 0x7b, 0x50, 0xd4, 0x02, 0xad, 0xca, 0x9a, 0x20, 0x09, 0xa9, 0xe4, 0x73, 0x58, 0x53, 0xe1, 0x54,
+ 0x9e, 0x49, 0x14, 0x31, 0xa5, 0x8b, 0x98, 0xa4, 0x7b, 0xb4, 0x22, 0x51, 0x71, 0x80, 0xda, 0x6a,
+ 0xc3, 0xbd, 0x00, 0x57, 0xb3, 0x13, 0x83, 0x06, 0xfa, 0x35, 0x75, 0x57, 0xbf, 0xa6, 0x34, 0x07,
+ 0xd8, 0x0c, 0xe6, 0x20, 0x81, 0xba, 0x17, 0x12, 0xed, 0x67, 0x90, 0xc1, 0xbb, 0x3a, 0x03, 0xdc,
+ 0xd3, 0x83, 0x9a, 0x54, 0x7f, 0xc3, 0x0d, 0xfd, 0xeb, 0xd8, 0x18, 0xdb, 0x07, 0x50, 0xd2, 0x27,
+ 0x44, 0x4e, 0x98, 0x1c, 0x7d, 0xf1, 0x39, 0x9b, 0x8f, 0x96, 0x54, 0x3e, 0x7a, 0x90, 0xfa, 0xb9,
+ 0x61, 0x0d, 0xc1, 0x9c, 0x97, 0x90, 0x6c, 0x40, 0x06, 0x9d, 0x11, 0x19, 0x3c, 0xbd, 0x43, 0x71,
+ 0x44, 0x1e, 0x42, 0x21, 0xf6, 0x17, 0x75, 0x6b, 0xcf, 0xfb, 0xc7, 0xd3, 0x3b, 0x34, 0xc1, 0x39,
+ 0x2c, 0x01, 0x24, 0xaa, 0xb1, 0x5e, 0x46, 0xd6, 0x69, 0xf8, 0xbe, 0xe7, 0xbf, 0xd9, 0x3a, 0xef,
+ 0x43, 0x49, 0x2a, 0xca, 0xd7, 0xaf, 0xe3, 0xa2, 0x82, 0xe1, 0x4d, 0xfb, 0x01, 0xac, 0x72, 0xc1,
+ 0x2c, 0x2e, 0x55, 0x64, 0x70, 0x2c, 0x21, 0x50, 0x15, 0x19, 0xd6, 0xff, 0x19, 0xd1, 0xc2, 0x98,
+ 0x2a, 0xfc, 0x9e, 0x11, 0x72, 0x07, 0x0a, 0x71, 0xcc, 0x50, 0xcb, 0xe5, 0xa3, 0x70, 0x41, 0xfe,
+ 0x08, 0xd6, 0x94, 0x4b, 0x4c, 0x84, 0xb5, 0x92, 0x04, 0x60, 0x2e, 0x67, 0x41, 0x5b, 0xd2, 0x4a,
+ 0x90, 0x0c, 0xd0, 0x03, 0x12, 0x72, 0xb9, 0x2b, 0x24, 0xcf, 0x2e, 0x92, 0xa3, 0x02, 0x23, 0x72,
+ 0x1c, 0x60, 0xe2, 0xf3, 0x2f, 0x29, 0xa8, 0xb4, 0xd0, 0x49, 0xe3, 0x68, 0x27, 0x82, 0x8b, 0x72,
+ 0xf1, 0x64, 0xa7, 0x05, 0x09, 0x11, 0x02, 0x9b, 0x90, 0x1e, 0x3b, 0x6e, 0x54, 0x3c, 0x8c, 0x1d,
+ 0x17, 0x21, 0xec, 0x4a, 0x05, 0x7e, 0xf1, 0x29, 0x02, 0xf5, 0x98, 0x33, 0x57, 0x46, 0x72, 0x8a,
+ 0xdf, 0xe4, 0x2e, 0xe4, 0xc6, 0x7c, 0xe0, 0x30, 0x17, 0x33, 0x17, 0x83, 0xaa, 0x11, 0xf9, 0x29,
+ 0x90, 0x20, 0x64, 0xee, 0x80, 0xf9, 0x03, 0x7b, 0xc0, 0x5f, 0x3a, 0x68, 0xf9, 0x6a, 0x0e, 0x71,
+ 0xd6, 0xa2, 0x99, 0xa3, 0x68, 0x82, 0x1c, 0xc0, 0x96, 0x24, 0xb4, 0xd9, 0x79, 0xe0, 0x8d, 0xa6,
+ 0x21, 0xd7, 0xa8, 0x0a, 0x48, 0x75, 0x4f, 0x22, 0xd4, 0xd4, 0x7c, 0x42, 0xfb, 0x63, 0xa8, 0x68,
+ 0xc9, 0x45, 0x9c, 0xc3, 0x18, 0xb4, 0x9c, 0x80, 0x51, 0xab, 0x1b, 0x90, 0xed, 0x7b, 0x53, 0x37,
+ 0xc4, 0x0c, 0x25, 0x4d, 0xe5, 0xc0, 0xfa, 0xbb, 0x14, 0x94, 0x44, 0x5c, 0x8e, 0x35, 0xf5, 0x00,
+ 0xd6, 0xa7, 0x01, 0x3b, 0x1f, 0x71, 0x5b, 0xd9, 0x40, 0x12, 0x19, 0x48, 0xb4, 0x26, 0xa7, 0xa4,
+ 0xfa, 0xeb, 0x62, 0x82, 0x7c, 0x1c, 0x17, 0x21, 0x33, 0xf8, 0x42, 0x95, 0x69, 0x71, 0xdf, 0xa9,
+ 0x9b, 0x4c, 0x27, 0x79, 0x08, 0x44, 0x1a, 0x76, 0x86, 0x22, 0x1d, 0x51, 0x98, 0x38, 0xa9, 0x13,
+ 0x7c, 0x08, 0x95, 0xc4, 0x55, 0x83, 0xbe, 0xe7, 0x73, 0xb4, 0x42, 0x16, 0xef, 0xd3, 0x78, 0xa6,
+ 0x2b, 0x26, 0xc8, 0x11, 0x6c, 0xce, 0x25, 0x78, 0x5c, 0x77, 0xa0, 0xc5, 0x80, 0xb6, 0x3e, 0x9b,
+ 0xda, 0xa1, 0xb2, 0xac, 0xff, 0x36, 0xa0, 0x90, 0xe8, 0xa4, 0x09, 0x9b, 0xca, 0x7b, 0xe6, 0x78,
+ 0x1a, 0xc8, 0x73, 0x53, 0xf2, 0x9c, 0xf3, 0x39, 0xba, 0x3e, 0x9e, 0x05, 0xa0, 0x15, 0xfe, 0x10,
+ 0x56, 0xc5, 0x81, 0x4a, 0xae, 0x67, 0x19, 0x40, 0x48, 0x72, 0x43, 0xc6, 0xf4, 0x25, 0x5f, 0xb7,
+ 0xcb, 0xeb, 0x93, 0xc8, 0xf4, 0x6b, 0x93, 0x48, 0xeb, 0xbf, 0x0c, 0x20, 0x33, 0xb5, 0xc0, 0x17,
+ 0x53, 0xee, 0x5f, 0x0b, 0xf7, 0xed, 0x4f, 0xfd, 0xc0, 0xf3, 0xd5, 0x89, 0x50, 0x23, 0x4c, 0xc0,
+ 0x9c, 0xb1, 0x23, 0xad, 0x98, 0xa5, 0x72, 0xb0, 0x18, 0x30, 0xd2, 0xb7, 0x2a, 0x1f, 0x32, 0xb7,
+ 0x29, 0x1f, 0xb2, 0x8b, 0xe5, 0xc3, 0x06, 0x64, 0xb1, 0x58, 0xc0, 0x63, 0x53, 0xa0, 0x72, 0x60,
+ 0xfd, 0xd6, 0x80, 0xed, 0xc5, 0x9d, 0x50, 0x1e, 0x4c, 0x3c, 0x37, 0x10, 0xa9, 0x4c, 0x2e, 0xc0,
+ 0x46, 0x8e, 0x2a, 0xc2, 0x4a, 0x7a, 0x73, 0x87, 0xaa, 0x39, 0x6d, 0xdf, 0xa9, 0x99, 0x7d, 0xd7,
+ 0x61, 0x7d, 0xb6, 0x94, 0xd3, 0x23, 0xd7, 0xd2, 0x7a, 0x6e, 0x6d, 0xa6, 0x9e, 0x43, 0x5d, 0xff,
+ 0x63, 0x1a, 0x4f, 0xd4, 0xf7, 0xaa, 0x65, 0x2d, 0x2c, 0x67, 0x66, 0xc2, 0xf2, 0x7c, 0x3a, 0x52,
+ 0x5c, 0x48, 0x47, 0x1e, 0x43, 0x41, 0x90, 0x7a, 0xfe, 0x80, 0xfb, 0x18, 0x0a, 0xca, 0xfb, 0xe5,
+ 0xd8, 0xf9, 0x3a, 0x02, 0x7a, 0x90, 0x34, 0x7b, 0xa8, 0x28, 0x4f, 0x11, 0x28, 0x6a, 0x8b, 0xb1,
+ 0x23, 0xf3, 0xd9, 0x38, 0x2d, 0x96, 0x41, 0xaf, 0x3c, 0x76, 0x30, 0x99, 0x8d, 0x32, 0x63, 0x81,
+ 0xc9, 0xae, 0x66, 0x31, 0x73, 0x0a, 0x93, 0x5d, 0xe9, 0x98, 0xbb, 0x50, 0x12, 0x3c, 0xe3, 0x3c,
+ 0xba, 0x80, 0x41, 0x06, 0xc6, 0x8e, 0x7b, 0xa8, 0x52, 0x69, 0x81, 0xc1, 0xae, 0x12, 0x0c, 0x50,
+ 0x18, 0xec, 0x2a, 0xc2, 0x88, 0xf2, 0xe7, 0x15, 0x2d, 0x7f, 0xbe, 0x0b, 0xb9, 0x0b, 0x87, 0x8f,
+ 0x06, 0x41, 0xb5, 0x84, 0x50, 0x35, 0xb2, 0xfe, 0xca, 0x80, 0x0d, 0xdd, 0x34, 0xdf, 0x91, 0xdb,
+ 0x7c, 0x2c, 0xcf, 0xf4, 0xbc, 0xc3, 0xcc, 0x95, 0xf2, 0x45, 0x55, 0xca, 0xa3, 0x93, 0xfc, 0xc6,
+ 0x88, 0xd2, 0x0d, 0xbc, 0x8c, 0x7f, 0x78, 0x47, 0x99, 0xb9, 0xbf, 0xb3, 0xb3, 0xf7, 0xb7, 0xf5,
+ 0x0f, 0x06, 0x54, 0xe7, 0xa5, 0xfb, 0x8e, 0x74, 0x95, 0xdc, 0xed, 0x5a, 0x3b, 0x23, 0x73, 0x53,
+ 0x3b, 0x43, 0xdd, 0xed, 0x87, 0x71, 0x53, 0xe3, 0x19, 0x98, 0x75, 0x9f, 0xcb, 0xfc, 0xf1, 0xed,
+ 0x04, 0x52, 0xb9, 0x60, 0x2a, 0xce, 0x05, 0x2d, 0x0a, 0x1b, 0x2d, 0x6f, 0xe0, 0x5c, 0x38, 0xfd,
+ 0x6f, 0xc3, 0x2f, 0xbe, 0x4e, 0x53, 0xfa, 0x75, 0xfa, 0x1c, 0x56, 0xf1, 0xca, 0xfa, 0x4e, 0x98,
+ 0x35, 0x60, 0xbb, 0xcb, 0xfb, 0x9e, 0x48, 0x16, 0xae, 0xbb, 0xa1, 0xe7, 0xb3, 0x21, 0xff, 0xca,
+ 0x77, 0x42, 0xde, 0x14, 0xc9, 0x21, 0xf9, 0x31, 0xe4, 0xce, 0xb1, 0x03, 0xa5, 0x38, 0x57, 0x62,
+ 0x77, 0x93, 0x8d, 0x29, 0xaa, 0xa6, 0xad, 0x5f, 0xc1, 0xce, 0x52, 0x36, 0xaa, 0x4a, 0xba, 0x9d,
+ 0x84, 0xf7, 0x85, 0x0f, 0xba, 0x2f, 0x02, 0x55, 0x17, 0x2c, 0x14, 0x44, 0x72, 0xd6, 0xfa, 0x9d,
+ 0x01, 0x95, 0xe8, 0xce, 0xf2, 0x7c, 0x29, 0xe8, 0x0f, 0xd3, 0x20, 0x3b, 0x00, 0x53, 0x39, 0xd6,
+ 0x45, 0x9c, 0x08, 0xa5, 0xf5, 0x2b, 0x5f, 0xfa, 0xd5, 0xb1, 0x33, 0xe2, 0xb4, 0x1c, 0xc4, 0xdf,
+ 0xe8, 0x55, 0x35, 0x30, 0x13, 0xa1, 0x95, 0x5a, 0x66, 0x6a, 0x68, 0xe3, 0x4d, 0x35, 0xb4, 0xf5,
+ 0xd7, 0x29, 0x30, 0x8f, 0xbc, 0x6f, 0x5c, 0x95, 0x96, 0xcb, 0x9d, 0xeb, 0xd2, 0x1b, 0x6f, 0x2d,
+ 0x7d, 0xea, 0x76, 0xd2, 0x93, 0x9f, 0xc1, 0xdd, 0x99, 0xf2, 0x0d, 0x9d, 0xc7, 0x16, 0xd9, 0x6b,
+ 0x0e, 0xbd, 0x69, 0x5d, 0xab, 0xd8, 0xd0, 0x39, 0x5b, 0xec, 0x4a, 0x10, 0xcd, 0xe4, 0xd8, 0x09,
+ 0x51, 0x46, 0x12, 0x69, 0x59, 0x75, 0x4c, 0x14, 0x37, 0x0a, 0x02, 0xe7, 0x15, 0x47, 0xe4, 0x2c,
+ 0x22, 0xcb, 0x46, 0x41, 0xd7, 0x79, 0xc5, 0x5b, 0xec, 0xca, 0xa2, 0xb0, 0xa6, 0x69, 0x42, 0xa9,
+ 0x73, 0xe9, 0xb9, 0x37, 0x6e, 0x7d, 0xee, 0xff, 0xc2, 0x80, 0xed, 0x9a, 0x2a, 0x74, 0x9f, 0x3a,
+ 0x41, 0xe8, 0xf9, 0x4e, 0x1f, 0xc3, 0xd2, 0x0f, 0xe8, 0x62, 0xd6, 0xff, 0xa4, 0x61, 0x67, 0xa9,
+ 0x10, 0x6f, 0x75, 0x92, 0x6a, 0xb0, 0x1e, 0xdf, 0x16, 0x7f, 0x2e, 0xa8, 0x75, 0x6b, 0x93, 0x99,
+ 0xa5, 0x65, 0xe0, 0x35, 0x7d, 0x6d, 0x84, 0x16, 0xbf, 0x0f, 0xc5, 0x21, 0x0f, 0xa5, 0x26, 0x79,
+ 0xa0, 0x1e, 0x9f, 0x64, 0xc3, 0x1f, 0x86, 0x3c, 0x3c, 0x94, 0x70, 0xd2, 0x07, 0x32, 0xb7, 0xd2,
+ 0x98, 0x4d, 0x54, 0xb0, 0x7d, 0xac, 0x7c, 0xf9, 0xe6, 0xed, 0xcc, 0x08, 0xd1, 0x62, 0x13, 0x59,
+ 0x6b, 0x57, 0xfc, 0x59, 0xe8, 0x76, 0x17, 0xca, 0x1a, 0xa2, 0xc3, 0x6f, 0xdc, 0xa0, 0x71, 0xfb,
+ 0x0d, 0x6e, 0x87, 0xb3, 0xf7, 0x74, 0xb4, 0xfa, 0x92, 0x82, 0xfe, 0x58, 0x2f, 0xe8, 0x8b, 0xfb,
+ 0x8f, 0xde, 0x6a, 0x5b, 0x0e, 0x0f, 0xf4, 0x16, 0xc0, 0x6f, 0xd2, 0xb0, 0x1a, 0x51, 0x4a, 0xbf,
+ 0xfa, 0x5c, 0x6a, 0x30, 0xf4, 0xec, 0x73, 0x1e, 0xb5, 0x5e, 0x06, 0x37, 0xc5, 0x5b, 0xa1, 0x9a,
+ 0x9e, 0x77, 0xc8, 0x15, 0x8b, 0x01, 0xf9, 0x05, 0xac, 0x5f, 0x2a, 0x01, 0xd8, 0x08, 0x1b, 0xb2,
+ 0x9a, 0xa5, 0x17, 0xc8, 0xd7, 0x12, 0x5c, 0x3a, 0x95, 0x2d, 0xb1, 0xaf, 0x80, 0xcc, 0x31, 0x10,
+ 0x06, 0x94, 0x51, 0xed, 0x27, 0xb3, 0x3b, 0x45, 0x79, 0x1f, 0x3c, 0xd5, 0x59, 0xc4, 0x36, 0x33,
+ 0x2f, 0xe7, 0xc0, 0xdb, 0x2d, 0x80, 0x78, 0xe1, 0xe0, 0x26, 0x39, 0x8d, 0xdb, 0xca, 0xb9, 0xdd,
+ 0x87, 0xcd, 0xa5, 0x2b, 0x2f, 0xb1, 0xd7, 0x27, 0xb3, 0xf6, 0x7a, 0x77, 0xd9, 0x2e, 0x12, 0xd1,
+ 0x74, 0xeb, 0xfc, 0x6f, 0x1a, 0xca, 0x11, 0xde, 0x5b, 0x1d, 0xb8, 0x77, 0x01, 0x7c, 0x3e, 0xf4,
+ 0x79, 0x10, 0x88, 0x72, 0x5a, 0xac, 0x9b, 0xa7, 0x1a, 0x44, 0xcf, 0x91, 0x56, 0xe6, 0xbb, 0xc0,
+ 0x68, 0xf3, 0xc0, 0x09, 0x70, 0x56, 0xb5, 0xf6, 0x23, 0x98, 0x40, 0x79, 0x06, 0x1b, 0x31, 0x4a,
+ 0xe8, 0x3b, 0x6c, 0xa8, 0x1e, 0x32, 0x00, 0xe5, 0xa9, 0x6a, 0xbb, 0x0b, 0x9c, 0xa0, 0x87, 0x08,
+ 0x18, 0x53, 0x08, 0x5b, 0x80, 0x89, 0xe5, 0x64, 0x27, 0xa8, 0xef, 0xb9, 0x17, 0xce, 0x50, 0xd5,
+ 0x3d, 0xb2, 0x3b, 0x54, 0x47, 0x10, 0x79, 0x0c, 0xf7, 0x02, 0xee, 0x3b, 0x6c, 0xe4, 0xbc, 0xe2,
+ 0x03, 0x7b, 0x06, 0xbb, 0x88, 0x0d, 0xad, 0xcd, 0x64, 0xba, 0xa9, 0xd1, 0xdd, 0x85, 0x9c, 0xea,
+ 0x9b, 0xca, 0x24, 0x51, 0x8d, 0xc8, 0x47, 0xb0, 0xa6, 0xf1, 0xd3, 0x5a, 0xab, 0x25, 0x6a, 0x26,
+ 0x13, 0x4a, 0xdb, 0x1f, 0xc0, 0x6a, 0xdc, 0x6b, 0xc4, 0xb7, 0x4f, 0x99, 0x51, 0x96, 0x22, 0x20,
+ 0x3e, 0x28, 0xea, 0x48, 0x5a, 0x65, 0x17, 0x23, 0x89, 0x8c, 0xe1, 0x59, 0x26, 0x5f, 0x30, 0x81,
+ 0x6e, 0xf4, 0xf1, 0xad, 0x41, 0xb6, 0x88, 0x94, 0x05, 0x02, 0x11, 0x64, 0xc9, 0xa2, 0xc2, 0x08,
+ 0x85, 0x72, 0xac, 0x68, 0x61, 0xd7, 0xe8, 0xe5, 0xf5, 0xa3, 0x9b, 0x54, 0x3c, 0x07, 0xc2, 0xb7,
+ 0xd8, 0xd5, 0x88, 0x85, 0xf0, 0x10, 0x4e, 0x9e, 0x41, 0x91, 0xbb, 0x2f, 0x1d, 0xdf, 0x73, 0xc7,
+ 0x5c, 0xe5, 0x5e, 0xe5, 0xfd, 0xbd, 0x1b, 0x19, 0x36, 0x12, 0x5c, 0xe4, 0xa6, 0x13, 0x93, 0x2a,
+ 0xac, 0xf4, 0xbd, 0x31, 0xf2, 0x91, 0x2a, 0x8e, 0x86, 0xc2, 0xac, 0xe7, 0xd3, 0x21, 0x73, 0x1d,
+ 0xa1, 0x12, 0x67, 0xa0, 0xb4, 0x56, 0x8c, 0x61, 0xcd, 0x81, 0xee, 0x81, 0xd9, 0xd7, 0x7a, 0x60,
+ 0x6e, 0xc1, 0x03, 0xad, 0x5f, 0xce, 0xab, 0x0b, 0xcd, 0x90, 0x87, 0x4c, 0xbb, 0xd3, 0x6e, 0x98,
+ 0x77, 0x48, 0x19, 0x80, 0x36, 0x9e, 0xd0, 0x46, 0xb7, 0xdb, 0xec, 0xb4, 0x4d, 0x83, 0x00, 0xe4,
+ 0x9a, 0x4f, 0xda, 0x1d, 0xda, 0x30, 0x53, 0x84, 0x40, 0xf9, 0xb8, 0x76, 0xd2, 0x6d, 0xd8, 0xa7,
+ 0x9d, 0x6e, 0xb3, 0xd7, 0xfc, 0xb2, 0x61, 0xa6, 0x49, 0x11, 0x56, 0xce, 0xda, 0xcf, 0xdb, 0x9d,
+ 0xaf, 0xda, 0x66, 0xc6, 0xfa, 0x02, 0x2a, 0x73, 0xbb, 0x26, 0x15, 0x28, 0x9e, 0xb5, 0xbb, 0xa7,
+ 0x8d, 0x7a, 0xf3, 0xb8, 0xd9, 0x38, 0x32, 0xef, 0x90, 0x55, 0x28, 0x9c, 0xd2, 0x46, 0xf7, 0xec,
+ 0xb0, 0xd5, 0xec, 0x99, 0x86, 0x58, 0xef, 0xb4, 0xd3, 0xed, 0xa9, 0x71, 0x0a, 0xc7, 0xb4, 0x73,
+ 0x74, 0x56, 0xef, 0x89, 0xf5, 0xd3, 0xd6, 0xbf, 0xa7, 0xe1, 0x47, 0x47, 0x2c, 0xb8, 0x3c, 0xf7,
+ 0x98, 0x3f, 0x88, 0x53, 0xa9, 0xfa, 0x25, 0xf3, 0x43, 0x19, 0x73, 0x6f, 0xd5, 0x97, 0xfc, 0x0c,
+ 0x4c, 0x99, 0xec, 0x04, 0x7c, 0xc4, 0xfb, 0xd8, 0x3c, 0x9e, 0xcd, 0x97, 0x92, 0xa7, 0x78, 0x5a,
+ 0x41, 0xcc, 0x6e, 0x8c, 0x18, 0x97, 0x8c, 0x69, 0xad, 0x64, 0xfc, 0x2e, 0xcb, 0xe2, 0xcc, 0xad,
+ 0xcb, 0xe2, 0xec, 0xf7, 0x56, 0x16, 0x6f, 0x41, 0x5e, 0x60, 0xf8, 0x53, 0x57, 0x16, 0xdf, 0x59,
+ 0xba, 0x32, 0x66, 0x57, 0x74, 0xea, 0x06, 0xe4, 0x53, 0xd8, 0xba, 0x74, 0x86, 0x97, 0x23, 0x67,
+ 0x78, 0x19, 0xda, 0x01, 0xde, 0x82, 0xb6, 0xe7, 0xda, 0xf8, 0xd4, 0x82, 0x11, 0x30, 0x4f, 0xef,
+ 0xc6, 0x08, 0x5d, 0x9c, 0xef, 0xb8, 0x4f, 0xc5, 0xac, 0xf5, 0x6b, 0x03, 0xee, 0xc6, 0xc6, 0xa3,
+ 0x53, 0x57, 0x33, 0x9b, 0xe6, 0xc3, 0xc6, 0x8c, 0x0f, 0xbf, 0x07, 0xc5, 0xa4, 0xf5, 0x2a, 0xad,
+ 0x54, 0xa0, 0x10, 0xf7, 0x5e, 0xdf, 0x20, 0x4f, 0xfa, 0xb5, 0xf2, 0xfc, 0x67, 0x1a, 0x3e, 0x88,
+ 0xe5, 0xa9, 0x7b, 0xe3, 0x09, 0xf3, 0xf9, 0x32, 0x9f, 0xfa, 0x02, 0x8a, 0x8a, 0xb1, 0x76, 0xb3,
+ 0x3d, 0x8a, 0x3c, 0xe5, 0x8d, 0xf4, 0x0f, 0xe4, 0xaa, 0x14, 0x24, 0x13, 0xbc, 0x9b, 0x97, 0x19,
+ 0x3e, 0x75, 0x6b, 0xc3, 0xa7, 0x97, 0x1a, 0x5e, 0x37, 0x5a, 0xe6, 0x2d, 0x8c, 0x96, 0x7d, 0x9d,
+ 0x92, 0xb6, 0x7f, 0x6b, 0x40, 0x4e, 0x42, 0xf0, 0x2d, 0x41, 0xe9, 0x41, 0xfb, 0x13, 0x46, 0xe9,
+ 0x46, 0xbe, 0xf3, 0x2e, 0x1c, 0xbf, 0xd4, 0x92, 0xe3, 0xf7, 0x29, 0x54, 0xe6, 0x8e, 0x1f, 0xee,
+ 0x68, 0xd9, 0xe9, 0x2b, 0xcf, 0x9e, 0xbe, 0xf8, 0xf0, 0x65, 0x92, 0xc3, 0x67, 0xfd, 0xbd, 0x01,
+ 0xef, 0xcc, 0x9b, 0x61, 0xd6, 0xbb, 0xb6, 0x64, 0x92, 0x8e, 0x1e, 0x64, 0x20, 0xe5, 0x8a, 0x74,
+ 0xaf, 0xe0, 0x7b, 0xf5, 0xaf, 0x3f, 0x83, 0xf7, 0x62, 0xb9, 0xbe, 0x74, 0x82, 0x29, 0xde, 0x87,
+ 0x51, 0xb8, 0x7d, 0x83, 0xdf, 0xcf, 0xc7, 0xee, 0xd4, 0x62, 0xec, 0x7e, 0x0c, 0x90, 0x3c, 0xfe,
+ 0x2d, 0xfd, 0x11, 0x6a, 0xe6, 0xbd, 0xaa, 0x10, 0xfd, 0x3f, 0xf5, 0xaf, 0x69, 0x28, 0x08, 0xc2,
+ 0xb7, 0x08, 0x98, 0x5b, 0x90, 0x0f, 0xf9, 0x78, 0x62, 0x0f, 0x9c, 0xa8, 0x23, 0xb3, 0x22, 0xc6,
+ 0x47, 0x0e, 0xbe, 0x40, 0x09, 0xdf, 0xf4, 0xa6, 0x42, 0x3b, 0x7d, 0xe5, 0x9a, 0xa0, 0x40, 0x5d,
+ 0xde, 0x5f, 0xfa, 0x82, 0x99, 0xb9, 0xdd, 0x0b, 0x66, 0x6c, 0xee, 0x9c, 0x16, 0x6b, 0xe7, 0x9b,
+ 0x94, 0x2b, 0x0b, 0x4d, 0x4a, 0xfd, 0x71, 0x3d, 0x3f, 0xfb, 0xb8, 0xfe, 0xa7, 0xb0, 0xe9, 0xb8,
+ 0x21, 0xf7, 0x5d, 0x36, 0xb2, 0x35, 0xa9, 0x02, 0xf5, 0xd4, 0xbc, 0x97, 0x48, 0x24, 0x8f, 0x6e,
+ 0x53, 0x21, 0x27, 0x32, 0x06, 0x32, 0x2b, 0x5e, 0x77, 0x16, 0x67, 0xb6, 0x8f, 0xa1, 0x7a, 0x13,
+ 0xc1, 0x9b, 0x5e, 0x13, 0x0b, 0x5a, 0xb2, 0xfa, 0x2c, 0x93, 0xcf, 0x9a, 0x39, 0x5a, 0xc6, 0x5f,
+ 0xd3, 0xe4, 0x3f, 0x00, 0x01, 0xef, 0x5b, 0xff, 0x9c, 0x51, 0x06, 0x97, 0x09, 0xd5, 0xe7, 0xea,
+ 0x49, 0x5b, 0xcb, 0x61, 0xcb, 0xfb, 0x3b, 0xf3, 0x4f, 0xda, 0xf8, 0xa9, 0x52, 0x5a, 0xd4, 0x91,
+ 0xfa, 0x8b, 0xf1, 0x58, 0xa5, 0x9e, 0x22, 0xad, 0x90, 0x99, 0x9b, 0x5e, 0x5e, 0x6c, 0xcc, 0x26,
+ 0xd6, 0xea, 0x75, 0x9c, 0xb0, 0x99, 0xb1, 0x2a, 0x26, 0xcb, 0xc1, 0x74, 0x3c, 0x66, 0xfe, 0xb5,
+ 0x3d, 0x93, 0x23, 0xae, 0x2a, 0x68, 0x9c, 0x6b, 0x97, 0x85, 0x9f, 0xf7, 0xc5, 0x99, 0xb4, 0xf1,
+ 0xe9, 0x53, 0xa5, 0x7f, 0xbe, 0x3a, 0xa8, 0x27, 0x8e, 0xfb, 0xe2, 0xe6, 0x4c, 0xe6, 0x97, 0x70,
+ 0x17, 0xff, 0x8a, 0xc4, 0x97, 0xa5, 0x0b, 0xe6, 0x8c, 0xa6, 0x3e, 0x97, 0x59, 0x64, 0x0e, 0xb7,
+ 0x7d, 0x7f, 0x61, 0xdb, 0x34, 0x42, 0x3f, 0x96, 0xd8, 0x98, 0x73, 0x6d, 0xf8, 0x4b, 0xa0, 0xd6,
+ 0xd7, 0x52, 0xad, 0x4a, 0x31, 0x79, 0xc8, 0x9c, 0xd6, 0xba, 0x5d, 0xf9, 0xdf, 0x22, 0xad, 0xf5,
+ 0x1a, 0x36, 0xfe, 0x46, 0x89, 0xa9, 0xc8, 0x71, 0xad, 0x57, 0x3b, 0x91, 0xe3, 0x34, 0x59, 0x83,
+ 0xd5, 0x5a, 0xbb, 0x76, 0xf2, 0x75, 0xb7, 0xd9, 0x95, 0xa0, 0x8c, 0xc8, 0x6e, 0x9a, 0x6d, 0xfb,
+ 0x94, 0x76, 0x30, 0x63, 0x32, 0xb3, 0x56, 0x00, 0x1b, 0xcb, 0x04, 0x21, 0x5b, 0xb0, 0xa9, 0xd2,
+ 0x24, 0xbb, 0x43, 0xed, 0xb3, 0x76, 0xb7, 0xd1, 0xb3, 0x7b, 0x5f, 0x9f, 0x8a, 0x8c, 0x8b, 0x40,
+ 0xb9, 0x55, 0xeb, 0xf6, 0x1a, 0xd4, 0xa6, 0x22, 0x5d, 0xa0, 0x22, 0x2b, 0xba, 0x07, 0xeb, 0xcf,
+ 0x3a, 0x87, 0x76, 0xab, 0xd6, 0xae, 0x3d, 0xd1, 0x26, 0x52, 0x64, 0x1d, 0x2a, 0xf2, 0x1f, 0xb4,
+ 0x04, 0x98, 0xb6, 0x5e, 0x41, 0x49, 0x76, 0x43, 0x28, 0xef, 0x7b, 0xfe, 0x80, 0x7c, 0x12, 0x3d,
+ 0x01, 0xcb, 0xf7, 0x54, 0x55, 0xed, 0x2c, 0x79, 0x4a, 0x2d, 0x6a, 0x4f, 0xa9, 0x1a, 0x15, 0xb6,
+ 0x78, 0x54, 0xc5, 0xb5, 0xe4, 0x05, 0xb5, 0xa8, 0xf5, 0x7a, 0xac, 0x13, 0x80, 0xa4, 0xd7, 0xb4,
+ 0xf0, 0xf8, 0x6c, 0x2c, 0x3e, 0x3e, 0xef, 0x40, 0x01, 0x7b, 0x56, 0x13, 0x16, 0x5e, 0x46, 0xbf,
+ 0x35, 0x0a, 0xc0, 0x29, 0x0b, 0x2f, 0x3f, 0xfc, 0x39, 0xe4, 0xa3, 0xfc, 0x69, 0x69, 0xe6, 0x98,
+ 0xfc, 0x56, 0x6a, 0x90, 0x12, 0xe4, 0x0f, 0xcf, 0x9a, 0x27, 0x47, 0x76, 0xf3, 0xc8, 0x4c, 0xfd,
+ 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0x67, 0x9b, 0xb9, 0xcd, 0x2b, 0x00, 0x00,
+}
diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule/BUILD.bazel b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule/BUILD.bazel
deleted file mode 100644
index f694f3c0..00000000
--- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule/BUILD.bazel
+++ /dev/null
@@ -1,35 +0,0 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
-
-package(default_visibility = ["//visibility:public"])
-
-go_library(
- name = "httprule",
- srcs = [
- "compile.go",
- "parse.go",
- "types.go",
- ],
- importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule",
- deps = ["//utilities"],
-)
-
-go_test(
- name = "httprule_test",
- size = "small",
- srcs = [
- "compile_test.go",
- "parse_test.go",
- "types_test.go",
- ],
- embed = [":httprule"],
- deps = [
- "//utilities",
- "@com_github_golang_glog//:glog",
- ],
-)
-
-alias(
- name = "go_default_library",
- actual = ":httprule",
- visibility = ["//:__subpackages__"],
-)
diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel
deleted file mode 100644
index b5140a3c..00000000
--- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel
+++ /dev/null
@@ -1,97 +0,0 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
-
-package(default_visibility = ["//visibility:public"])
-
-go_library(
- name = "runtime",
- srcs = [
- "context.go",
- "convert.go",
- "doc.go",
- "errors.go",
- "fieldmask.go",
- "handler.go",
- "marshal_httpbodyproto.go",
- "marshal_json.go",
- "marshal_jsonpb.go",
- "marshal_proto.go",
- "marshaler.go",
- "marshaler_registry.go",
- "mux.go",
- "pattern.go",
- "proto2_convert.go",
- "query.go",
- ],
- importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime",
- deps = [
- "//internal/httprule",
- "//utilities",
- "@go_googleapis//google/api:httpbody_go_proto",
- "@io_bazel_rules_go//proto/wkt:field_mask_go_proto",
- "@org_golang_google_grpc//codes",
- "@org_golang_google_grpc//grpclog",
- "@org_golang_google_grpc//health/grpc_health_v1",
- "@org_golang_google_grpc//metadata",
- "@org_golang_google_grpc//status",
- "@org_golang_google_protobuf//encoding/protojson",
- "@org_golang_google_protobuf//proto",
- "@org_golang_google_protobuf//reflect/protoreflect",
- "@org_golang_google_protobuf//reflect/protoregistry",
- "@org_golang_google_protobuf//types/known/durationpb",
- "@org_golang_google_protobuf//types/known/structpb",
- "@org_golang_google_protobuf//types/known/timestamppb",
- "@org_golang_google_protobuf//types/known/wrapperspb",
- ],
-)
-
-go_test(
- name = "runtime_test",
- size = "small",
- srcs = [
- "context_test.go",
- "convert_test.go",
- "errors_test.go",
- "fieldmask_test.go",
- "handler_test.go",
- "marshal_httpbodyproto_test.go",
- "marshal_json_test.go",
- "marshal_jsonpb_test.go",
- "marshal_proto_test.go",
- "marshaler_registry_test.go",
- "mux_internal_test.go",
- "mux_test.go",
- "pattern_test.go",
- "query_fuzz_test.go",
- "query_test.go",
- ],
- embed = [":runtime"],
- deps = [
- "//runtime/internal/examplepb",
- "//utilities",
- "@com_github_google_go_cmp//cmp",
- "@com_github_google_go_cmp//cmp/cmpopts",
- "@go_googleapis//google/api:httpbody_go_proto",
- "@go_googleapis//google/rpc:errdetails_go_proto",
- "@go_googleapis//google/rpc:status_go_proto",
- "@io_bazel_rules_go//proto/wkt:field_mask_go_proto",
- "@org_golang_google_grpc//:go_default_library",
- "@org_golang_google_grpc//codes",
- "@org_golang_google_grpc//health/grpc_health_v1",
- "@org_golang_google_grpc//metadata",
- "@org_golang_google_grpc//status",
- "@org_golang_google_protobuf//encoding/protojson",
- "@org_golang_google_protobuf//proto",
- "@org_golang_google_protobuf//testing/protocmp",
- "@org_golang_google_protobuf//types/known/durationpb",
- "@org_golang_google_protobuf//types/known/emptypb",
- "@org_golang_google_protobuf//types/known/structpb",
- "@org_golang_google_protobuf//types/known/timestamppb",
- "@org_golang_google_protobuf//types/known/wrapperspb",
- ],
-)
-
-alias(
- name = "go_default_library",
- actual = ":runtime",
- visibility = ["//visibility:public"],
-)
diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/utilities/BUILD.bazel b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/utilities/BUILD.bazel
deleted file mode 100644
index b8940946..00000000
--- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/utilities/BUILD.bazel
+++ /dev/null
@@ -1,31 +0,0 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
-
-package(default_visibility = ["//visibility:public"])
-
-go_library(
- name = "utilities",
- srcs = [
- "doc.go",
- "pattern.go",
- "readerfactory.go",
- "string_array_flag.go",
- "trie.go",
- ],
- importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/utilities",
-)
-
-go_test(
- name = "utilities_test",
- size = "small",
- srcs = [
- "string_array_flag_test.go",
- "trie_test.go",
- ],
- deps = [":utilities"],
-)
-
-alias(
- name = "go_default_library",
- actual = ":utilities",
- visibility = ["//visibility:public"],
-)
diff --git a/vendor/github.com/openzipkin/zipkin-go/.gitattributes b/vendor/github.com/openzipkin/zipkin-go/.gitattributes
new file mode 100644
index 00000000..fcadb2cf
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/.gitattributes
@@ -0,0 +1 @@
+* text eol=lf
diff --git a/vendor/github.com/openzipkin/zipkin-go/.gitignore b/vendor/github.com/openzipkin/zipkin-go/.gitignore
new file mode 100644
index 00000000..11b90db8
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/.gitignore
@@ -0,0 +1,26 @@
+# Compiled Object files, Static and Dynamic libs (Shared Objects)
+*.o
+*.a
+*.so
+
+# Folders
+_obj
+_test
+
+# Architecture specific extensions/prefixes
+*.[568vq]
+[568vq].out
+
+*.cgo1.go
+*.cgo2.c
+_cgo_defun.c
+_cgo_gotypes.go
+_cgo_export.*
+
+_testmain.go
+
+*.exe
+*.test
+*.prof
+
+.idea
diff --git a/vendor/github.com/openzipkin/zipkin-go/.golangci.yml b/vendor/github.com/openzipkin/zipkin-go/.golangci.yml
new file mode 100644
index 00000000..e990f027
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/.golangci.yml
@@ -0,0 +1,30 @@
+run:
+ deadline: 5m
+ skip-dirs:
+ - zipkin_proto3
+
+linters:
+ disable-all: true
+ enable:
+ - dupl
+ - goconst
+ - gocyclo
+ - gofmt
+ - revive
+ - govet
+ - ineffassign
+ - lll
+ - misspell
+ - nakedret
+ - unparam
+ - unused
+
+linters-settings:
+ dupl:
+ threshold: 400
+ lll:
+ line-length: 170
+ gocyclo:
+ min-complexity: 20
+ golint:
+ min-confidence: 0.85
diff --git a/vendor/github.com/openzipkin/zipkin-go/LICENSE b/vendor/github.com/openzipkin/zipkin-go/LICENSE
new file mode 100644
index 00000000..2ff72246
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/LICENSE
@@ -0,0 +1,201 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all
+other entities that control, are controlled by, or are under common
+control with that entity. For the purposes of this definition,
+"control" means (i) the power, direct or indirect, to cause the
+direction or management of such entity, whether by contract or
+otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation
+source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or
+Object form, made available under the License, as indicated by a
+copyright notice that is included in or attached to the work
+(an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object
+form, that is based on (or derived from) the Work and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship. For the purposes
+of this License, Derivative Works shall not include works that remain
+separable from, or merely link (or bind by name) to the interfaces of,
+the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including
+the original version of the Work and any modifications or additions
+to that Work or Derivative Works thereof, that is intentionally
+submitted to Licensor for inclusion in the Work by the copyright owner
+or by an individual or Legal Entity authorized to submit on behalf of
+the copyright owner. For the purposes of this definition, "submitted"
+means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems,
+and issue tracking systems that are managed by, or on behalf of, the
+Licensor for the purpose of discussing and improving the Work, but
+excluding communication that is conspicuously marked or otherwise
+designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work,
+where such license applies only to those patent claims licensable
+by such Contributor that are necessarily infringed by their
+Contribution(s) alone or by combination of their Contribution(s)
+with the Work to which such Contribution(s) was submitted. If You
+institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work
+or a Contribution incorporated within the Work constitutes direct
+or contributory patent infringement, then any patent licenses
+granted to You under this License for that Work shall terminate
+as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+Work or Derivative Works thereof in any medium, with or without
+modifications, and in Source or Object form, provided that You
+meet the following conditions:
+
+(a) You must give any other recipients of the Work or
+Derivative Works a copy of this License; and
+
+(b) You must cause any modified files to carry prominent notices
+stating that You changed the files; and
+
+(c) You must retain, in the Source form of any Derivative Works
+that You distribute, all copyright, patent, trademark, and
+attribution notices from the Source form of the Work,
+excluding those notices that do not pertain to any part of
+the Derivative Works; and
+
+(d) If the Work includes a "NOTICE" text file as part of its
+distribution, then any Derivative Works that You distribute must
+include a readable copy of the attribution notices contained
+within such NOTICE file, excluding those notices that do not
+pertain to any part of the Derivative Works, in at least one
+of the following places: within a NOTICE text file distributed
+as part of the Derivative Works; within the Source form or
+documentation, if provided along with the Derivative Works; or,
+within a display generated by the Derivative Works, if and
+wherever such third-party notices normally appear. The contents
+of the NOTICE file are for informational purposes only and
+do not modify the License. You may add Your own attribution
+notices within Derivative Works that You distribute, alongside
+or as an addendum to the NOTICE text from the Work, provided
+that such additional attribution notices cannot be construed
+as modifying the License.
+
+You may add Your own copyright statement to Your modifications and
+may provide additional or different license terms and conditions
+for use, reproduction, or distribution of Your modifications, or
+for any such Derivative Works as a whole, provided Your use,
+reproduction, and distribution of the Work otherwise complies with
+the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "{}"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+Copyright 2017 The OpenZipkin Authors
+
+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.
diff --git a/vendor/github.com/openzipkin/zipkin-go/Makefile b/vendor/github.com/openzipkin/zipkin-go/Makefile
new file mode 100644
index 00000000..a1e59147
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/Makefile
@@ -0,0 +1,44 @@
+# Copyright 2022 The OpenZipkin Authors
+#
+# 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.
+
+.DEFAULT_GOAL := test
+
+.PHONY: test
+test:
+ # MallocNanoZone env var avoids problems in macOS Monterey: golang/go#49138
+ MallocNanoZone=0 go test -v -race -cover ./...
+
+.PHONY: bench
+bench:
+ go test -v -run - -bench . -benchmem ./...
+
+.PHONY: protoc
+protoc:
+ protoc --go_out=module=github.com/openzipkin/zipkin-go:. proto/zipkin_proto3/zipkin.proto
+ protoc --go_out=module=github.com/openzipkin/zipkin-go:. proto/testing/*.proto
+ protoc --go-grpc_out=module=github.com/openzipkin/zipkin-go:. proto/testing/*.proto
+
+.PHONY: lint
+lint:
+ # Ignore grep's exit code since no match returns 1.
+ echo 'linting...' ; golint ./...
+
+.PHONY: vet
+vet:
+ go vet ./...
+
+.PHONY: all
+all: vet lint test bench
+
+.PHONY: example
diff --git a/vendor/github.com/openzipkin/zipkin-go/README.md b/vendor/github.com/openzipkin/zipkin-go/README.md
new file mode 100644
index 00000000..05000f80
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/README.md
@@ -0,0 +1,116 @@
+
+
+# Zipkin Library for Go
+
+[![GHA](https://github.com/openzipkin/zipkin-go/actions/workflows/ci.yml/badge.svg?event=push)](https://github.com/openzipkin/zipkin-go/actions/workflows/ci.yml)
+[![codecov](https://codecov.io/gh/openzipkin/zipkin-go/branch/master/graph/badge.svg?token=gXdWofFlsq)](https://codecov.io/gh/openzipkin/zipkin-go)
+[![Go Report Card](https://goreportcard.com/badge/github.com/openzipkin/zipkin-go)](https://goreportcard.com/report/github.com/openzipkin/zipkin-go)
+[![GoDoc](https://godoc.org/github.com/openzipkin/zipkin-go?status.svg)](https://godoc.org/github.com/openzipkin/zipkin-go)
+[![Gitter chat](https://badges.gitter.im/openzipkin/zipkin.svg)](https://gitter.im/openzipkin/zipkin?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![Sourcegraph](https://sourcegraph.com/github.com/openzipkin/zipkin-go/-/badge.svg)](https://sourcegraph.com/github.com/openzipkin/zipkin-go?badge)
+
+Zipkin Go is the official Go Tracer / Tracing implementation for Zipkin,
+supported by the OpenZipkin community.
+
+## package organization
+`zipkin-go` is built with interoperability in mind within the OpenZipkin
+community and even 3rd parties, the library consists of several packages.
+
+The main tracing implementation can be found in the root folder of this
+repository. Reusable parts not considered core implementation or deemed
+beneficiary for usage by others are placed in their own packages within this
+repository.
+
+### model
+This library implements the Zipkin V2 Span Model which is available in the model
+package. It contains a Go data model compatible with the Zipkin V2 API and can
+automatically sanitize, parse and (de)serialize to and from the required JSON
+representation as used by the official Zipkin V2 Collectors.
+
+### propagation
+The propagation package and B3 subpackage hold the logic for propagating
+SpanContext (span identifiers and sampling flags) between services participating
+in traces. Currently Zipkin B3 Propagation is supported for HTTP and GRPC.
+
+### middleware
+The middleware subpackages contain officially supported middleware handlers and
+tracing wrappers.
+
+#### http
+An easy to use http.Handler middleware for tracing server side requests is
+provided. This allows one to use this middleware in applications using
+standard library servers as well as most available higher level frameworks. Some
+frameworks will have their own instrumentation and middleware that maps better
+for their ecosystem.
+
+For HTTP client operations `NewTransport` can return a `http.RoundTripper`
+implementation that can either wrap the standard http.Client's Transport or a
+custom provided one and add per request tracing. Since HTTP Requests can have
+one or multiple redirects it is advisable to always enclose HTTP Client calls
+with a `Span` either around the `*http.Client` call level or parent function
+level.
+
+For convenience `NewClient` is provided which returns a HTTP Client which embeds
+`*http.Client` and provides an `application span` around the HTTP calls when
+calling the `DoWithAppSpan()` method.
+
+#### grpc
+Easy to use grpc.StatsHandler middleware are provided for tracing gRPC server
+and client requests.
+
+For a server, pass `NewServerHandler` when calling `NewServer`, e.g.,
+
+```go
+import (
+ "google.golang.org/grpc"
+ zipkingrpc "github.com/openzipkin/zipkin-go/middleware/grpc"
+)
+
+server = grpc.NewServer(grpc.StatsHandler(zipkingrpc.NewServerHandler(tracer)))
+```
+
+For a client, pass `NewClientHandler` when calling `Dial`, e.g.,
+
+```go
+import (
+ "google.golang.org/grpc"
+ zipkingrpc "github.com/openzipkin/zipkin-go/middleware/grpc"
+)
+
+conn, err = grpc.Dial(addr, grpc.WithStatsHandler(zipkingrpc.NewClientHandler(tracer)))
+```
+
+### reporter
+The reporter package holds the interface which the various Reporter
+implementations use. It is exported into its own package as it can be used by
+3rd parties to use these Reporter packages in their own libraries for exporting
+to the Zipkin ecosystem. The `zipkin-go` tracer also uses the interface to
+accept 3rd party Reporter implementations.
+
+#### HTTP Reporter
+Most common Reporter type used by Zipkin users transporting Spans to the Zipkin
+server using JSON over HTTP. The reporter holds a buffer and reports to the
+backend asynchronously.
+
+#### Kafka Reporter
+High performance Reporter transporting Spans to the Zipkin server using a Kafka
+Producer digesting JSON V2 Spans. The reporter uses the
+[Sarama async producer](https://pkg.go.dev/github.com/IBM/sarama#AsyncProducer)
+underneath.
+
+## usage and examples
+[HTTP Server Example](examples/httpserver_test.go)
diff --git a/vendor/github.com/openzipkin/zipkin-go/context.go b/vendor/github.com/openzipkin/zipkin-go/context.go
new file mode 100644
index 00000000..557dcb30
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/context.go
@@ -0,0 +1,63 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin
+
+import (
+ "context"
+
+ "github.com/openzipkin/zipkin-go/model"
+)
+
+var defaultNoopSpan = &noopSpan{}
+
+// SpanFromContext retrieves a Zipkin Span from Go's context propagation
+// mechanism if found. If not found, returns nil.
+func SpanFromContext(ctx context.Context) Span {
+ if s, ok := ctx.Value(spanKey).(Span); ok {
+ return s
+ }
+ return nil
+}
+
+// SpanOrNoopFromContext retrieves a Zipkin Span from Go's context propagation
+// mechanism if found. If not found, returns a noopSpan.
+// This function typically is used for modules that want to provide existing
+// Zipkin spans with additional data, but can't guarantee that spans are
+// properly propagated. It is preferred to use SpanFromContext() and test for
+// Nil instead of using this function.
+func SpanOrNoopFromContext(ctx context.Context) Span {
+ if s, ok := ctx.Value(spanKey).(Span); ok {
+ return s
+ }
+ return defaultNoopSpan
+}
+
+// NewContext stores a Zipkin Span into Go's context propagation mechanism.
+func NewContext(ctx context.Context, s Span) context.Context {
+ return context.WithValue(ctx, spanKey, s)
+}
+
+// BaggageFromContext takes a context and returns access to BaggageFields if
+// available. Returns nil if there are no BaggageFields found in context.
+func BaggageFromContext(ctx context.Context) model.BaggageFields {
+ if span := SpanFromContext(ctx); span != nil {
+ return span.Context().Baggage
+ }
+ return nil
+}
+
+type ctxKey struct{}
+
+var spanKey = ctxKey{}
diff --git a/vendor/github.com/openzipkin/zipkin-go/doc.go b/vendor/github.com/openzipkin/zipkin-go/doc.go
new file mode 100644
index 00000000..23af8696
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/doc.go
@@ -0,0 +1,20 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin implements a native Zipkin instrumentation library for Go.
+
+See https://zipkin.io for more information about Zipkin.
+*/
+package zipkin
diff --git a/vendor/github.com/openzipkin/zipkin-go/endpoint.go b/vendor/github.com/openzipkin/zipkin-go/endpoint.go
new file mode 100644
index 00000000..cb538e6c
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/endpoint.go
@@ -0,0 +1,81 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin
+
+import (
+ "fmt"
+ "net"
+ "strconv"
+ "strings"
+
+ "github.com/openzipkin/zipkin-go/model"
+)
+
+// NewEndpoint creates a new endpoint given the provided serviceName and
+// hostPort.
+func NewEndpoint(serviceName string, hostPort string) (*model.Endpoint, error) {
+ e := &model.Endpoint{
+ ServiceName: serviceName,
+ }
+
+ if hostPort == "" || hostPort == ":0" {
+ if serviceName == "" {
+ // if all properties are empty we should not have an Endpoint object.
+ return nil, nil
+ }
+ return e, nil
+ }
+
+ if strings.IndexByte(hostPort, ':') < 0 {
+ hostPort += ":0"
+ }
+
+ host, port, err := net.SplitHostPort(hostPort)
+ if err != nil {
+ return nil, err
+ }
+
+ p, err := strconv.ParseUint(port, 10, 16)
+ if err != nil {
+ return nil, err
+ }
+ e.Port = uint16(p)
+
+ addrs, err := net.LookupIP(host)
+ if err != nil {
+ return nil, fmt.Errorf("host lookup failure: %w", err)
+ }
+
+ for i := range addrs {
+ addr := addrs[i].To4()
+ if addr == nil {
+ // IPv6 - 16 bytes
+ if e.IPv6 == nil {
+ e.IPv6 = addrs[i].To16()
+ }
+ } else {
+ // IPv4 - 4 bytes
+ if e.IPv4 == nil {
+ e.IPv4 = addr
+ }
+ }
+ if e.IPv4 != nil && e.IPv6 != nil {
+ // Both IPv4 & IPv6 have been set, done...
+ break
+ }
+ }
+
+ return e, nil
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/idgenerator/idgenerator.go b/vendor/github.com/openzipkin/zipkin-go/idgenerator/idgenerator.go
new file mode 100644
index 00000000..0cb5a96f
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/idgenerator/idgenerator.go
@@ -0,0 +1,130 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 idgenerator contains several Span and Trace ID generators which can be
+used by the Zipkin tracer. Additional third party generators can be plugged in
+if they adhere to the IDGenerator interface.
+*/
+package idgenerator
+
+import (
+ "math/rand"
+ "sync"
+ "time"
+
+ "github.com/openzipkin/zipkin-go/model"
+)
+
+var (
+ seededIDGen = rand.New(rand.NewSource(time.Now().UnixNano()))
+ // NewSource returns a new pseudo-random Source seeded with the given value.
+ // Unlike the default Source used by top-level functions, this source is not
+ // safe for concurrent use by multiple goroutines. Hence the need for a mutex.
+ seededIDLock sync.Mutex
+)
+
+// IDGenerator interface can be used to provide the Zipkin Tracer with custom
+// implementations to generate Span and Trace IDs.
+type IDGenerator interface {
+ SpanID(traceID model.TraceID) model.ID // Generates a new Span ID
+ TraceID() model.TraceID // Generates a new Trace ID
+}
+
+// NewRandom64 returns an ID Generator which can generate 64 bit trace and span
+// id's
+func NewRandom64() IDGenerator {
+ return &randomID64{}
+}
+
+// NewRandom128 returns an ID Generator which can generate 128 bit trace and 64
+// bit span id's
+func NewRandom128() IDGenerator {
+ return &randomID128{}
+}
+
+// NewRandomTimestamped generates 128 bit time sortable traceid's and 64 bit
+// spanid's.
+func NewRandomTimestamped() IDGenerator {
+ return &randomTimestamped{}
+}
+
+// randomID64 can generate 64 bit traceid's and 64 bit spanid's.
+type randomID64 struct{}
+
+func (r *randomID64) TraceID() (id model.TraceID) {
+ seededIDLock.Lock()
+ id = model.TraceID{
+ Low: uint64(seededIDGen.Int63()),
+ }
+ seededIDLock.Unlock()
+ return
+}
+
+func (r *randomID64) SpanID(traceID model.TraceID) (id model.ID) {
+ if !traceID.Empty() {
+ return model.ID(traceID.Low)
+ }
+ seededIDLock.Lock()
+ id = model.ID(seededIDGen.Int63())
+ seededIDLock.Unlock()
+ return
+}
+
+// randomID128 can generate 128 bit traceid's and 64 bit spanid's.
+type randomID128 struct{}
+
+func (r *randomID128) TraceID() (id model.TraceID) {
+ seededIDLock.Lock()
+ id = model.TraceID{
+ High: uint64(seededIDGen.Int63()),
+ Low: uint64(seededIDGen.Int63()),
+ }
+ seededIDLock.Unlock()
+ return
+}
+
+func (r *randomID128) SpanID(traceID model.TraceID) (id model.ID) {
+ if !traceID.Empty() {
+ return model.ID(traceID.Low)
+ }
+ seededIDLock.Lock()
+ id = model.ID(seededIDGen.Int63())
+ seededIDLock.Unlock()
+ return
+}
+
+// randomTimestamped can generate 128 bit time sortable traceid's compatible
+// with AWS X-Ray and 64 bit spanid's.
+type randomTimestamped struct{}
+
+func (t *randomTimestamped) TraceID() (id model.TraceID) {
+ seededIDLock.Lock()
+ id = model.TraceID{
+ High: uint64(time.Now().Unix()<<32) + uint64(seededIDGen.Int31()),
+ Low: uint64(seededIDGen.Int63()),
+ }
+ seededIDLock.Unlock()
+ return
+}
+
+func (t *randomTimestamped) SpanID(traceID model.TraceID) (id model.ID) {
+ if !traceID.Empty() {
+ return model.ID(traceID.Low)
+ }
+ seededIDLock.Lock()
+ id = model.ID(seededIDGen.Int63())
+ seededIDLock.Unlock()
+ return
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/model/annotation.go b/vendor/github.com/openzipkin/zipkin-go/model/annotation.go
new file mode 100644
index 00000000..02d09fb1
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/model/annotation.go
@@ -0,0 +1,60 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 model
+
+import (
+ "encoding/json"
+ "errors"
+ "time"
+)
+
+// ErrValidTimestampRequired error
+var ErrValidTimestampRequired = errors.New("valid annotation timestamp required")
+
+// Annotation associates an event that explains latency with a timestamp.
+type Annotation struct {
+ Timestamp time.Time
+ Value string
+}
+
+// MarshalJSON implements custom JSON encoding
+func (a *Annotation) MarshalJSON() ([]byte, error) {
+ return json.Marshal(&struct {
+ Timestamp int64 `json:"timestamp"`
+ Value string `json:"value"`
+ }{
+ Timestamp: a.Timestamp.Round(time.Microsecond).UnixNano() / 1e3,
+ Value: a.Value,
+ })
+}
+
+// UnmarshalJSON implements custom JSON decoding
+func (a *Annotation) UnmarshalJSON(b []byte) error {
+ type Alias Annotation
+ annotation := &struct {
+ TimeStamp uint64 `json:"timestamp"`
+ *Alias
+ }{
+ Alias: (*Alias)(a),
+ }
+ if err := json.Unmarshal(b, &annotation); err != nil {
+ return err
+ }
+ if annotation.TimeStamp < 1 {
+ return ErrValidTimestampRequired
+ }
+ a.Timestamp = time.Unix(0, int64(annotation.TimeStamp)*1e3)
+ return nil
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/model/doc.go b/vendor/github.com/openzipkin/zipkin-go/model/doc.go
new file mode 100644
index 00000000..4cae4e07
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/model/doc.go
@@ -0,0 +1,23 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 model contains the Zipkin V2 model which is used by the Zipkin Go
+tracer implementation.
+
+Third party instrumentation libraries can use the model and transport packages
+found in this Zipkin Go library to directly interface with the Zipkin Server or
+Zipkin Collectors without the need to use the tracer implementation itself.
+*/
+package model
diff --git a/vendor/github.com/openzipkin/zipkin-go/model/endpoint.go b/vendor/github.com/openzipkin/zipkin-go/model/endpoint.go
new file mode 100644
index 00000000..48e2afd6
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/model/endpoint.go
@@ -0,0 +1,50 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 model
+
+import (
+ "encoding/json"
+ "net"
+ "strings"
+)
+
+// Endpoint holds the network context of a node in the service graph.
+type Endpoint struct {
+ ServiceName string
+ IPv4 net.IP
+ IPv6 net.IP
+ Port uint16
+}
+
+// MarshalJSON exports our Endpoint into the correct format for the Zipkin V2 API.
+func (e Endpoint) MarshalJSON() ([]byte, error) {
+ return json.Marshal(&struct {
+ ServiceName string `json:"serviceName,omitempty"`
+ IPv4 net.IP `json:"ipv4,omitempty"`
+ IPv6 net.IP `json:"ipv6,omitempty"`
+ Port uint16 `json:"port,omitempty"`
+ }{
+ strings.ToLower(e.ServiceName),
+ e.IPv4,
+ e.IPv6,
+ e.Port,
+ })
+}
+
+// Empty returns if all Endpoint properties are empty / unspecified.
+func (e *Endpoint) Empty() bool {
+ return e == nil ||
+ (e.ServiceName == "" && e.Port == 0 && len(e.IPv4) == 0 && len(e.IPv6) == 0)
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/model/kind.go b/vendor/github.com/openzipkin/zipkin-go/model/kind.go
new file mode 100644
index 00000000..d247c020
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/model/kind.go
@@ -0,0 +1,27 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 model
+
+// Kind clarifies context of timestamp, duration and remoteEndpoint in a span.
+type Kind string
+
+// Available Kind values
+const (
+ Undetermined Kind = ""
+ Client Kind = "CLIENT"
+ Server Kind = "SERVER"
+ Producer Kind = "PRODUCER"
+ Consumer Kind = "CONSUMER"
+)
diff --git a/vendor/github.com/openzipkin/zipkin-go/model/span.go b/vendor/github.com/openzipkin/zipkin-go/model/span.go
new file mode 100644
index 00000000..cf30bfac
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/model/span.go
@@ -0,0 +1,161 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 model
+
+import (
+ "encoding/json"
+ "errors"
+ "strings"
+ "time"
+)
+
+// unmarshal errors
+var (
+ ErrValidTraceIDRequired = errors.New("valid traceId required")
+ ErrValidIDRequired = errors.New("valid span id required")
+ ErrValidDurationRequired = errors.New("valid duration required")
+)
+
+// BaggageFields holds the interface for consumers needing to interact with
+// the fields in application logic.
+type BaggageFields interface {
+ // Get returns the values for a field identified by its key.
+ Get(key string) []string
+ // Add adds the provided values to a header designated by key. If not
+ // accepted by the baggage implementation, it will return false.
+ Add(key string, value ...string) bool
+ // Set sets the provided values to a header designated by key. If not
+ // accepted by the baggage implementation, it will return false.
+ Set(key string, value ...string) bool
+ // Delete removes the field data designated by key. If not accepted by the
+ // baggage implementation, it will return false.
+ Delete(key string) bool
+ // Iterate will iterate over the available fields and for each one it will
+ // trigger the callback function.
+ Iterate(f func(key string, values []string))
+}
+
+// SpanContext holds the context of a Span.
+type SpanContext struct {
+ TraceID TraceID `json:"traceId"`
+ ID ID `json:"id"`
+ ParentID *ID `json:"parentId,omitempty"`
+ Debug bool `json:"debug,omitempty"`
+ Sampled *bool `json:"-"`
+ Err error `json:"-"`
+ Baggage BaggageFields `json:"-"`
+}
+
+// SpanModel structure.
+//
+// If using this library to instrument your application you will not need to
+// directly access or modify this representation. The SpanModel is exported for
+// use cases involving 3rd party Go instrumentation libraries desiring to
+// export data to a Zipkin server using the Zipkin V2 Span model.
+type SpanModel struct {
+ SpanContext
+ Name string `json:"name,omitempty"`
+ Kind Kind `json:"kind,omitempty"`
+ Timestamp time.Time `json:"-"`
+ Duration time.Duration `json:"-"`
+ Shared bool `json:"shared,omitempty"`
+ LocalEndpoint *Endpoint `json:"localEndpoint,omitempty"`
+ RemoteEndpoint *Endpoint `json:"remoteEndpoint,omitempty"`
+ Annotations []Annotation `json:"annotations,omitempty"`
+ Tags map[string]string `json:"tags,omitempty"`
+}
+
+// MarshalJSON exports our Model into the correct format for the Zipkin V2 API.
+func (s SpanModel) MarshalJSON() ([]byte, error) {
+ type Alias SpanModel
+
+ var timestamp int64
+ if !s.Timestamp.IsZero() {
+ if s.Timestamp.Unix() < 1 {
+ // Zipkin does not allow Timestamps before Unix epoch
+ return nil, ErrValidTimestampRequired
+ }
+ timestamp = s.Timestamp.Round(time.Microsecond).UnixNano() / 1e3
+ }
+
+ if s.Duration < time.Microsecond {
+ if s.Duration < 0 {
+ // negative duration is not allowed and signals a timing logic error
+ return nil, ErrValidDurationRequired
+ } else if s.Duration > 0 {
+ // sub microsecond durations are reported as 1 microsecond
+ s.Duration = 1 * time.Microsecond
+ }
+ } else {
+ // Duration will be rounded to nearest microsecond representation.
+ //
+ // NOTE: Duration.Round() is not available in Go 1.8 which we still support.
+ // To handle microsecond resolution rounding we'll add 500 nanoseconds to
+ // the duration. When truncated to microseconds in the call to marshal, it
+ // will be naturally rounded. See TestSpanDurationRounding in span_test.go
+ s.Duration += 500 * time.Nanosecond
+ }
+
+ s.Name = strings.ToLower(s.Name)
+
+ if s.LocalEndpoint.Empty() {
+ s.LocalEndpoint = nil
+ }
+
+ if s.RemoteEndpoint.Empty() {
+ s.RemoteEndpoint = nil
+ }
+
+ return json.Marshal(&struct {
+ T int64 `json:"timestamp,omitempty"`
+ D int64 `json:"duration,omitempty"`
+ Alias
+ }{
+ T: timestamp,
+ D: s.Duration.Nanoseconds() / 1e3,
+ Alias: (Alias)(s),
+ })
+}
+
+// UnmarshalJSON imports our Model from a Zipkin V2 API compatible span
+// representation.
+func (s *SpanModel) UnmarshalJSON(b []byte) error {
+ type Alias SpanModel
+ span := &struct {
+ T uint64 `json:"timestamp,omitempty"`
+ D uint64 `json:"duration,omitempty"`
+ *Alias
+ }{
+ Alias: (*Alias)(s),
+ }
+ if err := json.Unmarshal(b, &span); err != nil {
+ return err
+ }
+ if s.ID < 1 {
+ return ErrValidIDRequired
+ }
+ if span.T > 0 {
+ s.Timestamp = time.Unix(0, int64(span.T)*1e3)
+ }
+ s.Duration = time.Duration(span.D*1e3) * time.Nanosecond
+ if s.LocalEndpoint.Empty() {
+ s.LocalEndpoint = nil
+ }
+
+ if s.RemoteEndpoint.Empty() {
+ s.RemoteEndpoint = nil
+ }
+ return nil
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/model/span_id.go b/vendor/github.com/openzipkin/zipkin-go/model/span_id.go
new file mode 100644
index 00000000..acd72ea7
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/model/span_id.go
@@ -0,0 +1,44 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 model
+
+import (
+ "fmt"
+ "strconv"
+)
+
+// ID type
+type ID uint64
+
+// String outputs the 64-bit ID as hex string.
+func (i ID) String() string {
+ return fmt.Sprintf("%016x", uint64(i))
+}
+
+// MarshalJSON serializes an ID type (SpanID, ParentSpanID) to HEX.
+func (i ID) MarshalJSON() ([]byte, error) {
+ return []byte(fmt.Sprintf("%q", i.String())), nil
+}
+
+// UnmarshalJSON deserializes an ID type (SpanID, ParentSpanID) from HEX.
+func (i *ID) UnmarshalJSON(b []byte) (err error) {
+ var id uint64
+ if len(b) < 3 {
+ return nil
+ }
+ id, err = strconv.ParseUint(string(b[1:len(b)-1]), 16, 64)
+ *i = ID(id)
+ return err
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/model/traceid.go b/vendor/github.com/openzipkin/zipkin-go/model/traceid.go
new file mode 100644
index 00000000..dca65535
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/model/traceid.go
@@ -0,0 +1,75 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 model
+
+import (
+ "fmt"
+ "strconv"
+)
+
+// TraceID is a 128 bit number internally stored as 2x uint64 (high & low).
+// In case of 64 bit traceIDs, the value can be found in Low.
+type TraceID struct {
+ High uint64
+ Low uint64
+}
+
+// Empty returns if TraceID has zero value.
+func (t TraceID) Empty() bool {
+ return t.Low == 0 && t.High == 0
+}
+
+// String outputs the 128-bit traceID as hex string.
+func (t TraceID) String() string {
+ if t.High == 0 {
+ return fmt.Sprintf("%016x", t.Low)
+ }
+ return fmt.Sprintf("%016x%016x", t.High, t.Low)
+}
+
+// TraceIDFromHex returns the TraceID from a hex string.
+func TraceIDFromHex(h string) (t TraceID, err error) {
+ if len(h) > 16 {
+ if t.High, err = strconv.ParseUint(h[0:len(h)-16], 16, 64); err != nil {
+ return
+ }
+ t.Low, err = strconv.ParseUint(h[len(h)-16:], 16, 64)
+ return
+ }
+ t.Low, err = strconv.ParseUint(h, 16, 64)
+ return
+}
+
+// MarshalJSON custom JSON serializer to export the TraceID in the required
+// zero padded hex representation.
+func (t TraceID) MarshalJSON() ([]byte, error) {
+ return []byte(fmt.Sprintf("%q", t.String())), nil
+}
+
+// UnmarshalJSON custom JSON deserializer to retrieve the traceID from the hex
+// encoded representation.
+func (t *TraceID) UnmarshalJSON(traceID []byte) error {
+ if len(traceID) < 3 {
+ return ErrValidTraceIDRequired
+ }
+ // A valid JSON string is encoded wrapped in double quotes. We need to trim
+ // these before converting the hex payload.
+ tID, err := TraceIDFromHex(string(traceID[1 : len(traceID)-1]))
+ if err != nil {
+ return err
+ }
+ *t = tID
+ return nil
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/noop.go b/vendor/github.com/openzipkin/zipkin-go/noop.go
new file mode 100644
index 00000000..b6ed424d
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/noop.go
@@ -0,0 +1,48 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin
+
+import (
+ "time"
+
+ "github.com/openzipkin/zipkin-go/model"
+)
+
+type noopSpan struct {
+ model.SpanContext
+}
+
+func (n *noopSpan) Context() model.SpanContext { return n.SpanContext }
+
+func (n *noopSpan) SetName(string) {}
+
+func (*noopSpan) SetRemoteEndpoint(*model.Endpoint) {}
+
+func (*noopSpan) Annotate(time.Time, string) {}
+
+func (*noopSpan) Tag(string, string) {}
+
+func (*noopSpan) Finish() {}
+
+func (*noopSpan) FinishedWithDuration(_ time.Duration) {}
+
+func (*noopSpan) Flush() {}
+
+// IsNoop tells whether the span is noop or not. Usually used to avoid resource misusage
+// when customizing a span as data won't be recorded
+func IsNoop(s Span) bool {
+ _, ok := s.(*noopSpan)
+ return ok
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/propagation/propagation.go b/vendor/github.com/openzipkin/zipkin-go/propagation/propagation.go
new file mode 100644
index 00000000..c76d91d8
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/propagation/propagation.go
@@ -0,0 +1,30 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 propagation holds the required function signatures for Injection and
+Extraction as used by the Zipkin Tracer.
+
+Subpackages of this package contain officially supported standard propagation
+implementations.
+*/
+package propagation
+
+import "github.com/openzipkin/zipkin-go/model"
+
+// Extractor function signature
+type Extractor func() (*model.SpanContext, error)
+
+// Injector function signature
+type Injector func(model.SpanContext) error
diff --git a/vendor/github.com/openzipkin/zipkin-go/reporter/http/http.go b/vendor/github.com/openzipkin/zipkin-go/reporter/http/http.go
new file mode 100644
index 00000000..25d84c85
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/reporter/http/http.go
@@ -0,0 +1,275 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 http implements a HTTP reporter to send spans to Zipkin V2 collectors.
+*/
+package http
+
+import (
+ "bytes"
+ "context"
+ "log"
+ "net/http"
+ "os"
+ "sync"
+ "time"
+
+ "github.com/openzipkin/zipkin-go/model"
+ "github.com/openzipkin/zipkin-go/reporter"
+)
+
+// defaults
+const (
+ defaultTimeout = 5 * time.Second // timeout for http request in seconds
+ defaultBatchInterval = 1 * time.Second // BatchInterval in seconds
+ defaultBatchSize = 100
+ defaultMaxBacklog = 1000
+)
+
+// HTTPDoer will do a request to the Zipkin HTTP Collector
+type HTTPDoer interface { // nolint: revive // keep as is, we don't want to break dependendants
+ Do(req *http.Request) (*http.Response, error)
+}
+
+// httpReporter will send spans to a Zipkin HTTP Collector using Zipkin V2 API.
+type httpReporter struct {
+ url string
+ client HTTPDoer
+ logger *log.Logger
+ batchInterval time.Duration
+ batchSize int
+ maxBacklog int
+ batchMtx *sync.Mutex
+ batch []*model.SpanModel
+ spanC chan *model.SpanModel
+ sendC chan struct{}
+ quit chan struct{}
+ shutdown chan error
+ reqCallback RequestCallbackFn
+ reqTimeout time.Duration
+ serializer reporter.SpanSerializer
+}
+
+// Send implements reporter
+func (r *httpReporter) Send(s model.SpanModel) {
+ r.spanC <- &s
+}
+
+// Close implements reporter
+func (r *httpReporter) Close() error {
+ close(r.quit)
+ return <-r.shutdown
+}
+
+func (r *httpReporter) loop() {
+ var (
+ nextSend = time.Now().Add(r.batchInterval)
+ ticker = time.NewTicker(r.batchInterval / 10)
+ tickerChan = ticker.C
+ )
+ defer ticker.Stop()
+
+ for {
+ select {
+ case span := <-r.spanC:
+ currentBatchSize := r.append(span)
+ if currentBatchSize >= r.batchSize {
+ nextSend = time.Now().Add(r.batchInterval)
+ r.enqueueSend()
+ }
+ case <-tickerChan:
+ if time.Now().After(nextSend) {
+ nextSend = time.Now().Add(r.batchInterval)
+ r.enqueueSend()
+ }
+ case <-r.quit:
+ close(r.sendC)
+ return
+ }
+ }
+}
+
+func (r *httpReporter) sendLoop() {
+ for range r.sendC {
+ _ = r.sendBatch()
+ }
+ r.shutdown <- r.sendBatch()
+}
+
+func (r *httpReporter) enqueueSend() {
+ select {
+ case r.sendC <- struct{}{}:
+ default:
+ // Do nothing if there's a pending send request already
+ }
+}
+
+func (r *httpReporter) append(span *model.SpanModel) (newBatchSize int) {
+ r.batchMtx.Lock()
+
+ r.batch = append(r.batch, span)
+ if len(r.batch) > r.maxBacklog {
+ dispose := len(r.batch) - r.maxBacklog
+ r.logger.Printf("backlog too long, disposing %d spans", dispose)
+ r.batch = r.batch[dispose:]
+ }
+ newBatchSize = len(r.batch)
+
+ r.batchMtx.Unlock()
+ return
+}
+
+func (r *httpReporter) sendBatch() error {
+ // Select all current spans in the batch to be sent
+ r.batchMtx.Lock()
+ sendBatch := r.batch[:]
+ r.batchMtx.Unlock()
+
+ if len(sendBatch) == 0 {
+ return nil
+ }
+
+ body, err := r.serializer.Serialize(sendBatch)
+ if err != nil {
+ r.logger.Printf("failed when marshalling the spans batch: %s\n", err.Error())
+ return err
+ }
+
+ req, err := http.NewRequest("POST", r.url, bytes.NewReader(body))
+ if err != nil {
+ r.logger.Printf("failed when creating the request: %s\n", err.Error())
+ return err
+ }
+
+ // By default we send b3:0 header to mitigate trace reporting amplification in
+ // service mesh environments where the sidecar proxies might trace the call
+ // we do here towards the Zipkin collector.
+ req.Header.Set("b3", "0")
+
+ req.Header.Set("Content-Type", r.serializer.ContentType())
+ if r.reqCallback != nil {
+ r.reqCallback(req)
+ }
+
+ ctx, cancel := context.WithTimeout(req.Context(), r.reqTimeout)
+ defer cancel()
+
+ resp, err := r.client.Do(req.WithContext(ctx))
+ if err != nil {
+ r.logger.Printf("failed to send the request: %s\n", err.Error())
+ return err
+ }
+ _ = resp.Body.Close()
+ if resp.StatusCode < 200 || resp.StatusCode > 299 {
+ r.logger.Printf("failed the request with status code %d\n", resp.StatusCode)
+ }
+
+ // Remove sent spans from the batch even if they were not saved
+ r.batchMtx.Lock()
+ r.batch = r.batch[len(sendBatch):]
+ r.batchMtx.Unlock()
+
+ return nil
+}
+
+// RequestCallbackFn receives the initialized request from the Collector before
+// sending it over the wire. This allows one to plug in additional headers or
+// do other customization.
+type RequestCallbackFn func(*http.Request)
+
+// ReporterOption sets a parameter for the HTTP Reporter
+type ReporterOption func(r *httpReporter)
+
+// Timeout sets maximum timeout for the http request through its context.
+func Timeout(duration time.Duration) ReporterOption {
+ return func(r *httpReporter) { r.reqTimeout = duration }
+}
+
+// BatchSize sets the maximum batch size, after which a collect will be
+// triggered. The default batch size is 100 traces.
+func BatchSize(n int) ReporterOption {
+ return func(r *httpReporter) { r.batchSize = n }
+}
+
+// MaxBacklog sets the maximum backlog size. When batch size reaches this
+// threshold, spans from the beginning of the batch will be disposed.
+func MaxBacklog(n int) ReporterOption {
+ return func(r *httpReporter) { r.maxBacklog = n }
+}
+
+// BatchInterval sets the maximum duration we will buffer traces before
+// emitting them to the collector. The default batch interval is 1 second.
+func BatchInterval(d time.Duration) ReporterOption {
+ return func(r *httpReporter) { r.batchInterval = d }
+}
+
+// Client sets a custom http client to use under the interface HTTPDoer
+// which includes a `Do` method with same signature as the *http.Client
+func Client(client HTTPDoer) ReporterOption {
+ return func(r *httpReporter) { r.client = client }
+}
+
+// RequestCallback registers a callback function to adjust the reporter
+// *http.Request before it sends the request to Zipkin.
+func RequestCallback(rc RequestCallbackFn) ReporterOption {
+ return func(r *httpReporter) { r.reqCallback = rc }
+}
+
+// Logger sets the logger used to report errors in the collection
+// process.
+func Logger(l *log.Logger) ReporterOption {
+ return func(r *httpReporter) { r.logger = l }
+}
+
+// Serializer sets the serialization function to use for sending span data to
+// Zipkin.
+func Serializer(serializer reporter.SpanSerializer) ReporterOption {
+ return func(r *httpReporter) {
+ if serializer != nil {
+ r.serializer = serializer
+ }
+ }
+}
+
+// NewReporter returns a new HTTP Reporter.
+// url should be the endpoint to send the spans to, e.g.
+// http://localhost:9411/api/v2/spans
+func NewReporter(url string, opts ...ReporterOption) reporter.Reporter {
+ r := httpReporter{
+ url: url,
+ logger: log.New(os.Stderr, "", log.LstdFlags),
+ client: &http.Client{},
+ batchInterval: defaultBatchInterval,
+ batchSize: defaultBatchSize,
+ maxBacklog: defaultMaxBacklog,
+ batch: []*model.SpanModel{},
+ spanC: make(chan *model.SpanModel),
+ sendC: make(chan struct{}, 1),
+ quit: make(chan struct{}, 1),
+ shutdown: make(chan error, 1),
+ batchMtx: &sync.Mutex{},
+ serializer: reporter.JSONSerializer{},
+ reqTimeout: defaultTimeout,
+ }
+
+ for _, opt := range opts {
+ opt(&r)
+ }
+
+ go r.loop()
+ go r.sendLoop()
+
+ return &r
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/reporter/reporter.go b/vendor/github.com/openzipkin/zipkin-go/reporter/reporter.go
new file mode 100644
index 00000000..9ef8872f
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/reporter/reporter.go
@@ -0,0 +1,41 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 reporter holds the Reporter interface which is used by the Zipkin
+Tracer to send finished spans.
+
+Subpackages of package reporter contain officially supported standard
+reporter implementations.
+*/
+package reporter
+
+import "github.com/openzipkin/zipkin-go/model"
+
+// Reporter interface can be used to provide the Zipkin Tracer with custom
+// implementations to publish Zipkin Span data.
+type Reporter interface {
+ Send(model.SpanModel) // Send Span data to the reporter
+ Close() error // Close the reporter
+}
+
+type noopReporter struct{}
+
+func (r *noopReporter) Send(model.SpanModel) {}
+func (r *noopReporter) Close() error { return nil }
+
+// NewNoopReporter returns a no-op Reporter implementation.
+func NewNoopReporter() Reporter {
+ return &noopReporter{}
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/reporter/serializer.go b/vendor/github.com/openzipkin/zipkin-go/reporter/serializer.go
new file mode 100644
index 00000000..6dce2de1
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/reporter/serializer.go
@@ -0,0 +1,42 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 reporter
+
+import (
+ "encoding/json"
+
+ "github.com/openzipkin/zipkin-go/model"
+)
+
+// SpanSerializer describes the methods needed for allowing to set Span encoding
+// type for the various Zipkin transports.
+type SpanSerializer interface {
+ Serialize([]*model.SpanModel) ([]byte, error)
+ ContentType() string
+}
+
+// JSONSerializer implements the default JSON encoding SpanSerializer.
+type JSONSerializer struct{}
+
+// Serialize takes an array of Zipkin SpanModel objects and returns a JSON
+// encoding of it.
+func (JSONSerializer) Serialize(spans []*model.SpanModel) ([]byte, error) {
+ return json.Marshal(spans)
+}
+
+// ContentType returns the ContentType needed for this encoding.
+func (JSONSerializer) ContentType() string {
+ return "application/json"
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/sample.go b/vendor/github.com/openzipkin/zipkin-go/sample.go
new file mode 100644
index 00000000..7ba2f232
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/sample.go
@@ -0,0 +1,127 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin
+
+import (
+ "fmt"
+ "math"
+ "math/rand"
+ "sync"
+ "time"
+)
+
+// Sampler functions return if a Zipkin span should be sampled, based on its
+// traceID.
+type Sampler func(id uint64) bool
+
+// NeverSample will always return false. If used by a service it will not allow
+// the service to start traces but will still allow the service to participate
+// in traces started upstream.
+func NeverSample(_ uint64) bool { return false }
+
+// AlwaysSample will always return true. If used by a service it will always start
+// traces if no upstream trace has been propagated. If an incoming upstream trace
+// is not sampled the service will adhere to this and only propagate the context.
+func AlwaysSample(_ uint64) bool { return true }
+
+// NewModuloSampler provides a generic type Sampler.
+func NewModuloSampler(mod uint64) Sampler {
+ if mod < 2 {
+ return AlwaysSample
+ }
+ return func(id uint64) bool {
+ return (id % mod) == 0
+ }
+}
+
+// NewBoundarySampler is appropriate for high-traffic instrumentation who
+// provision random trace ids, and make the sampling decision only once.
+// It defends against nodes in the cluster selecting exactly the same ids.
+func NewBoundarySampler(rate float64, salt int64) (Sampler, error) {
+ if rate == 0.0 {
+ return NeverSample, nil
+ }
+ if rate == 1.0 {
+ return AlwaysSample, nil
+ }
+ if rate < 0.0001 || rate > 1 {
+ return nil, fmt.Errorf("rate should be 0.0 or between 0.0001 and 1: was %f", rate)
+ }
+
+ var (
+ boundary = int64(rate * 10000)
+ usalt = uint64(salt)
+ )
+ return func(id uint64) bool {
+ return int64(math.Abs(float64(id^usalt)))%10000 < boundary
+ }, nil
+}
+
+// NewCountingSampler is appropriate for low-traffic instrumentation or
+// those who do not provision random trace ids. It is not appropriate for
+// collectors as the sampling decision isn't idempotent (consistent based
+// on trace id).
+func NewCountingSampler(rate float64) (Sampler, error) {
+ if rate == 0.0 {
+ return NeverSample, nil
+ }
+ if rate == 1.0 {
+ return AlwaysSample, nil
+ }
+ if rate < 0.01 || rate > 1 {
+ return nil, fmt.Errorf("rate should be 0.0 or between 0.01 and 1: was %f", rate)
+ }
+ var (
+ i = 0
+ outOf100 = int(rate*100 + math.Copysign(0.5, rate*100)) // for rounding float to int conversion instead of truncation
+ decisions = randomBitSet(100, outOf100, rand.New(rand.NewSource(time.Now().UnixNano())))
+ mtx = &sync.Mutex{}
+ )
+
+ return func(_ uint64) bool {
+ mtx.Lock()
+ result := decisions[i]
+ i++
+ if i == 100 {
+ i = 0
+ }
+ mtx.Unlock()
+ return result
+ }, nil
+}
+
+/**
+ * Reservoir sampling algorithm borrowed from Stack Overflow.
+ *
+ * http://stackoverflow.com/questions/12817946/generate-a-random-bitset-with-n-1s
+ */
+func randomBitSet(size int, cardinality int, rnd *rand.Rand) []bool {
+ result := make([]bool, size)
+ chosen := make([]int, cardinality)
+ var i int
+ for i = 0; i < cardinality; i++ {
+ chosen[i] = i
+ result[i] = true
+ }
+ for ; i < size; i++ {
+ j := rnd.Intn(i + 1)
+ if j < cardinality {
+ result[chosen[j]] = false
+ result[i] = true
+ chosen[j] = i
+ }
+ }
+ return result
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/span.go b/vendor/github.com/openzipkin/zipkin-go/span.go
new file mode 100644
index 00000000..4f9322d9
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/span.go
@@ -0,0 +1,58 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin
+
+import (
+ "time"
+
+ "github.com/openzipkin/zipkin-go/model"
+)
+
+// Span interface as returned by Tracer.StartSpan()
+type Span interface {
+ // Context returns the Span's SpanContext.
+ Context() model.SpanContext
+
+ // SetName updates the Span's name.
+ SetName(string)
+
+ // SetRemoteEndpoint updates the Span's Remote Endpoint.
+ SetRemoteEndpoint(*model.Endpoint)
+
+ // Annotate adds a timed event to the Span.
+ Annotate(time.Time, string)
+
+ // Tag sets Tag with given key and value to the Span. If key already exists in
+ // the Span the value will be overridden except for error tags where the first
+ // value is persisted.
+ Tag(string, string)
+
+ // Finish the Span and send to Reporter. If DelaySend option was used at
+ // Span creation time, Finish will not send the Span to the Reporter. It then
+ // becomes the user's responsibility to get the Span reported (by using
+ // span.Flush).
+ Finish()
+
+ // Finish the Span with duration and send to Reporter. If DelaySend option was used at
+ // Span creation time, FinishedWithDuration will not send the Span to the Reporter. It then
+ // becomes the user's responsibility to get the Span reported (by using
+ // span.Flush).
+ FinishedWithDuration(duration time.Duration)
+
+ // Flush the Span to the Reporter (regardless of being finished or not).
+ // This can be used if the DelaySend SpanOption was set or when dealing with
+ // one-way RPC tracing where duration might not be measured.
+ Flush()
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/span_implementation.go b/vendor/github.com/openzipkin/zipkin-go/span_implementation.go
new file mode 100644
index 00000000..ab2f39be
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/span_implementation.go
@@ -0,0 +1,101 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin
+
+import (
+ "sync"
+ "sync/atomic"
+ "time"
+
+ "github.com/openzipkin/zipkin-go/model"
+)
+
+type spanImpl struct {
+ mtx sync.RWMutex
+ model.SpanModel
+ tracer *Tracer
+ mustCollect int32 // used as atomic bool (1 = true, 0 = false)
+ flushOnFinish bool
+}
+
+func (s *spanImpl) Context() model.SpanContext {
+ return s.SpanContext
+}
+
+func (s *spanImpl) SetName(name string) {
+ s.mtx.Lock()
+ s.Name = name
+ s.mtx.Unlock()
+}
+
+func (s *spanImpl) SetRemoteEndpoint(e *model.Endpoint) {
+ s.mtx.Lock()
+ if e == nil {
+ s.RemoteEndpoint = nil
+ } else {
+ s.RemoteEndpoint = &model.Endpoint{}
+ *s.RemoteEndpoint = *e
+ }
+ s.mtx.Unlock()
+}
+
+func (s *spanImpl) Annotate(t time.Time, value string) {
+ a := model.Annotation{
+ Timestamp: t,
+ Value: value,
+ }
+
+ s.mtx.Lock()
+ s.Annotations = append(s.Annotations, a)
+ s.mtx.Unlock()
+}
+
+func (s *spanImpl) Tag(key, value string) {
+ s.mtx.Lock()
+
+ if key == string(TagError) {
+ if _, found := s.Tags[key]; found {
+ s.mtx.Unlock()
+ return
+ }
+ }
+
+ s.Tags[key] = value
+ s.mtx.Unlock()
+}
+
+func (s *spanImpl) Finish() {
+ if atomic.CompareAndSwapInt32(&s.mustCollect, 1, 0) {
+ s.Duration = time.Since(s.Timestamp)
+ if s.flushOnFinish {
+ s.tracer.reporter.Send(s.SpanModel)
+ }
+ }
+}
+
+func (s *spanImpl) FinishedWithDuration(d time.Duration) {
+ if atomic.CompareAndSwapInt32(&s.mustCollect, 1, 0) {
+ s.Duration = d
+ if s.flushOnFinish {
+ s.tracer.reporter.Send(s.SpanModel)
+ }
+ }
+}
+
+func (s *spanImpl) Flush() {
+ if s.SpanModel.Debug || (s.SpanModel.Sampled != nil && *s.SpanModel.Sampled) {
+ s.tracer.reporter.Send(s.SpanModel)
+ }
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/span_options.go b/vendor/github.com/openzipkin/zipkin-go/span_options.go
new file mode 100644
index 00000000..0eabeaa0
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/span_options.go
@@ -0,0 +1,88 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin
+
+import (
+ "time"
+
+ "github.com/openzipkin/zipkin-go/model"
+)
+
+// SpanOption allows for functional options to adjust behavior and payload of
+// the Span to be created with tracer.StartSpan().
+type SpanOption func(t *Tracer, s *spanImpl)
+
+// Kind sets the kind of the span being created.
+func Kind(kind model.Kind) SpanOption {
+ return func(t *Tracer, s *spanImpl) {
+ s.Kind = kind
+ }
+}
+
+// Parent will use provided SpanContext as parent to the span being created.
+func Parent(sc model.SpanContext) SpanOption {
+ return func(t *Tracer, s *spanImpl) {
+ if sc.Err != nil {
+ // encountered an extraction error
+ switch t.extractFailurePolicy {
+ case ExtractFailurePolicyRestart:
+ case ExtractFailurePolicyError:
+ panic(s.SpanContext.Err)
+ case ExtractFailurePolicyTagAndRestart:
+ s.Tags["error.extract"] = sc.Err.Error()
+ default:
+ panic(ErrInvalidExtractFailurePolicy)
+ }
+ /* don't use provided SpanContext, but restart trace */
+ return
+ }
+ s.SpanContext = sc
+ }
+}
+
+// StartTime uses a given start time for the span being created.
+func StartTime(start time.Time) SpanOption {
+ return func(t *Tracer, s *spanImpl) {
+ s.Timestamp = start
+ }
+}
+
+// RemoteEndpoint sets the remote endpoint of the span being created.
+func RemoteEndpoint(e *model.Endpoint) SpanOption {
+ return func(t *Tracer, s *spanImpl) {
+ s.RemoteEndpoint = e
+ }
+}
+
+// Tags sets initial tags for the span being created. If default tracer tags
+// are present they will be overwritten on key collisions.
+func Tags(tags map[string]string) SpanOption {
+ return func(t *Tracer, s *spanImpl) {
+ for k, v := range tags {
+ s.Tags[k] = v
+ }
+ }
+}
+
+// FlushOnFinish when set to false will disable span.Finish() to send the Span
+// to the Reporter automatically (which is the default behavior). If set to
+// false, having the Span be reported becomes the responsibility of the user.
+// This is available if late tag data is expected to be only available after the
+// required finish time of the Span.
+func FlushOnFinish(b bool) SpanOption {
+ return func(t *Tracer, s *spanImpl) {
+ s.flushOnFinish = b
+ }
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/tags.go b/vendor/github.com/openzipkin/zipkin-go/tags.go
new file mode 100644
index 00000000..0d992731
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/tags.go
@@ -0,0 +1,37 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin
+
+// Tag holds available types
+type Tag string
+
+// Common Tag values
+const (
+ TagHTTPMethod Tag = "http.method"
+ TagHTTPPath Tag = "http.path"
+ TagHTTPUrl Tag = "http.url"
+ TagHTTPRoute Tag = "http.route"
+ TagHTTPStatusCode Tag = "http.status_code"
+ TagHTTPRequestSize Tag = "http.request.size"
+ TagHTTPResponseSize Tag = "http.response.size"
+ TagGRPCStatusCode Tag = "grpc.status_code"
+ TagSQLQuery Tag = "sql.query"
+ TagError Tag = "error"
+)
+
+// Set a standard Tag with a payload on provided Span.
+func (t Tag) Set(s Span, value string) {
+ s.Tag(string(t), value)
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/tracer.go b/vendor/github.com/openzipkin/zipkin-go/tracer.go
new file mode 100644
index 00000000..d1c20d0f
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/tracer.go
@@ -0,0 +1,200 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin
+
+import (
+ "context"
+ "sync/atomic"
+ "time"
+
+ "github.com/openzipkin/zipkin-go/idgenerator"
+ "github.com/openzipkin/zipkin-go/model"
+ "github.com/openzipkin/zipkin-go/propagation"
+ "github.com/openzipkin/zipkin-go/reporter"
+)
+
+// Tracer is our Zipkin tracer implementation. It should be initialized using
+// the NewTracer method.
+type Tracer struct {
+ defaultTags map[string]string
+ extractFailurePolicy ExtractFailurePolicy
+ sampler Sampler
+ generate idgenerator.IDGenerator
+ reporter reporter.Reporter
+ localEndpoint *model.Endpoint
+ noop int32 // used as atomic bool (1 = true, 0 = false)
+ sharedSpans bool
+ unsampledNoop bool
+}
+
+// NewTracer returns a new Zipkin Tracer.
+func NewTracer(rep reporter.Reporter, opts ...TracerOption) (*Tracer, error) {
+ // set default tracer options
+ t := &Tracer{
+ defaultTags: make(map[string]string),
+ extractFailurePolicy: ExtractFailurePolicyRestart,
+ sampler: AlwaysSample,
+ generate: idgenerator.NewRandom64(),
+ reporter: rep,
+ localEndpoint: nil,
+ noop: 0,
+ sharedSpans: true,
+ unsampledNoop: false,
+ }
+
+ // if no reporter was provided we default to noop implementation.
+ if t.reporter == nil {
+ t.reporter = reporter.NewNoopReporter()
+ t.noop = 1
+ }
+
+ // process functional options
+ for _, opt := range opts {
+ if err := opt(t); err != nil {
+ return nil, err
+ }
+ }
+
+ return t, nil
+}
+
+// StartSpanFromContext creates and starts a span using the span found in
+// context as parent. If no parent span is found a root span is created.
+func (t *Tracer) StartSpanFromContext(ctx context.Context, name string, options ...SpanOption) (Span, context.Context) {
+ if parentSpan := SpanFromContext(ctx); parentSpan != nil {
+ options = append(options, Parent(parentSpan.Context()))
+ }
+ span := t.StartSpan(name, options...)
+ return span, NewContext(ctx, span)
+}
+
+// StartSpan creates and starts a span.
+func (t *Tracer) StartSpan(name string, options ...SpanOption) Span {
+ if atomic.LoadInt32(&t.noop) == 1 {
+ // even though we're going to return a noopSpan, we need to initialize
+ // a spanImpl to fetch the parent context that might be provided as a
+ // SpanOption
+ s := &spanImpl{
+ SpanModel: model.SpanModel{
+ Tags: make(map[string]string),
+ },
+ }
+ for _, option := range options {
+ option(t, s)
+ }
+ // return noopSpan with the extracted SpanContext from spanImpl.
+ return &noopSpan{SpanContext: s.SpanContext}
+ }
+
+ s := &spanImpl{
+ SpanModel: model.SpanModel{
+ Kind: model.Undetermined,
+ Name: name,
+ LocalEndpoint: t.localEndpoint,
+ Annotations: make([]model.Annotation, 0),
+ Tags: make(map[string]string),
+ },
+ flushOnFinish: true,
+ tracer: t,
+ }
+
+ // add default tracer tags to span
+ for k, v := range t.defaultTags {
+ s.Tag(k, v)
+ }
+
+ // handle provided functional options
+ for _, option := range options {
+ option(t, s)
+ }
+
+ if s.TraceID.Empty() {
+ // create root span
+ s.SpanContext.TraceID = t.generate.TraceID()
+ s.SpanContext.ID = t.generate.SpanID(s.SpanContext.TraceID)
+ } else {
+ // valid parent context found
+ if t.sharedSpans && s.Kind == model.Server {
+ // join span
+ s.Shared = true
+ } else {
+ // regular child span
+ parentID := s.SpanContext.ID
+ s.SpanContext.ParentID = &parentID
+ s.SpanContext.ID = t.generate.SpanID(model.TraceID{})
+ }
+ }
+
+ if !s.SpanContext.Debug && s.Sampled == nil {
+ // deferred sampled context found, invoke sampler
+ sampled := t.sampler(s.SpanContext.TraceID.Low)
+ s.SpanContext.Sampled = &sampled
+ if sampled {
+ s.mustCollect = 1
+ }
+ } else {
+ if s.SpanContext.Debug || *s.Sampled {
+ s.mustCollect = 1
+ }
+ }
+
+ if t.unsampledNoop && s.mustCollect == 0 {
+ // trace not being sampled and noop requested
+ return &noopSpan{
+ SpanContext: s.SpanContext,
+ }
+ }
+
+ // add start time
+ if s.Timestamp.IsZero() {
+ s.Timestamp = time.Now()
+ }
+
+ return s
+}
+
+// Extract extracts a SpanContext using the provided Extractor function.
+func (t *Tracer) Extract(extractor propagation.Extractor) (sc model.SpanContext) {
+ if atomic.LoadInt32(&t.noop) == 1 {
+ return
+ }
+ psc, err := extractor()
+ if psc != nil {
+ sc = *psc
+ }
+ sc.Err = err
+ return
+}
+
+// SetNoop allows for killswitch behavior. If set to true the tracer will return
+// noopSpans and all data is dropped. This allows operators to stop tracing in
+// risk scenarios. Set back to false to resume tracing.
+func (t *Tracer) SetNoop(noop bool) {
+ if noop {
+ atomic.CompareAndSwapInt32(&t.noop, 0, 1)
+ } else {
+ atomic.CompareAndSwapInt32(&t.noop, 1, 0)
+ }
+}
+
+// LocalEndpoint returns a copy of the currently set local endpoint of the
+// tracer instance.
+func (t *Tracer) LocalEndpoint() *model.Endpoint {
+ if t.localEndpoint == nil {
+ return nil
+ }
+ ep := *t.localEndpoint
+ return &ep
+}
diff --git a/vendor/github.com/openzipkin/zipkin-go/tracer_options.go b/vendor/github.com/openzipkin/zipkin-go/tracer_options.go
new file mode 100644
index 00000000..4a7eef93
--- /dev/null
+++ b/vendor/github.com/openzipkin/zipkin-go/tracer_options.go
@@ -0,0 +1,138 @@
+// Copyright 2022 The OpenZipkin Authors
+//
+// 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 zipkin
+
+import (
+ "errors"
+
+ "github.com/openzipkin/zipkin-go/idgenerator"
+ "github.com/openzipkin/zipkin-go/model"
+)
+
+// Tracer Option Errors
+var (
+ ErrInvalidEndpoint = errors.New("requires valid local endpoint")
+ ErrInvalidExtractFailurePolicy = errors.New("invalid extract failure policy provided")
+)
+
+// ExtractFailurePolicy deals with Extraction errors
+type ExtractFailurePolicy int
+
+// ExtractFailurePolicyOptions
+const (
+ ExtractFailurePolicyRestart ExtractFailurePolicy = iota
+ ExtractFailurePolicyError
+ ExtractFailurePolicyTagAndRestart
+)
+
+// TracerOption allows for functional options to adjust behavior of the Tracer
+// to be created with NewTracer().
+type TracerOption func(o *Tracer) error
+
+// WithLocalEndpoint sets the local endpoint of the tracer.
+func WithLocalEndpoint(e *model.Endpoint) TracerOption {
+ return func(o *Tracer) error {
+ if e == nil {
+ o.localEndpoint = nil
+ return nil
+ }
+ ep := *e
+ o.localEndpoint = &ep
+ return nil
+ }
+}
+
+// WithExtractFailurePolicy allows one to set the ExtractFailurePolicy.
+func WithExtractFailurePolicy(p ExtractFailurePolicy) TracerOption {
+ return func(o *Tracer) error {
+ if p < 0 || p > ExtractFailurePolicyTagAndRestart {
+ return ErrInvalidExtractFailurePolicy
+ }
+ o.extractFailurePolicy = p
+ return nil
+ }
+}
+
+// WithNoopSpan if set to true will switch to a NoopSpan implementation
+// if the trace is not sampled.
+func WithNoopSpan(unsampledNoop bool) TracerOption {
+ return func(o *Tracer) error {
+ o.unsampledNoop = unsampledNoop
+ return nil
+ }
+}
+
+// WithSharedSpans allows to place client-side and server-side annotations
+// for a RPC call in the same span (Zipkin V1 behavior) or different spans
+// (more in line with other tracing solutions). By default this Tracer
+// uses shared host spans (so client-side and server-side in the same span).
+func WithSharedSpans(val bool) TracerOption {
+ return func(o *Tracer) error {
+ o.sharedSpans = val
+ return nil
+ }
+}
+
+// WithSampler allows one to set a Sampler function
+func WithSampler(sampler Sampler) TracerOption {
+ return func(o *Tracer) error {
+ o.sampler = sampler
+ return nil
+ }
+}
+
+// WithTraceID128Bit if set to true will instruct the Tracer to start traces
+// with 128 bit TraceID's. If set to false the Tracer will start traces with
+// 64 bits.
+func WithTraceID128Bit(val bool) TracerOption {
+ return func(o *Tracer) error {
+ if val {
+ o.generate = idgenerator.NewRandom128()
+ } else {
+ o.generate = idgenerator.NewRandom64()
+ }
+ return nil
+ }
+}
+
+// WithIDGenerator allows one to set a custom ID Generator
+func WithIDGenerator(generator idgenerator.IDGenerator) TracerOption {
+ return func(o *Tracer) error {
+ o.generate = generator
+ return nil
+ }
+}
+
+// WithTags allows one to set default tags to be added to each created span
+func WithTags(tags map[string]string) TracerOption {
+ return func(o *Tracer) error {
+ for k, v := range tags {
+ o.defaultTags[k] = v
+ }
+ return nil
+ }
+}
+
+// WithNoopTracer allows one to start the Tracer as Noop implementation.
+func WithNoopTracer(tracerNoop bool) TracerOption {
+ return func(o *Tracer) error {
+ if tracerNoop {
+ o.noop = 1
+ } else {
+ o.noop = 0
+ }
+ return nil
+ }
+}
diff --git a/vendor/github.com/pmezard/go-difflib/LICENSE b/vendor/github.com/pmezard/go-difflib/LICENSE
new file mode 100644
index 00000000..c67dad61
--- /dev/null
+++ b/vendor/github.com/pmezard/go-difflib/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2013, Patrick Mezard
+All rights reserved.
+
+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.
+ The names of its contributors may not 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
+HOLDER 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.
diff --git a/vendor/github.com/pmezard/go-difflib/difflib/difflib.go b/vendor/github.com/pmezard/go-difflib/difflib/difflib.go
new file mode 100644
index 00000000..003e99fa
--- /dev/null
+++ b/vendor/github.com/pmezard/go-difflib/difflib/difflib.go
@@ -0,0 +1,772 @@
+// Package difflib is a partial port of Python difflib module.
+//
+// It provides tools to compare sequences of strings and generate textual diffs.
+//
+// The following class and functions have been ported:
+//
+// - SequenceMatcher
+//
+// - unified_diff
+//
+// - context_diff
+//
+// Getting unified diffs was the main goal of the port. Keep in mind this code
+// is mostly suitable to output text differences in a human friendly way, there
+// are no guarantees generated diffs are consumable by patch(1).
+package difflib
+
+import (
+ "bufio"
+ "bytes"
+ "fmt"
+ "io"
+ "strings"
+)
+
+func min(a, b int) int {
+ if a < b {
+ return a
+ }
+ return b
+}
+
+func max(a, b int) int {
+ if a > b {
+ return a
+ }
+ return b
+}
+
+func calculateRatio(matches, length int) float64 {
+ if length > 0 {
+ return 2.0 * float64(matches) / float64(length)
+ }
+ return 1.0
+}
+
+type Match struct {
+ A int
+ B int
+ Size int
+}
+
+type OpCode struct {
+ Tag byte
+ I1 int
+ I2 int
+ J1 int
+ J2 int
+}
+
+// SequenceMatcher compares sequence of strings. The basic
+// algorithm predates, and is a little fancier than, an algorithm
+// published in the late 1980's by Ratcliff and Obershelp under the
+// hyperbolic name "gestalt pattern matching". The basic idea is to find
+// the longest contiguous matching subsequence that contains no "junk"
+// elements (R-O doesn't address junk). The same idea is then applied
+// recursively to the pieces of the sequences to the left and to the right
+// of the matching subsequence. This does not yield minimal edit
+// sequences, but does tend to yield matches that "look right" to people.
+//
+// SequenceMatcher tries to compute a "human-friendly diff" between two
+// sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the
+// longest *contiguous* & junk-free matching subsequence. That's what
+// catches peoples' eyes. The Windows(tm) windiff has another interesting
+// notion, pairing up elements that appear uniquely in each sequence.
+// That, and the method here, appear to yield more intuitive difference
+// reports than does diff. This method appears to be the least vulnerable
+// to synching up on blocks of "junk lines", though (like blank lines in
+// ordinary text files, or maybe "" lines in HTML files). That may be
+// because this is the only method of the 3 that has a *concept* of
+// "junk" .
+//
+// Timing: Basic R-O is cubic time worst case and quadratic time expected
+// case. SequenceMatcher is quadratic time for the worst case and has
+// expected-case behavior dependent in a complicated way on how many
+// elements the sequences have in common; best case time is linear.
+type SequenceMatcher struct {
+ a []string
+ b []string
+ b2j map[string][]int
+ IsJunk func(string) bool
+ autoJunk bool
+ bJunk map[string]struct{}
+ matchingBlocks []Match
+ fullBCount map[string]int
+ bPopular map[string]struct{}
+ opCodes []OpCode
+}
+
+func NewMatcher(a, b []string) *SequenceMatcher {
+ m := SequenceMatcher{autoJunk: true}
+ m.SetSeqs(a, b)
+ return &m
+}
+
+func NewMatcherWithJunk(a, b []string, autoJunk bool,
+ isJunk func(string) bool) *SequenceMatcher {
+
+ m := SequenceMatcher{IsJunk: isJunk, autoJunk: autoJunk}
+ m.SetSeqs(a, b)
+ return &m
+}
+
+// Set two sequences to be compared.
+func (m *SequenceMatcher) SetSeqs(a, b []string) {
+ m.SetSeq1(a)
+ m.SetSeq2(b)
+}
+
+// Set the first sequence to be compared. The second sequence to be compared is
+// not changed.
+//
+// SequenceMatcher computes and caches detailed information about the second
+// sequence, so if you want to compare one sequence S against many sequences,
+// use .SetSeq2(s) once and call .SetSeq1(x) repeatedly for each of the other
+// sequences.
+//
+// See also SetSeqs() and SetSeq2().
+func (m *SequenceMatcher) SetSeq1(a []string) {
+ if &a == &m.a {
+ return
+ }
+ m.a = a
+ m.matchingBlocks = nil
+ m.opCodes = nil
+}
+
+// Set the second sequence to be compared. The first sequence to be compared is
+// not changed.
+func (m *SequenceMatcher) SetSeq2(b []string) {
+ if &b == &m.b {
+ return
+ }
+ m.b = b
+ m.matchingBlocks = nil
+ m.opCodes = nil
+ m.fullBCount = nil
+ m.chainB()
+}
+
+func (m *SequenceMatcher) chainB() {
+ // Populate line -> index mapping
+ b2j := map[string][]int{}
+ for i, s := range m.b {
+ indices := b2j[s]
+ indices = append(indices, i)
+ b2j[s] = indices
+ }
+
+ // Purge junk elements
+ m.bJunk = map[string]struct{}{}
+ if m.IsJunk != nil {
+ junk := m.bJunk
+ for s, _ := range b2j {
+ if m.IsJunk(s) {
+ junk[s] = struct{}{}
+ }
+ }
+ for s, _ := range junk {
+ delete(b2j, s)
+ }
+ }
+
+ // Purge remaining popular elements
+ popular := map[string]struct{}{}
+ n := len(m.b)
+ if m.autoJunk && n >= 200 {
+ ntest := n/100 + 1
+ for s, indices := range b2j {
+ if len(indices) > ntest {
+ popular[s] = struct{}{}
+ }
+ }
+ for s, _ := range popular {
+ delete(b2j, s)
+ }
+ }
+ m.bPopular = popular
+ m.b2j = b2j
+}
+
+func (m *SequenceMatcher) isBJunk(s string) bool {
+ _, ok := m.bJunk[s]
+ return ok
+}
+
+// Find longest matching block in a[alo:ahi] and b[blo:bhi].
+//
+// If IsJunk is not defined:
+//
+// Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where
+// alo <= i <= i+k <= ahi
+// blo <= j <= j+k <= bhi
+// and for all (i',j',k') meeting those conditions,
+// k >= k'
+// i <= i'
+// and if i == i', j <= j'
+//
+// In other words, of all maximal matching blocks, return one that
+// starts earliest in a, and of all those maximal matching blocks that
+// start earliest in a, return the one that starts earliest in b.
+//
+// If IsJunk is defined, first the longest matching block is
+// determined as above, but with the additional restriction that no
+// junk element appears in the block. Then that block is extended as
+// far as possible by matching (only) junk elements on both sides. So
+// the resulting block never matches on junk except as identical junk
+// happens to be adjacent to an "interesting" match.
+//
+// If no blocks match, return (alo, blo, 0).
+func (m *SequenceMatcher) findLongestMatch(alo, ahi, blo, bhi int) Match {
+ // CAUTION: stripping common prefix or suffix would be incorrect.
+ // E.g.,
+ // ab
+ // acab
+ // Longest matching block is "ab", but if common prefix is
+ // stripped, it's "a" (tied with "b"). UNIX(tm) diff does so
+ // strip, so ends up claiming that ab is changed to acab by
+ // inserting "ca" in the middle. That's minimal but unintuitive:
+ // "it's obvious" that someone inserted "ac" at the front.
+ // Windiff ends up at the same place as diff, but by pairing up
+ // the unique 'b's and then matching the first two 'a's.
+ besti, bestj, bestsize := alo, blo, 0
+
+ // find longest junk-free match
+ // during an iteration of the loop, j2len[j] = length of longest
+ // junk-free match ending with a[i-1] and b[j]
+ j2len := map[int]int{}
+ for i := alo; i != ahi; i++ {
+ // look at all instances of a[i] in b; note that because
+ // b2j has no junk keys, the loop is skipped if a[i] is junk
+ newj2len := map[int]int{}
+ for _, j := range m.b2j[m.a[i]] {
+ // a[i] matches b[j]
+ if j < blo {
+ continue
+ }
+ if j >= bhi {
+ break
+ }
+ k := j2len[j-1] + 1
+ newj2len[j] = k
+ if k > bestsize {
+ besti, bestj, bestsize = i-k+1, j-k+1, k
+ }
+ }
+ j2len = newj2len
+ }
+
+ // Extend the best by non-junk elements on each end. In particular,
+ // "popular" non-junk elements aren't in b2j, which greatly speeds
+ // the inner loop above, but also means "the best" match so far
+ // doesn't contain any junk *or* popular non-junk elements.
+ for besti > alo && bestj > blo && !m.isBJunk(m.b[bestj-1]) &&
+ m.a[besti-1] == m.b[bestj-1] {
+ besti, bestj, bestsize = besti-1, bestj-1, bestsize+1
+ }
+ for besti+bestsize < ahi && bestj+bestsize < bhi &&
+ !m.isBJunk(m.b[bestj+bestsize]) &&
+ m.a[besti+bestsize] == m.b[bestj+bestsize] {
+ bestsize += 1
+ }
+
+ // Now that we have a wholly interesting match (albeit possibly
+ // empty!), we may as well suck up the matching junk on each
+ // side of it too. Can't think of a good reason not to, and it
+ // saves post-processing the (possibly considerable) expense of
+ // figuring out what to do with it. In the case of an empty
+ // interesting match, this is clearly the right thing to do,
+ // because no other kind of match is possible in the regions.
+ for besti > alo && bestj > blo && m.isBJunk(m.b[bestj-1]) &&
+ m.a[besti-1] == m.b[bestj-1] {
+ besti, bestj, bestsize = besti-1, bestj-1, bestsize+1
+ }
+ for besti+bestsize < ahi && bestj+bestsize < bhi &&
+ m.isBJunk(m.b[bestj+bestsize]) &&
+ m.a[besti+bestsize] == m.b[bestj+bestsize] {
+ bestsize += 1
+ }
+
+ return Match{A: besti, B: bestj, Size: bestsize}
+}
+
+// Return list of triples describing matching subsequences.
+//
+// Each triple is of the form (i, j, n), and means that
+// a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in
+// i and in j. It's also guaranteed that if (i, j, n) and (i', j', n') are
+// adjacent triples in the list, and the second is not the last triple in the
+// list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe
+// adjacent equal blocks.
+//
+// The last triple is a dummy, (len(a), len(b), 0), and is the only
+// triple with n==0.
+func (m *SequenceMatcher) GetMatchingBlocks() []Match {
+ if m.matchingBlocks != nil {
+ return m.matchingBlocks
+ }
+
+ var matchBlocks func(alo, ahi, blo, bhi int, matched []Match) []Match
+ matchBlocks = func(alo, ahi, blo, bhi int, matched []Match) []Match {
+ match := m.findLongestMatch(alo, ahi, blo, bhi)
+ i, j, k := match.A, match.B, match.Size
+ if match.Size > 0 {
+ if alo < i && blo < j {
+ matched = matchBlocks(alo, i, blo, j, matched)
+ }
+ matched = append(matched, match)
+ if i+k < ahi && j+k < bhi {
+ matched = matchBlocks(i+k, ahi, j+k, bhi, matched)
+ }
+ }
+ return matched
+ }
+ matched := matchBlocks(0, len(m.a), 0, len(m.b), nil)
+
+ // It's possible that we have adjacent equal blocks in the
+ // matching_blocks list now.
+ nonAdjacent := []Match{}
+ i1, j1, k1 := 0, 0, 0
+ for _, b := range matched {
+ // Is this block adjacent to i1, j1, k1?
+ i2, j2, k2 := b.A, b.B, b.Size
+ if i1+k1 == i2 && j1+k1 == j2 {
+ // Yes, so collapse them -- this just increases the length of
+ // the first block by the length of the second, and the first
+ // block so lengthened remains the block to compare against.
+ k1 += k2
+ } else {
+ // Not adjacent. Remember the first block (k1==0 means it's
+ // the dummy we started with), and make the second block the
+ // new block to compare against.
+ if k1 > 0 {
+ nonAdjacent = append(nonAdjacent, Match{i1, j1, k1})
+ }
+ i1, j1, k1 = i2, j2, k2
+ }
+ }
+ if k1 > 0 {
+ nonAdjacent = append(nonAdjacent, Match{i1, j1, k1})
+ }
+
+ nonAdjacent = append(nonAdjacent, Match{len(m.a), len(m.b), 0})
+ m.matchingBlocks = nonAdjacent
+ return m.matchingBlocks
+}
+
+// Return list of 5-tuples describing how to turn a into b.
+//
+// Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple
+// has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the
+// tuple preceding it, and likewise for j1 == the previous j2.
+//
+// The tags are characters, with these meanings:
+//
+// 'r' (replace): a[i1:i2] should be replaced by b[j1:j2]
+//
+// 'd' (delete): a[i1:i2] should be deleted, j1==j2 in this case.
+//
+// 'i' (insert): b[j1:j2] should be inserted at a[i1:i1], i1==i2 in this case.
+//
+// 'e' (equal): a[i1:i2] == b[j1:j2]
+func (m *SequenceMatcher) GetOpCodes() []OpCode {
+ if m.opCodes != nil {
+ return m.opCodes
+ }
+ i, j := 0, 0
+ matching := m.GetMatchingBlocks()
+ opCodes := make([]OpCode, 0, len(matching))
+ for _, m := range matching {
+ // invariant: we've pumped out correct diffs to change
+ // a[:i] into b[:j], and the next matching block is
+ // a[ai:ai+size] == b[bj:bj+size]. So we need to pump
+ // out a diff to change a[i:ai] into b[j:bj], pump out
+ // the matching block, and move (i,j) beyond the match
+ ai, bj, size := m.A, m.B, m.Size
+ tag := byte(0)
+ if i < ai && j < bj {
+ tag = 'r'
+ } else if i < ai {
+ tag = 'd'
+ } else if j < bj {
+ tag = 'i'
+ }
+ if tag > 0 {
+ opCodes = append(opCodes, OpCode{tag, i, ai, j, bj})
+ }
+ i, j = ai+size, bj+size
+ // the list of matching blocks is terminated by a
+ // sentinel with size 0
+ if size > 0 {
+ opCodes = append(opCodes, OpCode{'e', ai, i, bj, j})
+ }
+ }
+ m.opCodes = opCodes
+ return m.opCodes
+}
+
+// Isolate change clusters by eliminating ranges with no changes.
+//
+// Return a generator of groups with up to n lines of context.
+// Each group is in the same format as returned by GetOpCodes().
+func (m *SequenceMatcher) GetGroupedOpCodes(n int) [][]OpCode {
+ if n < 0 {
+ n = 3
+ }
+ codes := m.GetOpCodes()
+ if len(codes) == 0 {
+ codes = []OpCode{OpCode{'e', 0, 1, 0, 1}}
+ }
+ // Fixup leading and trailing groups if they show no changes.
+ if codes[0].Tag == 'e' {
+ c := codes[0]
+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2
+ codes[0] = OpCode{c.Tag, max(i1, i2-n), i2, max(j1, j2-n), j2}
+ }
+ if codes[len(codes)-1].Tag == 'e' {
+ c := codes[len(codes)-1]
+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2
+ codes[len(codes)-1] = OpCode{c.Tag, i1, min(i2, i1+n), j1, min(j2, j1+n)}
+ }
+ nn := n + n
+ groups := [][]OpCode{}
+ group := []OpCode{}
+ for _, c := range codes {
+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2
+ // End the current group and start a new one whenever
+ // there is a large range with no changes.
+ if c.Tag == 'e' && i2-i1 > nn {
+ group = append(group, OpCode{c.Tag, i1, min(i2, i1+n),
+ j1, min(j2, j1+n)})
+ groups = append(groups, group)
+ group = []OpCode{}
+ i1, j1 = max(i1, i2-n), max(j1, j2-n)
+ }
+ group = append(group, OpCode{c.Tag, i1, i2, j1, j2})
+ }
+ if len(group) > 0 && !(len(group) == 1 && group[0].Tag == 'e') {
+ groups = append(groups, group)
+ }
+ return groups
+}
+
+// Return a measure of the sequences' similarity (float in [0,1]).
+//
+// Where T is the total number of elements in both sequences, and
+// M is the number of matches, this is 2.0*M / T.
+// Note that this is 1 if the sequences are identical, and 0 if
+// they have nothing in common.
+//
+// .Ratio() is expensive to compute if you haven't already computed
+// .GetMatchingBlocks() or .GetOpCodes(), in which case you may
+// want to try .QuickRatio() or .RealQuickRation() first to get an
+// upper bound.
+func (m *SequenceMatcher) Ratio() float64 {
+ matches := 0
+ for _, m := range m.GetMatchingBlocks() {
+ matches += m.Size
+ }
+ return calculateRatio(matches, len(m.a)+len(m.b))
+}
+
+// Return an upper bound on ratio() relatively quickly.
+//
+// This isn't defined beyond that it is an upper bound on .Ratio(), and
+// is faster to compute.
+func (m *SequenceMatcher) QuickRatio() float64 {
+ // viewing a and b as multisets, set matches to the cardinality
+ // of their intersection; this counts the number of matches
+ // without regard to order, so is clearly an upper bound
+ if m.fullBCount == nil {
+ m.fullBCount = map[string]int{}
+ for _, s := range m.b {
+ m.fullBCount[s] = m.fullBCount[s] + 1
+ }
+ }
+
+ // avail[x] is the number of times x appears in 'b' less the
+ // number of times we've seen it in 'a' so far ... kinda
+ avail := map[string]int{}
+ matches := 0
+ for _, s := range m.a {
+ n, ok := avail[s]
+ if !ok {
+ n = m.fullBCount[s]
+ }
+ avail[s] = n - 1
+ if n > 0 {
+ matches += 1
+ }
+ }
+ return calculateRatio(matches, len(m.a)+len(m.b))
+}
+
+// Return an upper bound on ratio() very quickly.
+//
+// This isn't defined beyond that it is an upper bound on .Ratio(), and
+// is faster to compute than either .Ratio() or .QuickRatio().
+func (m *SequenceMatcher) RealQuickRatio() float64 {
+ la, lb := len(m.a), len(m.b)
+ return calculateRatio(min(la, lb), la+lb)
+}
+
+// Convert range to the "ed" format
+func formatRangeUnified(start, stop int) string {
+ // Per the diff spec at http://www.unix.org/single_unix_specification/
+ beginning := start + 1 // lines start numbering with one
+ length := stop - start
+ if length == 1 {
+ return fmt.Sprintf("%d", beginning)
+ }
+ if length == 0 {
+ beginning -= 1 // empty ranges begin at line just before the range
+ }
+ return fmt.Sprintf("%d,%d", beginning, length)
+}
+
+// Unified diff parameters
+type UnifiedDiff struct {
+ A []string // First sequence lines
+ FromFile string // First file name
+ FromDate string // First file time
+ B []string // Second sequence lines
+ ToFile string // Second file name
+ ToDate string // Second file time
+ Eol string // Headers end of line, defaults to LF
+ Context int // Number of context lines
+}
+
+// Compare two sequences of lines; generate the delta as a unified diff.
+//
+// Unified diffs are a compact way of showing line changes and a few
+// lines of context. The number of context lines is set by 'n' which
+// defaults to three.
+//
+// By default, the diff control lines (those with ---, +++, or @@) are
+// created with a trailing newline. This is helpful so that inputs
+// created from file.readlines() result in diffs that are suitable for
+// file.writelines() since both the inputs and outputs have trailing
+// newlines.
+//
+// For inputs that do not have trailing newlines, set the lineterm
+// argument to "" so that the output will be uniformly newline free.
+//
+// The unidiff format normally has a header for filenames and modification
+// times. Any or all of these may be specified using strings for
+// 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'.
+// The modification times are normally expressed in the ISO 8601 format.
+func WriteUnifiedDiff(writer io.Writer, diff UnifiedDiff) error {
+ buf := bufio.NewWriter(writer)
+ defer buf.Flush()
+ wf := func(format string, args ...interface{}) error {
+ _, err := buf.WriteString(fmt.Sprintf(format, args...))
+ return err
+ }
+ ws := func(s string) error {
+ _, err := buf.WriteString(s)
+ return err
+ }
+
+ if len(diff.Eol) == 0 {
+ diff.Eol = "\n"
+ }
+
+ started := false
+ m := NewMatcher(diff.A, diff.B)
+ for _, g := range m.GetGroupedOpCodes(diff.Context) {
+ if !started {
+ started = true
+ fromDate := ""
+ if len(diff.FromDate) > 0 {
+ fromDate = "\t" + diff.FromDate
+ }
+ toDate := ""
+ if len(diff.ToDate) > 0 {
+ toDate = "\t" + diff.ToDate
+ }
+ if diff.FromFile != "" || diff.ToFile != "" {
+ err := wf("--- %s%s%s", diff.FromFile, fromDate, diff.Eol)
+ if err != nil {
+ return err
+ }
+ err = wf("+++ %s%s%s", diff.ToFile, toDate, diff.Eol)
+ if err != nil {
+ return err
+ }
+ }
+ }
+ first, last := g[0], g[len(g)-1]
+ range1 := formatRangeUnified(first.I1, last.I2)
+ range2 := formatRangeUnified(first.J1, last.J2)
+ if err := wf("@@ -%s +%s @@%s", range1, range2, diff.Eol); err != nil {
+ return err
+ }
+ for _, c := range g {
+ i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2
+ if c.Tag == 'e' {
+ for _, line := range diff.A[i1:i2] {
+ if err := ws(" " + line); err != nil {
+ return err
+ }
+ }
+ continue
+ }
+ if c.Tag == 'r' || c.Tag == 'd' {
+ for _, line := range diff.A[i1:i2] {
+ if err := ws("-" + line); err != nil {
+ return err
+ }
+ }
+ }
+ if c.Tag == 'r' || c.Tag == 'i' {
+ for _, line := range diff.B[j1:j2] {
+ if err := ws("+" + line); err != nil {
+ return err
+ }
+ }
+ }
+ }
+ }
+ return nil
+}
+
+// Like WriteUnifiedDiff but returns the diff a string.
+func GetUnifiedDiffString(diff UnifiedDiff) (string, error) {
+ w := &bytes.Buffer{}
+ err := WriteUnifiedDiff(w, diff)
+ return string(w.Bytes()), err
+}
+
+// Convert range to the "ed" format.
+func formatRangeContext(start, stop int) string {
+ // Per the diff spec at http://www.unix.org/single_unix_specification/
+ beginning := start + 1 // lines start numbering with one
+ length := stop - start
+ if length == 0 {
+ beginning -= 1 // empty ranges begin at line just before the range
+ }
+ if length <= 1 {
+ return fmt.Sprintf("%d", beginning)
+ }
+ return fmt.Sprintf("%d,%d", beginning, beginning+length-1)
+}
+
+type ContextDiff UnifiedDiff
+
+// Compare two sequences of lines; generate the delta as a context diff.
+//
+// Context diffs are a compact way of showing line changes and a few
+// lines of context. The number of context lines is set by diff.Context
+// which defaults to three.
+//
+// By default, the diff control lines (those with *** or ---) are
+// created with a trailing newline.
+//
+// For inputs that do not have trailing newlines, set the diff.Eol
+// argument to "" so that the output will be uniformly newline free.
+//
+// The context diff format normally has a header for filenames and
+// modification times. Any or all of these may be specified using
+// strings for diff.FromFile, diff.ToFile, diff.FromDate, diff.ToDate.
+// The modification times are normally expressed in the ISO 8601 format.
+// If not specified, the strings default to blanks.
+func WriteContextDiff(writer io.Writer, diff ContextDiff) error {
+ buf := bufio.NewWriter(writer)
+ defer buf.Flush()
+ var diffErr error
+ wf := func(format string, args ...interface{}) {
+ _, err := buf.WriteString(fmt.Sprintf(format, args...))
+ if diffErr == nil && err != nil {
+ diffErr = err
+ }
+ }
+ ws := func(s string) {
+ _, err := buf.WriteString(s)
+ if diffErr == nil && err != nil {
+ diffErr = err
+ }
+ }
+
+ if len(diff.Eol) == 0 {
+ diff.Eol = "\n"
+ }
+
+ prefix := map[byte]string{
+ 'i': "+ ",
+ 'd': "- ",
+ 'r': "! ",
+ 'e': " ",
+ }
+
+ started := false
+ m := NewMatcher(diff.A, diff.B)
+ for _, g := range m.GetGroupedOpCodes(diff.Context) {
+ if !started {
+ started = true
+ fromDate := ""
+ if len(diff.FromDate) > 0 {
+ fromDate = "\t" + diff.FromDate
+ }
+ toDate := ""
+ if len(diff.ToDate) > 0 {
+ toDate = "\t" + diff.ToDate
+ }
+ if diff.FromFile != "" || diff.ToFile != "" {
+ wf("*** %s%s%s", diff.FromFile, fromDate, diff.Eol)
+ wf("--- %s%s%s", diff.ToFile, toDate, diff.Eol)
+ }
+ }
+
+ first, last := g[0], g[len(g)-1]
+ ws("***************" + diff.Eol)
+
+ range1 := formatRangeContext(first.I1, last.I2)
+ wf("*** %s ****%s", range1, diff.Eol)
+ for _, c := range g {
+ if c.Tag == 'r' || c.Tag == 'd' {
+ for _, cc := range g {
+ if cc.Tag == 'i' {
+ continue
+ }
+ for _, line := range diff.A[cc.I1:cc.I2] {
+ ws(prefix[cc.Tag] + line)
+ }
+ }
+ break
+ }
+ }
+
+ range2 := formatRangeContext(first.J1, last.J2)
+ wf("--- %s ----%s", range2, diff.Eol)
+ for _, c := range g {
+ if c.Tag == 'r' || c.Tag == 'i' {
+ for _, cc := range g {
+ if cc.Tag == 'd' {
+ continue
+ }
+ for _, line := range diff.B[cc.J1:cc.J2] {
+ ws(prefix[cc.Tag] + line)
+ }
+ }
+ break
+ }
+ }
+ }
+ return diffErr
+}
+
+// Like WriteContextDiff but returns the diff a string.
+func GetContextDiffString(diff ContextDiff) (string, error) {
+ w := &bytes.Buffer{}
+ err := WriteContextDiff(w, diff)
+ return string(w.Bytes()), err
+}
+
+// Split a string on "\n" while preserving them. The output can be used
+// as input for UnifiedDiff and ContextDiff structures.
+func SplitLines(s string) []string {
+ lines := strings.SplitAfter(s, "\n")
+ lines[len(lines)-1] += "\n"
+ return lines
+}
diff --git a/vendor/github.com/russross/blackfriday/v2/.gitignore b/vendor/github.com/russross/blackfriday/v2/.gitignore
new file mode 100644
index 00000000..75623dcc
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/v2/.gitignore
@@ -0,0 +1,8 @@
+*.out
+*.swp
+*.8
+*.6
+_obj
+_test*
+markdown
+tags
diff --git a/vendor/github.com/russross/blackfriday/v2/.travis.yml b/vendor/github.com/russross/blackfriday/v2/.travis.yml
new file mode 100644
index 00000000..b0b525a5
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/v2/.travis.yml
@@ -0,0 +1,17 @@
+sudo: false
+language: go
+go:
+ - "1.10.x"
+ - "1.11.x"
+ - tip
+matrix:
+ fast_finish: true
+ allow_failures:
+ - go: tip
+install:
+ - # Do nothing. This is needed to prevent default install action "go get -t -v ./..." from happening here (we want it to happen inside script step).
+script:
+ - go get -t -v ./...
+ - diff -u <(echo -n) <(gofmt -d -s .)
+ - go tool vet .
+ - go test -v ./...
diff --git a/vendor/github.com/russross/blackfriday/v2/LICENSE.txt b/vendor/github.com/russross/blackfriday/v2/LICENSE.txt
new file mode 100644
index 00000000..2885af36
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/v2/LICENSE.txt
@@ -0,0 +1,29 @@
+Blackfriday is distributed under the Simplified BSD License:
+
+> Copyright © 2011 Russ Ross
+> All rights reserved.
+>
+> Redistribution and use in source and binary forms, with or without
+> modification, are permitted provided that the following conditions
+> are met:
+>
+> 1. Redistributions of source code must retain the above copyright
+> notice, this list of conditions and the following disclaimer.
+>
+> 2. 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.
+>
+> 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 HOLDER 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.
diff --git a/vendor/github.com/russross/blackfriday/v2/README.md b/vendor/github.com/russross/blackfriday/v2/README.md
new file mode 100644
index 00000000..d9c08a22
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/v2/README.md
@@ -0,0 +1,335 @@
+Blackfriday
+[![Build Status][BuildV2SVG]][BuildV2URL]
+[![PkgGoDev][PkgGoDevV2SVG]][PkgGoDevV2URL]
+===========
+
+Blackfriday is a [Markdown][1] processor implemented in [Go][2]. It
+is paranoid about its input (so you can safely feed it user-supplied
+data), it is fast, it supports common extensions (tables, smart
+punctuation substitutions, etc.), and it is safe for all utf-8
+(unicode) input.
+
+HTML output is currently supported, along with Smartypants
+extensions.
+
+It started as a translation from C of [Sundown][3].
+
+
+Installation
+------------
+
+Blackfriday is compatible with modern Go releases in module mode.
+With Go installed:
+
+ go get github.com/russross/blackfriday/v2
+
+will resolve and add the package to the current development module,
+then build and install it. Alternatively, you can achieve the same
+if you import it in a package:
+
+ import "github.com/russross/blackfriday/v2"
+
+and `go get` without parameters.
+
+Legacy GOPATH mode is unsupported.
+
+
+Versions
+--------
+
+Currently maintained and recommended version of Blackfriday is `v2`. It's being
+developed on its own branch: https://github.com/russross/blackfriday/tree/v2 and the
+documentation is available at
+https://pkg.go.dev/github.com/russross/blackfriday/v2.
+
+It is `go get`-able in module mode at `github.com/russross/blackfriday/v2`.
+
+Version 2 offers a number of improvements over v1:
+
+* Cleaned up API
+* A separate call to [`Parse`][4], which produces an abstract syntax tree for
+ the document
+* Latest bug fixes
+* Flexibility to easily add your own rendering extensions
+
+Potential drawbacks:
+
+* Our benchmarks show v2 to be slightly slower than v1. Currently in the
+ ballpark of around 15%.
+* API breakage. If you can't afford modifying your code to adhere to the new API
+ and don't care too much about the new features, v2 is probably not for you.
+* Several bug fixes are trailing behind and still need to be forward-ported to
+ v2. See issue [#348](https://github.com/russross/blackfriday/issues/348) for
+ tracking.
+
+If you are still interested in the legacy `v1`, you can import it from
+`github.com/russross/blackfriday`. Documentation for the legacy v1 can be found
+here: https://pkg.go.dev/github.com/russross/blackfriday.
+
+
+Usage
+-----
+
+For the most sensible markdown processing, it is as simple as getting your input
+into a byte slice and calling:
+
+```go
+output := blackfriday.Run(input)
+```
+
+Your input will be parsed and the output rendered with a set of most popular
+extensions enabled. If you want the most basic feature set, corresponding with
+the bare Markdown specification, use:
+
+```go
+output := blackfriday.Run(input, blackfriday.WithNoExtensions())
+```
+
+### Sanitize untrusted content
+
+Blackfriday itself does nothing to protect against malicious content. If you are
+dealing with user-supplied markdown, we recommend running Blackfriday's output
+through HTML sanitizer such as [Bluemonday][5].
+
+Here's an example of simple usage of Blackfriday together with Bluemonday:
+
+```go
+import (
+ "github.com/microcosm-cc/bluemonday"
+ "github.com/russross/blackfriday/v2"
+)
+
+// ...
+unsafe := blackfriday.Run(input)
+html := bluemonday.UGCPolicy().SanitizeBytes(unsafe)
+```
+
+### Custom options
+
+If you want to customize the set of options, use `blackfriday.WithExtensions`,
+`blackfriday.WithRenderer` and `blackfriday.WithRefOverride`.
+
+### `blackfriday-tool`
+
+You can also check out `blackfriday-tool` for a more complete example
+of how to use it. Download and install it using:
+
+ go get github.com/russross/blackfriday-tool
+
+This is a simple command-line tool that allows you to process a
+markdown file using a standalone program. You can also browse the
+source directly on github if you are just looking for some example
+code:
+
+*
+
+Note that if you have not already done so, installing
+`blackfriday-tool` will be sufficient to download and install
+blackfriday in addition to the tool itself. The tool binary will be
+installed in `$GOPATH/bin`. This is a statically-linked binary that
+can be copied to wherever you need it without worrying about
+dependencies and library versions.
+
+### Sanitized anchor names
+
+Blackfriday includes an algorithm for creating sanitized anchor names
+corresponding to a given input text. This algorithm is used to create
+anchors for headings when `AutoHeadingIDs` extension is enabled. The
+algorithm has a specification, so that other packages can create
+compatible anchor names and links to those anchors.
+
+The specification is located at https://pkg.go.dev/github.com/russross/blackfriday/v2#hdr-Sanitized_Anchor_Names.
+
+[`SanitizedAnchorName`](https://pkg.go.dev/github.com/russross/blackfriday/v2#SanitizedAnchorName) exposes this functionality, and can be used to
+create compatible links to the anchor names generated by blackfriday.
+This algorithm is also implemented in a small standalone package at
+[`github.com/shurcooL/sanitized_anchor_name`](https://pkg.go.dev/github.com/shurcooL/sanitized_anchor_name). It can be useful for clients
+that want a small package and don't need full functionality of blackfriday.
+
+
+Features
+--------
+
+All features of Sundown are supported, including:
+
+* **Compatibility**. The Markdown v1.0.3 test suite passes with
+ the `--tidy` option. Without `--tidy`, the differences are
+ mostly in whitespace and entity escaping, where blackfriday is
+ more consistent and cleaner.
+
+* **Common extensions**, including table support, fenced code
+ blocks, autolinks, strikethroughs, non-strict emphasis, etc.
+
+* **Safety**. Blackfriday is paranoid when parsing, making it safe
+ to feed untrusted user input without fear of bad things
+ happening. The test suite stress tests this and there are no
+ known inputs that make it crash. If you find one, please let me
+ know and send me the input that does it.
+
+ NOTE: "safety" in this context means *runtime safety only*. In order to
+ protect yourself against JavaScript injection in untrusted content, see
+ [this example](https://github.com/russross/blackfriday#sanitize-untrusted-content).
+
+* **Fast processing**. It is fast enough to render on-demand in
+ most web applications without having to cache the output.
+
+* **Thread safety**. You can run multiple parsers in different
+ goroutines without ill effect. There is no dependence on global
+ shared state.
+
+* **Minimal dependencies**. Blackfriday only depends on standard
+ library packages in Go. The source code is pretty
+ self-contained, so it is easy to add to any project, including
+ Google App Engine projects.
+
+* **Standards compliant**. Output successfully validates using the
+ W3C validation tool for HTML 4.01 and XHTML 1.0 Transitional.
+
+
+Extensions
+----------
+
+In addition to the standard markdown syntax, this package
+implements the following extensions:
+
+* **Intra-word emphasis supression**. The `_` character is
+ commonly used inside words when discussing code, so having
+ markdown interpret it as an emphasis command is usually the
+ wrong thing. Blackfriday lets you treat all emphasis markers as
+ normal characters when they occur inside a word.
+
+* **Tables**. Tables can be created by drawing them in the input
+ using a simple syntax:
+
+ ```
+ Name | Age
+ --------|------
+ Bob | 27
+ Alice | 23
+ ```
+
+* **Fenced code blocks**. In addition to the normal 4-space
+ indentation to mark code blocks, you can explicitly mark them
+ and supply a language (to make syntax highlighting simple). Just
+ mark it like this:
+
+ ```go
+ func getTrue() bool {
+ return true
+ }
+ ```
+
+ You can use 3 or more backticks to mark the beginning of the
+ block, and the same number to mark the end of the block.
+
+ To preserve classes of fenced code blocks while using the bluemonday
+ HTML sanitizer, use the following policy:
+
+ ```go
+ p := bluemonday.UGCPolicy()
+ p.AllowAttrs("class").Matching(regexp.MustCompile("^language-[a-zA-Z0-9]+$")).OnElements("code")
+ html := p.SanitizeBytes(unsafe)
+ ```
+
+* **Definition lists**. A simple definition list is made of a single-line
+ term followed by a colon and the definition for that term.
+
+ Cat
+ : Fluffy animal everyone likes
+
+ Internet
+ : Vector of transmission for pictures of cats
+
+ Terms must be separated from the previous definition by a blank line.
+
+* **Footnotes**. A marker in the text that will become a superscript number;
+ a footnote definition that will be placed in a list of footnotes at the
+ end of the document. A footnote looks like this:
+
+ This is a footnote.[^1]
+
+ [^1]: the footnote text.
+
+* **Autolinking**. Blackfriday can find URLs that have not been
+ explicitly marked as links and turn them into links.
+
+* **Strikethrough**. Use two tildes (`~~`) to mark text that
+ should be crossed out.
+
+* **Hard line breaks**. With this extension enabled newlines in the input
+ translate into line breaks in the output. This extension is off by default.
+
+* **Smart quotes**. Smartypants-style punctuation substitution is
+ supported, turning normal double- and single-quote marks into
+ curly quotes, etc.
+
+* **LaTeX-style dash parsing** is an additional option, where `--`
+ is translated into `–`, and `---` is translated into
+ `—`. This differs from most smartypants processors, which
+ turn a single hyphen into an ndash and a double hyphen into an
+ mdash.
+
+* **Smart fractions**, where anything that looks like a fraction
+ is translated into suitable HTML (instead of just a few special
+ cases like most smartypant processors). For example, `4/5`
+ becomes `4⁄5`, which renders as
+ 4⁄5.
+
+
+Other renderers
+---------------
+
+Blackfriday is structured to allow alternative rendering engines. Here
+are a few of note:
+
+* [github_flavored_markdown](https://pkg.go.dev/github.com/shurcooL/github_flavored_markdown):
+ provides a GitHub Flavored Markdown renderer with fenced code block
+ highlighting, clickable heading anchor links.
+
+ It's not customizable, and its goal is to produce HTML output
+ equivalent to the [GitHub Markdown API endpoint](https://developer.github.com/v3/markdown/#render-a-markdown-document-in-raw-mode),
+ except the rendering is performed locally.
+
+* [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt,
+ but for markdown.
+
+* [LaTeX output](https://gitlab.com/ambrevar/blackfriday-latex):
+ renders output as LaTeX.
+
+* [bfchroma](https://github.com/Depado/bfchroma/): provides convenience
+ integration with the [Chroma](https://github.com/alecthomas/chroma) code
+ highlighting library. bfchroma is only compatible with v2 of Blackfriday and
+ provides a drop-in renderer ready to use with Blackfriday, as well as
+ options and means for further customization.
+
+* [Blackfriday-Confluence](https://github.com/kentaro-m/blackfriday-confluence): provides a [Confluence Wiki Markup](https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html) renderer.
+
+* [Blackfriday-Slack](https://github.com/karriereat/blackfriday-slack): converts markdown to slack message style
+
+
+TODO
+----
+
+* More unit testing
+* Improve Unicode support. It does not understand all Unicode
+ rules (about what constitutes a letter, a punctuation symbol,
+ etc.), so it may fail to detect word boundaries correctly in
+ some instances. It is safe on all UTF-8 input.
+
+
+License
+-------
+
+[Blackfriday is distributed under the Simplified BSD License](LICENSE.txt)
+
+
+ [1]: https://daringfireball.net/projects/markdown/ "Markdown"
+ [2]: https://golang.org/ "Go Language"
+ [3]: https://github.com/vmg/sundown "Sundown"
+ [4]: https://pkg.go.dev/github.com/russross/blackfriday/v2#Parse "Parse func"
+ [5]: https://github.com/microcosm-cc/bluemonday "Bluemonday"
+
+ [BuildV2SVG]: https://travis-ci.org/russross/blackfriday.svg?branch=v2
+ [BuildV2URL]: https://travis-ci.org/russross/blackfriday
+ [PkgGoDevV2SVG]: https://pkg.go.dev/badge/github.com/russross/blackfriday/v2
+ [PkgGoDevV2URL]: https://pkg.go.dev/github.com/russross/blackfriday/v2
diff --git a/vendor/github.com/russross/blackfriday/v2/block.go b/vendor/github.com/russross/blackfriday/v2/block.go
new file mode 100644
index 00000000..dcd61e6e
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/v2/block.go
@@ -0,0 +1,1612 @@
+//
+// Blackfriday Markdown Processor
+// Available at http://github.com/russross/blackfriday
+//
+// Copyright © 2011 Russ Ross .
+// Distributed under the Simplified BSD License.
+// See README.md for details.
+//
+
+//
+// Functions to parse block-level elements.
+//
+
+package blackfriday
+
+import (
+ "bytes"
+ "html"
+ "regexp"
+ "strings"
+ "unicode"
+)
+
+const (
+ charEntity = "&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});"
+ escapable = "[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]"
+)
+
+var (
+ reBackslashOrAmp = regexp.MustCompile("[\\&]")
+ reEntityOrEscapedChar = regexp.MustCompile("(?i)\\\\" + escapable + "|" + charEntity)
+)
+
+// Parse block-level data.
+// Note: this function and many that it calls assume that
+// the input buffer ends with a newline.
+func (p *Markdown) block(data []byte) {
+ // this is called recursively: enforce a maximum depth
+ if p.nesting >= p.maxNesting {
+ return
+ }
+ p.nesting++
+
+ // parse out one block-level construct at a time
+ for len(data) > 0 {
+ // prefixed heading:
+ //
+ // # Heading 1
+ // ## Heading 2
+ // ...
+ // ###### Heading 6
+ if p.isPrefixHeading(data) {
+ data = data[p.prefixHeading(data):]
+ continue
+ }
+
+ // block of preformatted HTML:
+ //
+ //
+ // ...
+ //
+ if data[0] == '<' {
+ if i := p.html(data, true); i > 0 {
+ data = data[i:]
+ continue
+ }
+ }
+
+ // title block
+ //
+ // % stuff
+ // % more stuff
+ // % even more stuff
+ if p.extensions&Titleblock != 0 {
+ if data[0] == '%' {
+ if i := p.titleBlock(data, true); i > 0 {
+ data = data[i:]
+ continue
+ }
+ }
+ }
+
+ // blank lines. note: returns the # of bytes to skip
+ if i := p.isEmpty(data); i > 0 {
+ data = data[i:]
+ continue
+ }
+
+ // indented code block:
+ //
+ // func max(a, b int) int {
+ // if a > b {
+ // return a
+ // }
+ // return b
+ // }
+ if p.codePrefix(data) > 0 {
+ data = data[p.code(data):]
+ continue
+ }
+
+ // fenced code block:
+ //
+ // ``` go
+ // func fact(n int) int {
+ // if n <= 1 {
+ // return n
+ // }
+ // return n * fact(n-1)
+ // }
+ // ```
+ if p.extensions&FencedCode != 0 {
+ if i := p.fencedCodeBlock(data, true); i > 0 {
+ data = data[i:]
+ continue
+ }
+ }
+
+ // horizontal rule:
+ //
+ // ------
+ // or
+ // ******
+ // or
+ // ______
+ if p.isHRule(data) {
+ p.addBlock(HorizontalRule, nil)
+ var i int
+ for i = 0; i < len(data) && data[i] != '\n'; i++ {
+ }
+ data = data[i:]
+ continue
+ }
+
+ // block quote:
+ //
+ // > A big quote I found somewhere
+ // > on the web
+ if p.quotePrefix(data) > 0 {
+ data = data[p.quote(data):]
+ continue
+ }
+
+ // table:
+ //
+ // Name | Age | Phone
+ // ------|-----|---------
+ // Bob | 31 | 555-1234
+ // Alice | 27 | 555-4321
+ if p.extensions&Tables != 0 {
+ if i := p.table(data); i > 0 {
+ data = data[i:]
+ continue
+ }
+ }
+
+ // an itemized/unordered list:
+ //
+ // * Item 1
+ // * Item 2
+ //
+ // also works with + or -
+ if p.uliPrefix(data) > 0 {
+ data = data[p.list(data, 0):]
+ continue
+ }
+
+ // a numbered/ordered list:
+ //
+ // 1. Item 1
+ // 2. Item 2
+ if p.oliPrefix(data) > 0 {
+ data = data[p.list(data, ListTypeOrdered):]
+ continue
+ }
+
+ // definition lists:
+ //
+ // Term 1
+ // : Definition a
+ // : Definition b
+ //
+ // Term 2
+ // : Definition c
+ if p.extensions&DefinitionLists != 0 {
+ if p.dliPrefix(data) > 0 {
+ data = data[p.list(data, ListTypeDefinition):]
+ continue
+ }
+ }
+
+ // anything else must look like a normal paragraph
+ // note: this finds underlined headings, too
+ data = data[p.paragraph(data):]
+ }
+
+ p.nesting--
+}
+
+func (p *Markdown) addBlock(typ NodeType, content []byte) *Node {
+ p.closeUnmatchedBlocks()
+ container := p.addChild(typ, 0)
+ container.content = content
+ return container
+}
+
+func (p *Markdown) isPrefixHeading(data []byte) bool {
+ if data[0] != '#' {
+ return false
+ }
+
+ if p.extensions&SpaceHeadings != 0 {
+ level := 0
+ for level < 6 && level < len(data) && data[level] == '#' {
+ level++
+ }
+ if level == len(data) || data[level] != ' ' {
+ return false
+ }
+ }
+ return true
+}
+
+func (p *Markdown) prefixHeading(data []byte) int {
+ level := 0
+ for level < 6 && level < len(data) && data[level] == '#' {
+ level++
+ }
+ i := skipChar(data, level, ' ')
+ end := skipUntilChar(data, i, '\n')
+ skip := end
+ id := ""
+ if p.extensions&HeadingIDs != 0 {
+ j, k := 0, 0
+ // find start/end of heading id
+ for j = i; j < end-1 && (data[j] != '{' || data[j+1] != '#'); j++ {
+ }
+ for k = j + 1; k < end && data[k] != '}'; k++ {
+ }
+ // extract heading id iff found
+ if j < end && k < end {
+ id = string(data[j+2 : k])
+ end = j
+ skip = k + 1
+ for end > 0 && data[end-1] == ' ' {
+ end--
+ }
+ }
+ }
+ for end > 0 && data[end-1] == '#' {
+ if isBackslashEscaped(data, end-1) {
+ break
+ }
+ end--
+ }
+ for end > 0 && data[end-1] == ' ' {
+ end--
+ }
+ if end > i {
+ if id == "" && p.extensions&AutoHeadingIDs != 0 {
+ id = SanitizedAnchorName(string(data[i:end]))
+ }
+ block := p.addBlock(Heading, data[i:end])
+ block.HeadingID = id
+ block.Level = level
+ }
+ return skip
+}
+
+func (p *Markdown) isUnderlinedHeading(data []byte) int {
+ // test of level 1 heading
+ if data[0] == '=' {
+ i := skipChar(data, 1, '=')
+ i = skipChar(data, i, ' ')
+ if i < len(data) && data[i] == '\n' {
+ return 1
+ }
+ return 0
+ }
+
+ // test of level 2 heading
+ if data[0] == '-' {
+ i := skipChar(data, 1, '-')
+ i = skipChar(data, i, ' ')
+ if i < len(data) && data[i] == '\n' {
+ return 2
+ }
+ return 0
+ }
+
+ return 0
+}
+
+func (p *Markdown) titleBlock(data []byte, doRender bool) int {
+ if data[0] != '%' {
+ return 0
+ }
+ splitData := bytes.Split(data, []byte("\n"))
+ var i int
+ for idx, b := range splitData {
+ if !bytes.HasPrefix(b, []byte("%")) {
+ i = idx // - 1
+ break
+ }
+ }
+
+ data = bytes.Join(splitData[0:i], []byte("\n"))
+ consumed := len(data)
+ data = bytes.TrimPrefix(data, []byte("% "))
+ data = bytes.Replace(data, []byte("\n% "), []byte("\n"), -1)
+ block := p.addBlock(Heading, data)
+ block.Level = 1
+ block.IsTitleblock = true
+
+ return consumed
+}
+
+func (p *Markdown) html(data []byte, doRender bool) int {
+ var i, j int
+
+ // identify the opening tag
+ if data[0] != '<' {
+ return 0
+ }
+ curtag, tagfound := p.htmlFindTag(data[1:])
+
+ // handle special cases
+ if !tagfound {
+ // check for an HTML comment
+ if size := p.htmlComment(data, doRender); size > 0 {
+ return size
+ }
+
+ // check for an
tag
+ if size := p.htmlHr(data, doRender); size > 0 {
+ return size
+ }
+
+ // no special case recognized
+ return 0
+ }
+
+ // look for an unindented matching closing tag
+ // followed by a blank line
+ found := false
+ /*
+ closetag := []byte("\n" + curtag + ">")
+ j = len(curtag) + 1
+ for !found {
+ // scan for a closing tag at the beginning of a line
+ if skip := bytes.Index(data[j:], closetag); skip >= 0 {
+ j += skip + len(closetag)
+ } else {
+ break
+ }
+
+ // see if it is the only thing on the line
+ if skip := p.isEmpty(data[j:]); skip > 0 {
+ // see if it is followed by a blank line/eof
+ j += skip
+ if j >= len(data) {
+ found = true
+ i = j
+ } else {
+ if skip := p.isEmpty(data[j:]); skip > 0 {
+ j += skip
+ found = true
+ i = j
+ }
+ }
+ }
+ }
+ */
+
+ // if not found, try a second pass looking for indented match
+ // but not if tag is "ins" or "del" (following original Markdown.pl)
+ if !found && curtag != "ins" && curtag != "del" {
+ i = 1
+ for i < len(data) {
+ i++
+ for i < len(data) && !(data[i-1] == '<' && data[i] == '/') {
+ i++
+ }
+
+ if i+2+len(curtag) >= len(data) {
+ break
+ }
+
+ j = p.htmlFindEnd(curtag, data[i-1:])
+
+ if j > 0 {
+ i += j - 1
+ found = true
+ break
+ }
+ }
+ }
+
+ if !found {
+ return 0
+ }
+
+ // the end of the block has been found
+ if doRender {
+ // trim newlines
+ end := i
+ for end > 0 && data[end-1] == '\n' {
+ end--
+ }
+ finalizeHTMLBlock(p.addBlock(HTMLBlock, data[:end]))
+ }
+
+ return i
+}
+
+func finalizeHTMLBlock(block *Node) {
+ block.Literal = block.content
+ block.content = nil
+}
+
+// HTML comment, lax form
+func (p *Markdown) htmlComment(data []byte, doRender bool) int {
+ i := p.inlineHTMLComment(data)
+ // needs to end with a blank line
+ if j := p.isEmpty(data[i:]); j > 0 {
+ size := i + j
+ if doRender {
+ // trim trailing newlines
+ end := size
+ for end > 0 && data[end-1] == '\n' {
+ end--
+ }
+ block := p.addBlock(HTMLBlock, data[:end])
+ finalizeHTMLBlock(block)
+ }
+ return size
+ }
+ return 0
+}
+
+// HR, which is the only self-closing block tag considered
+func (p *Markdown) htmlHr(data []byte, doRender bool) int {
+ if len(data) < 4 {
+ return 0
+ }
+ if data[0] != '<' || (data[1] != 'h' && data[1] != 'H') || (data[2] != 'r' && data[2] != 'R') {
+ return 0
+ }
+ if data[3] != ' ' && data[3] != '/' && data[3] != '>' {
+ // not an
tag after all; at least not a valid one
+ return 0
+ }
+ i := 3
+ for i < len(data) && data[i] != '>' && data[i] != '\n' {
+ i++
+ }
+ if i < len(data) && data[i] == '>' {
+ i++
+ if j := p.isEmpty(data[i:]); j > 0 {
+ size := i + j
+ if doRender {
+ // trim newlines
+ end := size
+ for end > 0 && data[end-1] == '\n' {
+ end--
+ }
+ finalizeHTMLBlock(p.addBlock(HTMLBlock, data[:end]))
+ }
+ return size
+ }
+ }
+ return 0
+}
+
+func (p *Markdown) htmlFindTag(data []byte) (string, bool) {
+ i := 0
+ for i < len(data) && isalnum(data[i]) {
+ i++
+ }
+ key := string(data[:i])
+ if _, ok := blockTags[key]; ok {
+ return key, true
+ }
+ return "", false
+}
+
+func (p *Markdown) htmlFindEnd(tag string, data []byte) int {
+ // assume data[0] == '<' && data[1] == '/' already tested
+ if tag == "hr" {
+ return 2
+ }
+ // check if tag is a match
+ closetag := []byte("" + tag + ">")
+ if !bytes.HasPrefix(data, closetag) {
+ return 0
+ }
+ i := len(closetag)
+
+ // check that the rest of the line is blank
+ skip := 0
+ if skip = p.isEmpty(data[i:]); skip == 0 {
+ return 0
+ }
+ i += skip
+ skip = 0
+
+ if i >= len(data) {
+ return i
+ }
+
+ if p.extensions&LaxHTMLBlocks != 0 {
+ return i
+ }
+ if skip = p.isEmpty(data[i:]); skip == 0 {
+ // following line must be blank
+ return 0
+ }
+
+ return i + skip
+}
+
+func (*Markdown) isEmpty(data []byte) int {
+ // it is okay to call isEmpty on an empty buffer
+ if len(data) == 0 {
+ return 0
+ }
+
+ var i int
+ for i = 0; i < len(data) && data[i] != '\n'; i++ {
+ if data[i] != ' ' && data[i] != '\t' {
+ return 0
+ }
+ }
+ if i < len(data) && data[i] == '\n' {
+ i++
+ }
+ return i
+}
+
+func (*Markdown) isHRule(data []byte) bool {
+ i := 0
+
+ // skip up to three spaces
+ for i < 3 && data[i] == ' ' {
+ i++
+ }
+
+ // look at the hrule char
+ if data[i] != '*' && data[i] != '-' && data[i] != '_' {
+ return false
+ }
+ c := data[i]
+
+ // the whole line must be the char or whitespace
+ n := 0
+ for i < len(data) && data[i] != '\n' {
+ switch {
+ case data[i] == c:
+ n++
+ case data[i] != ' ':
+ return false
+ }
+ i++
+ }
+
+ return n >= 3
+}
+
+// isFenceLine checks if there's a fence line (e.g., ``` or ``` go) at the beginning of data,
+// and returns the end index if so, or 0 otherwise. It also returns the marker found.
+// If info is not nil, it gets set to the syntax specified in the fence line.
+func isFenceLine(data []byte, info *string, oldmarker string) (end int, marker string) {
+ i, size := 0, 0
+
+ // skip up to three spaces
+ for i < len(data) && i < 3 && data[i] == ' ' {
+ i++
+ }
+
+ // check for the marker characters: ~ or `
+ if i >= len(data) {
+ return 0, ""
+ }
+ if data[i] != '~' && data[i] != '`' {
+ return 0, ""
+ }
+
+ c := data[i]
+
+ // the whole line must be the same char or whitespace
+ for i < len(data) && data[i] == c {
+ size++
+ i++
+ }
+
+ // the marker char must occur at least 3 times
+ if size < 3 {
+ return 0, ""
+ }
+ marker = string(data[i-size : i])
+
+ // if this is the end marker, it must match the beginning marker
+ if oldmarker != "" && marker != oldmarker {
+ return 0, ""
+ }
+
+ // TODO(shurcooL): It's probably a good idea to simplify the 2 code paths here
+ // into one, always get the info string, and discard it if the caller doesn't care.
+ if info != nil {
+ infoLength := 0
+ i = skipChar(data, i, ' ')
+
+ if i >= len(data) {
+ if i == len(data) {
+ return i, marker
+ }
+ return 0, ""
+ }
+
+ infoStart := i
+
+ if data[i] == '{' {
+ i++
+ infoStart++
+
+ for i < len(data) && data[i] != '}' && data[i] != '\n' {
+ infoLength++
+ i++
+ }
+
+ if i >= len(data) || data[i] != '}' {
+ return 0, ""
+ }
+
+ // strip all whitespace at the beginning and the end
+ // of the {} block
+ for infoLength > 0 && isspace(data[infoStart]) {
+ infoStart++
+ infoLength--
+ }
+
+ for infoLength > 0 && isspace(data[infoStart+infoLength-1]) {
+ infoLength--
+ }
+ i++
+ i = skipChar(data, i, ' ')
+ } else {
+ for i < len(data) && !isverticalspace(data[i]) {
+ infoLength++
+ i++
+ }
+ }
+
+ *info = strings.TrimSpace(string(data[infoStart : infoStart+infoLength]))
+ }
+
+ if i == len(data) {
+ return i, marker
+ }
+ if i > len(data) || data[i] != '\n' {
+ return 0, ""
+ }
+ return i + 1, marker // Take newline into account.
+}
+
+// fencedCodeBlock returns the end index if data contains a fenced code block at the beginning,
+// or 0 otherwise. It writes to out if doRender is true, otherwise it has no side effects.
+// If doRender is true, a final newline is mandatory to recognize the fenced code block.
+func (p *Markdown) fencedCodeBlock(data []byte, doRender bool) int {
+ var info string
+ beg, marker := isFenceLine(data, &info, "")
+ if beg == 0 || beg >= len(data) {
+ return 0
+ }
+ fenceLength := beg - 1
+
+ var work bytes.Buffer
+ work.Write([]byte(info))
+ work.WriteByte('\n')
+
+ for {
+ // safe to assume beg < len(data)
+
+ // check for the end of the code block
+ fenceEnd, _ := isFenceLine(data[beg:], nil, marker)
+ if fenceEnd != 0 {
+ beg += fenceEnd
+ break
+ }
+
+ // copy the current line
+ end := skipUntilChar(data, beg, '\n') + 1
+
+ // did we reach the end of the buffer without a closing marker?
+ if end >= len(data) {
+ return 0
+ }
+
+ // verbatim copy to the working buffer
+ if doRender {
+ work.Write(data[beg:end])
+ }
+ beg = end
+ }
+
+ if doRender {
+ block := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer
+ block.IsFenced = true
+ block.FenceLength = fenceLength
+ finalizeCodeBlock(block)
+ }
+
+ return beg
+}
+
+func unescapeChar(str []byte) []byte {
+ if str[0] == '\\' {
+ return []byte{str[1]}
+ }
+ return []byte(html.UnescapeString(string(str)))
+}
+
+func unescapeString(str []byte) []byte {
+ if reBackslashOrAmp.Match(str) {
+ return reEntityOrEscapedChar.ReplaceAllFunc(str, unescapeChar)
+ }
+ return str
+}
+
+func finalizeCodeBlock(block *Node) {
+ if block.IsFenced {
+ newlinePos := bytes.IndexByte(block.content, '\n')
+ firstLine := block.content[:newlinePos]
+ rest := block.content[newlinePos+1:]
+ block.Info = unescapeString(bytes.Trim(firstLine, "\n"))
+ block.Literal = rest
+ } else {
+ block.Literal = block.content
+ }
+ block.content = nil
+}
+
+func (p *Markdown) table(data []byte) int {
+ table := p.addBlock(Table, nil)
+ i, columns := p.tableHeader(data)
+ if i == 0 {
+ p.tip = table.Parent
+ table.Unlink()
+ return 0
+ }
+
+ p.addBlock(TableBody, nil)
+
+ for i < len(data) {
+ pipes, rowStart := 0, i
+ for ; i < len(data) && data[i] != '\n'; i++ {
+ if data[i] == '|' {
+ pipes++
+ }
+ }
+
+ if pipes == 0 {
+ i = rowStart
+ break
+ }
+
+ // include the newline in data sent to tableRow
+ if i < len(data) && data[i] == '\n' {
+ i++
+ }
+ p.tableRow(data[rowStart:i], columns, false)
+ }
+
+ return i
+}
+
+// check if the specified position is preceded by an odd number of backslashes
+func isBackslashEscaped(data []byte, i int) bool {
+ backslashes := 0
+ for i-backslashes-1 >= 0 && data[i-backslashes-1] == '\\' {
+ backslashes++
+ }
+ return backslashes&1 == 1
+}
+
+func (p *Markdown) tableHeader(data []byte) (size int, columns []CellAlignFlags) {
+ i := 0
+ colCount := 1
+ for i = 0; i < len(data) && data[i] != '\n'; i++ {
+ if data[i] == '|' && !isBackslashEscaped(data, i) {
+ colCount++
+ }
+ }
+
+ // doesn't look like a table header
+ if colCount == 1 {
+ return
+ }
+
+ // include the newline in the data sent to tableRow
+ j := i
+ if j < len(data) && data[j] == '\n' {
+ j++
+ }
+ header := data[:j]
+
+ // column count ignores pipes at beginning or end of line
+ if data[0] == '|' {
+ colCount--
+ }
+ if i > 2 && data[i-1] == '|' && !isBackslashEscaped(data, i-1) {
+ colCount--
+ }
+
+ columns = make([]CellAlignFlags, colCount)
+
+ // move on to the header underline
+ i++
+ if i >= len(data) {
+ return
+ }
+
+ if data[i] == '|' && !isBackslashEscaped(data, i) {
+ i++
+ }
+ i = skipChar(data, i, ' ')
+
+ // each column header is of form: / *:?-+:? *|/ with # dashes + # colons >= 3
+ // and trailing | optional on last column
+ col := 0
+ for i < len(data) && data[i] != '\n' {
+ dashes := 0
+
+ if data[i] == ':' {
+ i++
+ columns[col] |= TableAlignmentLeft
+ dashes++
+ }
+ for i < len(data) && data[i] == '-' {
+ i++
+ dashes++
+ }
+ if i < len(data) && data[i] == ':' {
+ i++
+ columns[col] |= TableAlignmentRight
+ dashes++
+ }
+ for i < len(data) && data[i] == ' ' {
+ i++
+ }
+ if i == len(data) {
+ return
+ }
+ // end of column test is messy
+ switch {
+ case dashes < 3:
+ // not a valid column
+ return
+
+ case data[i] == '|' && !isBackslashEscaped(data, i):
+ // marker found, now skip past trailing whitespace
+ col++
+ i++
+ for i < len(data) && data[i] == ' ' {
+ i++
+ }
+
+ // trailing junk found after last column
+ if col >= colCount && i < len(data) && data[i] != '\n' {
+ return
+ }
+
+ case (data[i] != '|' || isBackslashEscaped(data, i)) && col+1 < colCount:
+ // something else found where marker was required
+ return
+
+ case data[i] == '\n':
+ // marker is optional for the last column
+ col++
+
+ default:
+ // trailing junk found after last column
+ return
+ }
+ }
+ if col != colCount {
+ return
+ }
+
+ p.addBlock(TableHead, nil)
+ p.tableRow(header, columns, true)
+ size = i
+ if size < len(data) && data[size] == '\n' {
+ size++
+ }
+ return
+}
+
+func (p *Markdown) tableRow(data []byte, columns []CellAlignFlags, header bool) {
+ p.addBlock(TableRow, nil)
+ i, col := 0, 0
+
+ if data[i] == '|' && !isBackslashEscaped(data, i) {
+ i++
+ }
+
+ for col = 0; col < len(columns) && i < len(data); col++ {
+ for i < len(data) && data[i] == ' ' {
+ i++
+ }
+
+ cellStart := i
+
+ for i < len(data) && (data[i] != '|' || isBackslashEscaped(data, i)) && data[i] != '\n' {
+ i++
+ }
+
+ cellEnd := i
+
+ // skip the end-of-cell marker, possibly taking us past end of buffer
+ i++
+
+ for cellEnd > cellStart && cellEnd-1 < len(data) && data[cellEnd-1] == ' ' {
+ cellEnd--
+ }
+
+ cell := p.addBlock(TableCell, data[cellStart:cellEnd])
+ cell.IsHeader = header
+ cell.Align = columns[col]
+ }
+
+ // pad it out with empty columns to get the right number
+ for ; col < len(columns); col++ {
+ cell := p.addBlock(TableCell, nil)
+ cell.IsHeader = header
+ cell.Align = columns[col]
+ }
+
+ // silently ignore rows with too many cells
+}
+
+// returns blockquote prefix length
+func (p *Markdown) quotePrefix(data []byte) int {
+ i := 0
+ for i < 3 && i < len(data) && data[i] == ' ' {
+ i++
+ }
+ if i < len(data) && data[i] == '>' {
+ if i+1 < len(data) && data[i+1] == ' ' {
+ return i + 2
+ }
+ return i + 1
+ }
+ return 0
+}
+
+// blockquote ends with at least one blank line
+// followed by something without a blockquote prefix
+func (p *Markdown) terminateBlockquote(data []byte, beg, end int) bool {
+ if p.isEmpty(data[beg:]) <= 0 {
+ return false
+ }
+ if end >= len(data) {
+ return true
+ }
+ return p.quotePrefix(data[end:]) == 0 && p.isEmpty(data[end:]) == 0
+}
+
+// parse a blockquote fragment
+func (p *Markdown) quote(data []byte) int {
+ block := p.addBlock(BlockQuote, nil)
+ var raw bytes.Buffer
+ beg, end := 0, 0
+ for beg < len(data) {
+ end = beg
+ // Step over whole lines, collecting them. While doing that, check for
+ // fenced code and if one's found, incorporate it altogether,
+ // irregardless of any contents inside it
+ for end < len(data) && data[end] != '\n' {
+ if p.extensions&FencedCode != 0 {
+ if i := p.fencedCodeBlock(data[end:], false); i > 0 {
+ // -1 to compensate for the extra end++ after the loop:
+ end += i - 1
+ break
+ }
+ }
+ end++
+ }
+ if end < len(data) && data[end] == '\n' {
+ end++
+ }
+ if pre := p.quotePrefix(data[beg:]); pre > 0 {
+ // skip the prefix
+ beg += pre
+ } else if p.terminateBlockquote(data, beg, end) {
+ break
+ }
+ // this line is part of the blockquote
+ raw.Write(data[beg:end])
+ beg = end
+ }
+ p.block(raw.Bytes())
+ p.finalize(block)
+ return end
+}
+
+// returns prefix length for block code
+func (p *Markdown) codePrefix(data []byte) int {
+ if len(data) >= 1 && data[0] == '\t' {
+ return 1
+ }
+ if len(data) >= 4 && data[0] == ' ' && data[1] == ' ' && data[2] == ' ' && data[3] == ' ' {
+ return 4
+ }
+ return 0
+}
+
+func (p *Markdown) code(data []byte) int {
+ var work bytes.Buffer
+
+ i := 0
+ for i < len(data) {
+ beg := i
+ for i < len(data) && data[i] != '\n' {
+ i++
+ }
+ if i < len(data) && data[i] == '\n' {
+ i++
+ }
+
+ blankline := p.isEmpty(data[beg:i]) > 0
+ if pre := p.codePrefix(data[beg:i]); pre > 0 {
+ beg += pre
+ } else if !blankline {
+ // non-empty, non-prefixed line breaks the pre
+ i = beg
+ break
+ }
+
+ // verbatim copy to the working buffer
+ if blankline {
+ work.WriteByte('\n')
+ } else {
+ work.Write(data[beg:i])
+ }
+ }
+
+ // trim all the \n off the end of work
+ workbytes := work.Bytes()
+ eol := len(workbytes)
+ for eol > 0 && workbytes[eol-1] == '\n' {
+ eol--
+ }
+ if eol != len(workbytes) {
+ work.Truncate(eol)
+ }
+
+ work.WriteByte('\n')
+
+ block := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer
+ block.IsFenced = false
+ finalizeCodeBlock(block)
+
+ return i
+}
+
+// returns unordered list item prefix
+func (p *Markdown) uliPrefix(data []byte) int {
+ i := 0
+ // start with up to 3 spaces
+ for i < len(data) && i < 3 && data[i] == ' ' {
+ i++
+ }
+ if i >= len(data)-1 {
+ return 0
+ }
+ // need one of {'*', '+', '-'} followed by a space or a tab
+ if (data[i] != '*' && data[i] != '+' && data[i] != '-') ||
+ (data[i+1] != ' ' && data[i+1] != '\t') {
+ return 0
+ }
+ return i + 2
+}
+
+// returns ordered list item prefix
+func (p *Markdown) oliPrefix(data []byte) int {
+ i := 0
+
+ // start with up to 3 spaces
+ for i < 3 && i < len(data) && data[i] == ' ' {
+ i++
+ }
+
+ // count the digits
+ start := i
+ for i < len(data) && data[i] >= '0' && data[i] <= '9' {
+ i++
+ }
+ if start == i || i >= len(data)-1 {
+ return 0
+ }
+
+ // we need >= 1 digits followed by a dot and a space or a tab
+ if data[i] != '.' || !(data[i+1] == ' ' || data[i+1] == '\t') {
+ return 0
+ }
+ return i + 2
+}
+
+// returns definition list item prefix
+func (p *Markdown) dliPrefix(data []byte) int {
+ if len(data) < 2 {
+ return 0
+ }
+ i := 0
+ // need a ':' followed by a space or a tab
+ if data[i] != ':' || !(data[i+1] == ' ' || data[i+1] == '\t') {
+ return 0
+ }
+ for i < len(data) && data[i] == ' ' {
+ i++
+ }
+ return i + 2
+}
+
+// parse ordered or unordered list block
+func (p *Markdown) list(data []byte, flags ListType) int {
+ i := 0
+ flags |= ListItemBeginningOfList
+ block := p.addBlock(List, nil)
+ block.ListFlags = flags
+ block.Tight = true
+
+ for i < len(data) {
+ skip := p.listItem(data[i:], &flags)
+ if flags&ListItemContainsBlock != 0 {
+ block.ListData.Tight = false
+ }
+ i += skip
+ if skip == 0 || flags&ListItemEndOfList != 0 {
+ break
+ }
+ flags &= ^ListItemBeginningOfList
+ }
+
+ above := block.Parent
+ finalizeList(block)
+ p.tip = above
+ return i
+}
+
+// Returns true if the list item is not the same type as its parent list
+func (p *Markdown) listTypeChanged(data []byte, flags *ListType) bool {
+ if p.dliPrefix(data) > 0 && *flags&ListTypeDefinition == 0 {
+ return true
+ } else if p.oliPrefix(data) > 0 && *flags&ListTypeOrdered == 0 {
+ return true
+ } else if p.uliPrefix(data) > 0 && (*flags&ListTypeOrdered != 0 || *flags&ListTypeDefinition != 0) {
+ return true
+ }
+ return false
+}
+
+// Returns true if block ends with a blank line, descending if needed
+// into lists and sublists.
+func endsWithBlankLine(block *Node) bool {
+ // TODO: figure this out. Always false now.
+ for block != nil {
+ //if block.lastLineBlank {
+ //return true
+ //}
+ t := block.Type
+ if t == List || t == Item {
+ block = block.LastChild
+ } else {
+ break
+ }
+ }
+ return false
+}
+
+func finalizeList(block *Node) {
+ block.open = false
+ item := block.FirstChild
+ for item != nil {
+ // check for non-final list item ending with blank line:
+ if endsWithBlankLine(item) && item.Next != nil {
+ block.ListData.Tight = false
+ break
+ }
+ // recurse into children of list item, to see if there are spaces
+ // between any of them:
+ subItem := item.FirstChild
+ for subItem != nil {
+ if endsWithBlankLine(subItem) && (item.Next != nil || subItem.Next != nil) {
+ block.ListData.Tight = false
+ break
+ }
+ subItem = subItem.Next
+ }
+ item = item.Next
+ }
+}
+
+// Parse a single list item.
+// Assumes initial prefix is already removed if this is a sublist.
+func (p *Markdown) listItem(data []byte, flags *ListType) int {
+ // keep track of the indentation of the first line
+ itemIndent := 0
+ if data[0] == '\t' {
+ itemIndent += 4
+ } else {
+ for itemIndent < 3 && data[itemIndent] == ' ' {
+ itemIndent++
+ }
+ }
+
+ var bulletChar byte = '*'
+ i := p.uliPrefix(data)
+ if i == 0 {
+ i = p.oliPrefix(data)
+ } else {
+ bulletChar = data[i-2]
+ }
+ if i == 0 {
+ i = p.dliPrefix(data)
+ // reset definition term flag
+ if i > 0 {
+ *flags &= ^ListTypeTerm
+ }
+ }
+ if i == 0 {
+ // if in definition list, set term flag and continue
+ if *flags&ListTypeDefinition != 0 {
+ *flags |= ListTypeTerm
+ } else {
+ return 0
+ }
+ }
+
+ // skip leading whitespace on first line
+ for i < len(data) && data[i] == ' ' {
+ i++
+ }
+
+ // find the end of the line
+ line := i
+ for i > 0 && i < len(data) && data[i-1] != '\n' {
+ i++
+ }
+
+ // get working buffer
+ var raw bytes.Buffer
+
+ // put the first line into the working buffer
+ raw.Write(data[line:i])
+ line = i
+
+ // process the following lines
+ containsBlankLine := false
+ sublist := 0
+ codeBlockMarker := ""
+
+gatherlines:
+ for line < len(data) {
+ i++
+
+ // find the end of this line
+ for i < len(data) && data[i-1] != '\n' {
+ i++
+ }
+
+ // if it is an empty line, guess that it is part of this item
+ // and move on to the next line
+ if p.isEmpty(data[line:i]) > 0 {
+ containsBlankLine = true
+ line = i
+ continue
+ }
+
+ // calculate the indentation
+ indent := 0
+ indentIndex := 0
+ if data[line] == '\t' {
+ indentIndex++
+ indent += 4
+ } else {
+ for indent < 4 && line+indent < i && data[line+indent] == ' ' {
+ indent++
+ indentIndex++
+ }
+ }
+
+ chunk := data[line+indentIndex : i]
+
+ if p.extensions&FencedCode != 0 {
+ // determine if in or out of codeblock
+ // if in codeblock, ignore normal list processing
+ _, marker := isFenceLine(chunk, nil, codeBlockMarker)
+ if marker != "" {
+ if codeBlockMarker == "" {
+ // start of codeblock
+ codeBlockMarker = marker
+ } else {
+ // end of codeblock.
+ codeBlockMarker = ""
+ }
+ }
+ // we are in a codeblock, write line, and continue
+ if codeBlockMarker != "" || marker != "" {
+ raw.Write(data[line+indentIndex : i])
+ line = i
+ continue gatherlines
+ }
+ }
+
+ // evaluate how this line fits in
+ switch {
+ // is this a nested list item?
+ case (p.uliPrefix(chunk) > 0 && !p.isHRule(chunk)) ||
+ p.oliPrefix(chunk) > 0 ||
+ p.dliPrefix(chunk) > 0:
+
+ // to be a nested list, it must be indented more
+ // if not, it is either a different kind of list
+ // or the next item in the same list
+ if indent <= itemIndent {
+ if p.listTypeChanged(chunk, flags) {
+ *flags |= ListItemEndOfList
+ } else if containsBlankLine {
+ *flags |= ListItemContainsBlock
+ }
+
+ break gatherlines
+ }
+
+ if containsBlankLine {
+ *flags |= ListItemContainsBlock
+ }
+
+ // is this the first item in the nested list?
+ if sublist == 0 {
+ sublist = raw.Len()
+ }
+
+ // is this a nested prefix heading?
+ case p.isPrefixHeading(chunk):
+ // if the heading is not indented, it is not nested in the list
+ // and thus ends the list
+ if containsBlankLine && indent < 4 {
+ *flags |= ListItemEndOfList
+ break gatherlines
+ }
+ *flags |= ListItemContainsBlock
+
+ // anything following an empty line is only part
+ // of this item if it is indented 4 spaces
+ // (regardless of the indentation of the beginning of the item)
+ case containsBlankLine && indent < 4:
+ if *flags&ListTypeDefinition != 0 && i < len(data)-1 {
+ // is the next item still a part of this list?
+ next := i
+ for next < len(data) && data[next] != '\n' {
+ next++
+ }
+ for next < len(data)-1 && data[next] == '\n' {
+ next++
+ }
+ if i < len(data)-1 && data[i] != ':' && data[next] != ':' {
+ *flags |= ListItemEndOfList
+ }
+ } else {
+ *flags |= ListItemEndOfList
+ }
+ break gatherlines
+
+ // a blank line means this should be parsed as a block
+ case containsBlankLine:
+ raw.WriteByte('\n')
+ *flags |= ListItemContainsBlock
+ }
+
+ // if this line was preceded by one or more blanks,
+ // re-introduce the blank into the buffer
+ if containsBlankLine {
+ containsBlankLine = false
+ raw.WriteByte('\n')
+ }
+
+ // add the line into the working buffer without prefix
+ raw.Write(data[line+indentIndex : i])
+
+ line = i
+ }
+
+ rawBytes := raw.Bytes()
+
+ block := p.addBlock(Item, nil)
+ block.ListFlags = *flags
+ block.Tight = false
+ block.BulletChar = bulletChar
+ block.Delimiter = '.' // Only '.' is possible in Markdown, but ')' will also be possible in CommonMark
+
+ // render the contents of the list item
+ if *flags&ListItemContainsBlock != 0 && *flags&ListTypeTerm == 0 {
+ // intermediate render of block item, except for definition term
+ if sublist > 0 {
+ p.block(rawBytes[:sublist])
+ p.block(rawBytes[sublist:])
+ } else {
+ p.block(rawBytes)
+ }
+ } else {
+ // intermediate render of inline item
+ if sublist > 0 {
+ child := p.addChild(Paragraph, 0)
+ child.content = rawBytes[:sublist]
+ p.block(rawBytes[sublist:])
+ } else {
+ child := p.addChild(Paragraph, 0)
+ child.content = rawBytes
+ }
+ }
+ return line
+}
+
+// render a single paragraph that has already been parsed out
+func (p *Markdown) renderParagraph(data []byte) {
+ if len(data) == 0 {
+ return
+ }
+
+ // trim leading spaces
+ beg := 0
+ for data[beg] == ' ' {
+ beg++
+ }
+
+ end := len(data)
+ // trim trailing newline
+ if data[len(data)-1] == '\n' {
+ end--
+ }
+
+ // trim trailing spaces
+ for end > beg && data[end-1] == ' ' {
+ end--
+ }
+
+ p.addBlock(Paragraph, data[beg:end])
+}
+
+func (p *Markdown) paragraph(data []byte) int {
+ // prev: index of 1st char of previous line
+ // line: index of 1st char of current line
+ // i: index of cursor/end of current line
+ var prev, line, i int
+ tabSize := TabSizeDefault
+ if p.extensions&TabSizeEight != 0 {
+ tabSize = TabSizeDouble
+ }
+ // keep going until we find something to mark the end of the paragraph
+ for i < len(data) {
+ // mark the beginning of the current line
+ prev = line
+ current := data[i:]
+ line = i
+
+ // did we find a reference or a footnote? If so, end a paragraph
+ // preceding it and report that we have consumed up to the end of that
+ // reference:
+ if refEnd := isReference(p, current, tabSize); refEnd > 0 {
+ p.renderParagraph(data[:i])
+ return i + refEnd
+ }
+
+ // did we find a blank line marking the end of the paragraph?
+ if n := p.isEmpty(current); n > 0 {
+ // did this blank line followed by a definition list item?
+ if p.extensions&DefinitionLists != 0 {
+ if i < len(data)-1 && data[i+1] == ':' {
+ return p.list(data[prev:], ListTypeDefinition)
+ }
+ }
+
+ p.renderParagraph(data[:i])
+ return i + n
+ }
+
+ // an underline under some text marks a heading, so our paragraph ended on prev line
+ if i > 0 {
+ if level := p.isUnderlinedHeading(current); level > 0 {
+ // render the paragraph
+ p.renderParagraph(data[:prev])
+
+ // ignore leading and trailing whitespace
+ eol := i - 1
+ for prev < eol && data[prev] == ' ' {
+ prev++
+ }
+ for eol > prev && data[eol-1] == ' ' {
+ eol--
+ }
+
+ id := ""
+ if p.extensions&AutoHeadingIDs != 0 {
+ id = SanitizedAnchorName(string(data[prev:eol]))
+ }
+
+ block := p.addBlock(Heading, data[prev:eol])
+ block.Level = level
+ block.HeadingID = id
+
+ // find the end of the underline
+ for i < len(data) && data[i] != '\n' {
+ i++
+ }
+ return i
+ }
+ }
+
+ // if the next line starts a block of HTML, then the paragraph ends here
+ if p.extensions&LaxHTMLBlocks != 0 {
+ if data[i] == '<' && p.html(current, false) > 0 {
+ // rewind to before the HTML block
+ p.renderParagraph(data[:i])
+ return i
+ }
+ }
+
+ // if there's a prefixed heading or a horizontal rule after this, paragraph is over
+ if p.isPrefixHeading(current) || p.isHRule(current) {
+ p.renderParagraph(data[:i])
+ return i
+ }
+
+ // if there's a fenced code block, paragraph is over
+ if p.extensions&FencedCode != 0 {
+ if p.fencedCodeBlock(current, false) > 0 {
+ p.renderParagraph(data[:i])
+ return i
+ }
+ }
+
+ // if there's a definition list item, prev line is a definition term
+ if p.extensions&DefinitionLists != 0 {
+ if p.dliPrefix(current) != 0 {
+ ret := p.list(data[prev:], ListTypeDefinition)
+ return ret
+ }
+ }
+
+ // if there's a list after this, paragraph is over
+ if p.extensions&NoEmptyLineBeforeBlock != 0 {
+ if p.uliPrefix(current) != 0 ||
+ p.oliPrefix(current) != 0 ||
+ p.quotePrefix(current) != 0 ||
+ p.codePrefix(current) != 0 {
+ p.renderParagraph(data[:i])
+ return i
+ }
+ }
+
+ // otherwise, scan to the beginning of the next line
+ nl := bytes.IndexByte(data[i:], '\n')
+ if nl >= 0 {
+ i += nl + 1
+ } else {
+ i += len(data[i:])
+ }
+ }
+
+ p.renderParagraph(data[:i])
+ return i
+}
+
+func skipChar(data []byte, start int, char byte) int {
+ i := start
+ for i < len(data) && data[i] == char {
+ i++
+ }
+ return i
+}
+
+func skipUntilChar(text []byte, start int, char byte) int {
+ i := start
+ for i < len(text) && text[i] != char {
+ i++
+ }
+ return i
+}
+
+// SanitizedAnchorName returns a sanitized anchor name for the given text.
+//
+// It implements the algorithm specified in the package comment.
+func SanitizedAnchorName(text string) string {
+ var anchorName []rune
+ futureDash := false
+ for _, r := range text {
+ switch {
+ case unicode.IsLetter(r) || unicode.IsNumber(r):
+ if futureDash && len(anchorName) > 0 {
+ anchorName = append(anchorName, '-')
+ }
+ futureDash = false
+ anchorName = append(anchorName, unicode.ToLower(r))
+ default:
+ futureDash = true
+ }
+ }
+ return string(anchorName)
+}
diff --git a/vendor/github.com/russross/blackfriday/v2/doc.go b/vendor/github.com/russross/blackfriday/v2/doc.go
new file mode 100644
index 00000000..57ff152a
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/v2/doc.go
@@ -0,0 +1,46 @@
+// Package blackfriday is a markdown processor.
+//
+// It translates plain text with simple formatting rules into an AST, which can
+// then be further processed to HTML (provided by Blackfriday itself) or other
+// formats (provided by the community).
+//
+// The simplest way to invoke Blackfriday is to call the Run function. It will
+// take a text input and produce a text output in HTML (or other format).
+//
+// A slightly more sophisticated way to use Blackfriday is to create a Markdown
+// processor and to call Parse, which returns a syntax tree for the input
+// document. You can leverage Blackfriday's parsing for content extraction from
+// markdown documents. You can assign a custom renderer and set various options
+// to the Markdown processor.
+//
+// If you're interested in calling Blackfriday from command line, see
+// https://github.com/russross/blackfriday-tool.
+//
+// Sanitized Anchor Names
+//
+// Blackfriday includes an algorithm for creating sanitized anchor names
+// corresponding to a given input text. This algorithm is used to create
+// anchors for headings when AutoHeadingIDs extension is enabled. The
+// algorithm is specified below, so that other packages can create
+// compatible anchor names and links to those anchors.
+//
+// The algorithm iterates over the input text, interpreted as UTF-8,
+// one Unicode code point (rune) at a time. All runes that are letters (category L)
+// or numbers (category N) are considered valid characters. They are mapped to
+// lower case, and included in the output. All other runes are considered
+// invalid characters. Invalid characters that precede the first valid character,
+// as well as invalid character that follow the last valid character
+// are dropped completely. All other sequences of invalid characters
+// between two valid characters are replaced with a single dash character '-'.
+//
+// SanitizedAnchorName exposes this functionality, and can be used to
+// create compatible links to the anchor names generated by blackfriday.
+// This algorithm is also implemented in a small standalone package at
+// github.com/shurcooL/sanitized_anchor_name. It can be useful for clients
+// that want a small package and don't need full functionality of blackfriday.
+package blackfriday
+
+// NOTE: Keep Sanitized Anchor Name algorithm in sync with package
+// github.com/shurcooL/sanitized_anchor_name.
+// Otherwise, users of sanitized_anchor_name will get anchor names
+// that are incompatible with those generated by blackfriday.
diff --git a/vendor/github.com/russross/blackfriday/v2/entities.go b/vendor/github.com/russross/blackfriday/v2/entities.go
new file mode 100644
index 00000000..a2c3edb6
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/v2/entities.go
@@ -0,0 +1,2236 @@
+package blackfriday
+
+// Extracted from https://html.spec.whatwg.org/multipage/entities.json
+var entities = map[string]bool{
+ "Æ": true,
+ "Æ": true,
+ "&": true,
+ "&": true,
+ "Á": true,
+ "Á": true,
+ "Ă": true,
+ "Â": true,
+ "Â": true,
+ "А": true,
+ "𝔄": true,
+ "À": true,
+ "À": true,
+ "Α": true,
+ "Ā": true,
+ "⩓": true,
+ "Ą": true,
+ "𝔸": true,
+ "⁡": true,
+ "Å": true,
+ "Å": true,
+ "𝒜": true,
+ "≔": true,
+ "Ã": true,
+ "Ã": true,
+ "Ä": true,
+ "Ä": true,
+ "∖": true,
+ "⫧": true,
+ "⌆": true,
+ "Б": true,
+ "∵": true,
+ "ℬ": true,
+ "Β": true,
+ "𝔅": true,
+ "𝔹": true,
+ "˘": true,
+ "ℬ": true,
+ "≎": true,
+ "Ч": true,
+ "©": true,
+ "©": true,
+ "Ć": true,
+ "⋒": true,
+ "ⅅ": true,
+ "ℭ": true,
+ "Č": true,
+ "Ç": true,
+ "Ç": true,
+ "Ĉ": true,
+ "∰": true,
+ "Ċ": true,
+ "¸": true,
+ "·": true,
+ "ℭ": true,
+ "Χ": true,
+ "⊙": true,
+ "⊖": true,
+ "⊕": true,
+ "⊗": true,
+ "∲": true,
+ "”": true,
+ "’": true,
+ "∷": true,
+ "⩴": true,
+ "≡": true,
+ "∯": true,
+ "∮": true,
+ "ℂ": true,
+ "∐": true,
+ "∳": true,
+ "⨯": true,
+ "𝒞": true,
+ "⋓": true,
+ "≍": true,
+ "ⅅ": true,
+ "⤑": true,
+ "Ђ": true,
+ "Ѕ": true,
+ "Џ": true,
+ "‡": true,
+ "↡": true,
+ "⫤": true,
+ "Ď": true,
+ "Д": true,
+ "∇": true,
+ "Δ": true,
+ "𝔇": true,
+ "´": true,
+ "˙": true,
+ "˝": true,
+ "`": true,
+ "˜": true,
+ "⋄": true,
+ "ⅆ": true,
+ "𝔻": true,
+ "¨": true,
+ "⃜": true,
+ "≐": true,
+ "∯": true,
+ "¨": true,
+ "⇓": true,
+ "⇐": true,
+ "⇔": true,
+ "⫤": true,
+ "⟸": true,
+ "⟺": true,
+ "⟹": true,
+ "⇒": true,
+ "⊨": true,
+ "⇑": true,
+ "⇕": true,
+ "∥": true,
+ "↓": true,
+ "⤓": true,
+ "⇵": true,
+ "̑": true,
+ "⥐": true,
+ "⥞": true,
+ "↽": true,
+ "⥖": true,
+ "⥟": true,
+ "⇁": true,
+ "⥗": true,
+ "⊤": true,
+ "↧": true,
+ "⇓": true,
+ "𝒟": true,
+ "Đ": true,
+ "Ŋ": true,
+ "Ð": true,
+ "Ð": true,
+ "É": true,
+ "É": true,
+ "Ě": true,
+ "Ê": true,
+ "Ê": true,
+ "Э": true,
+ "Ė": true,
+ "𝔈": true,
+ "È": true,
+ "È": true,
+ "∈": true,
+ "Ē": true,
+ "◻": true,
+ "▫": true,
+ "Ę": true,
+ "𝔼": true,
+ "Ε": true,
+ "⩵": true,
+ "≂": true,
+ "⇌": true,
+ "ℰ": true,
+ "⩳": true,
+ "Η": true,
+ "Ë": true,
+ "Ë": true,
+ "∃": true,
+ "ⅇ": true,
+ "Ф": true,
+ "𝔉": true,
+ "◼": true,
+ "▪": true,
+ "𝔽": true,
+ "∀": true,
+ "ℱ": true,
+ "ℱ": true,
+ "Ѓ": true,
+ ">": true,
+ ">": true,
+ "Γ": true,
+ "Ϝ": true,
+ "Ğ": true,
+ "Ģ": true,
+ "Ĝ": true,
+ "Г": true,
+ "Ġ": true,
+ "𝔊": true,
+ "⋙": true,
+ "𝔾": true,
+ "≥": true,
+ "⋛": true,
+ "≧": true,
+ "⪢": true,
+ "≷": true,
+ "⩾": true,
+ "≳": true,
+ "𝒢": true,
+ "≫": true,
+ "Ъ": true,
+ "ˇ": true,
+ "^": true,
+ "Ĥ": true,
+ "ℌ": true,
+ "ℋ": true,
+ "ℍ": true,
+ "─": true,
+ "ℋ": true,
+ "Ħ": true,
+ "≎": true,
+ "≏": true,
+ "Е": true,
+ "IJ": true,
+ "Ё": true,
+ "Í": true,
+ "Í": true,
+ "Î": true,
+ "Î": true,
+ "И": true,
+ "İ": true,
+ "ℑ": true,
+ "Ì": true,
+ "Ì": true,
+ "ℑ": true,
+ "Ī": true,
+ "ⅈ": true,
+ "⇒": true,
+ "∬": true,
+ "∫": true,
+ "⋂": true,
+ "⁣": true,
+ "⁢": true,
+ "Į": true,
+ "𝕀": true,
+ "Ι": true,
+ "ℐ": true,
+ "Ĩ": true,
+ "І": true,
+ "Ï": true,
+ "Ï": true,
+ "Ĵ": true,
+ "Й": true,
+ "𝔍": true,
+ "𝕁": true,
+ "𝒥": true,
+ "Ј": true,
+ "Є": true,
+ "Х": true,
+ "Ќ": true,
+ "Κ": true,
+ "Ķ": true,
+ "К": true,
+ "𝔎": true,
+ "𝕂": true,
+ "𝒦": true,
+ "Љ": true,
+ "<": true,
+ "<": true,
+ "Ĺ": true,
+ "Λ": true,
+ "⟪": true,
+ "ℒ": true,
+ "↞": true,
+ "Ľ": true,
+ "Ļ": true,
+ "Л": true,
+ "⟨": true,
+ "←": true,
+ "⇤": true,
+ "⇆": true,
+ "⌈": true,
+ "⟦": true,
+ "⥡": true,
+ "⇃": true,
+ "⥙": true,
+ "⌊": true,
+ "↔": true,
+ "⥎": true,
+ "⊣": true,
+ "↤": true,
+ "⥚": true,
+ "⊲": true,
+ "⧏": true,
+ "⊴": true,
+ "⥑": true,
+ "⥠": true,
+ "↿": true,
+ "⥘": true,
+ "↼": true,
+ "⥒": true,
+ "⇐": true,
+ "⇔": true,
+ "⋚": true,
+ "≦": true,
+ "≶": true,
+ "⪡": true,
+ "⩽": true,
+ "≲": true,
+ "𝔏": true,
+ "⋘": true,
+ "⇚": true,
+ "Ŀ": true,
+ "⟵": true,
+ "⟷": true,
+ "⟶": true,
+ "⟸": true,
+ "⟺": true,
+ "⟹": true,
+ "𝕃": true,
+ "↙": true,
+ "↘": true,
+ "ℒ": true,
+ "↰": true,
+ "Ł": true,
+ "≪": true,
+ "⤅": true,
+ "М": true,
+ " ": true,
+ "ℳ": true,
+ "𝔐": true,
+ "∓": true,
+ "𝕄": true,
+ "ℳ": true,
+ "Μ": true,
+ "Њ": true,
+ "Ń": true,
+ "Ň": true,
+ "Ņ": true,
+ "Н": true,
+ "​": true,
+ "​": true,
+ "​": true,
+ "​": true,
+ "≫": true,
+ "≪": true,
+ "
": true,
+ "𝔑": true,
+ "⁠": true,
+ " ": true,
+ "ℕ": true,
+ "⫬": true,
+ "≢": true,
+ "≭": true,
+ "∦": true,
+ "∉": true,
+ "≠": true,
+ "≂̸": true,
+ "∄": true,
+ "≯": true,
+ "≱": true,
+ "≧̸": true,
+ "≫̸": true,
+ "≹": true,
+ "⩾̸": true,
+ "≵": true,
+ "≎̸": true,
+ "≏̸": true,
+ "⋪": true,
+ "⧏̸": true,
+ "⋬": true,
+ "≮": true,
+ "≰": true,
+ "≸": true,
+ "≪̸": true,
+ "⩽̸": true,
+ "≴": true,
+ "⪢̸": true,
+ "⪡̸": true,
+ "⊀": true,
+ "⪯̸": true,
+ "⋠": true,
+ "∌": true,
+ "⋫": true,
+ "⧐̸": true,
+ "⋭": true,
+ "⊏̸": true,
+ "⋢": true,
+ "⊐̸": true,
+ "⋣": true,
+ "⊂⃒": true,
+ "⊈": true,
+ "⊁": true,
+ "⪰̸": true,
+ "⋡": true,
+ "≿̸": true,
+ "⊃⃒": true,
+ "⊉": true,
+ "≁": true,
+ "≄": true,
+ "≇": true,
+ "≉": true,
+ "∤": true,
+ "𝒩": true,
+ "Ñ": true,
+ "Ñ": true,
+ "Ν": true,
+ "Œ": true,
+ "Ó": true,
+ "Ó": true,
+ "Ô": true,
+ "Ô": true,
+ "О": true,
+ "Ő": true,
+ "𝔒": true,
+ "Ò": true,
+ "Ò": true,
+ "Ō": true,
+ "Ω": true,
+ "Ο": true,
+ "𝕆": true,
+ "“": true,
+ "‘": true,
+ "⩔": true,
+ "𝒪": true,
+ "Ø": true,
+ "Ø": true,
+ "Õ": true,
+ "Õ": true,
+ "⨷": true,
+ "Ö": true,
+ "Ö": true,
+ "‾": true,
+ "⏞": true,
+ "⎴": true,
+ "⏜": true,
+ "∂": true,
+ "П": true,
+ "𝔓": true,
+ "Φ": true,
+ "Π": true,
+ "±": true,
+ "ℌ": true,
+ "ℙ": true,
+ "⪻": true,
+ "≺": true,
+ "⪯": true,
+ "≼": true,
+ "≾": true,
+ "″": true,
+ "∏": true,
+ "∷": true,
+ "∝": true,
+ "𝒫": true,
+ "Ψ": true,
+ """: true,
+ """: true,
+ "𝔔": true,
+ "ℚ": true,
+ "𝒬": true,
+ "⤐": true,
+ "®": true,
+ "®": true,
+ "Ŕ": true,
+ "⟫": true,
+ "↠": true,
+ "⤖": true,
+ "Ř": true,
+ "Ŗ": true,
+ "Р": true,
+ "ℜ": true,
+ "∋": true,
+ "⇋": true,
+ "⥯": true,
+ "ℜ": true,
+ "Ρ": true,
+ "⟩": true,
+ "→": true,
+ "⇥": true,
+ "⇄": true,
+ "⌉": true,
+ "⟧": true,
+ "⥝": true,
+ "⇂": true,
+ "⥕": true,
+ "⌋": true,
+ "⊢": true,
+ "↦": true,
+ "⥛": true,
+ "⊳": true,
+ "⧐": true,
+ "⊵": true,
+ "⥏": true,
+ "⥜": true,
+ "↾": true,
+ "⥔": true,
+ "⇀": true,
+ "⥓": true,
+ "⇒": true,
+ "ℝ": true,
+ "⥰": true,
+ "⇛": true,
+ "ℛ": true,
+ "↱": true,
+ "⧴": true,
+ "Щ": true,
+ "Ш": true,
+ "Ь": true,
+ "Ś": true,
+ "⪼": true,
+ "Š": true,
+ "Ş": true,
+ "Ŝ": true,
+ "С": true,
+ "𝔖": true,
+ "↓": true,
+ "←": true,
+ "→": true,
+ "↑": true,
+ "Σ": true,
+ "∘": true,
+ "𝕊": true,
+ "√": true,
+ "□": true,
+ "⊓": true,
+ "⊏": true,
+ "⊑": true,
+ "⊐": true,
+ "⊒": true,
+ "⊔": true,
+ "𝒮": true,
+ "⋆": true,
+ "⋐": true,
+ "⋐": true,
+ "⊆": true,
+ "≻": true,
+ "⪰": true,
+ "≽": true,
+ "≿": true,
+ "∋": true,
+ "∑": true,
+ "⋑": true,
+ "⊃": true,
+ "⊇": true,
+ "⋑": true,
+ "Þ": true,
+ "Þ": true,
+ "™": true,
+ "Ћ": true,
+ "Ц": true,
+ "	": true,
+ "Τ": true,
+ "Ť": true,
+ "Ţ": true,
+ "Т": true,
+ "𝔗": true,
+ "∴": true,
+ "Θ": true,
+ "  ": true,
+ " ": true,
+ "∼": true,
+ "≃": true,
+ "≅": true,
+ "≈": true,
+ "𝕋": true,
+ "⃛": true,
+ "𝒯": true,
+ "Ŧ": true,
+ "Ú": true,
+ "Ú": true,
+ "↟": true,
+ "⥉": true,
+ "Ў": true,
+ "Ŭ": true,
+ "Û": true,
+ "Û": true,
+ "У": true,
+ "Ű": true,
+ "𝔘": true,
+ "Ù": true,
+ "Ù": true,
+ "Ū": true,
+ "_": true,
+ "⏟": true,
+ "⎵": true,
+ "⏝": true,
+ "⋃": true,
+ "⊎": true,
+ "Ų": true,
+ "𝕌": true,
+ "↑": true,
+ "⤒": true,
+ "⇅": true,
+ "↕": true,
+ "⥮": true,
+ "⊥": true,
+ "↥": true,
+ "⇑": true,
+ "⇕": true,
+ "↖": true,
+ "↗": true,
+ "ϒ": true,
+ "Υ": true,
+ "Ů": true,
+ "𝒰": true,
+ "Ũ": true,
+ "Ü": true,
+ "Ü": true,
+ "⊫": true,
+ "⫫": true,
+ "В": true,
+ "⊩": true,
+ "⫦": true,
+ "⋁": true,
+ "‖": true,
+ "‖": true,
+ "∣": true,
+ "|": true,
+ "❘": true,
+ "≀": true,
+ " ": true,
+ "𝔙": true,
+ "𝕍": true,
+ "𝒱": true,
+ "⊪": true,
+ "Ŵ": true,
+ "⋀": true,
+ "𝔚": true,
+ "𝕎": true,
+ "𝒲": true,
+ "𝔛": true,
+ "Ξ": true,
+ "𝕏": true,
+ "𝒳": true,
+ "Я": true,
+ "Ї": true,
+ "Ю": true,
+ "Ý": true,
+ "Ý": true,
+ "Ŷ": true,
+ "Ы": true,
+ "𝔜": true,
+ "𝕐": true,
+ "𝒴": true,
+ "Ÿ": true,
+ "Ж": true,
+ "Ź": true,
+ "Ž": true,
+ "З": true,
+ "Ż": true,
+ "​": true,
+ "Ζ": true,
+ "ℨ": true,
+ "ℤ": true,
+ "𝒵": true,
+ "á": true,
+ "á": true,
+ "ă": true,
+ "∾": true,
+ "∾̳": true,
+ "∿": true,
+ "â": true,
+ "â": true,
+ "´": true,
+ "´": true,
+ "а": true,
+ "æ": true,
+ "æ": true,
+ "⁡": true,
+ "𝔞": true,
+ "à": true,
+ "à": true,
+ "ℵ": true,
+ "ℵ": true,
+ "α": true,
+ "ā": true,
+ "⨿": true,
+ "&": true,
+ "&": true,
+ "∧": true,
+ "⩕": true,
+ "⩜": true,
+ "⩘": true,
+ "⩚": true,
+ "∠": true,
+ "⦤": true,
+ "∠": true,
+ "∡": true,
+ "⦨": true,
+ "⦩": true,
+ "⦪": true,
+ "⦫": true,
+ "⦬": true,
+ "⦭": true,
+ "⦮": true,
+ "⦯": true,
+ "∟": true,
+ "⊾": true,
+ "⦝": true,
+ "∢": true,
+ "Å": true,
+ "⍼": true,
+ "ą": true,
+ "𝕒": true,
+ "≈": true,
+ "⩰": true,
+ "⩯": true,
+ "≊": true,
+ "≋": true,
+ "'": true,
+ "≈": true,
+ "≊": true,
+ "å": true,
+ "å": true,
+ "𝒶": true,
+ "*": true,
+ "≈": true,
+ "≍": true,
+ "ã": true,
+ "ã": true,
+ "ä": true,
+ "ä": true,
+ "∳": true,
+ "⨑": true,
+ "⫭": true,
+ "≌": true,
+ "϶": true,
+ "‵": true,
+ "∽": true,
+ "⋍": true,
+ "⊽": true,
+ "⌅": true,
+ "⌅": true,
+ "⎵": true,
+ "⎶": true,
+ "≌": true,
+ "б": true,
+ "„": true,
+ "∵": true,
+ "∵": true,
+ "⦰": true,
+ "϶": true,
+ "ℬ": true,
+ "β": true,
+ "ℶ": true,
+ "≬": true,
+ "𝔟": true,
+ "⋂": true,
+ "◯": true,
+ "⋃": true,
+ "⨀": true,
+ "⨁": true,
+ "⨂": true,
+ "⨆": true,
+ "★": true,
+ "▽": true,
+ "△": true,
+ "⨄": true,
+ "⋁": true,
+ "⋀": true,
+ "⤍": true,
+ "⧫": true,
+ "▪": true,
+ "▴": true,
+ "▾": true,
+ "◂": true,
+ "▸": true,
+ "␣": true,
+ "▒": true,
+ "░": true,
+ "▓": true,
+ "█": true,
+ "=⃥": true,
+ "≡⃥": true,
+ "⌐": true,
+ "𝕓": true,
+ "⊥": true,
+ "⊥": true,
+ "⋈": true,
+ "╗": true,
+ "╔": true,
+ "╖": true,
+ "╓": true,
+ "═": true,
+ "╦": true,
+ "╩": true,
+ "╤": true,
+ "╧": true,
+ "╝": true,
+ "╚": true,
+ "╜": true,
+ "╙": true,
+ "║": true,
+ "╬": true,
+ "╣": true,
+ "╠": true,
+ "╫": true,
+ "╢": true,
+ "╟": true,
+ "⧉": true,
+ "╕": true,
+ "╒": true,
+ "┐": true,
+ "┌": true,
+ "─": true,
+ "╥": true,
+ "╨": true,
+ "┬": true,
+ "┴": true,
+ "⊟": true,
+ "⊞": true,
+ "⊠": true,
+ "╛": true,
+ "╘": true,
+ "┘": true,
+ "└": true,
+ "│": true,
+ "╪": true,
+ "╡": true,
+ "╞": true,
+ "┼": true,
+ "┤": true,
+ "├": true,
+ "‵": true,
+ "˘": true,
+ "¦": true,
+ "¦": true,
+ "𝒷": true,
+ "⁏": true,
+ "∽": true,
+ "⋍": true,
+ "\": true,
+ "⧅": true,
+ "⟈": true,
+ "•": true,
+ "•": true,
+ "≎": true,
+ "⪮": true,
+ "≏": true,
+ "≏": true,
+ "ć": true,
+ "∩": true,
+ "⩄": true,
+ "⩉": true,
+ "⩋": true,
+ "⩇": true,
+ "⩀": true,
+ "∩︀": true,
+ "⁁": true,
+ "ˇ": true,
+ "⩍": true,
+ "č": true,
+ "ç": true,
+ "ç": true,
+ "ĉ": true,
+ "⩌": true,
+ "⩐": true,
+ "ċ": true,
+ "¸": true,
+ "¸": true,
+ "⦲": true,
+ "¢": true,
+ "¢": true,
+ "·": true,
+ "𝔠": true,
+ "ч": true,
+ "✓": true,
+ "✓": true,
+ "χ": true,
+ "○": true,
+ "⧃": true,
+ "ˆ": true,
+ "≗": true,
+ "↺": true,
+ "↻": true,
+ "®": true,
+ "Ⓢ": true,
+ "⊛": true,
+ "⊚": true,
+ "⊝": true,
+ "≗": true,
+ "⨐": true,
+ "⫯": true,
+ "⧂": true,
+ "♣": true,
+ "♣": true,
+ ":": true,
+ "≔": true,
+ "≔": true,
+ ",": true,
+ "@": true,
+ "∁": true,
+ "∘": true,
+ "∁": true,
+ "ℂ": true,
+ "≅": true,
+ "⩭": true,
+ "∮": true,
+ "𝕔": true,
+ "∐": true,
+ "©": true,
+ "©": true,
+ "℗": true,
+ "↵": true,
+ "✗": true,
+ "𝒸": true,
+ "⫏": true,
+ "⫑": true,
+ "⫐": true,
+ "⫒": true,
+ "⋯": true,
+ "⤸": true,
+ "⤵": true,
+ "⋞": true,
+ "⋟": true,
+ "↶": true,
+ "⤽": true,
+ "∪": true,
+ "⩈": true,
+ "⩆": true,
+ "⩊": true,
+ "⊍": true,
+ "⩅": true,
+ "∪︀": true,
+ "↷": true,
+ "⤼": true,
+ "⋞": true,
+ "⋟": true,
+ "⋎": true,
+ "⋏": true,
+ "¤": true,
+ "¤": true,
+ "↶": true,
+ "↷": true,
+ "⋎": true,
+ "⋏": true,
+ "∲": true,
+ "∱": true,
+ "⌭": true,
+ "⇓": true,
+ "⥥": true,
+ "†": true,
+ "ℸ": true,
+ "↓": true,
+ "‐": true,
+ "⊣": true,
+ "⤏": true,
+ "˝": true,
+ "ď": true,
+ "д": true,
+ "ⅆ": true,
+ "‡": true,
+ "⇊": true,
+ "⩷": true,
+ "°": true,
+ "°": true,
+ "δ": true,
+ "⦱": true,
+ "⥿": true,
+ "𝔡": true,
+ "⇃": true,
+ "⇂": true,
+ "⋄": true,
+ "⋄": true,
+ "♦": true,
+ "♦": true,
+ "¨": true,
+ "ϝ": true,
+ "⋲": true,
+ "÷": true,
+ "÷": true,
+ "÷": true,
+ "⋇": true,
+ "⋇": true,
+ "ђ": true,
+ "⌞": true,
+ "⌍": true,
+ "$": true,
+ "𝕕": true,
+ "˙": true,
+ "≐": true,
+ "≑": true,
+ "∸": true,
+ "∔": true,
+ "⊡": true,
+ "⌆": true,
+ "↓": true,
+ "⇊": true,
+ "⇃": true,
+ "⇂": true,
+ "⤐": true,
+ "⌟": true,
+ "⌌": true,
+ "𝒹": true,
+ "ѕ": true,
+ "⧶": true,
+ "đ": true,
+ "⋱": true,
+ "▿": true,
+ "▾": true,
+ "⇵": true,
+ "⥯": true,
+ "⦦": true,
+ "џ": true,
+ "⟿": true,
+ "⩷": true,
+ "≑": true,
+ "é": true,
+ "é": true,
+ "⩮": true,
+ "ě": true,
+ "≖": true,
+ "ê": true,
+ "ê": true,
+ "≕": true,
+ "э": true,
+ "ė": true,
+ "ⅇ": true,
+ "≒": true,
+ "𝔢": true,
+ "⪚": true,
+ "è": true,
+ "è": true,
+ "⪖": true,
+ "⪘": true,
+ "⪙": true,
+ "⏧": true,
+ "ℓ": true,
+ "⪕": true,
+ "⪗": true,
+ "ē": true,
+ "∅": true,
+ "∅": true,
+ "∅": true,
+ " ": true,
+ " ": true,
+ " ": true,
+ "ŋ": true,
+ " ": true,
+ "ę": true,
+ "𝕖": true,
+ "⋕": true,
+ "⧣": true,
+ "⩱": true,
+ "ε": true,
+ "ε": true,
+ "ϵ": true,
+ "≖": true,
+ "≕": true,
+ "≂": true,
+ "⪖": true,
+ "⪕": true,
+ "=": true,
+ "≟": true,
+ "≡": true,
+ "⩸": true,
+ "⧥": true,
+ "≓": true,
+ "⥱": true,
+ "ℯ": true,
+ "≐": true,
+ "≂": true,
+ "η": true,
+ "ð": true,
+ "ð": true,
+ "ë": true,
+ "ë": true,
+ "€": true,
+ "!": true,
+ "∃": true,
+ "ℰ": true,
+ "ⅇ": true,
+ "≒": true,
+ "ф": true,
+ "♀": true,
+ "ffi": true,
+ "ff": true,
+ "ffl": true,
+ "𝔣": true,
+ "fi": true,
+ "fj": true,
+ "♭": true,
+ "fl": true,
+ "▱": true,
+ "ƒ": true,
+ "𝕗": true,
+ "∀": true,
+ "⋔": true,
+ "⫙": true,
+ "⨍": true,
+ "½": true,
+ "½": true,
+ "⅓": true,
+ "¼": true,
+ "¼": true,
+ "⅕": true,
+ "⅙": true,
+ "⅛": true,
+ "⅔": true,
+ "⅖": true,
+ "¾": true,
+ "¾": true,
+ "⅗": true,
+ "⅜": true,
+ "⅘": true,
+ "⅚": true,
+ "⅝": true,
+ "⅞": true,
+ "⁄": true,
+ "⌢": true,
+ "𝒻": true,
+ "≧": true,
+ "⪌": true,
+ "ǵ": true,
+ "γ": true,
+ "ϝ": true,
+ "⪆": true,
+ "ğ": true,
+ "ĝ": true,
+ "г": true,
+ "ġ": true,
+ "≥": true,
+ "⋛": true,
+ "≥": true,
+ "≧": true,
+ "⩾": true,
+ "⩾": true,
+ "⪩": true,
+ "⪀": true,
+ "⪂": true,
+ "⪄": true,
+ "⋛︀": true,
+ "⪔": true,
+ "𝔤": true,
+ "≫": true,
+ "⋙": true,
+ "ℷ": true,
+ "ѓ": true,
+ "≷": true,
+ "⪒": true,
+ "⪥": true,
+ "⪤": true,
+ "≩": true,
+ "⪊": true,
+ "⪊": true,
+ "⪈": true,
+ "⪈": true,
+ "≩": true,
+ "⋧": true,
+ "𝕘": true,
+ "`": true,
+ "ℊ": true,
+ "≳": true,
+ "⪎": true,
+ "⪐": true,
+ ">": true,
+ ">": true,
+ "⪧": true,
+ "⩺": true,
+ "⋗": true,
+ "⦕": true,
+ "⩼": true,
+ "⪆": true,
+ "⥸": true,
+ "⋗": true,
+ "⋛": true,
+ "⪌": true,
+ "≷": true,
+ "≳": true,
+ "≩︀": true,
+ "≩︀": true,
+ "⇔": true,
+ " ": true,
+ "½": true,
+ "ℋ": true,
+ "ъ": true,
+ "↔": true,
+ "⥈": true,
+ "↭": true,
+ "ℏ": true,
+ "ĥ": true,
+ "♥": true,
+ "♥": true,
+ "…": true,
+ "⊹": true,
+ "𝔥": true,
+ "⤥": true,
+ "⤦": true,
+ "⇿": true,
+ "∻": true,
+ "↩": true,
+ "↪": true,
+ "𝕙": true,
+ "―": true,
+ "𝒽": true,
+ "ℏ": true,
+ "ħ": true,
+ "⁃": true,
+ "‐": true,
+ "í": true,
+ "í": true,
+ "⁣": true,
+ "î": true,
+ "î": true,
+ "и": true,
+ "е": true,
+ "¡": true,
+ "¡": true,
+ "⇔": true,
+ "𝔦": true,
+ "ì": true,
+ "ì": true,
+ "ⅈ": true,
+ "⨌": true,
+ "∭": true,
+ "⧜": true,
+ "℩": true,
+ "ij": true,
+ "ī": true,
+ "ℑ": true,
+ "ℐ": true,
+ "ℑ": true,
+ "ı": true,
+ "⊷": true,
+ "Ƶ": true,
+ "∈": true,
+ "℅": true,
+ "∞": true,
+ "⧝": true,
+ "ı": true,
+ "∫": true,
+ "⊺": true,
+ "ℤ": true,
+ "⊺": true,
+ "⨗": true,
+ "⨼": true,
+ "ё": true,
+ "į": true,
+ "𝕚": true,
+ "ι": true,
+ "⨼": true,
+ "¿": true,
+ "¿": true,
+ "𝒾": true,
+ "∈": true,
+ "⋹": true,
+ "⋵": true,
+ "⋴": true,
+ "⋳": true,
+ "∈": true,
+ "⁢": true,
+ "ĩ": true,
+ "і": true,
+ "ï": true,
+ "ï": true,
+ "ĵ": true,
+ "й": true,
+ "𝔧": true,
+ "ȷ": true,
+ "𝕛": true,
+ "𝒿": true,
+ "ј": true,
+ "є": true,
+ "κ": true,
+ "ϰ": true,
+ "ķ": true,
+ "к": true,
+ "𝔨": true,
+ "ĸ": true,
+ "х": true,
+ "ќ": true,
+ "𝕜": true,
+ "𝓀": true,
+ "⇚": true,
+ "⇐": true,
+ "⤛": true,
+ "⤎": true,
+ "≦": true,
+ "⪋": true,
+ "⥢": true,
+ "ĺ": true,
+ "⦴": true,
+ "ℒ": true,
+ "λ": true,
+ "〈": true,
+ "⦑": true,
+ "⟨": true,
+ "⪅": true,
+ "«": true,
+ "«": true,
+ "←": true,
+ "⇤": true,
+ "⤟": true,
+ "⤝": true,
+ "↩": true,
+ "↫": true,
+ "⤹": true,
+ "⥳": true,
+ "↢": true,
+ "⪫": true,
+ "⤙": true,
+ "⪭": true,
+ "⪭︀": true,
+ "⤌": true,
+ "❲": true,
+ "{": true,
+ "[": true,
+ "⦋": true,
+ "⦏": true,
+ "⦍": true,
+ "ľ": true,
+ "ļ": true,
+ "⌈": true,
+ "{": true,
+ "л": true,
+ "⤶": true,
+ "“": true,
+ "„": true,
+ "⥧": true,
+ "⥋": true,
+ "↲": true,
+ "≤": true,
+ "←": true,
+ "↢": true,
+ "↽": true,
+ "↼": true,
+ "⇇": true,
+ "↔": true,
+ "⇆": true,
+ "⇋": true,
+ "↭": true,
+ "⋋": true,
+ "⋚": true,
+ "≤": true,
+ "≦": true,
+ "⩽": true,
+ "⩽": true,
+ "⪨": true,
+ "⩿": true,
+ "⪁": true,
+ "⪃": true,
+ "⋚︀": true,
+ "⪓": true,
+ "⪅": true,
+ "⋖": true,
+ "⋚": true,
+ "⪋": true,
+ "≶": true,
+ "≲": true,
+ "⥼": true,
+ "⌊": true,
+ "𝔩": true,
+ "≶": true,
+ "⪑": true,
+ "↽": true,
+ "↼": true,
+ "⥪": true,
+ "▄": true,
+ "љ": true,
+ "≪": true,
+ "⇇": true,
+ "⌞": true,
+ "⥫": true,
+ "◺": true,
+ "ŀ": true,
+ "⎰": true,
+ "⎰": true,
+ "≨": true,
+ "⪉": true,
+ "⪉": true,
+ "⪇": true,
+ "⪇": true,
+ "≨": true,
+ "⋦": true,
+ "⟬": true,
+ "⇽": true,
+ "⟦": true,
+ "⟵": true,
+ "⟷": true,
+ "⟼": true,
+ "⟶": true,
+ "↫": true,
+ "↬": true,
+ "⦅": true,
+ "𝕝": true,
+ "⨭": true,
+ "⨴": true,
+ "∗": true,
+ "_": true,
+ "◊": true,
+ "◊": true,
+ "⧫": true,
+ "(": true,
+ "⦓": true,
+ "⇆": true,
+ "⌟": true,
+ "⇋": true,
+ "⥭": true,
+ "": true,
+ "⊿": true,
+ "‹": true,
+ "𝓁": true,
+ "↰": true,
+ "≲": true,
+ "⪍": true,
+ "⪏": true,
+ "[": true,
+ "‘": true,
+ "‚": true,
+ "ł": true,
+ "<": true,
+ "<": true,
+ "⪦": true,
+ "⩹": true,
+ "⋖": true,
+ "⋋": true,
+ "⋉": true,
+ "⥶": true,
+ "⩻": true,
+ "⦖": true,
+ "◃": true,
+ "⊴": true,
+ "◂": true,
+ "⥊": true,
+ "⥦": true,
+ "≨︀": true,
+ "≨︀": true,
+ "∺": true,
+ "¯": true,
+ "¯": true,
+ "♂": true,
+ "✠": true,
+ "✠": true,
+ "↦": true,
+ "↦": true,
+ "↧": true,
+ "↤": true,
+ "↥": true,
+ "▮": true,
+ "⨩": true,
+ "м": true,
+ "—": true,
+ "∡": true,
+ "𝔪": true,
+ "℧": true,
+ "µ": true,
+ "µ": true,
+ "∣": true,
+ "*": true,
+ "⫰": true,
+ "·": true,
+ "·": true,
+ "−": true,
+ "⊟": true,
+ "∸": true,
+ "⨪": true,
+ "⫛": true,
+ "…": true,
+ "∓": true,
+ "⊧": true,
+ "𝕞": true,
+ "∓": true,
+ "𝓂": true,
+ "∾": true,
+ "μ": true,
+ "⊸": true,
+ "⊸": true,
+ "⋙̸": true,
+ "≫⃒": true,
+ "≫̸": true,
+ "⇍": true,
+ "⇎": true,
+ "⋘̸": true,
+ "≪⃒": true,
+ "≪̸": true,
+ "⇏": true,
+ "⊯": true,
+ "⊮": true,
+ "∇": true,
+ "ń": true,
+ "∠⃒": true,
+ "≉": true,
+ "⩰̸": true,
+ "≋̸": true,
+ "ʼn": true,
+ "≉": true,
+ "♮": true,
+ "♮": true,
+ "ℕ": true,
+ " ": true,
+ " ": true,
+ "≎̸": true,
+ "≏̸": true,
+ "⩃": true,
+ "ň": true,
+ "ņ": true,
+ "≇": true,
+ "⩭̸": true,
+ "⩂": true,
+ "н": true,
+ "–": true,
+ "≠": true,
+ "⇗": true,
+ "⤤": true,
+ "↗": true,
+ "↗": true,
+ "≐̸": true,
+ "≢": true,
+ "⤨": true,
+ "≂̸": true,
+ "∄": true,
+ "∄": true,
+ "𝔫": true,
+ "≧̸": true,
+ "≱": true,
+ "≱": true,
+ "≧̸": true,
+ "⩾̸": true,
+ "⩾̸": true,
+ "≵": true,
+ "≯": true,
+ "≯": true,
+ "⇎": true,
+ "↮": true,
+ "⫲": true,
+ "∋": true,
+ "⋼": true,
+ "⋺": true,
+ "∋": true,
+ "њ": true,
+ "⇍": true,
+ "≦̸": true,
+ "↚": true,
+ "‥": true,
+ "≰": true,
+ "↚": true,
+ "↮": true,
+ "≰": true,
+ "≦̸": true,
+ "⩽̸": true,
+ "⩽̸": true,
+ "≮": true,
+ "≴": true,
+ "≮": true,
+ "⋪": true,
+ "⋬": true,
+ "∤": true,
+ "𝕟": true,
+ "¬": true,
+ "¬": true,
+ "∉": true,
+ "⋹̸": true,
+ "⋵̸": true,
+ "∉": true,
+ "⋷": true,
+ "⋶": true,
+ "∌": true,
+ "∌": true,
+ "⋾": true,
+ "⋽": true,
+ "∦": true,
+ "∦": true,
+ "⫽⃥": true,
+ "∂̸": true,
+ "⨔": true,
+ "⊀": true,
+ "⋠": true,
+ "⪯̸": true,
+ "⊀": true,
+ "⪯̸": true,
+ "⇏": true,
+ "↛": true,
+ "⤳̸": true,
+ "↝̸": true,
+ "↛": true,
+ "⋫": true,
+ "⋭": true,
+ "⊁": true,
+ "⋡": true,
+ "⪰̸": true,
+ "𝓃": true,
+ "∤": true,
+ "∦": true,
+ "≁": true,
+ "≄": true,
+ "≄": true,
+ "∤": true,
+ "∦": true,
+ "⋢": true,
+ "⋣": true,
+ "⊄": true,
+ "⫅̸": true,
+ "⊈": true,
+ "⊂⃒": true,
+ "⊈": true,
+ "⫅̸": true,
+ "⊁": true,
+ "⪰̸": true,
+ "⊅": true,
+ "⫆̸": true,
+ "⊉": true,
+ "⊃⃒": true,
+ "⊉": true,
+ "⫆̸": true,
+ "≹": true,
+ "ñ": true,
+ "ñ": true,
+ "≸": true,
+ "⋪": true,
+ "⋬": true,
+ "⋫": true,
+ "⋭": true,
+ "ν": true,
+ "#": true,
+ "№": true,
+ " ": true,
+ "⊭": true,
+ "⤄": true,
+ "≍⃒": true,
+ "⊬": true,
+ "≥⃒": true,
+ ">⃒": true,
+ "⧞": true,
+ "⤂": true,
+ "≤⃒": true,
+ "<⃒": true,
+ "⊴⃒": true,
+ "⤃": true,
+ "⊵⃒": true,
+ "∼⃒": true,
+ "⇖": true,
+ "⤣": true,
+ "↖": true,
+ "↖": true,
+ "⤧": true,
+ "Ⓢ": true,
+ "ó": true,
+ "ó": true,
+ "⊛": true,
+ "⊚": true,
+ "ô": true,
+ "ô": true,
+ "о": true,
+ "⊝": true,
+ "ő": true,
+ "⨸": true,
+ "⊙": true,
+ "⦼": true,
+ "œ": true,
+ "⦿": true,
+ "𝔬": true,
+ "˛": true,
+ "ò": true,
+ "ò": true,
+ "⧁": true,
+ "⦵": true,
+ "Ω": true,
+ "∮": true,
+ "↺": true,
+ "⦾": true,
+ "⦻": true,
+ "‾": true,
+ "⧀": true,
+ "ō": true,
+ "ω": true,
+ "ο": true,
+ "⦶": true,
+ "⊖": true,
+ "𝕠": true,
+ "⦷": true,
+ "⦹": true,
+ "⊕": true,
+ "∨": true,
+ "↻": true,
+ "⩝": true,
+ "ℴ": true,
+ "ℴ": true,
+ "ª": true,
+ "ª": true,
+ "º": true,
+ "º": true,
+ "⊶": true,
+ "⩖": true,
+ "⩗": true,
+ "⩛": true,
+ "ℴ": true,
+ "ø": true,
+ "ø": true,
+ "⊘": true,
+ "õ": true,
+ "õ": true,
+ "⊗": true,
+ "⨶": true,
+ "ö": true,
+ "ö": true,
+ "⌽": true,
+ "∥": true,
+ "¶": true,
+ "¶": true,
+ "∥": true,
+ "⫳": true,
+ "⫽": true,
+ "∂": true,
+ "п": true,
+ "%": true,
+ ".": true,
+ "‰": true,
+ "⊥": true,
+ "‱": true,
+ "𝔭": true,
+ "φ": true,
+ "ϕ": true,
+ "ℳ": true,
+ "☎": true,
+ "π": true,
+ "⋔": true,
+ "ϖ": true,
+ "ℏ": true,
+ "ℎ": true,
+ "ℏ": true,
+ "+": true,
+ "⨣": true,
+ "⊞": true,
+ "⨢": true,
+ "∔": true,
+ "⨥": true,
+ "⩲": true,
+ "±": true,
+ "±": true,
+ "⨦": true,
+ "⨧": true,
+ "±": true,
+ "⨕": true,
+ "𝕡": true,
+ "£": true,
+ "£": true,
+ "≺": true,
+ "⪳": true,
+ "⪷": true,
+ "≼": true,
+ "⪯": true,
+ "≺": true,
+ "⪷": true,
+ "≼": true,
+ "⪯": true,
+ "⪹": true,
+ "⪵": true,
+ "⋨": true,
+ "≾": true,
+ "′": true,
+ "ℙ": true,
+ "⪵": true,
+ "⪹": true,
+ "⋨": true,
+ "∏": true,
+ "⌮": true,
+ "⌒": true,
+ "⌓": true,
+ "∝": true,
+ "∝": true,
+ "≾": true,
+ "⊰": true,
+ "𝓅": true,
+ "ψ": true,
+ " ": true,
+ "𝔮": true,
+ "⨌": true,
+ "𝕢": true,
+ "⁗": true,
+ "𝓆": true,
+ "ℍ": true,
+ "⨖": true,
+ "?": true,
+ "≟": true,
+ """: true,
+ """: true,
+ "⇛": true,
+ "⇒": true,
+ "⤜": true,
+ "⤏": true,
+ "⥤": true,
+ "∽̱": true,
+ "ŕ": true,
+ "√": true,
+ "⦳": true,
+ "〉": true,
+ "⦒": true,
+ "⦥": true,
+ "⟩": true,
+ "»": true,
+ "»": true,
+ "→": true,
+ "⥵": true,
+ "⇥": true,
+ "⤠": true,
+ "⤳": true,
+ "⤞": true,
+ "↪": true,
+ "↬": true,
+ "⥅": true,
+ "⥴": true,
+ "↣": true,
+ "↝": true,
+ "⤚": true,
+ "∶": true,
+ "ℚ": true,
+ "⤍": true,
+ "❳": true,
+ "}": true,
+ "]": true,
+ "⦌": true,
+ "⦎": true,
+ "⦐": true,
+ "ř": true,
+ "ŗ": true,
+ "⌉": true,
+ "}": true,
+ "р": true,
+ "⤷": true,
+ "⥩": true,
+ "”": true,
+ "”": true,
+ "↳": true,
+ "ℜ": true,
+ "ℛ": true,
+ "ℜ": true,
+ "ℝ": true,
+ "▭": true,
+ "®": true,
+ "®": true,
+ "⥽": true,
+ "⌋": true,
+ "𝔯": true,
+ "⇁": true,
+ "⇀": true,
+ "⥬": true,
+ "ρ": true,
+ "ϱ": true,
+ "→": true,
+ "↣": true,
+ "⇁": true,
+ "⇀": true,
+ "⇄": true,
+ "⇌": true,
+ "⇉": true,
+ "↝": true,
+ "⋌": true,
+ "˚": true,
+ "≓": true,
+ "⇄": true,
+ "⇌": true,
+ "": true,
+ "⎱": true,
+ "⎱": true,
+ "⫮": true,
+ "⟭": true,
+ "⇾": true,
+ "⟧": true,
+ "⦆": true,
+ "𝕣": true,
+ "⨮": true,
+ "⨵": true,
+ ")": true,
+ "⦔": true,
+ "⨒": true,
+ "⇉": true,
+ "›": true,
+ "𝓇": true,
+ "↱": true,
+ "]": true,
+ "’": true,
+ "’": true,
+ "⋌": true,
+ "⋊": true,
+ "▹": true,
+ "⊵": true,
+ "▸": true,
+ "⧎": true,
+ "⥨": true,
+ "℞": true,
+ "ś": true,
+ "‚": true,
+ "≻": true,
+ "⪴": true,
+ "⪸": true,
+ "š": true,
+ "≽": true,
+ "⪰": true,
+ "ş": true,
+ "ŝ": true,
+ "⪶": true,
+ "⪺": true,
+ "⋩": true,
+ "⨓": true,
+ "≿": true,
+ "с": true,
+ "⋅": true,
+ "⊡": true,
+ "⩦": true,
+ "⇘": true,
+ "⤥": true,
+ "↘": true,
+ "↘": true,
+ "§": true,
+ "§": true,
+ ";": true,
+ "⤩": true,
+ "∖": true,
+ "∖": true,
+ "✶": true,
+ "𝔰": true,
+ "⌢": true,
+ "♯": true,
+ "щ": true,
+ "ш": true,
+ "∣": true,
+ "∥": true,
+ "­": true,
+ "": true,
+ "σ": true,
+ "ς": true,
+ "ς": true,
+ "∼": true,
+ "⩪": true,
+ "≃": true,
+ "≃": true,
+ "⪞": true,
+ "⪠": true,
+ "⪝": true,
+ "⪟": true,
+ "≆": true,
+ "⨤": true,
+ "⥲": true,
+ "←": true,
+ "∖": true,
+ "⨳": true,
+ "⧤": true,
+ "∣": true,
+ "⌣": true,
+ "⪪": true,
+ "⪬": true,
+ "⪬︀": true,
+ "ь": true,
+ "/": true,
+ "⧄": true,
+ "⌿": true,
+ "𝕤": true,
+ "♠": true,
+ "♠": true,
+ "∥": true,
+ "⊓": true,
+ "⊓︀": true,
+ "⊔": true,
+ "⊔︀": true,
+ "⊏": true,
+ "⊑": true,
+ "⊏": true,
+ "⊑": true,
+ "⊐": true,
+ "⊒": true,
+ "⊐": true,
+ "⊒": true,
+ "□": true,
+ "□": true,
+ "▪": true,
+ "▪": true,
+ "→": true,
+ "𝓈": true,
+ "∖": true,
+ "⌣": true,
+ "⋆": true,
+ "☆": true,
+ "★": true,
+ "ϵ": true,
+ "ϕ": true,
+ "¯": true,
+ "⊂": true,
+ "⫅": true,
+ "⪽": true,
+ "⊆": true,
+ "⫃": true,
+ "⫁": true,
+ "⫋": true,
+ "⊊": true,
+ "⪿": true,
+ "⥹": true,
+ "⊂": true,
+ "⊆": true,
+ "⫅": true,
+ "⊊": true,
+ "⫋": true,
+ "⫇": true,
+ "⫕": true,
+ "⫓": true,
+ "≻": true,
+ "⪸": true,
+ "≽": true,
+ "⪰": true,
+ "⪺": true,
+ "⪶": true,
+ "⋩": true,
+ "≿": true,
+ "∑": true,
+ "♪": true,
+ "¹": true,
+ "¹": true,
+ "²": true,
+ "²": true,
+ "³": true,
+ "³": true,
+ "⊃": true,
+ "⫆": true,
+ "⪾": true,
+ "⫘": true,
+ "⊇": true,
+ "⫄": true,
+ "⟉": true,
+ "⫗": true,
+ "⥻": true,
+ "⫂": true,
+ "⫌": true,
+ "⊋": true,
+ "⫀": true,
+ "⊃": true,
+ "⊇": true,
+ "⫆": true,
+ "⊋": true,
+ "⫌": true,
+ "⫈": true,
+ "⫔": true,
+ "⫖": true,
+ "⇙": true,
+ "⤦": true,
+ "↙": true,
+ "↙": true,
+ "⤪": true,
+ "ß": true,
+ "ß": true,
+ "⌖": true,
+ "τ": true,
+ "⎴": true,
+ "ť": true,
+ "ţ": true,
+ "т": true,
+ "⃛": true,
+ "⌕": true,
+ "𝔱": true,
+ "∴": true,
+ "∴": true,
+ "θ": true,
+ "ϑ": true,
+ "ϑ": true,
+ "≈": true,
+ "∼": true,
+ " ": true,
+ "≈": true,
+ "∼": true,
+ "þ": true,
+ "þ": true,
+ "˜": true,
+ "×": true,
+ "×": true,
+ "⊠": true,
+ "⨱": true,
+ "⨰": true,
+ "∭": true,
+ "⤨": true,
+ "⊤": true,
+ "⌶": true,
+ "⫱": true,
+ "𝕥": true,
+ "⫚": true,
+ "⤩": true,
+ "‴": true,
+ "™": true,
+ "▵": true,
+ "▿": true,
+ "◃": true,
+ "⊴": true,
+ "≜": true,
+ "▹": true,
+ "⊵": true,
+ "◬": true,
+ "≜": true,
+ "⨺": true,
+ "⨹": true,
+ "⧍": true,
+ "⨻": true,
+ "⏢": true,
+ "𝓉": true,
+ "ц": true,
+ "ћ": true,
+ "ŧ": true,
+ "≬": true,
+ "↞": true,
+ "↠": true,
+ "⇑": true,
+ "⥣": true,
+ "ú": true,
+ "ú": true,
+ "↑": true,
+ "ў": true,
+ "ŭ": true,
+ "û": true,
+ "û": true,
+ "у": true,
+ "⇅": true,
+ "ű": true,
+ "⥮": true,
+ "⥾": true,
+ "𝔲": true,
+ "ù": true,
+ "ù": true,
+ "↿": true,
+ "↾": true,
+ "▀": true,
+ "⌜": true,
+ "⌜": true,
+ "⌏": true,
+ "◸": true,
+ "ū": true,
+ "¨": true,
+ "¨": true,
+ "ų": true,
+ "𝕦": true,
+ "↑": true,
+ "↕": true,
+ "↿": true,
+ "↾": true,
+ "⊎": true,
+ "υ": true,
+ "ϒ": true,
+ "υ": true,
+ "⇈": true,
+ "⌝": true,
+ "⌝": true,
+ "⌎": true,
+ "ů": true,
+ "◹": true,
+ "𝓊": true,
+ "⋰": true,
+ "ũ": true,
+ "▵": true,
+ "▴": true,
+ "⇈": true,
+ "ü": true,
+ "ü": true,
+ "⦧": true,
+ "⇕": true,
+ "⫨": true,
+ "⫩": true,
+ "⊨": true,
+ "⦜": true,
+ "ϵ": true,
+ "ϰ": true,
+ "∅": true,
+ "ϕ": true,
+ "ϖ": true,
+ "∝": true,
+ "↕": true,
+ "ϱ": true,
+ "ς": true,
+ "⊊︀": true,
+ "⫋︀": true,
+ "⊋︀": true,
+ "⫌︀": true,
+ "ϑ": true,
+ "⊲": true,
+ "⊳": true,
+ "в": true,
+ "⊢": true,
+ "∨": true,
+ "⊻": true,
+ "≚": true,
+ "⋮": true,
+ "|": true,
+ "|": true,
+ "𝔳": true,
+ "⊲": true,
+ "⊂⃒": true,
+ "⊃⃒": true,
+ "𝕧": true,
+ "∝": true,
+ "⊳": true,
+ "𝓋": true,
+ "⫋︀": true,
+ "⊊︀": true,
+ "⫌︀": true,
+ "⊋︀": true,
+ "⦚": true,
+ "ŵ": true,
+ "⩟": true,
+ "∧": true,
+ "≙": true,
+ "℘": true,
+ "𝔴": true,
+ "𝕨": true,
+ "℘": true,
+ "≀": true,
+ "≀": true,
+ "𝓌": true,
+ "⋂": true,
+ "◯": true,
+ "⋃": true,
+ "▽": true,
+ "𝔵": true,
+ "⟺": true,
+ "⟷": true,
+ "ξ": true,
+ "⟸": true,
+ "⟵": true,
+ "⟼": true,
+ "⋻": true,
+ "⨀": true,
+ "𝕩": true,
+ "⨁": true,
+ "⨂": true,
+ "⟹": true,
+ "⟶": true,
+ "𝓍": true,
+ "⨆": true,
+ "⨄": true,
+ "△": true,
+ "⋁": true,
+ "⋀": true,
+ "ý": true,
+ "ý": true,
+ "я": true,
+ "ŷ": true,
+ "ы": true,
+ "¥": true,
+ "¥": true,
+ "𝔶": true,
+ "ї": true,
+ "𝕪": true,
+ "𝓎": true,
+ "ю": true,
+ "ÿ": true,
+ "ÿ": true,
+ "ź": true,
+ "ž": true,
+ "з": true,
+ "ż": true,
+ "ℨ": true,
+ "ζ": true,
+ "𝔷": true,
+ "ж": true,
+ "⇝": true,
+ "𝕫": true,
+ "𝓏": true,
+ "": true,
+ "": true,
+}
diff --git a/vendor/github.com/russross/blackfriday/v2/esc.go b/vendor/github.com/russross/blackfriday/v2/esc.go
new file mode 100644
index 00000000..6ab60102
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/v2/esc.go
@@ -0,0 +1,70 @@
+package blackfriday
+
+import (
+ "html"
+ "io"
+)
+
+var htmlEscaper = [256][]byte{
+ '&': []byte("&"),
+ '<': []byte("<"),
+ '>': []byte(">"),
+ '"': []byte("""),
+}
+
+func escapeHTML(w io.Writer, s []byte) {
+ escapeEntities(w, s, false)
+}
+
+func escapeAllHTML(w io.Writer, s []byte) {
+ escapeEntities(w, s, true)
+}
+
+func escapeEntities(w io.Writer, s []byte, escapeValidEntities bool) {
+ var start, end int
+ for end < len(s) {
+ escSeq := htmlEscaper[s[end]]
+ if escSeq != nil {
+ isEntity, entityEnd := nodeIsEntity(s, end)
+ if isEntity && !escapeValidEntities {
+ w.Write(s[start : entityEnd+1])
+ start = entityEnd + 1
+ } else {
+ w.Write(s[start:end])
+ w.Write(escSeq)
+ start = end + 1
+ }
+ }
+ end++
+ }
+ if start < len(s) && end <= len(s) {
+ w.Write(s[start:end])
+ }
+}
+
+func nodeIsEntity(s []byte, end int) (isEntity bool, endEntityPos int) {
+ isEntity = false
+ endEntityPos = end + 1
+
+ if s[end] == '&' {
+ for endEntityPos < len(s) {
+ if s[endEntityPos] == ';' {
+ if entities[string(s[end:endEntityPos+1])] {
+ isEntity = true
+ break
+ }
+ }
+ if !isalnum(s[endEntityPos]) && s[endEntityPos] != '&' && s[endEntityPos] != '#' {
+ break
+ }
+ endEntityPos++
+ }
+ }
+
+ return isEntity, endEntityPos
+}
+
+func escLink(w io.Writer, text []byte) {
+ unesc := html.UnescapeString(string(text))
+ escapeHTML(w, []byte(unesc))
+}
diff --git a/vendor/github.com/russross/blackfriday/v2/html.go b/vendor/github.com/russross/blackfriday/v2/html.go
new file mode 100644
index 00000000..cb4f26e3
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/v2/html.go
@@ -0,0 +1,952 @@
+//
+// Blackfriday Markdown Processor
+// Available at http://github.com/russross/blackfriday
+//
+// Copyright © 2011 Russ Ross .
+// Distributed under the Simplified BSD License.
+// See README.md for details.
+//
+
+//
+//
+// HTML rendering backend
+//
+//
+
+package blackfriday
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "regexp"
+ "strings"
+)
+
+// HTMLFlags control optional behavior of HTML renderer.
+type HTMLFlags int
+
+// HTML renderer configuration options.
+const (
+ HTMLFlagsNone HTMLFlags = 0
+ SkipHTML HTMLFlags = 1 << iota // Skip preformatted HTML blocks
+ SkipImages // Skip embedded images
+ SkipLinks // Skip all links
+ Safelink // Only link to trusted protocols
+ NofollowLinks // Only link with rel="nofollow"
+ NoreferrerLinks // Only link with rel="noreferrer"
+ NoopenerLinks // Only link with rel="noopener"
+ HrefTargetBlank // Add a blank target
+ CompletePage // Generate a complete HTML page
+ UseXHTML // Generate XHTML output instead of HTML
+ FootnoteReturnLinks // Generate a link at the end of a footnote to return to the source
+ Smartypants // Enable smart punctuation substitutions
+ SmartypantsFractions // Enable smart fractions (with Smartypants)
+ SmartypantsDashes // Enable smart dashes (with Smartypants)
+ SmartypantsLatexDashes // Enable LaTeX-style dashes (with Smartypants)
+ SmartypantsAngledQuotes // Enable angled double quotes (with Smartypants) for double quotes rendering
+ SmartypantsQuotesNBSP // Enable « French guillemets » (with Smartypants)
+ TOC // Generate a table of contents
+)
+
+var (
+ htmlTagRe = regexp.MustCompile("(?i)^" + htmlTag)
+)
+
+const (
+ htmlTag = "(?:" + openTag + "|" + closeTag + "|" + htmlComment + "|" +
+ processingInstruction + "|" + declaration + "|" + cdata + ")"
+ closeTag = "" + tagName + "\\s*[>]"
+ openTag = "<" + tagName + attribute + "*" + "\\s*/?>"
+ attribute = "(?:" + "\\s+" + attributeName + attributeValueSpec + "?)"
+ attributeValue = "(?:" + unquotedValue + "|" + singleQuotedValue + "|" + doubleQuotedValue + ")"
+ attributeValueSpec = "(?:" + "\\s*=" + "\\s*" + attributeValue + ")"
+ attributeName = "[a-zA-Z_:][a-zA-Z0-9:._-]*"
+ cdata = ""
+ declaration = "]*>"
+ doubleQuotedValue = "\"[^\"]*\""
+ htmlComment = "|"
+ processingInstruction = "[<][?].*?[?][>]"
+ singleQuotedValue = "'[^']*'"
+ tagName = "[A-Za-z][A-Za-z0-9-]*"
+ unquotedValue = "[^\"'=<>`\\x00-\\x20]+"
+)
+
+// HTMLRendererParameters is a collection of supplementary parameters tweaking
+// the behavior of various parts of HTML renderer.
+type HTMLRendererParameters struct {
+ // Prepend this text to each relative URL.
+ AbsolutePrefix string
+ // Add this text to each footnote anchor, to ensure uniqueness.
+ FootnoteAnchorPrefix string
+ // Show this text inside the tag for a footnote return link, if the
+ // HTML_FOOTNOTE_RETURN_LINKS flag is enabled. If blank, the string
+ // [return] is used.
+ FootnoteReturnLinkContents string
+ // If set, add this text to the front of each Heading ID, to ensure
+ // uniqueness.
+ HeadingIDPrefix string
+ // If set, add this text to the back of each Heading ID, to ensure uniqueness.
+ HeadingIDSuffix string
+ // Increase heading levels: if the offset is 1, becomes etc.
+ // Negative offset is also valid.
+ // Resulting levels are clipped between 1 and 6.
+ HeadingLevelOffset int
+
+ Title string // Document title (used if CompletePage is set)
+ CSS string // Optional CSS file URL (used if CompletePage is set)
+ Icon string // Optional icon file URL (used if CompletePage is set)
+
+ Flags HTMLFlags // Flags allow customizing this renderer's behavior
+}
+
+// HTMLRenderer is a type that implements the Renderer interface for HTML output.
+//
+// Do not create this directly, instead use the NewHTMLRenderer function.
+type HTMLRenderer struct {
+ HTMLRendererParameters
+
+ closeTag string // how to end singleton tags: either " />" or ">"
+
+ // Track heading IDs to prevent ID collision in a single generation.
+ headingIDs map[string]int
+
+ lastOutputLen int
+ disableTags int
+
+ sr *SPRenderer
+}
+
+const (
+ xhtmlClose = " />"
+ htmlClose = ">"
+)
+
+// NewHTMLRenderer creates and configures an HTMLRenderer object, which
+// satisfies the Renderer interface.
+func NewHTMLRenderer(params HTMLRendererParameters) *HTMLRenderer {
+ // configure the rendering engine
+ closeTag := htmlClose
+ if params.Flags&UseXHTML != 0 {
+ closeTag = xhtmlClose
+ }
+
+ if params.FootnoteReturnLinkContents == "" {
+ // U+FE0E is VARIATION SELECTOR-15.
+ // It suppresses automatic emoji presentation of the preceding
+ // U+21A9 LEFTWARDS ARROW WITH HOOK on iOS and iPadOS.
+ params.FootnoteReturnLinkContents = "↩\ufe0e"
+ }
+
+ return &HTMLRenderer{
+ HTMLRendererParameters: params,
+
+ closeTag: closeTag,
+ headingIDs: make(map[string]int),
+
+ sr: NewSmartypantsRenderer(params.Flags),
+ }
+}
+
+func isHTMLTag(tag []byte, tagname string) bool {
+ found, _ := findHTMLTagPos(tag, tagname)
+ return found
+}
+
+// Look for a character, but ignore it when it's in any kind of quotes, it
+// might be JavaScript
+func skipUntilCharIgnoreQuotes(html []byte, start int, char byte) int {
+ inSingleQuote := false
+ inDoubleQuote := false
+ inGraveQuote := false
+ i := start
+ for i < len(html) {
+ switch {
+ case html[i] == char && !inSingleQuote && !inDoubleQuote && !inGraveQuote:
+ return i
+ case html[i] == '\'':
+ inSingleQuote = !inSingleQuote
+ case html[i] == '"':
+ inDoubleQuote = !inDoubleQuote
+ case html[i] == '`':
+ inGraveQuote = !inGraveQuote
+ }
+ i++
+ }
+ return start
+}
+
+func findHTMLTagPos(tag []byte, tagname string) (bool, int) {
+ i := 0
+ if i < len(tag) && tag[0] != '<' {
+ return false, -1
+ }
+ i++
+ i = skipSpace(tag, i)
+
+ if i < len(tag) && tag[i] == '/' {
+ i++
+ }
+
+ i = skipSpace(tag, i)
+ j := 0
+ for ; i < len(tag); i, j = i+1, j+1 {
+ if j >= len(tagname) {
+ break
+ }
+
+ if strings.ToLower(string(tag[i]))[0] != tagname[j] {
+ return false, -1
+ }
+ }
+
+ if i == len(tag) {
+ return false, -1
+ }
+
+ rightAngle := skipUntilCharIgnoreQuotes(tag, i, '>')
+ if rightAngle >= i {
+ return true, rightAngle
+ }
+
+ return false, -1
+}
+
+func skipSpace(tag []byte, i int) int {
+ for i < len(tag) && isspace(tag[i]) {
+ i++
+ }
+ return i
+}
+
+func isRelativeLink(link []byte) (yes bool) {
+ // a tag begin with '#'
+ if link[0] == '#' {
+ return true
+ }
+
+ // link begin with '/' but not '//', the second maybe a protocol relative link
+ if len(link) >= 2 && link[0] == '/' && link[1] != '/' {
+ return true
+ }
+
+ // only the root '/'
+ if len(link) == 1 && link[0] == '/' {
+ return true
+ }
+
+ // current directory : begin with "./"
+ if bytes.HasPrefix(link, []byte("./")) {
+ return true
+ }
+
+ // parent directory : begin with "../"
+ if bytes.HasPrefix(link, []byte("../")) {
+ return true
+ }
+
+ return false
+}
+
+func (r *HTMLRenderer) ensureUniqueHeadingID(id string) string {
+ for count, found := r.headingIDs[id]; found; count, found = r.headingIDs[id] {
+ tmp := fmt.Sprintf("%s-%d", id, count+1)
+
+ if _, tmpFound := r.headingIDs[tmp]; !tmpFound {
+ r.headingIDs[id] = count + 1
+ id = tmp
+ } else {
+ id = id + "-1"
+ }
+ }
+
+ if _, found := r.headingIDs[id]; !found {
+ r.headingIDs[id] = 0
+ }
+
+ return id
+}
+
+func (r *HTMLRenderer) addAbsPrefix(link []byte) []byte {
+ if r.AbsolutePrefix != "" && isRelativeLink(link) && link[0] != '.' {
+ newDest := r.AbsolutePrefix
+ if link[0] != '/' {
+ newDest += "/"
+ }
+ newDest += string(link)
+ return []byte(newDest)
+ }
+ return link
+}
+
+func appendLinkAttrs(attrs []string, flags HTMLFlags, link []byte) []string {
+ if isRelativeLink(link) {
+ return attrs
+ }
+ val := []string{}
+ if flags&NofollowLinks != 0 {
+ val = append(val, "nofollow")
+ }
+ if flags&NoreferrerLinks != 0 {
+ val = append(val, "noreferrer")
+ }
+ if flags&NoopenerLinks != 0 {
+ val = append(val, "noopener")
+ }
+ if flags&HrefTargetBlank != 0 {
+ attrs = append(attrs, "target=\"_blank\"")
+ }
+ if len(val) == 0 {
+ return attrs
+ }
+ attr := fmt.Sprintf("rel=%q", strings.Join(val, " "))
+ return append(attrs, attr)
+}
+
+func isMailto(link []byte) bool {
+ return bytes.HasPrefix(link, []byte("mailto:"))
+}
+
+func needSkipLink(flags HTMLFlags, dest []byte) bool {
+ if flags&SkipLinks != 0 {
+ return true
+ }
+ return flags&Safelink != 0 && !isSafeLink(dest) && !isMailto(dest)
+}
+
+func isSmartypantable(node *Node) bool {
+ pt := node.Parent.Type
+ return pt != Link && pt != CodeBlock && pt != Code
+}
+
+func appendLanguageAttr(attrs []string, info []byte) []string {
+ if len(info) == 0 {
+ return attrs
+ }
+ endOfLang := bytes.IndexAny(info, "\t ")
+ if endOfLang < 0 {
+ endOfLang = len(info)
+ }
+ return append(attrs, fmt.Sprintf("class=\"language-%s\"", info[:endOfLang]))
+}
+
+func (r *HTMLRenderer) tag(w io.Writer, name []byte, attrs []string) {
+ w.Write(name)
+ if len(attrs) > 0 {
+ w.Write(spaceBytes)
+ w.Write([]byte(strings.Join(attrs, " ")))
+ }
+ w.Write(gtBytes)
+ r.lastOutputLen = 1
+}
+
+func footnoteRef(prefix string, node *Node) []byte {
+ urlFrag := prefix + string(slugify(node.Destination))
+ anchor := fmt.Sprintf(`%d`, urlFrag, node.NoteID)
+ return []byte(fmt.Sprintf(``, urlFrag, anchor))
+}
+
+func footnoteItem(prefix string, slug []byte) []byte {
+ return []byte(fmt.Sprintf(`
`, prefix, slug))
+}
+
+func footnoteReturnLink(prefix, returnLink string, slug []byte) []byte {
+ const format = ` `
+ return []byte(fmt.Sprintf(format, prefix, slug, returnLink))
+}
+
+func itemOpenCR(node *Node) bool {
+ if node.Prev == nil {
+ return false
+ }
+ ld := node.Parent.ListData
+ return !ld.Tight && ld.ListFlags&ListTypeDefinition == 0
+}
+
+func skipParagraphTags(node *Node) bool {
+ grandparent := node.Parent.Parent
+ if grandparent == nil || grandparent.Type != List {
+ return false
+ }
+ tightOrTerm := grandparent.Tight || node.Parent.ListFlags&ListTypeTerm != 0
+ return grandparent.Type == List && tightOrTerm
+}
+
+func cellAlignment(align CellAlignFlags) string {
+ switch align {
+ case TableAlignmentLeft:
+ return "left"
+ case TableAlignmentRight:
+ return "right"
+ case TableAlignmentCenter:
+ return "center"
+ default:
+ return ""
+ }
+}
+
+func (r *HTMLRenderer) out(w io.Writer, text []byte) {
+ if r.disableTags > 0 {
+ w.Write(htmlTagRe.ReplaceAll(text, []byte{}))
+ } else {
+ w.Write(text)
+ }
+ r.lastOutputLen = len(text)
+}
+
+func (r *HTMLRenderer) cr(w io.Writer) {
+ if r.lastOutputLen > 0 {
+ r.out(w, nlBytes)
+ }
+}
+
+var (
+ nlBytes = []byte{'\n'}
+ gtBytes = []byte{'>'}
+ spaceBytes = []byte{' '}
+)
+
+var (
+ brTag = []byte("
")
+ brXHTMLTag = []byte("
")
+ emTag = []byte("")
+ emCloseTag = []byte("")
+ strongTag = []byte("")
+ strongCloseTag = []byte("")
+ delTag = []byte("")
+ delCloseTag = []byte("")
+ ttTag = []byte("")
+ ttCloseTag = []byte("")
+ aTag = []byte("")
+ preTag = []byte("")
+ preCloseTag = []byte("
")
+ codeTag = []byte("")
+ codeCloseTag = []byte("
")
+ pTag = []byte("")
+ pCloseTag = []byte("
")
+ blockquoteTag = []byte("")
+ blockquoteCloseTag = []byte("
")
+ hrTag = []byte("
")
+ hrXHTMLTag = []byte("
")
+ ulTag = []byte("")
+ ulCloseTag = []byte("
")
+ olTag = []byte("")
+ olCloseTag = []byte("
")
+ dlTag = []byte("")
+ dlCloseTag = []byte("
")
+ liTag = []byte("")
+ liCloseTag = []byte("")
+ ddTag = []byte("")
+ ddCloseTag = []byte("")
+ dtTag = []byte("")
+ dtCloseTag = []byte("")
+ tableTag = []byte("")
+ tableCloseTag = []byte("
")
+ tdTag = []byte("")
+ thTag = []byte(" | ")
+ theadTag = []byte("")
+ theadCloseTag = []byte("")
+ tbodyTag = []byte(" | ")
+ tbodyCloseTag = []byte("")
+ trTag = []byte("")
+ trCloseTag = []byte("
")
+ h1Tag = []byte("")
+ h2Tag = []byte("")
+ h3Tag = []byte("")
+ h4Tag = []byte("")
+ h5Tag = []byte("")
+ h6Tag = []byte("")
+
+ footnotesDivBytes = []byte("\n\n")
+)
+
+func headingTagsFromLevel(level int) ([]byte, []byte) {
+ if level <= 1 {
+ return h1Tag, h1CloseTag
+ }
+ switch level {
+ case 2:
+ return h2Tag, h2CloseTag
+ case 3:
+ return h3Tag, h3CloseTag
+ case 4:
+ return h4Tag, h4CloseTag
+ case 5:
+ return h5Tag, h5CloseTag
+ }
+ return h6Tag, h6CloseTag
+}
+
+func (r *HTMLRenderer) outHRTag(w io.Writer) {
+ if r.Flags&UseXHTML == 0 {
+ r.out(w, hrTag)
+ } else {
+ r.out(w, hrXHTMLTag)
+ }
+}
+
+// RenderNode is a default renderer of a single node of a syntax tree. For
+// block nodes it will be called twice: first time with entering=true, second
+// time with entering=false, so that it could know when it's working on an open
+// tag and when on close. It writes the result to w.
+//
+// The return value is a way to tell the calling walker to adjust its walk
+// pattern: e.g. it can terminate the traversal by returning Terminate. Or it
+// can ask the walker to skip a subtree of this node by returning SkipChildren.
+// The typical behavior is to return GoToNext, which asks for the usual
+// traversal to the next node.
+func (r *HTMLRenderer) RenderNode(w io.Writer, node *Node, entering bool) WalkStatus {
+ attrs := []string{}
+ switch node.Type {
+ case Text:
+ if r.Flags&Smartypants != 0 {
+ var tmp bytes.Buffer
+ escapeHTML(&tmp, node.Literal)
+ r.sr.Process(w, tmp.Bytes())
+ } else {
+ if node.Parent.Type == Link {
+ escLink(w, node.Literal)
+ } else {
+ escapeHTML(w, node.Literal)
+ }
+ }
+ case Softbreak:
+ r.cr(w)
+ // TODO: make it configurable via out(renderer.softbreak)
+ case Hardbreak:
+ if r.Flags&UseXHTML == 0 {
+ r.out(w, brTag)
+ } else {
+ r.out(w, brXHTMLTag)
+ }
+ r.cr(w)
+ case Emph:
+ if entering {
+ r.out(w, emTag)
+ } else {
+ r.out(w, emCloseTag)
+ }
+ case Strong:
+ if entering {
+ r.out(w, strongTag)
+ } else {
+ r.out(w, strongCloseTag)
+ }
+ case Del:
+ if entering {
+ r.out(w, delTag)
+ } else {
+ r.out(w, delCloseTag)
+ }
+ case HTMLSpan:
+ if r.Flags&SkipHTML != 0 {
+ break
+ }
+ r.out(w, node.Literal)
+ case Link:
+ // mark it but don't link it if it is not a safe link: no smartypants
+ dest := node.LinkData.Destination
+ if needSkipLink(r.Flags, dest) {
+ if entering {
+ r.out(w, ttTag)
+ } else {
+ r.out(w, ttCloseTag)
+ }
+ } else {
+ if entering {
+ dest = r.addAbsPrefix(dest)
+ var hrefBuf bytes.Buffer
+ hrefBuf.WriteString("href=\"")
+ escLink(&hrefBuf, dest)
+ hrefBuf.WriteByte('"')
+ attrs = append(attrs, hrefBuf.String())
+ if node.NoteID != 0 {
+ r.out(w, footnoteRef(r.FootnoteAnchorPrefix, node))
+ break
+ }
+ attrs = appendLinkAttrs(attrs, r.Flags, dest)
+ if len(node.LinkData.Title) > 0 {
+ var titleBuff bytes.Buffer
+ titleBuff.WriteString("title=\"")
+ escapeHTML(&titleBuff, node.LinkData.Title)
+ titleBuff.WriteByte('"')
+ attrs = append(attrs, titleBuff.String())
+ }
+ r.tag(w, aTag, attrs)
+ } else {
+ if node.NoteID != 0 {
+ break
+ }
+ r.out(w, aCloseTag)
+ }
+ }
+ case Image:
+ if r.Flags&SkipImages != 0 {
+ return SkipChildren
+ }
+ if entering {
+ dest := node.LinkData.Destination
+ dest = r.addAbsPrefix(dest)
+ if r.disableTags == 0 {
+ //if options.safe && potentiallyUnsafe(dest) {
+ //out(w, ``))
+ }
+ }
+ case Code:
+ r.out(w, codeTag)
+ escapeAllHTML(w, node.Literal)
+ r.out(w, codeCloseTag)
+ case Document:
+ break
+ case Paragraph:
+ if skipParagraphTags(node) {
+ break
+ }
+ if entering {
+ // TODO: untangle this clusterfuck about when the newlines need
+ // to be added and when not.
+ if node.Prev != nil {
+ switch node.Prev.Type {
+ case HTMLBlock, List, Paragraph, Heading, CodeBlock, BlockQuote, HorizontalRule:
+ r.cr(w)
+ }
+ }
+ if node.Parent.Type == BlockQuote && node.Prev == nil {
+ r.cr(w)
+ }
+ r.out(w, pTag)
+ } else {
+ r.out(w, pCloseTag)
+ if !(node.Parent.Type == Item && node.Next == nil) {
+ r.cr(w)
+ }
+ }
+ case BlockQuote:
+ if entering {
+ r.cr(w)
+ r.out(w, blockquoteTag)
+ } else {
+ r.out(w, blockquoteCloseTag)
+ r.cr(w)
+ }
+ case HTMLBlock:
+ if r.Flags&SkipHTML != 0 {
+ break
+ }
+ r.cr(w)
+ r.out(w, node.Literal)
+ r.cr(w)
+ case Heading:
+ headingLevel := r.HTMLRendererParameters.HeadingLevelOffset + node.Level
+ openTag, closeTag := headingTagsFromLevel(headingLevel)
+ if entering {
+ if node.IsTitleblock {
+ attrs = append(attrs, `class="title"`)
+ }
+ if node.HeadingID != "" {
+ id := r.ensureUniqueHeadingID(node.HeadingID)
+ if r.HeadingIDPrefix != "" {
+ id = r.HeadingIDPrefix + id
+ }
+ if r.HeadingIDSuffix != "" {
+ id = id + r.HeadingIDSuffix
+ }
+ attrs = append(attrs, fmt.Sprintf(`id="%s"`, id))
+ }
+ r.cr(w)
+ r.tag(w, openTag, attrs)
+ } else {
+ r.out(w, closeTag)
+ if !(node.Parent.Type == Item && node.Next == nil) {
+ r.cr(w)
+ }
+ }
+ case HorizontalRule:
+ r.cr(w)
+ r.outHRTag(w)
+ r.cr(w)
+ case List:
+ openTag := ulTag
+ closeTag := ulCloseTag
+ if node.ListFlags&ListTypeOrdered != 0 {
+ openTag = olTag
+ closeTag = olCloseTag
+ }
+ if node.ListFlags&ListTypeDefinition != 0 {
+ openTag = dlTag
+ closeTag = dlCloseTag
+ }
+ if entering {
+ if node.IsFootnotesList {
+ r.out(w, footnotesDivBytes)
+ r.outHRTag(w)
+ r.cr(w)
+ }
+ r.cr(w)
+ if node.Parent.Type == Item && node.Parent.Parent.Tight {
+ r.cr(w)
+ }
+ r.tag(w, openTag[:len(openTag)-1], attrs)
+ r.cr(w)
+ } else {
+ r.out(w, closeTag)
+ //cr(w)
+ //if node.parent.Type != Item {
+ // cr(w)
+ //}
+ if node.Parent.Type == Item && node.Next != nil {
+ r.cr(w)
+ }
+ if node.Parent.Type == Document || node.Parent.Type == BlockQuote {
+ r.cr(w)
+ }
+ if node.IsFootnotesList {
+ r.out(w, footnotesCloseDivBytes)
+ }
+ }
+ case Item:
+ openTag := liTag
+ closeTag := liCloseTag
+ if node.ListFlags&ListTypeDefinition != 0 {
+ openTag = ddTag
+ closeTag = ddCloseTag
+ }
+ if node.ListFlags&ListTypeTerm != 0 {
+ openTag = dtTag
+ closeTag = dtCloseTag
+ }
+ if entering {
+ if itemOpenCR(node) {
+ r.cr(w)
+ }
+ if node.ListData.RefLink != nil {
+ slug := slugify(node.ListData.RefLink)
+ r.out(w, footnoteItem(r.FootnoteAnchorPrefix, slug))
+ break
+ }
+ r.out(w, openTag)
+ } else {
+ if node.ListData.RefLink != nil {
+ slug := slugify(node.ListData.RefLink)
+ if r.Flags&FootnoteReturnLinks != 0 {
+ r.out(w, footnoteReturnLink(r.FootnoteAnchorPrefix, r.FootnoteReturnLinkContents, slug))
+ }
+ }
+ r.out(w, closeTag)
+ r.cr(w)
+ }
+ case CodeBlock:
+ attrs = appendLanguageAttr(attrs, node.Info)
+ r.cr(w)
+ r.out(w, preTag)
+ r.tag(w, codeTag[:len(codeTag)-1], attrs)
+ escapeAllHTML(w, node.Literal)
+ r.out(w, codeCloseTag)
+ r.out(w, preCloseTag)
+ if node.Parent.Type != Item {
+ r.cr(w)
+ }
+ case Table:
+ if entering {
+ r.cr(w)
+ r.out(w, tableTag)
+ } else {
+ r.out(w, tableCloseTag)
+ r.cr(w)
+ }
+ case TableCell:
+ openTag := tdTag
+ closeTag := tdCloseTag
+ if node.IsHeader {
+ openTag = thTag
+ closeTag = thCloseTag
+ }
+ if entering {
+ align := cellAlignment(node.Align)
+ if align != "" {
+ attrs = append(attrs, fmt.Sprintf(`align="%s"`, align))
+ }
+ if node.Prev == nil {
+ r.cr(w)
+ }
+ r.tag(w, openTag, attrs)
+ } else {
+ r.out(w, closeTag)
+ r.cr(w)
+ }
+ case TableHead:
+ if entering {
+ r.cr(w)
+ r.out(w, theadTag)
+ } else {
+ r.out(w, theadCloseTag)
+ r.cr(w)
+ }
+ case TableBody:
+ if entering {
+ r.cr(w)
+ r.out(w, tbodyTag)
+ // XXX: this is to adhere to a rather silly test. Should fix test.
+ if node.FirstChild == nil {
+ r.cr(w)
+ }
+ } else {
+ r.out(w, tbodyCloseTag)
+ r.cr(w)
+ }
+ case TableRow:
+ if entering {
+ r.cr(w)
+ r.out(w, trTag)
+ } else {
+ r.out(w, trCloseTag)
+ r.cr(w)
+ }
+ default:
+ panic("Unknown node type " + node.Type.String())
+ }
+ return GoToNext
+}
+
+// RenderHeader writes HTML document preamble and TOC if requested.
+func (r *HTMLRenderer) RenderHeader(w io.Writer, ast *Node) {
+ r.writeDocumentHeader(w)
+ if r.Flags&TOC != 0 {
+ r.writeTOC(w, ast)
+ }
+}
+
+// RenderFooter writes HTML document footer.
+func (r *HTMLRenderer) RenderFooter(w io.Writer, ast *Node) {
+ if r.Flags&CompletePage == 0 {
+ return
+ }
+ io.WriteString(w, "\n