From 548fca75a93609c59c5b8c45b0049b0949f32f02 Mon Sep 17 00:00:00 2001 From: Alex Russell-Saw Date: Sun, 13 Dec 2020 11:50:36 +0000 Subject: [PATCH] forgot to commit for a long time --- Dockerfile | 9 +- Makefile | 3 + cmd/articles/main.go | 105 + cmd/search/main.go | 68 + dao/dao.go | 70 +- domain/article.go | 51 +- domain/layout.go | 6 - go.mod | 57 +- go.sum | 260 + handler/handle_article.go | 54 +- handler/handle_generate_edition.go | 2 +- handler/handle_login.go | 2 +- handler/handle_news.go | 196 +- handler/handle_refresh_article.go | 13 +- handler/handle_search.go | 64 + handler/handle_settings.go | 10 +- handler/pubsub_article.go | 71 +- handler/pubsub_source.go | 6 +- handler/router.go | 75 +- pkg/util/context.go | 4 +- pkg/util/slog.go | 2 +- readability-server/index.js | 41 +- readability-server/package-lock.json | 721 ++ static/bulma.min.css | 2 +- static/images/preview.png | Bin 0 -> 2470062 bytes static/main.css | 27 +- tmpl/article-tile.html | 240 +- tmpl/article.html | 20 +- tmpl/frame.html | 152 +- tmpl/frontpage-1.html | 2 +- tmpl/meta.html | 24 + tmpl/search.html | 23 + tmpl/section.html | 32 +- vendor/cloud.google.com/go/.gitignore | 1 + vendor/cloud.google.com/go/CHANGES.md | 347 +- vendor/cloud.google.com/go/CONTRIBUTING.md | 159 +- vendor/cloud.google.com/go/README.md | 102 +- vendor/cloud.google.com/go/RELEASING.md | 164 +- .../cloud.google.com/go/bigquery/CHANGES.md | 67 + .../cloud.google.com/go/bigquery/bigquery.go | 30 + .../cloud.google.com/go/bigquery/dataset.go | 11 +- vendor/cloud.google.com/go/bigquery/doc.go | 18 +- .../cloud.google.com/go/bigquery/external.go | 4 + .../cloud.google.com/go/bigquery/extract.go | 38 +- vendor/cloud.google.com/go/bigquery/go.mod | 17 +- vendor/cloud.google.com/go/bigquery/go.sum | 214 +- vendor/cloud.google.com/go/bigquery/iam.go | 142 + .../cloud.google.com/go/bigquery/inserter.go | 1 + .../cloud.google.com/go/bigquery/iterator.go | 190 +- vendor/cloud.google.com/go/bigquery/job.go | 21 +- vendor/cloud.google.com/go/bigquery/load.go | 6 + vendor/cloud.google.com/go/bigquery/model.go | 8 + vendor/cloud.google.com/go/bigquery/nulls.go | 42 +- vendor/cloud.google.com/go/bigquery/query.go | 103 +- .../cloud.google.com/go/bigquery/routine.go | 13 + vendor/cloud.google.com/go/bigquery/schema.go | 59 +- vendor/cloud.google.com/go/bigquery/table.go | 119 +- vendor/cloud.google.com/go/bigquery/value.go | 39 +- .../go/compute/metadata/metadata.go | 3 +- vendor/cloud.google.com/go/doc.go | 15 +- .../cloud.google.com/go/firestore/CHANGES.md | 9 + .../go/firestore/apiv1/doc.go | 8 +- .../go/firestore/apiv1/firestore_client.go | 188 +- .../go/firestore/apiv1/info.go | 24 + .../cloud.google.com/go/firestore/docref.go | 117 +- .../cloud.google.com/go/firestore/document.go | 4 +- vendor/cloud.google.com/go/firestore/go.mod | 16 +- vendor/cloud.google.com/go/firestore/go.sum | 128 +- vendor/cloud.google.com/go/firestore/query.go | 49 +- .../go/firestore/transaction.go | 3 +- vendor/cloud.google.com/go/firestore/watch.go | 2 +- vendor/cloud.google.com/go/go.mod | 37 +- vendor/cloud.google.com/go/go.sum | 224 +- .../go/internal/.repo-metadata-full.json | 334 +- .../cloud.google.com/go/internal/uid/uid.go | 149 + .../go/internal/version/version.go | 2 +- vendor/cloud.google.com/go/profiler/heap.go | 116 + vendor/cloud.google.com/go/profiler/mutex.go | 23 + .../cloud.google.com/go/profiler/profiler.go | 614 ++ vendor/cloud.google.com/go/pubsub/CHANGES.md | 54 + .../cloud.google.com/go/pubsub/apiv1/doc.go | 22 +- .../cloud.google.com/go/pubsub/apiv1/info.go | 33 + .../go/pubsub/apiv1/publisher_client.go | 132 +- .../go/pubsub/apiv1/subscriber_client.go | 179 +- vendor/cloud.google.com/go/pubsub/go.mod | 23 +- vendor/cloud.google.com/go/pubsub/go.sum | 260 +- .../internal/scheduler/publish_scheduler.go | 186 + .../internal/scheduler/receive_scheduler.go | 139 + vendor/cloud.google.com/go/pubsub/iterator.go | 66 +- vendor/cloud.google.com/go/pubsub/message.go | 27 +- vendor/cloud.google.com/go/pubsub/pubsub.go | 32 +- .../cloud.google.com/go/pubsub/pullstream.go | 4 +- .../go/pubsub/subscription.go | 366 +- vendor/cloud.google.com/go/pubsub/topic.go | 126 +- vendor/cloud.google.com/go/pubsub/trace.go | 9 - .../go/secretmanager/apiv1beta1/doc.go | 117 + .../go/secretmanager/apiv1beta1/iam.go | 26 + .../apiv1beta1/secret_manager_client.go | 672 ++ vendor/cloud.google.com/go/testing.md | 236 + vendor/cloud.google.com/go/tools.go | 1 - vendor/github.com/BurntSushi/toml/.gitignore | 5 - vendor/github.com/BurntSushi/toml/.travis.yml | 15 - vendor/github.com/BurntSushi/toml/COMPATIBLE | 3 - vendor/github.com/BurntSushi/toml/Makefile | 19 - vendor/github.com/BurntSushi/toml/README.md | 218 - vendor/github.com/BurntSushi/toml/decode.go | 509 -- .../github.com/BurntSushi/toml/decode_meta.go | 121 - vendor/github.com/BurntSushi/toml/doc.go | 27 - vendor/github.com/BurntSushi/toml/encode.go | 568 -- .../BurntSushi/toml/encoding_types.go | 19 - .../BurntSushi/toml/encoding_types_1.1.go | 18 - vendor/github.com/BurntSushi/toml/lex.go | 953 -- vendor/github.com/BurntSushi/toml/parse.go | 592 -- vendor/github.com/BurntSushi/toml/session.vim | 1 - .../github.com/BurntSushi/toml/type_check.go | 91 - .../github.com/BurntSushi/toml/type_fields.go | 242 - .../github.com/PuerkitoBio/goquery/README.md | 6 +- .../PuerkitoBio/goquery/manipulation.go | 164 +- .../PuerkitoBio/goquery/utilities.go | 18 +- vendor/github.com/andybalholm/cascadia/go.mod | 6 +- .../github.com/andybalholm/cascadia/parser.go | 93 +- .../andybalholm/cascadia/selector.go | 113 +- .../andybalholm/cascadia/serialize.go | 120 + .../github.com/araddon/dateparse/.travis.yml | 4 +- vendor/github.com/araddon/dateparse/README.md | 30 +- vendor/github.com/araddon/dateparse/go.mod | 9 + vendor/github.com/araddon/dateparse/go.sum | 15 + .../github.com/araddon/dateparse/parseany.go | 1099 ++- vendor/github.com/davecgh/go-spew/LICENSE | 15 + .../github.com/davecgh/go-spew/spew/bypass.go | 145 + .../davecgh/go-spew/spew/bypasssafe.go | 38 + .../github.com/davecgh/go-spew/spew/common.go | 341 + .../github.com/davecgh/go-spew/spew/config.go | 306 + vendor/github.com/davecgh/go-spew/spew/doc.go | 211 + .../github.com/davecgh/go-spew/spew/dump.go | 509 ++ .../github.com/davecgh/go-spew/spew/format.go | 419 + .../github.com/davecgh/go-spew/spew/spew.go | 148 + vendor/github.com/esimov/dithergo/README.md | 2 +- vendor/github.com/felixge/fgprof/LICENSE.txt | 8 + vendor/github.com/felixge/fgprof/README.md | 214 + vendor/github.com/felixge/fgprof/fgprof.go | 97 + vendor/github.com/felixge/fgprof/format.go | 102 + vendor/github.com/felixge/fgprof/go.mod | 5 + vendor/github.com/felixge/fgprof/go.sum | 7 + vendor/github.com/felixge/fgprof/handler.go | 32 + vendor/github.com/felixge/fgprof/pprof.go | 56 + .../golang/protobuf/proto/buffer.go | 14 +- .../golang/protobuf/proto/deprecated.go | 33 +- .../golang/protobuf/proto/extensions.go | 4 +- .../golang/protobuf/proto/registry.go | 10 +- .../golang/protobuf/proto/text_decode.go | 2 +- .../golang/protobuf/proto/text_encode.go | 8 +- .../protoc-gen-go/descriptor/descriptor.pb.go | 200 - .../golang/protobuf/protoc-gen-go/main.go | 1 + .../golang/protobuf/ptypes/empty/empty.pb.go | 62 - .../protobuf/ptypes/struct/struct.pb.go | 78 - .../github.com/google/go-cmp/cmp/compare.go | 85 +- .../google/go-cmp/cmp/export_panic.go | 4 +- .../google/go-cmp/cmp/export_unsafe.go | 22 +- .../go-cmp/cmp/internal/diff/debug_disable.go | 2 +- .../go-cmp/cmp/internal/diff/debug_enable.go | 2 +- .../google/go-cmp/cmp/internal/diff/diff.go | 44 +- .../google/go-cmp/cmp/internal/flags/flags.go | 2 +- .../cmp/internal/flags/toolchain_legacy.go | 2 +- .../cmp/internal/flags/toolchain_recent.go | 2 +- .../go-cmp/cmp/internal/function/func.go | 2 +- .../google/go-cmp/cmp/internal/value/name.go | 157 + .../cmp/internal/value/pointer_purego.go | 12 +- .../cmp/internal/value/pointer_unsafe.go | 12 +- .../google/go-cmp/cmp/internal/value/sort.go | 2 +- .../google/go-cmp/cmp/internal/value/zero.go | 2 +- .../github.com/google/go-cmp/cmp/options.go | 7 +- vendor/github.com/google/go-cmp/cmp/path.go | 9 +- vendor/github.com/google/go-cmp/cmp/report.go | 7 +- .../google/go-cmp/cmp/report_compare.go | 202 +- .../google/go-cmp/cmp/report_references.go | 264 + .../google/go-cmp/cmp/report_reflect.go | 296 +- .../google/go-cmp/cmp/report_slices.go | 137 +- .../google/go-cmp/cmp/report_text.go | 88 +- .../google/go-cmp/cmp/report_value.go | 2 +- vendor/github.com/google/pprof/AUTHORS | 7 + vendor/github.com/google/pprof/CONTRIBUTORS | 16 + vendor/github.com/google/pprof/LICENSE | 202 + .../github.com/google/pprof/profile/encode.go | 567 ++ .../github.com/google/pprof/profile/filter.go | 270 + .../github.com/google/pprof/profile/index.go | 64 + .../pprof/profile/legacy_java_profile.go | 315 + .../google/pprof/profile/legacy_profile.go | 1225 +++ .../github.com/google/pprof/profile/merge.go | 482 + .../google/pprof/profile/profile.go | 793 ++ .../github.com/google/pprof/profile/proto.go | 370 + .../github.com/google/pprof/profile/prune.go | 178 + vendor/github.com/google/uuid/README.md | 2 +- vendor/github.com/google/uuid/marshal.go | 7 +- vendor/github.com/google/uuid/version1.go | 12 +- vendor/github.com/google/uuid/version4.go | 7 +- vendor/github.com/gorilla/mux/AUTHORS | 8 + .../lint => github.com/gorilla/mux}/LICENSE | 9 +- vendor/github.com/gorilla/mux/README.md | 805 ++ vendor/github.com/gorilla/mux/doc.go | 306 + vendor/github.com/gorilla/mux/go.mod | 3 + vendor/github.com/gorilla/mux/middleware.go | 74 + vendor/github.com/gorilla/mux/mux.go | 606 ++ vendor/github.com/gorilla/mux/regexp.go | 388 + vendor/github.com/gorilla/mux/route.go | 736 ++ vendor/github.com/gorilla/mux/test_helpers.go | 19 + .../jaytaylor/html2text/.travis.yml | 13 +- .../github.com/jaytaylor/html2text/README.md | 3 + .../jaytaylor/html2text/html2text.go | 68 +- .../github.com/json-iterator/go/.codecov.yml | 3 + vendor/github.com/json-iterator/go/.gitignore | 4 + .../github.com/json-iterator/go/.travis.yml | 14 + vendor/github.com/json-iterator/go/Gopkg.lock | 21 + vendor/github.com/json-iterator/go/Gopkg.toml | 26 + .../toml/COPYING => json-iterator/go/LICENSE} | 12 +- vendor/github.com/json-iterator/go/README.md | 87 + vendor/github.com/json-iterator/go/adapter.go | 150 + vendor/github.com/json-iterator/go/any.go | 325 + .../github.com/json-iterator/go/any_array.go | 278 + .../github.com/json-iterator/go/any_bool.go | 137 + .../github.com/json-iterator/go/any_float.go | 83 + .../github.com/json-iterator/go/any_int32.go | 74 + .../github.com/json-iterator/go/any_int64.go | 74 + .../json-iterator/go/any_invalid.go | 82 + vendor/github.com/json-iterator/go/any_nil.go | 69 + .../github.com/json-iterator/go/any_number.go | 123 + .../github.com/json-iterator/go/any_object.go | 374 + vendor/github.com/json-iterator/go/any_str.go | 166 + .../github.com/json-iterator/go/any_uint32.go | 74 + .../github.com/json-iterator/go/any_uint64.go | 74 + vendor/github.com/json-iterator/go/build.sh | 12 + vendor/github.com/json-iterator/go/config.go | 375 + .../go/fuzzy_mode_convert_table.md | 7 + vendor/github.com/json-iterator/go/go.mod | 11 + vendor/github.com/json-iterator/go/go.sum | 14 + vendor/github.com/json-iterator/go/iter.go | 349 + .../github.com/json-iterator/go/iter_array.go | 64 + .../github.com/json-iterator/go/iter_float.go | 339 + .../github.com/json-iterator/go/iter_int.go | 345 + .../json-iterator/go/iter_object.go | 267 + .../github.com/json-iterator/go/iter_skip.go | 130 + .../json-iterator/go/iter_skip_sloppy.go | 163 + .../json-iterator/go/iter_skip_strict.go | 99 + .../github.com/json-iterator/go/iter_str.go | 215 + .../github.com/json-iterator/go/jsoniter.go | 18 + vendor/github.com/json-iterator/go/pool.go | 42 + vendor/github.com/json-iterator/go/reflect.go | 337 + .../json-iterator/go/reflect_array.go | 104 + .../json-iterator/go/reflect_dynamic.go | 70 + .../json-iterator/go/reflect_extension.go | 483 + .../json-iterator/go/reflect_json_number.go | 112 + .../go/reflect_json_raw_message.go | 60 + .../json-iterator/go/reflect_map.go | 346 + .../json-iterator/go/reflect_marshaler.go | 225 + .../json-iterator/go/reflect_native.go | 453 + .../json-iterator/go/reflect_optional.go | 129 + .../json-iterator/go/reflect_slice.go | 99 + .../go/reflect_struct_decoder.go | 1092 +++ .../go/reflect_struct_encoder.go | 211 + vendor/github.com/json-iterator/go/stream.go | 210 + .../json-iterator/go/stream_float.go | 111 + .../github.com/json-iterator/go/stream_int.go | 190 + .../github.com/json-iterator/go/stream_str.go | 372 + vendor/github.com/json-iterator/go/test.sh | 12 + .../github.com/mattn/go-runewidth/.travis.yml | 14 +- .../go-runewidth/{README.mkd => README.md} | 2 +- vendor/github.com/mattn/go-runewidth/go.mod | 3 + .../github.com/mattn/go-runewidth/go.test.sh | 12 + .../mattn/go-runewidth/runewidth.go | 1086 +-- .../mattn/go-runewidth/runewidth_appengine.go | 8 + .../mattn/go-runewidth/runewidth_js.go | 1 + .../mattn/go-runewidth/runewidth_posix.go | 9 +- .../mattn/go-runewidth/runewidth_table.go | 437 + .../mattn/go-runewidth/runewidth_windows.go | 3 + vendor/github.com/mmcdole/gofeed/.gitignore | 5 + vendor/github.com/mmcdole/gofeed/.travis.yml | 34 +- vendor/github.com/mmcdole/gofeed/README.md | 200 +- .../github.com/mmcdole/gofeed/atom/parser.go | 91 +- vendor/github.com/mmcdole/gofeed/detector.go | 61 +- .../mmcdole/gofeed/extensions/itunes.go | 9 + vendor/github.com/mmcdole/gofeed/feed.go | 20 + vendor/github.com/mmcdole/gofeed/go.mod | 14 + vendor/github.com/mmcdole/gofeed/go.sum | 45 + .../gofeed/internal/shared/dateparser.go | 113 +- .../gofeed/internal/shared/parseutils.go | 155 +- .../mmcdole/gofeed/internal/shared/xmlbase.go | 258 + vendor/github.com/mmcdole/gofeed/json/feed.go | 62 + .../github.com/mmcdole/gofeed/json/parser.go | 29 + vendor/github.com/mmcdole/gofeed/parser.go | 50 +- .../github.com/mmcdole/gofeed/rss/parser.go | 27 +- .../github.com/mmcdole/gofeed/translator.go | 270 +- vendor/github.com/mmcdole/goxpp/README.md | 37 +- .../modern-go/concurrent/.gitignore | 1 + .../modern-go/concurrent/.travis.yml | 14 + .../github.com/modern-go/concurrent/LICENSE | 201 + .../github.com/modern-go/concurrent/README.md | 49 + .../modern-go/concurrent/executor.go | 14 + .../modern-go/concurrent/go_above_19.go | 15 + .../modern-go/concurrent/go_below_19.go | 33 + vendor/github.com/modern-go/concurrent/log.go | 13 + .../github.com/modern-go/concurrent/test.sh | 12 + .../concurrent/unbounded_executor.go | 119 + .../github.com/modern-go/reflect2/.gitignore | 2 + .../github.com/modern-go/reflect2/.travis.yml | 15 + .../github.com/modern-go/reflect2/Gopkg.lock | 15 + .../github.com/modern-go/reflect2/Gopkg.toml | 35 + vendor/github.com/modern-go/reflect2/LICENSE | 201 + .../github.com/modern-go/reflect2/README.md | 71 + .../modern-go/reflect2/go_above_17.go | 8 + .../modern-go/reflect2/go_above_19.go | 14 + .../modern-go/reflect2/go_below_17.go | 9 + .../modern-go/reflect2/go_below_19.go | 14 + .../github.com/modern-go/reflect2/reflect2.go | 298 + .../modern-go/reflect2/reflect2_amd64.s | 0 .../modern-go/reflect2/reflect2_kind.go | 30 + .../modern-go/reflect2/relfect2_386.s | 0 .../modern-go/reflect2/relfect2_amd64p32.s | 0 .../modern-go/reflect2/relfect2_arm.s | 0 .../modern-go/reflect2/relfect2_arm64.s | 0 .../modern-go/reflect2/relfect2_mips64x.s | 0 .../modern-go/reflect2/relfect2_mipsx.s | 0 .../modern-go/reflect2/relfect2_ppc64x.s | 0 .../modern-go/reflect2/relfect2_s390x.s | 0 .../modern-go/reflect2/safe_field.go | 58 + .../github.com/modern-go/reflect2/safe_map.go | 101 + .../modern-go/reflect2/safe_slice.go | 92 + .../modern-go/reflect2/safe_struct.go | 29 + .../modern-go/reflect2/safe_type.go | 78 + vendor/github.com/modern-go/reflect2/test.sh | 12 + .../github.com/modern-go/reflect2/type_map.go | 113 + .../modern-go/reflect2/unsafe_array.go | 65 + .../modern-go/reflect2/unsafe_eface.go | 59 + .../modern-go/reflect2/unsafe_field.go | 74 + .../modern-go/reflect2/unsafe_iface.go | 64 + .../modern-go/reflect2/unsafe_link.go | 70 + .../modern-go/reflect2/unsafe_map.go | 138 + .../modern-go/reflect2/unsafe_ptr.go | 46 + .../modern-go/reflect2/unsafe_slice.go | 177 + .../modern-go/reflect2/unsafe_struct.go | 59 + .../modern-go/reflect2/unsafe_type.go | 85 + vendor/github.com/monzo/slog/.travis.yml | 7 +- vendor/github.com/monzo/slog/README.md | 39 + vendor/github.com/monzo/slog/default.go | 2 +- vendor/github.com/monzo/slog/event.go | 143 +- vendor/github.com/monzo/slog/go.sum | 1 + vendor/github.com/monzo/slog/logger.go | 60 +- vendor/github.com/monzo/slog/mock.go | 37 + vendor/github.com/monzo/slog/multi.go | 21 + .../olekukonko/tablewriter/.travis.yml | 2 + .../tablewriter/{LICENCE.md => LICENSE.md} | 2 +- .../olekukonko/tablewriter/README.md | 133 +- .../github.com/olekukonko/tablewriter/go.mod | 5 + .../github.com/olekukonko/tablewriter/go.sum | 2 + .../olekukonko/tablewriter/table.go | 142 +- .../tablewriter/table_with_color.go | 2 + .../github.com/olekukonko/tablewriter/util.go | 6 +- .../clients/go/firesearch/LICENSE | 201 + .../clients/go/firesearch/client.go.plush | 131 + .../clients/go/firesearch/doc.go | 2 + .../clients/go/firesearch/firesearch.gen.go | 1526 ++++ .../clients/go/firesearch/go.mod | 3 + vendor/github.com/pkg/errors/.travis.yml | 11 +- vendor/github.com/pkg/errors/Makefile | 44 + vendor/github.com/pkg/errors/README.md | 11 +- vendor/github.com/pkg/errors/errors.go | 8 +- vendor/github.com/pkg/errors/go113.go | 38 + vendor/github.com/pkg/errors/stack.go | 58 +- vendor/github.com/pmezard/go-difflib/LICENSE | 27 + .../pmezard/go-difflib/difflib/difflib.go | 772 ++ .../github.com/stretchr/objx/.codeclimate.yml | 21 + vendor/github.com/stretchr/objx/.gitignore | 11 + vendor/github.com/stretchr/objx/.travis.yml | 30 + vendor/github.com/stretchr/objx/LICENSE | 22 + vendor/github.com/stretchr/objx/README.md | 80 + vendor/github.com/stretchr/objx/Taskfile.yml | 30 + vendor/github.com/stretchr/objx/accessors.go | 179 + .../github.com/stretchr/objx/conversions.go | 280 + vendor/github.com/stretchr/objx/doc.go | 66 + vendor/github.com/stretchr/objx/go.mod | 8 + vendor/github.com/stretchr/objx/go.sum | 8 + vendor/github.com/stretchr/objx/map.go | 228 + vendor/github.com/stretchr/objx/mutations.go | 77 + vendor/github.com/stretchr/objx/security.go | 12 + vendor/github.com/stretchr/objx/tests.go | 17 + .../github.com/stretchr/objx/type_specific.go | 346 + .../stretchr/objx/type_specific_codegen.go | 2251 +++++ vendor/github.com/stretchr/objx/value.go | 159 + vendor/github.com/stretchr/testify/LICENSE | 21 + .../testify/assert/assertion_compare.go | 274 + .../testify/assert/assertion_format.go | 644 ++ .../testify/assert/assertion_format.go.tmpl | 5 + .../testify/assert/assertion_forward.go | 1276 +++ .../testify/assert/assertion_forward.go.tmpl | 5 + .../stretchr/testify/assert/assertions.go | 1695 ++++ .../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 + .../github.com/stretchr/testify/mock/doc.go | 44 + .../github.com/stretchr/testify/mock/mock.go | 981 +++ .../tdewolff/minify/v2/.gitattributes | 3 +- .../github.com/tdewolff/minify/v2/.gitignore | 5 + .../tdewolff/minify/v2/.goreleaser.yml | 29 - .../github.com/tdewolff/minify/v2/.travis.yml | 8 +- .../minify/v2/{LICENSE.md => LICENSE} | 0 vendor/github.com/tdewolff/minify/v2/Makefile | 56 + .../github.com/tdewolff/minify/v2/README.md | 250 +- .../github.com/tdewolff/minify/v2/common.go | 373 +- vendor/github.com/tdewolff/minify/v2/go.mod | 12 +- vendor/github.com/tdewolff/minify/v2/go.sum | 23 +- .../tdewolff/minify/v2/html/buffer.go | 12 +- .../tdewolff/minify/v2/html/hash.go | 543 ++ .../tdewolff/minify/v2/html/html.go | 368 +- .../tdewolff/minify/v2/html/table.go | 1505 +++- .../github.com/tdewolff/minify/v2/minify.go | 92 +- .../tdewolff/parse/v2/.gitattributes | 1 + .../github.com/tdewolff/parse/v2/.gitignore | 5 + .../github.com/tdewolff/parse/v2/.travis.yml | 8 +- vendor/github.com/tdewolff/parse/v2/README.md | 2 +- .../tdewolff/parse/v2/buffer/buffer.go | 2 +- .../tdewolff/parse/v2/buffer/lexer.go | 20 +- .../tdewolff/parse/v2/buffer/reader.go | 2 +- .../tdewolff/parse/v2/buffer/streamlexer.go | 2 +- .../tdewolff/parse/v2/buffer/writer.go | 2 +- vendor/github.com/tdewolff/parse/v2/common.go | 30 +- vendor/github.com/tdewolff/parse/v2/error.go | 42 +- vendor/github.com/tdewolff/parse/v2/go.mod | 4 +- vendor/github.com/tdewolff/parse/v2/go.sum | 4 +- .../tdewolff/parse/v2/html/README.md | 8 +- .../github.com/tdewolff/parse/v2/html/hash.go | 794 +- .../github.com/tdewolff/parse/v2/html/lex.go | 53 +- .../github.com/tdewolff/parse/v2/html/util.go | 138 +- vendor/github.com/tdewolff/parse/v2/input.go | 173 + .../github.com/tdewolff/parse/v2/position.go | 98 +- .../tdewolff/parse/v2/strconv/float.go | 26 +- .../tdewolff/parse/v2/strconv/int.go | 9 +- vendor/github.com/tdewolff/parse/v2/util.go | 343 +- vendor/go.opencensus.io/Makefile | 27 +- vendor/go.opencensus.io/go.mod | 2 +- .../go.opencensus.io/plugin/ocgrpc/client.go | 2 +- .../plugin/ocgrpc/client_metrics.go | 2 + .../go.opencensus.io/plugin/ocgrpc/server.go | 3 +- .../plugin/ocgrpc/server_metrics.go | 2 + .../plugin/ocgrpc/trace_common.go | 8 +- .../plugin/ochttp/propagation/b3/b3.go | 4 +- vendor/go.opencensus.io/stats/record.go | 20 + .../stats/view/aggregation.go | 18 +- .../stats/view/aggregation_data.go | 55 +- .../go.opencensus.io/stats/view/collector.go | 2 +- vendor/go.opencensus.io/stats/view/export.go | 17 +- .../stats/view/view_to_metric.go | 16 +- vendor/go.opencensus.io/stats/view/worker.go | 218 +- .../stats/view/worker_commands.go | 6 +- vendor/go.opencensus.io/trace/lrumap.go | 2 +- vendor/go.opencensus.io/trace/trace.go | 47 +- vendor/golang.org/x/lint/README.md | 1 + vendor/golang.org/x/mod/module/module.go | 80 +- vendor/golang.org/x/mod/semver/semver.go | 3 + vendor/golang.org/x/net/html/const.go | 2 +- vendor/golang.org/x/net/html/foreign.go | 119 +- vendor/golang.org/x/net/html/parse.go | 15 +- vendor/golang.org/x/net/html/render.go | 2 +- .../x/net/http2/client_conn_pool.go | 8 +- vendor/golang.org/x/net/http2/flow.go | 2 + .../golang.org/x/net/http2/hpack/huffman.go | 7 + vendor/golang.org/x/net/http2/http2.go | 7 + vendor/golang.org/x/net/http2/server.go | 20 +- vendor/golang.org/x/net/http2/transport.go | 118 +- .../idna/{tables12.00.go => tables12.0.0.go} | 2 +- vendor/golang.org/x/net/idna/tables13.0.0.go | 4839 ++++++++++ vendor/golang.org/x/oauth2/README.md | 10 +- vendor/golang.org/x/oauth2/go.mod | 7 +- vendor/golang.org/x/oauth2/go.sum | 359 +- .../sys/internal/unsafeheader/unsafeheader.go | 30 + vendor/golang.org/x/sys/unix/README.md | 4 +- vendor/golang.org/x/sys/unix/asm_aix_ppc64.s | 2 +- vendor/golang.org/x/sys/unix/asm_darwin_386.s | 2 +- .../golang.org/x/sys/unix/asm_darwin_amd64.s | 2 +- vendor/golang.org/x/sys/unix/asm_darwin_arm.s | 2 +- .../golang.org/x/sys/unix/asm_darwin_arm64.s | 2 +- .../x/sys/unix/asm_dragonfly_amd64.s | 2 +- .../golang.org/x/sys/unix/asm_freebsd_386.s | 2 +- .../golang.org/x/sys/unix/asm_freebsd_amd64.s | 2 +- .../golang.org/x/sys/unix/asm_freebsd_arm.s | 2 +- .../golang.org/x/sys/unix/asm_freebsd_arm64.s | 2 +- vendor/golang.org/x/sys/unix/asm_linux_386.s | 2 +- .../golang.org/x/sys/unix/asm_linux_amd64.s | 2 +- vendor/golang.org/x/sys/unix/asm_linux_arm.s | 2 +- .../golang.org/x/sys/unix/asm_linux_arm64.s | 2 +- .../golang.org/x/sys/unix/asm_linux_mips64x.s | 2 +- .../golang.org/x/sys/unix/asm_linux_mipsx.s | 2 +- .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 2 +- .../golang.org/x/sys/unix/asm_linux_riscv64.s | 2 +- .../golang.org/x/sys/unix/asm_linux_s390x.s | 2 +- vendor/golang.org/x/sys/unix/asm_netbsd_386.s | 2 +- .../golang.org/x/sys/unix/asm_netbsd_amd64.s | 2 +- vendor/golang.org/x/sys/unix/asm_netbsd_arm.s | 2 +- .../golang.org/x/sys/unix/asm_netbsd_arm64.s | 2 +- .../golang.org/x/sys/unix/asm_openbsd_386.s | 2 +- .../golang.org/x/sys/unix/asm_openbsd_amd64.s | 2 +- .../golang.org/x/sys/unix/asm_openbsd_arm.s | 2 +- .../golang.org/x/sys/unix/asm_openbsd_arm64.s | 2 +- .../x/sys/unix/asm_openbsd_mips64.s | 29 + .../golang.org/x/sys/unix/asm_solaris_amd64.s | 2 +- vendor/golang.org/x/sys/unix/endian_big.go | 2 +- vendor/golang.org/x/sys/unix/endian_little.go | 2 +- vendor/golang.org/x/sys/unix/fcntl_darwin.go | 6 + .../x/sys/unix/fcntl_linux_32bit.go | 4 +- vendor/golang.org/x/sys/unix/gccgo.go | 2 - vendor/golang.org/x/sys/unix/gccgo_c.c | 6 + vendor/golang.org/x/sys/unix/ioctl.go | 9 + vendor/golang.org/x/sys/unix/mkall.sh | 15 +- vendor/golang.org/x/sys/unix/mkerrors.sh | 32 +- .../x/sys/unix/sockcmsg_unix_other.go | 6 +- vendor/golang.org/x/sys/unix/syscall.go | 43 +- vendor/golang.org/x/sys/unix/syscall_aix.go | 16 + vendor/golang.org/x/sys/unix/syscall_bsd.go | 36 +- .../x/sys/unix/syscall_darwin.1_12.go | 4 +- .../x/sys/unix/syscall_darwin.1_13.go | 22 +- .../golang.org/x/sys/unix/syscall_darwin.go | 142 +- .../x/sys/unix/syscall_darwin_386.1_11.go | 9 - .../x/sys/unix/syscall_darwin_386.go | 22 +- .../x/sys/unix/syscall_darwin_amd64.1_11.go | 9 - .../x/sys/unix/syscall_darwin_amd64.go | 22 +- .../x/sys/unix/syscall_darwin_arm.1_11.go | 11 - .../x/sys/unix/syscall_darwin_arm.go | 19 +- .../x/sys/unix/syscall_darwin_arm64.1_11.go | 11 - .../x/sys/unix/syscall_darwin_arm64.go | 24 +- .../x/sys/unix/syscall_dragonfly.go | 32 +- .../golang.org/x/sys/unix/syscall_freebsd.go | 19 +- .../golang.org/x/sys/unix/syscall_illumos.go | 41 +- vendor/golang.org/x/sys/unix/syscall_linux.go | 246 +- .../x/sys/unix/syscall_linux_386.go | 5 +- .../x/sys/unix/syscall_linux_amd64.go | 2 +- .../x/sys/unix/syscall_linux_amd64_gc.go | 2 +- .../x/sys/unix/syscall_linux_arm.go | 7 +- .../x/sys/unix/syscall_linux_arm64.go | 28 +- .../golang.org/x/sys/unix/syscall_linux_gc.go | 2 +- .../x/sys/unix/syscall_linux_gc_386.go | 2 +- .../x/sys/unix/syscall_linux_gc_arm.go | 13 + .../x/sys/unix/syscall_linux_mips64x.go | 2 +- .../x/sys/unix/syscall_linux_mipsx.go | 2 +- .../x/sys/unix/syscall_linux_ppc64x.go | 2 +- .../x/sys/unix/syscall_linux_riscv64.go | 8 +- .../x/sys/unix/syscall_linux_s390x.go | 2 +- .../x/sys/unix/syscall_linux_sparc64.go | 2 +- .../golang.org/x/sys/unix/syscall_netbsd.go | 19 +- .../golang.org/x/sys/unix/syscall_openbsd.go | 19 +- .../x/sys/unix/syscall_openbsd_mips64.go | 35 + .../golang.org/x/sys/unix/syscall_solaris.go | 7 +- vendor/golang.org/x/sys/unix/syscall_unix.go | 17 +- .../golang.org/x/sys/unix/syscall_unix_gc.go | 2 +- .../x/sys/unix/syscall_unix_gc_ppc64x.go | 2 +- .../x/sys/unix/zerrors_darwin_386.go | 4 + .../x/sys/unix/zerrors_darwin_amd64.go | 4 + .../x/sys/unix/zerrors_darwin_arm.go | 4 + .../x/sys/unix/zerrors_darwin_arm64.go | 4 + .../x/sys/unix/zerrors_dragonfly_amd64.go | 138 +- .../x/sys/unix/zerrors_freebsd_386.go | 6 + .../x/sys/unix/zerrors_freebsd_amd64.go | 6 + .../x/sys/unix/zerrors_freebsd_arm.go | 6 + .../x/sys/unix/zerrors_freebsd_arm64.go | 6 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 333 +- .../x/sys/unix/zerrors_linux_386.go | 8 + .../x/sys/unix/zerrors_linux_amd64.go | 8 + .../x/sys/unix/zerrors_linux_arm.go | 8 + .../x/sys/unix/zerrors_linux_arm64.go | 9 + .../x/sys/unix/zerrors_linux_mips.go | 8 + .../x/sys/unix/zerrors_linux_mips64.go | 8 + .../x/sys/unix/zerrors_linux_mips64le.go | 8 + .../x/sys/unix/zerrors_linux_mipsle.go | 8 + .../x/sys/unix/zerrors_linux_ppc64.go | 8 + .../x/sys/unix/zerrors_linux_ppc64le.go | 8 + .../x/sys/unix/zerrors_linux_riscv64.go | 8 + .../x/sys/unix/zerrors_linux_s390x.go | 8 + .../x/sys/unix/zerrors_linux_sparc64.go | 8 + .../x/sys/unix/zerrors_netbsd_386.go | 6 + .../x/sys/unix/zerrors_netbsd_amd64.go | 6 + .../x/sys/unix/zerrors_netbsd_arm.go | 6 + .../x/sys/unix/zerrors_netbsd_arm64.go | 6 + .../x/sys/unix/zerrors_openbsd_386.go | 7 + .../x/sys/unix/zerrors_openbsd_amd64.go | 7 + .../x/sys/unix/zerrors_openbsd_arm.go | 7 + .../x/sys/unix/zerrors_openbsd_arm64.go | 7 + .../x/sys/unix/zerrors_openbsd_mips64.go | 1862 ++++ .../x/sys/unix/zerrors_solaris_amd64.go | 22 +- .../x/sys/unix/zsyscall_aix_ppc64_gc.go | 2 +- .../x/sys/unix/zsyscall_darwin_386.1_11.go | 1811 ---- .../x/sys/unix/zsyscall_darwin_386.1_13.go | 2 - .../x/sys/unix/zsyscall_darwin_386.go | 299 +- .../x/sys/unix/zsyscall_darwin_386.s | 18 +- .../x/sys/unix/zsyscall_darwin_amd64.1_11.go | 1811 ---- .../x/sys/unix/zsyscall_darwin_amd64.1_13.go | 2 - .../x/sys/unix/zsyscall_darwin_amd64.go | 299 +- .../x/sys/unix/zsyscall_darwin_amd64.s | 18 +- .../x/sys/unix/zsyscall_darwin_arm.1_11.go | 1784 ---- .../x/sys/unix/zsyscall_darwin_arm.1_13.go | 2 - .../x/sys/unix/zsyscall_darwin_arm.go | 270 +- .../x/sys/unix/zsyscall_darwin_arm.s | 14 +- .../x/sys/unix/zsyscall_darwin_arm64.1_13.go | 2 - .../x/sys/unix/zsyscall_darwin_arm64.go | 284 +- .../x/sys/unix/zsyscall_darwin_arm64.s | 16 +- .../x/sys/unix/zsyscall_dragonfly_amd64.go | 42 +- .../x/sys/unix/zsyscall_illumos_amd64.go | 29 +- .../golang.org/x/sys/unix/zsyscall_linux.go | 108 + .../x/sys/unix/zsyscall_linux_386.go | 2 +- .../x/sys/unix/zsyscall_linux_amd64.go | 2 +- .../x/sys/unix/zsyscall_linux_arm.go | 2 +- .../x/sys/unix/zsyscall_linux_arm64.go | 4 +- .../x/sys/unix/zsyscall_linux_mips.go | 2 +- .../x/sys/unix/zsyscall_linux_mips64.go | 2 +- .../x/sys/unix/zsyscall_linux_mips64le.go | 2 +- .../x/sys/unix/zsyscall_linux_mipsle.go | 2 +- .../x/sys/unix/zsyscall_linux_ppc64.go | 2 +- .../x/sys/unix/zsyscall_linux_ppc64le.go | 2 +- .../x/sys/unix/zsyscall_linux_s390x.go | 2 +- .../x/sys/unix/zsyscall_linux_sparc64.go | 2 +- ...m64.1_11.go => zsyscall_openbsd_mips64.go} | 514 +- .../x/sys/unix/zsysctl_openbsd_386.go | 3 +- .../x/sys/unix/zsysctl_openbsd_amd64.go | 1 + .../x/sys/unix/zsysctl_openbsd_arm.go | 1 + .../x/sys/unix/zsysctl_openbsd_mips64.go | 279 + .../x/sys/unix/zsysnum_darwin_386.go | 1 + .../x/sys/unix/zsysnum_darwin_amd64.go | 1 + .../x/sys/unix/zsysnum_darwin_arm.go | 1 + .../x/sys/unix/zsysnum_darwin_arm64.go | 1 + .../x/sys/unix/zsysnum_dragonfly_amd64.go | 255 +- .../x/sys/unix/zsysnum_linux_386.go | 4 + .../x/sys/unix/zsysnum_linux_amd64.go | 4 + .../x/sys/unix/zsysnum_linux_arm.go | 4 + .../x/sys/unix/zsysnum_linux_arm64.go | 4 + .../x/sys/unix/zsysnum_linux_mips.go | 4 + .../x/sys/unix/zsysnum_linux_mips64.go | 4 + .../x/sys/unix/zsysnum_linux_mips64le.go | 4 + .../x/sys/unix/zsysnum_linux_mipsle.go | 4 + .../x/sys/unix/zsysnum_linux_ppc64.go | 4 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 4 + .../x/sys/unix/zsysnum_linux_riscv64.go | 4 + .../x/sys/unix/zsysnum_linux_s390x.go | 4 + .../x/sys/unix/zsysnum_linux_sparc64.go | 4 + .../x/sys/unix/zsysnum_openbsd_mips64.go | 220 + .../x/sys/unix/ztypes_darwin_386.go | 33 +- .../x/sys/unix/ztypes_darwin_amd64.go | 44 +- .../x/sys/unix/ztypes_darwin_arm.go | 40 +- .../x/sys/unix/ztypes_darwin_arm64.go | 44 +- .../x/sys/unix/ztypes_dragonfly_amd64.go | 46 +- .../x/sys/unix/ztypes_freebsd_arm.go | 12 +- vendor/golang.org/x/sys/unix/ztypes_linux.go | 1588 +++- .../golang.org/x/sys/unix/ztypes_linux_386.go | 21 + .../x/sys/unix/ztypes_linux_amd64.go | 24 + .../golang.org/x/sys/unix/ztypes_linux_arm.go | 24 + .../x/sys/unix/ztypes_linux_arm64.go | 24 + .../x/sys/unix/ztypes_linux_mips.go | 24 + .../x/sys/unix/ztypes_linux_mips64.go | 24 + .../x/sys/unix/ztypes_linux_mips64le.go | 24 + .../x/sys/unix/ztypes_linux_mipsle.go | 24 + .../x/sys/unix/ztypes_linux_ppc64.go | 24 + .../x/sys/unix/ztypes_linux_ppc64le.go | 24 + .../x/sys/unix/ztypes_linux_riscv64.go | 24 + .../x/sys/unix/ztypes_linux_s390x.go | 24 + .../x/sys/unix/ztypes_linux_sparc64.go | 24 + .../x/sys/unix/ztypes_openbsd_mips64.go | 565 ++ .../x/sys/unix/ztypes_solaris_amd64.go | 31 +- .../x/text/encoding/unicode/unicode.go | 94 +- .../text/internal/language/compact/tables.go | 36 +- .../x/text/internal/language/tables.go | 4089 ++++----- vendor/golang.org/x/text/language/tables.go | 78 +- .../golang.org/x/text/transform/transform.go | 6 +- vendor/golang.org/x/text/unicode/bidi/core.go | 8 +- .../x/text/unicode/bidi/tables11.0.0.go | 2 +- .../x/text/unicode/bidi/tables12.0.0.go | 1923 ++++ .../x/text/unicode/bidi/tables13.0.0.go | 1955 +++++ .../x/text/unicode/norm/tables11.0.0.go | 2 +- .../x/text/unicode/norm/tables12.0.0.go | 7710 ++++++++++++++++ .../x/text/unicode/norm/tables13.0.0.go | 7760 +++++++++++++++++ .../x/tools/cmd/goimports/goimports.go | 19 +- .../x/tools/go/analysis/analysis.go | 221 - .../x/tools/go/analysis/diagnostic.go | 61 - vendor/golang.org/x/tools/go/analysis/doc.go | 301 - .../go/analysis/passes/inspect/inspect.go | 49 - .../x/tools/go/analysis/validate.go | 97 - .../x/tools/go/ast/inspector/inspector.go | 182 - .../x/tools/go/ast/inspector/typeof.go | 216 - .../x/tools/go/buildutil/allpackages.go | 198 - .../x/tools/go/buildutil/fakecontext.go | 109 - .../x/tools/go/buildutil/overlay.go | 103 - .../golang.org/x/tools/go/buildutil/tags.go | 75 - .../golang.org/x/tools/go/buildutil/util.go | 212 - .../golang.org/x/tools/go/internal/cgo/cgo.go | 220 - .../x/tools/go/internal/cgo/cgo_pkgconfig.go | 39 - .../go/internal/gcimporter/gcimporter.go | 2 +- .../tools/go/internal/packagesdriver/sizes.go | 118 - vendor/golang.org/x/tools/go/loader/doc.go | 204 - vendor/golang.org/x/tools/go/loader/loader.go | 1086 --- vendor/golang.org/x/tools/go/loader/util.go | 124 - vendor/golang.org/x/tools/go/packages/doc.go | 221 - .../x/tools/go/packages/external.go | 101 - .../golang.org/x/tools/go/packages/golist.go | 876 -- .../x/tools/go/packages/golist_overlay.go | 376 - .../x/tools/go/packages/loadmode_string.go | 57 - .../x/tools/go/packages/packages.go | 1146 --- .../golang.org/x/tools/go/packages/visit.go | 55 - .../x/tools/go/types/objectpath/objectpath.go | 523 -- .../x/tools/go/types/typeutil/callee.go | 46 - .../x/tools/go/types/typeutil/imports.go | 31 - .../x/tools/go/types/typeutil/map.go | 313 - .../tools/go/types/typeutil/methodsetcache.go | 72 - .../x/tools/go/types/typeutil/ui.go | 52 - .../x/tools/internal/event/core/event.go | 85 + .../x/tools/internal/event/core/export.go | 70 + .../x/tools/internal/event/core/fast.go | 77 + .../x/tools/internal/event/doc.go} | 9 +- .../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 | 213 + .../x/tools/internal/gocommand/invoke.go | 199 +- .../x/tools/internal/gocommand/vendor.go | 102 + .../x/tools/internal/gocommand/version.go | 40 + .../x/tools/internal/gopathwalk/walk.go | 11 - .../x/tools/internal/imports/fix.go | 320 +- .../x/tools/internal/imports/imports.go | 88 +- .../x/tools/internal/imports/mod.go | 158 +- .../x/tools/internal/imports/sortimports.go | 20 +- .../x/tools/internal/imports/zstdlib.go | 139 + .../internal/packagesinternal/packages.go | 27 - .../api/bigquery/v2/bigquery-api.json | 1283 ++- .../api/bigquery/v2/bigquery-gen.go | 2724 +++++- .../api/googleapi/googleapi.go | 12 + .../google.golang.org/api/internal/creds.go | 47 +- .../api/internal/gensupport/media.go | 4 +- .../api/internal/gensupport/resumable.go | 47 +- .../internal/gensupport/retryable_linux.go | 15 + .../api/internal/gensupport/send.go | 85 + .../api/internal/impersonate/impersonate.go | 128 + .../api/internal/service-account.json | 12 - .../api/internal/settings.go | 60 +- .../option/internaloption/internaloption.go | 72 +- vendor/google.golang.org/api/option/option.go | 55 + .../api/support/bundler/bundler.go | 13 +- .../api/transport/cert/default_cert.go | 41 +- .../api/transport/grpc/dial.go | 41 +- .../api/transport/grpc/pool.go | 2 +- .../transport/http/default_transport_go113.go | 20 + .../http/default_transport_not_go113.go | 15 + .../api/transport/http/dial.go | 150 +- .../api/transport/internal/dca/dca.go | 145 + .../google.golang.org/appengine/.travis.yml | 2 - .../appengine/internal/api.go | 7 +- .../api/annotations/annotations.pb.go | 147 +- .../googleapis/api/annotations/client.pb.go | 258 +- .../api/annotations/field_behavior.pb.go | 238 +- .../googleapis/api/annotations/http.pb.go | 556 +- .../googleapis/api/annotations/resource.pb.go | 618 +- .../secretmanager/v1beta1/resources.pb.go | 826 ++ .../cloud/secretmanager/v1beta1/service.pb.go | 2244 +++++ .../devtools/cloudprofiler/v2/profiler.pb.go | 976 +++ .../googleapis/firestore/v1/common.pb.go | 666 +- .../googleapis/firestore/v1/document.pb.go | 775 +- .../googleapis/firestore/v1/firestore.pb.go | 4385 +++++++--- .../googleapis/firestore/v1/query.pb.go | 1624 ++-- .../googleapis/firestore/v1/write.pb.go | 1389 +-- .../googleapis/iam/v1/iam_policy.pb.go | 545 +- .../genproto/googleapis/iam/v1/options.pb.go | 204 +- .../genproto/googleapis/iam/v1/policy.pb.go | 743 +- .../googleapis/pubsub/v1/pubsub.pb.go | 5330 +++++++---- .../genproto/googleapis/rpc/code/code.pb.go | 245 +- .../rpc/errdetails/error_details.pb.go | 1283 +++ .../googleapis/rpc/status/status.pb.go | 217 +- .../genproto/googleapis/type/expr/expr.pb.go | 264 +- .../googleapis/type/latlng/latlng.pb.go | 204 +- .../protobuf/field_mask/field_mask.go | 23 + .../protobuf/field_mask/field_mask.pb.go | 284 - vendor/google.golang.org/grpc/.travis.yml | 18 +- vendor/google.golang.org/grpc/CONTRIBUTING.md | 1 - vendor/google.golang.org/grpc/Makefile | 1 + vendor/google.golang.org/grpc/README.md | 126 +- .../grpc/attributes/attributes.go | 11 +- vendor/google.golang.org/grpc/backoff.go | 5 +- vendor/google.golang.org/grpc/balancer.go | 391 - .../grpc/balancer/balancer.go | 166 +- .../grpc/balancer/base/balancer.go | 137 +- .../grpc/balancer/base/base.go | 28 +- .../grpclb/grpc_lb_v1/load_balancer.pb.go | 1200 +-- .../grpc_lb_v1/load_balancer_grpc.pb.go | 129 + .../grpc/balancer/grpclb/grpclb.go | 68 +- .../balancer/grpclb/grpclb_remote_balancer.go | 33 +- .../grpc/balancer/grpclb/regenerate.sh | 33 - .../grpc/balancer/grpclb/state/state.go | 51 + .../grpc/balancer/roundrobin/roundrobin.go | 10 +- .../grpc/balancer_conn_wrappers.go | 39 +- .../grpc/balancer_v1_wrapper.go | 334 - .../grpc_binarylog_v1/binarylog.pb.go | 1369 +-- vendor/google.golang.org/grpc/clientconn.go | 223 +- vendor/google.golang.org/grpc/codes/codes.go | 46 + .../grpc/connectivity/connectivity.go | 16 +- .../grpc/credentials/alts/alts.go | 5 +- .../alts/internal/authinfo/authinfo.go | 6 + .../grpc/credentials/alts/internal/common.go | 2 - .../credentials/alts/internal/conn/record.go | 12 +- .../internal/handshaker/service/service.go | 13 +- .../internal/proto/grpc_gcp/altscontext.pb.go | 292 +- .../internal/proto/grpc_gcp/handshaker.pb.go | 1629 ++-- .../proto/grpc_gcp/handshaker_grpc.pb.go | 141 + .../grpc_gcp/transport_security_common.pb.go | 370 +- .../credentials/alts/internal/regenerate.sh | 35 - .../grpc/credentials/alts/utils.go | 7 +- .../grpc/credentials/credentials.go | 69 +- .../grpc/credentials/google/google.go | 8 +- .../grpc/credentials/oauth/oauth.go | 52 +- .../google.golang.org/grpc/credentials/tls.go | 86 +- vendor/google.golang.org/grpc/dialoptions.go | 117 +- vendor/google.golang.org/grpc/doc.go | 2 + .../grpc/encoding/encoding.go | 12 +- .../grpc/encoding/proto/proto.go | 66 +- vendor/google.golang.org/grpc/go.mod | 13 +- vendor/google.golang.org/grpc/go.sum | 55 +- .../grpc/grpclog/component.go | 117 + .../grpc/grpclog/loggerv2.go | 9 +- vendor/google.golang.org/grpc/install_gae.sh | 2 +- vendor/google.golang.org/grpc/interceptor.go | 36 +- .../grpc/internal/binarylog/binarylog.go | 7 +- .../grpc/internal/binarylog/env_config.go | 4 +- .../grpc/internal/binarylog/method_logger.go | 15 +- .../grpc/internal/binarylog/regenerate.sh | 33 - .../grpc/internal/binarylog/sink.go | 71 +- .../grpc/internal/binarylog/util.go | 41 - .../grpc/internal/channelz/funcs.go | 20 +- .../grpc/internal/channelz/logging.go | 56 +- .../grpc/internal/channelz/types.go | 33 +- .../grpc/internal/channelz/types_nonlinux.go | 4 +- .../grpc/internal/credentials/spiffe.go | 77 + .../spiffe_appengine.go} | 35 +- .../credentials}/syscallconn.go | 3 +- .../credentials}/syscallconn_appengine.go | 2 +- .../grpc/internal/credentials/util.go | 50 + .../grpc/internal/envconfig/envconfig.go | 2 +- .../grpc/internal/grpclog/grpclog.go | 18 +- .../grpc/internal/grpclog/prefixLogger.go | 32 +- .../grpc/internal/grpcutil/encode_duration.go | 63 + .../grpc/internal/grpcutil/metadata.go | 40 + .../grpc/internal/grpcutil/method.go | 84 + .../grpc/internal/grpcutil/target.go | 17 +- .../grpc/internal/internal.go | 23 +- .../grpc/internal/resolver/config_selector.go | 93 + .../internal/resolver/dns/dns_resolver.go | 21 +- .../grpc/internal/resolver/unix/unix.go | 49 + .../internal/serviceconfig/serviceconfig.go | 162 + .../grpc/internal/status/status.go | 162 + .../grpc/internal/syscall/syscall_linux.go | 6 +- .../grpc/internal/syscall/syscall_nonlinux.go | 5 +- .../grpc/internal/transport/controlbuf.go | 76 +- .../grpc/internal/transport/handler_server.go | 78 +- .../grpc/internal/transport/http2_client.go | 125 +- .../grpc/internal/transport/http2_server.go | 81 +- .../grpc/internal/transport/http_util.go | 107 +- .../transport/networktype/networktype.go | 46 + .../grpc/{ => internal/transport}/proxy.go | 52 +- .../grpc/internal/transport/transport.go | 16 +- .../grpc/naming/dns_resolver.go | 293 - .../google.golang.org/grpc/naming/naming.go | 68 - .../google.golang.org/grpc/picker_wrapper.go | 76 +- vendor/google.golang.org/grpc/pickfirst.go | 51 +- vendor/google.golang.org/grpc/preloader.go | 5 +- vendor/google.golang.org/grpc/regenerate.sh | 139 + .../grpc/resolver/resolver.go | 11 +- .../grpc/resolver_conn_wrapper.go | 16 +- vendor/google.golang.org/grpc/rpc_util.go | 168 +- vendor/google.golang.org/grpc/server.go | 300 +- .../google.golang.org/grpc/service_config.go | 206 +- .../grpc/serviceconfig/serviceconfig.go | 5 +- vendor/google.golang.org/grpc/stats/stats.go | 21 +- .../google.golang.org/grpc/status/status.go | 119 +- vendor/google.golang.org/grpc/stream.go | 105 +- vendor/google.golang.org/grpc/tap/tap.go | 7 +- vendor/google.golang.org/grpc/version.go | 2 +- vendor/google.golang.org/grpc/vet.sh | 130 +- .../cmd/protoc-gen-go/internal_gengo/main.go | 110 +- .../protoc-gen-go/internal_gengo/reflect.go | 6 +- .../internal_gengo/well_known_types.go | 1077 +++ .../protobuf/compiler/protogen/protogen.go | 58 +- .../protobuf/encoding/protojson/decode.go | 691 ++ .../protobuf/encoding/protojson/doc.go | 11 + .../protobuf/encoding/protojson/encode.go | 402 + .../encoding/protojson/well_known_types.go | 885 ++ .../protobuf/encoding/prototext/decode.go | 79 +- .../protobuf/encoding/prototext/encode.go | 41 +- .../protobuf/internal/descfmt/stringer.go | 2 +- .../protobuf/internal/encoding/json/decode.go | 340 + .../internal/encoding/json/decode_number.go | 254 + .../internal/encoding/json/decode_string.go | 91 + .../internal/encoding/json/decode_token.go | 193 + .../protobuf/internal/encoding/json/encode.go | 276 + .../protobuf/internal/fieldnum/any_gen.go | 13 - .../protobuf/internal/fieldnum/api_gen.go | 35 - .../internal/fieldnum/descriptor_gen.go | 239 - .../protobuf/internal/fieldnum/doc.go | 7 - .../internal/fieldnum/duration_gen.go | 13 - .../internal/fieldnum/field_mask_gen.go | 12 - .../internal/fieldnum/source_context_gen.go | 12 - .../protobuf/internal/fieldnum/struct_gen.go | 33 - .../internal/fieldnum/timestamp_gen.go | 13 - .../protobuf/internal/fieldnum/type_gen.go | 53 - .../internal/fieldnum/wrappers_gen.go | 52 - .../protobuf/internal/fieldsort/fieldsort.go | 4 +- .../protobuf/internal/filedesc/build.go | 16 +- .../protobuf/internal/filedesc/desc.go | 74 +- .../protobuf/internal/filedesc/desc_init.go | 62 +- .../protobuf/internal/filedesc/desc_lazy.go | 129 +- .../protobuf/internal/filedesc/desc_list.go | 6 +- .../protobuf/internal/genid/any_gen.go | 34 + .../protobuf/internal/genid/api_gen.go | 106 + .../protobuf/internal/genid/descriptor_gen.go | 829 ++ .../protobuf/internal/genid/doc.go | 11 + .../protobuf/internal/genid/duration_gen.go | 34 + .../protobuf/internal/genid/empty_gen.go | 19 + .../protobuf/internal/genid/field_mask_gen.go | 31 + .../protobuf/internal/genid/goname.go | 25 + .../protobuf/internal/genid/map_entry.go | 16 + .../internal/genid/source_context_gen.go | 31 + .../protobuf/internal/genid/struct_gen.go | 116 + .../protobuf/internal/genid/timestamp_gen.go | 34 + .../protobuf/internal/genid/type_gen.go | 184 + .../protobuf/internal/genid/wrappers.go | 13 + .../protobuf/internal/genid/wrappers_gen.go | 175 + .../protobuf/internal/genname/name.go | 25 - .../protobuf/internal/impl/api_export.go | 7 + .../protobuf/internal/impl/codec_gen.go | 40 + .../protobuf/internal/impl/codec_map.go | 5 +- .../protobuf/internal/impl/codec_message.go | 20 +- .../protobuf/internal/impl/codec_tables.go | 3 + .../protobuf/internal/impl/convert.go | 22 +- .../protobuf/internal/impl/convert_list.go | 10 +- .../protobuf/internal/impl/convert_map.go | 6 +- .../protobuf/internal/impl/legacy_export.go | 12 - .../internal/impl/legacy_extension.go | 2 + .../protobuf/internal/impl/message.go | 13 +- .../protobuf/internal/impl/message_reflect.go | 40 +- .../internal/impl/message_reflect_field.go | 64 +- .../internal/impl/message_reflect_gen.go | 4 +- .../protobuf/internal/impl/pointer_unsafe.go | 6 +- .../protobuf/internal/impl/validate.go | 7 +- .../protobuf/internal/impl/weak.go | 64 +- .../protobuf/internal/version/version.go | 2 +- .../protobuf/proto/checkinit.go | 6 + .../protobuf/proto/decode.go | 12 +- .../protobuf/proto/encode.go | 40 +- .../protobuf/proto/extension.go | 82 +- .../google.golang.org/protobuf/proto/merge.go | 10 +- .../protobuf/proto/messageset.go | 16 +- .../google.golang.org/protobuf/proto/reset.go | 8 +- .../google.golang.org/protobuf/proto/size.go | 38 +- .../protobuf/proto/size_gen.go | 6 +- .../protobuf/reflect/protodesc/desc_init.go | 1 + .../reflect/protodesc/desc_validate.go | 26 +- .../protobuf/reflect/protodesc/proto.go | 3 + .../protobuf/reflect/protoreflect/proto.go | 55 +- .../protobuf/reflect/protoreflect/type.go | 13 + .../protobuf/reflect/protoreflect/value.go | 4 +- .../reflect/protoreflect/value_union.go | 80 +- .../reflect/protoregistry/registry.go | 32 + .../types/descriptorpb/descriptor.pb.go | 712 +- .../protobuf/types/known/anypb/any.pb.go | 207 + .../types/known/durationpb/duration.pb.go | 130 + .../types/known/fieldmaskpb/field_mask.pb.go | 588 ++ .../types/known/structpb/struct.pb.go | 305 + .../types/known/timestamppb/timestamp.pb.go | 110 + .../types/known/wrapperspb/wrappers.pb.go | 45 + .../protobuf/types/pluginpb/plugin.pb.go | 137 +- vendor/gopkg.in/yaml.v3/.travis.yml | 17 + vendor/gopkg.in/yaml.v3/LICENSE | 50 + vendor/gopkg.in/yaml.v3/NOTICE | 13 + vendor/gopkg.in/yaml.v3/README.md | 150 + vendor/gopkg.in/yaml.v3/apic.go | 747 ++ vendor/gopkg.in/yaml.v3/decode.go | 948 ++ vendor/gopkg.in/yaml.v3/emitterc.go | 2022 +++++ vendor/gopkg.in/yaml.v3/encode.go | 572 ++ vendor/gopkg.in/yaml.v3/go.mod | 5 + vendor/gopkg.in/yaml.v3/parserc.go | 1249 +++ vendor/gopkg.in/yaml.v3/readerc.go | 434 + vendor/gopkg.in/yaml.v3/resolve.go | 326 + vendor/gopkg.in/yaml.v3/scannerc.go | 3028 +++++++ vendor/gopkg.in/yaml.v3/sorter.go | 134 + vendor/gopkg.in/yaml.v3/writerc.go | 48 + vendor/gopkg.in/yaml.v3/yaml.go | 693 ++ vendor/gopkg.in/yaml.v3/yamlh.go | 807 ++ vendor/gopkg.in/yaml.v3/yamlprivateh.go | 198 + vendor/honnef.co/go/tools/LICENSE | 20 - vendor/honnef.co/go/tools/LICENSE-THIRD-PARTY | 284 - vendor/honnef.co/go/tools/arg/arg.go | 48 - .../go/tools/cmd/staticcheck/README.md | 15 - .../go/tools/cmd/staticcheck/staticcheck.go | 44 - vendor/honnef.co/go/tools/code/code.go | 481 - vendor/honnef.co/go/tools/config/config.go | 245 - vendor/honnef.co/go/tools/config/example.conf | 10 - .../honnef.co/go/tools/deprecated/stdlib.go | 119 - vendor/honnef.co/go/tools/edit/edit.go | 67 - vendor/honnef.co/go/tools/facts/deprecated.go | 144 - vendor/honnef.co/go/tools/facts/generated.go | 90 - vendor/honnef.co/go/tools/facts/purity.go | 177 - vendor/honnef.co/go/tools/facts/token.go | 24 - vendor/honnef.co/go/tools/functions/loops.go | 54 - vendor/honnef.co/go/tools/functions/stub.go | 32 - .../go/tools/functions/terminates.go | 70 - .../go/tools/go/types/typeutil/callee.go | 46 - .../go/tools/go/types/typeutil/identical.go | 75 - .../go/tools/go/types/typeutil/imports.go | 31 - .../go/tools/go/types/typeutil/map.go | 319 - .../tools/go/types/typeutil/methodsetcache.go | 72 - .../go/tools/go/types/typeutil/ui.go | 52 - .../go/tools/internal/cache/cache.go | 496 -- .../go/tools/internal/cache/default.go | 85 - .../honnef.co/go/tools/internal/cache/hash.go | 176 - .../tools/internal/passes/buildir/buildir.go | 113 - .../go/tools/internal/renameio/renameio.go | 93 - .../go/tools/internal/robustio/robustio.go | 53 - .../internal/robustio/robustio_darwin.go | 29 - .../tools/internal/robustio/robustio_flaky.go | 93 - .../tools/internal/robustio/robustio_other.go | 28 - .../internal/robustio/robustio_windows.go | 33 - .../go/tools/internal/sharedcheck/lint.go | 71 - vendor/honnef.co/go/tools/ir/LICENSE | 28 - vendor/honnef.co/go/tools/ir/blockopt.go | 209 - vendor/honnef.co/go/tools/ir/builder.go | 2474 ------ vendor/honnef.co/go/tools/ir/const.go | 153 - vendor/honnef.co/go/tools/ir/create.go | 275 - vendor/honnef.co/go/tools/ir/doc.go | 129 - vendor/honnef.co/go/tools/ir/dom.go | 461 - vendor/honnef.co/go/tools/ir/emit.go | 450 - vendor/honnef.co/go/tools/ir/exits.go | 271 - vendor/honnef.co/go/tools/ir/func.go | 961 -- vendor/honnef.co/go/tools/ir/html.go | 1124 --- vendor/honnef.co/go/tools/ir/identical.go | 7 - vendor/honnef.co/go/tools/ir/identical_17.go | 7 - vendor/honnef.co/go/tools/ir/irutil/load.go | 183 - vendor/honnef.co/go/tools/ir/irutil/switch.go | 264 - vendor/honnef.co/go/tools/ir/irutil/util.go | 70 - vendor/honnef.co/go/tools/ir/irutil/visit.go | 79 - vendor/honnef.co/go/tools/ir/lift.go | 1063 --- vendor/honnef.co/go/tools/ir/lvalue.go | 116 - vendor/honnef.co/go/tools/ir/methods.go | 239 - vendor/honnef.co/go/tools/ir/mode.go | 98 - vendor/honnef.co/go/tools/ir/print.go | 472 - vendor/honnef.co/go/tools/ir/sanity.go | 555 -- vendor/honnef.co/go/tools/ir/source.go | 270 - vendor/honnef.co/go/tools/ir/ssa.go | 1856 ---- vendor/honnef.co/go/tools/ir/staticcheck.conf | 3 - vendor/honnef.co/go/tools/ir/util.go | 89 - vendor/honnef.co/go/tools/ir/wrappers.go | 292 - vendor/honnef.co/go/tools/ir/write.go | 5 - vendor/honnef.co/go/tools/lint/lint.go | 539 -- .../go/tools/lint/lintdsl/lintdsl.go | 58 - .../go/tools/lint/lintutil/format/format.go | 162 - .../honnef.co/go/tools/lint/lintutil/stats.go | 7 - .../go/tools/lint/lintutil/stats_bsd.go | 10 - .../go/tools/lint/lintutil/stats_posix.go | 10 - .../honnef.co/go/tools/lint/lintutil/util.go | 444 - vendor/honnef.co/go/tools/lint/runner.go | 1114 --- vendor/honnef.co/go/tools/lint/stats.go | 38 - vendor/honnef.co/go/tools/loader/loader.go | 210 - vendor/honnef.co/go/tools/pattern/convert.go | 242 - vendor/honnef.co/go/tools/pattern/doc.go | 273 - vendor/honnef.co/go/tools/pattern/fuzz.go | 50 - vendor/honnef.co/go/tools/pattern/lexer.go | 221 - vendor/honnef.co/go/tools/pattern/match.go | 513 -- vendor/honnef.co/go/tools/pattern/parser.go | 455 - vendor/honnef.co/go/tools/pattern/pattern.go | 497 -- vendor/honnef.co/go/tools/printf/fuzz.go | 11 - vendor/honnef.co/go/tools/printf/printf.go | 197 - vendor/honnef.co/go/tools/report/report.go | 184 - vendor/honnef.co/go/tools/simple/analysis.go | 148 - vendor/honnef.co/go/tools/simple/doc.go | 485 -- vendor/honnef.co/go/tools/simple/lint.go | 1868 ---- .../go/tools/staticcheck/analysis.go | 267 - .../go/tools/staticcheck/buildtag.go | 21 - vendor/honnef.co/go/tools/staticcheck/doc.go | 880 -- vendor/honnef.co/go/tools/staticcheck/lint.go | 3819 -------- .../honnef.co/go/tools/staticcheck/rules.go | 315 - .../go/tools/staticcheck/structtag.go | 58 - .../honnef.co/go/tools/stylecheck/analysis.go | 81 - vendor/honnef.co/go/tools/stylecheck/doc.go | 231 - vendor/honnef.co/go/tools/stylecheck/lint.go | 914 -- vendor/honnef.co/go/tools/stylecheck/names.go | 276 - vendor/honnef.co/go/tools/unused/edge.go | 54 - .../go/tools/unused/edgekind_string.go | 109 - .../honnef.co/go/tools/unused/implements.go | 82 - vendor/honnef.co/go/tools/unused/unused.go | 1978 ----- .../honnef.co/go/tools/version/buildinfo.go | 46 - .../go/tools/version/buildinfo111.go | 6 - vendor/honnef.co/go/tools/version/version.go | 42 - vendor/modules.txt | 171 +- 1091 files changed, 134499 insertions(+), 72689 deletions(-) create mode 100644 cmd/articles/main.go create mode 100644 cmd/search/main.go create mode 100644 handler/handle_search.go create mode 100644 readability-server/package-lock.json create mode 100644 static/images/preview.png create mode 100644 tmpl/meta.html create mode 100644 tmpl/search.html create mode 100644 vendor/cloud.google.com/go/bigquery/iam.go create mode 100644 vendor/cloud.google.com/go/firestore/apiv1/info.go create mode 100644 vendor/cloud.google.com/go/internal/uid/uid.go create mode 100644 vendor/cloud.google.com/go/profiler/heap.go create mode 100644 vendor/cloud.google.com/go/profiler/mutex.go create mode 100644 vendor/cloud.google.com/go/profiler/profiler.go create mode 100644 vendor/cloud.google.com/go/pubsub/apiv1/info.go create mode 100644 vendor/cloud.google.com/go/pubsub/internal/scheduler/publish_scheduler.go create mode 100644 vendor/cloud.google.com/go/pubsub/internal/scheduler/receive_scheduler.go create mode 100644 vendor/cloud.google.com/go/secretmanager/apiv1beta1/doc.go create mode 100644 vendor/cloud.google.com/go/secretmanager/apiv1beta1/iam.go create mode 100644 vendor/cloud.google.com/go/secretmanager/apiv1beta1/secret_manager_client.go create mode 100644 vendor/cloud.google.com/go/testing.md delete mode 100644 vendor/github.com/BurntSushi/toml/.gitignore delete mode 100644 vendor/github.com/BurntSushi/toml/.travis.yml delete mode 100644 vendor/github.com/BurntSushi/toml/COMPATIBLE delete mode 100644 vendor/github.com/BurntSushi/toml/Makefile delete mode 100644 vendor/github.com/BurntSushi/toml/README.md delete mode 100644 vendor/github.com/BurntSushi/toml/decode.go delete mode 100644 vendor/github.com/BurntSushi/toml/decode_meta.go delete mode 100644 vendor/github.com/BurntSushi/toml/doc.go delete mode 100644 vendor/github.com/BurntSushi/toml/encode.go delete mode 100644 vendor/github.com/BurntSushi/toml/encoding_types.go delete mode 100644 vendor/github.com/BurntSushi/toml/encoding_types_1.1.go delete mode 100644 vendor/github.com/BurntSushi/toml/lex.go delete mode 100644 vendor/github.com/BurntSushi/toml/parse.go delete mode 100644 vendor/github.com/BurntSushi/toml/session.vim delete mode 100644 vendor/github.com/BurntSushi/toml/type_check.go delete mode 100644 vendor/github.com/BurntSushi/toml/type_fields.go create mode 100644 vendor/github.com/andybalholm/cascadia/serialize.go create mode 100644 vendor/github.com/araddon/dateparse/go.mod create mode 100644 vendor/github.com/araddon/dateparse/go.sum create mode 100644 vendor/github.com/davecgh/go-spew/LICENSE create mode 100644 vendor/github.com/davecgh/go-spew/spew/bypass.go create mode 100644 vendor/github.com/davecgh/go-spew/spew/bypasssafe.go create mode 100644 vendor/github.com/davecgh/go-spew/spew/common.go create mode 100644 vendor/github.com/davecgh/go-spew/spew/config.go create mode 100644 vendor/github.com/davecgh/go-spew/spew/doc.go create mode 100644 vendor/github.com/davecgh/go-spew/spew/dump.go create mode 100644 vendor/github.com/davecgh/go-spew/spew/format.go create mode 100644 vendor/github.com/davecgh/go-spew/spew/spew.go create mode 100644 vendor/github.com/felixge/fgprof/LICENSE.txt create mode 100644 vendor/github.com/felixge/fgprof/README.md create mode 100644 vendor/github.com/felixge/fgprof/fgprof.go create mode 100644 vendor/github.com/felixge/fgprof/format.go create mode 100644 vendor/github.com/felixge/fgprof/go.mod create mode 100644 vendor/github.com/felixge/fgprof/go.sum create mode 100644 vendor/github.com/felixge/fgprof/handler.go create mode 100644 vendor/github.com/felixge/fgprof/pprof.go delete mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go delete mode 100644 vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go delete mode 100644 vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go create mode 100644 vendor/github.com/google/go-cmp/cmp/internal/value/name.go create mode 100644 vendor/github.com/google/go-cmp/cmp/report_references.go create mode 100644 vendor/github.com/google/pprof/AUTHORS create mode 100644 vendor/github.com/google/pprof/CONTRIBUTORS create mode 100644 vendor/github.com/google/pprof/LICENSE create mode 100644 vendor/github.com/google/pprof/profile/encode.go create mode 100644 vendor/github.com/google/pprof/profile/filter.go create mode 100644 vendor/github.com/google/pprof/profile/index.go create mode 100644 vendor/github.com/google/pprof/profile/legacy_java_profile.go create mode 100644 vendor/github.com/google/pprof/profile/legacy_profile.go create mode 100644 vendor/github.com/google/pprof/profile/merge.go create mode 100644 vendor/github.com/google/pprof/profile/profile.go create mode 100644 vendor/github.com/google/pprof/profile/proto.go create mode 100644 vendor/github.com/google/pprof/profile/prune.go create mode 100644 vendor/github.com/gorilla/mux/AUTHORS rename vendor/{honnef.co/go/tools/lint => github.com/gorilla/mux}/LICENSE (80%) create mode 100644 vendor/github.com/gorilla/mux/README.md create mode 100644 vendor/github.com/gorilla/mux/doc.go create mode 100644 vendor/github.com/gorilla/mux/go.mod create mode 100644 vendor/github.com/gorilla/mux/middleware.go create mode 100644 vendor/github.com/gorilla/mux/mux.go create mode 100644 vendor/github.com/gorilla/mux/regexp.go create mode 100644 vendor/github.com/gorilla/mux/route.go create mode 100644 vendor/github.com/gorilla/mux/test_helpers.go create mode 100644 vendor/github.com/json-iterator/go/.codecov.yml create mode 100644 vendor/github.com/json-iterator/go/.gitignore create mode 100644 vendor/github.com/json-iterator/go/.travis.yml create mode 100644 vendor/github.com/json-iterator/go/Gopkg.lock create mode 100644 vendor/github.com/json-iterator/go/Gopkg.toml rename vendor/github.com/{BurntSushi/toml/COPYING => json-iterator/go/LICENSE} (86%) create mode 100644 vendor/github.com/json-iterator/go/README.md create mode 100644 vendor/github.com/json-iterator/go/adapter.go create mode 100644 vendor/github.com/json-iterator/go/any.go create mode 100644 vendor/github.com/json-iterator/go/any_array.go create mode 100644 vendor/github.com/json-iterator/go/any_bool.go create mode 100644 vendor/github.com/json-iterator/go/any_float.go create mode 100644 vendor/github.com/json-iterator/go/any_int32.go create mode 100644 vendor/github.com/json-iterator/go/any_int64.go create mode 100644 vendor/github.com/json-iterator/go/any_invalid.go create mode 100644 vendor/github.com/json-iterator/go/any_nil.go create mode 100644 vendor/github.com/json-iterator/go/any_number.go create mode 100644 vendor/github.com/json-iterator/go/any_object.go create mode 100644 vendor/github.com/json-iterator/go/any_str.go create mode 100644 vendor/github.com/json-iterator/go/any_uint32.go create mode 100644 vendor/github.com/json-iterator/go/any_uint64.go create mode 100644 vendor/github.com/json-iterator/go/build.sh create mode 100644 vendor/github.com/json-iterator/go/config.go create mode 100644 vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md create mode 100644 vendor/github.com/json-iterator/go/go.mod create mode 100644 vendor/github.com/json-iterator/go/go.sum create mode 100644 vendor/github.com/json-iterator/go/iter.go create mode 100644 vendor/github.com/json-iterator/go/iter_array.go create mode 100644 vendor/github.com/json-iterator/go/iter_float.go create mode 100644 vendor/github.com/json-iterator/go/iter_int.go create mode 100644 vendor/github.com/json-iterator/go/iter_object.go create mode 100644 vendor/github.com/json-iterator/go/iter_skip.go create mode 100644 vendor/github.com/json-iterator/go/iter_skip_sloppy.go create mode 100644 vendor/github.com/json-iterator/go/iter_skip_strict.go create mode 100644 vendor/github.com/json-iterator/go/iter_str.go create mode 100644 vendor/github.com/json-iterator/go/jsoniter.go create mode 100644 vendor/github.com/json-iterator/go/pool.go create mode 100644 vendor/github.com/json-iterator/go/reflect.go create mode 100644 vendor/github.com/json-iterator/go/reflect_array.go create mode 100644 vendor/github.com/json-iterator/go/reflect_dynamic.go create mode 100644 vendor/github.com/json-iterator/go/reflect_extension.go create mode 100644 vendor/github.com/json-iterator/go/reflect_json_number.go create mode 100644 vendor/github.com/json-iterator/go/reflect_json_raw_message.go create mode 100644 vendor/github.com/json-iterator/go/reflect_map.go create mode 100644 vendor/github.com/json-iterator/go/reflect_marshaler.go create mode 100644 vendor/github.com/json-iterator/go/reflect_native.go create mode 100644 vendor/github.com/json-iterator/go/reflect_optional.go create mode 100644 vendor/github.com/json-iterator/go/reflect_slice.go create mode 100644 vendor/github.com/json-iterator/go/reflect_struct_decoder.go create mode 100644 vendor/github.com/json-iterator/go/reflect_struct_encoder.go create mode 100644 vendor/github.com/json-iterator/go/stream.go create mode 100644 vendor/github.com/json-iterator/go/stream_float.go create mode 100644 vendor/github.com/json-iterator/go/stream_int.go create mode 100644 vendor/github.com/json-iterator/go/stream_str.go create mode 100644 vendor/github.com/json-iterator/go/test.sh rename vendor/github.com/mattn/go-runewidth/{README.mkd => README.md} (82%) create mode 100644 vendor/github.com/mattn/go-runewidth/go.mod create mode 100644 vendor/github.com/mattn/go-runewidth/go.test.sh create mode 100644 vendor/github.com/mattn/go-runewidth/runewidth_appengine.go create mode 100644 vendor/github.com/mattn/go-runewidth/runewidth_table.go create mode 100644 vendor/github.com/mmcdole/gofeed/go.mod create mode 100644 vendor/github.com/mmcdole/gofeed/go.sum create mode 100644 vendor/github.com/mmcdole/gofeed/internal/shared/xmlbase.go create mode 100644 vendor/github.com/mmcdole/gofeed/json/feed.go create mode 100644 vendor/github.com/mmcdole/gofeed/json/parser.go create mode 100644 vendor/github.com/modern-go/concurrent/.gitignore create mode 100644 vendor/github.com/modern-go/concurrent/.travis.yml create mode 100644 vendor/github.com/modern-go/concurrent/LICENSE create mode 100644 vendor/github.com/modern-go/concurrent/README.md create mode 100644 vendor/github.com/modern-go/concurrent/executor.go create mode 100644 vendor/github.com/modern-go/concurrent/go_above_19.go create mode 100644 vendor/github.com/modern-go/concurrent/go_below_19.go create mode 100644 vendor/github.com/modern-go/concurrent/log.go create mode 100644 vendor/github.com/modern-go/concurrent/test.sh create mode 100644 vendor/github.com/modern-go/concurrent/unbounded_executor.go create mode 100644 vendor/github.com/modern-go/reflect2/.gitignore create mode 100644 vendor/github.com/modern-go/reflect2/.travis.yml create mode 100644 vendor/github.com/modern-go/reflect2/Gopkg.lock create mode 100644 vendor/github.com/modern-go/reflect2/Gopkg.toml create mode 100644 vendor/github.com/modern-go/reflect2/LICENSE create mode 100644 vendor/github.com/modern-go/reflect2/README.md create mode 100644 vendor/github.com/modern-go/reflect2/go_above_17.go create mode 100644 vendor/github.com/modern-go/reflect2/go_above_19.go create mode 100644 vendor/github.com/modern-go/reflect2/go_below_17.go create mode 100644 vendor/github.com/modern-go/reflect2/go_below_19.go create mode 100644 vendor/github.com/modern-go/reflect2/reflect2.go create mode 100644 vendor/github.com/modern-go/reflect2/reflect2_amd64.s create mode 100644 vendor/github.com/modern-go/reflect2/reflect2_kind.go create mode 100644 vendor/github.com/modern-go/reflect2/relfect2_386.s create mode 100644 vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s create mode 100644 vendor/github.com/modern-go/reflect2/relfect2_arm.s create mode 100644 vendor/github.com/modern-go/reflect2/relfect2_arm64.s create mode 100644 vendor/github.com/modern-go/reflect2/relfect2_mips64x.s create mode 100644 vendor/github.com/modern-go/reflect2/relfect2_mipsx.s create mode 100644 vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s create mode 100644 vendor/github.com/modern-go/reflect2/relfect2_s390x.s create mode 100644 vendor/github.com/modern-go/reflect2/safe_field.go create mode 100644 vendor/github.com/modern-go/reflect2/safe_map.go create mode 100644 vendor/github.com/modern-go/reflect2/safe_slice.go create mode 100644 vendor/github.com/modern-go/reflect2/safe_struct.go create mode 100644 vendor/github.com/modern-go/reflect2/safe_type.go create mode 100644 vendor/github.com/modern-go/reflect2/test.sh create mode 100644 vendor/github.com/modern-go/reflect2/type_map.go create mode 100644 vendor/github.com/modern-go/reflect2/unsafe_array.go create mode 100644 vendor/github.com/modern-go/reflect2/unsafe_eface.go create mode 100644 vendor/github.com/modern-go/reflect2/unsafe_field.go create mode 100644 vendor/github.com/modern-go/reflect2/unsafe_iface.go create mode 100644 vendor/github.com/modern-go/reflect2/unsafe_link.go create mode 100644 vendor/github.com/modern-go/reflect2/unsafe_map.go create mode 100644 vendor/github.com/modern-go/reflect2/unsafe_ptr.go create mode 100644 vendor/github.com/modern-go/reflect2/unsafe_slice.go create mode 100644 vendor/github.com/modern-go/reflect2/unsafe_struct.go create mode 100644 vendor/github.com/modern-go/reflect2/unsafe_type.go create mode 100644 vendor/github.com/monzo/slog/mock.go create mode 100644 vendor/github.com/monzo/slog/multi.go rename vendor/github.com/olekukonko/tablewriter/{LICENCE.md => LICENSE.md} (98%) create mode 100644 vendor/github.com/olekukonko/tablewriter/go.mod create mode 100644 vendor/github.com/olekukonko/tablewriter/go.sum create mode 100644 vendor/github.com/pacedotdev/firesearch-sdk/clients/go/firesearch/LICENSE create mode 100644 vendor/github.com/pacedotdev/firesearch-sdk/clients/go/firesearch/client.go.plush create mode 100644 vendor/github.com/pacedotdev/firesearch-sdk/clients/go/firesearch/doc.go create mode 100644 vendor/github.com/pacedotdev/firesearch-sdk/clients/go/firesearch/firesearch.gen.go create mode 100644 vendor/github.com/pacedotdev/firesearch-sdk/clients/go/firesearch/go.mod create mode 100644 vendor/github.com/pkg/errors/Makefile create mode 100644 vendor/github.com/pkg/errors/go113.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/stretchr/objx/.codeclimate.yml create mode 100644 vendor/github.com/stretchr/objx/.gitignore create mode 100644 vendor/github.com/stretchr/objx/.travis.yml create mode 100644 vendor/github.com/stretchr/objx/LICENSE create mode 100644 vendor/github.com/stretchr/objx/README.md create mode 100644 vendor/github.com/stretchr/objx/Taskfile.yml create mode 100644 vendor/github.com/stretchr/objx/accessors.go create mode 100644 vendor/github.com/stretchr/objx/conversions.go create mode 100644 vendor/github.com/stretchr/objx/doc.go create mode 100644 vendor/github.com/stretchr/objx/go.mod create mode 100644 vendor/github.com/stretchr/objx/go.sum create mode 100644 vendor/github.com/stretchr/objx/map.go create mode 100644 vendor/github.com/stretchr/objx/mutations.go create mode 100644 vendor/github.com/stretchr/objx/security.go create mode 100644 vendor/github.com/stretchr/objx/tests.go create mode 100644 vendor/github.com/stretchr/objx/type_specific.go create mode 100644 vendor/github.com/stretchr/objx/type_specific_codegen.go create mode 100644 vendor/github.com/stretchr/objx/value.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_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/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/mock/doc.go create mode 100644 vendor/github.com/stretchr/testify/mock/mock.go delete mode 100644 vendor/github.com/tdewolff/minify/v2/.goreleaser.yml rename vendor/github.com/tdewolff/minify/v2/{LICENSE.md => LICENSE} (100%) create mode 100644 vendor/github.com/tdewolff/minify/v2/Makefile create mode 100644 vendor/github.com/tdewolff/minify/v2/html/hash.go create mode 100644 vendor/github.com/tdewolff/parse/v2/.gitattributes create mode 100644 vendor/github.com/tdewolff/parse/v2/.gitignore create mode 100644 vendor/github.com/tdewolff/parse/v2/input.go rename vendor/golang.org/x/net/idna/{tables12.00.go => tables12.0.0.go} (99%) create mode 100644 vendor/golang.org/x/net/idna/tables13.0.0.go create mode 100644 vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_386.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.1_11.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go rename vendor/golang.org/x/sys/unix/{zsyscall_darwin_arm64.1_11.go => zsyscall_openbsd_mips64.go} (85%) create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/norm/tables12.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/norm/tables13.0.0.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/analysis.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/diagnostic.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/doc.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/validate.go delete mode 100644 vendor/golang.org/x/tools/go/ast/inspector/inspector.go delete mode 100644 vendor/golang.org/x/tools/go/ast/inspector/typeof.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/allpackages.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/fakecontext.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/overlay.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/tags.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/util.go delete mode 100644 vendor/golang.org/x/tools/go/internal/cgo/cgo.go delete mode 100644 vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go delete mode 100644 vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go delete mode 100644 vendor/golang.org/x/tools/go/loader/doc.go delete mode 100644 vendor/golang.org/x/tools/go/loader/loader.go delete mode 100644 vendor/golang.org/x/tools/go/loader/util.go delete mode 100644 vendor/golang.org/x/tools/go/packages/doc.go delete mode 100644 vendor/golang.org/x/tools/go/packages/external.go delete mode 100644 vendor/golang.org/x/tools/go/packages/golist.go delete mode 100644 vendor/golang.org/x/tools/go/packages/golist_overlay.go delete mode 100644 vendor/golang.org/x/tools/go/packages/loadmode_string.go delete mode 100644 vendor/golang.org/x/tools/go/packages/packages.go delete mode 100644 vendor/golang.org/x/tools/go/packages/visit.go delete mode 100644 vendor/golang.org/x/tools/go/types/objectpath/objectpath.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/callee.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/imports.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/map.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/ui.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 rename vendor/{google.golang.org/protobuf/internal/fieldnum/empty_gen.go => golang.org/x/tools/internal/event/doc.go} (53%) 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/gocommand/vendor.go create mode 100644 vendor/golang.org/x/tools/internal/gocommand/version.go delete mode 100644 vendor/golang.org/x/tools/internal/packagesinternal/packages.go create mode 100644 vendor/google.golang.org/api/internal/gensupport/retryable_linux.go create mode 100644 vendor/google.golang.org/api/internal/impersonate/impersonate.go delete mode 100644 vendor/google.golang.org/api/internal/service-account.json create mode 100644 vendor/google.golang.org/api/transport/http/default_transport_go113.go create mode 100644 vendor/google.golang.org/api/transport/http/default_transport_not_go113.go create mode 100644 vendor/google.golang.org/api/transport/internal/dca/dca.go create mode 100644 vendor/google.golang.org/genproto/googleapis/cloud/secretmanager/v1beta1/resources.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/cloud/secretmanager/v1beta1/service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2/profiler.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go create mode 100644 vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.go delete mode 100644 vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go delete mode 100644 vendor/google.golang.org/grpc/balancer.go create mode 100644 vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1/load_balancer_grpc.pb.go delete mode 100644 vendor/google.golang.org/grpc/balancer/grpclb/regenerate.sh create mode 100644 vendor/google.golang.org/grpc/balancer/grpclb/state/state.go delete mode 100644 vendor/google.golang.org/grpc/balancer_v1_wrapper.go create mode 100644 vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker_grpc.pb.go delete mode 100644 vendor/google.golang.org/grpc/credentials/alts/internal/regenerate.sh create mode 100644 vendor/google.golang.org/grpc/grpclog/component.go delete mode 100644 vendor/google.golang.org/grpc/internal/binarylog/regenerate.sh delete mode 100644 vendor/google.golang.org/grpc/internal/binarylog/util.go create mode 100644 vendor/google.golang.org/grpc/internal/credentials/spiffe.go rename vendor/google.golang.org/grpc/internal/{transport/log.go => credentials/spiffe_appengine.go} (50%) rename vendor/google.golang.org/grpc/{credentials/internal => internal/credentials}/syscallconn.go (96%) rename vendor/google.golang.org/grpc/{credentials/internal => internal/credentials}/syscallconn_appengine.go (97%) create mode 100644 vendor/google.golang.org/grpc/internal/credentials/util.go create mode 100644 vendor/google.golang.org/grpc/internal/grpcutil/encode_duration.go create mode 100644 vendor/google.golang.org/grpc/internal/grpcutil/metadata.go create mode 100644 vendor/google.golang.org/grpc/internal/grpcutil/method.go create mode 100644 vendor/google.golang.org/grpc/internal/resolver/config_selector.go create mode 100644 vendor/google.golang.org/grpc/internal/resolver/unix/unix.go create mode 100644 vendor/google.golang.org/grpc/internal/serviceconfig/serviceconfig.go create mode 100644 vendor/google.golang.org/grpc/internal/status/status.go create mode 100644 vendor/google.golang.org/grpc/internal/transport/networktype/networktype.go rename vendor/google.golang.org/grpc/{ => internal/transport}/proxy.go (73%) delete mode 100644 vendor/google.golang.org/grpc/naming/dns_resolver.go delete mode 100644 vendor/google.golang.org/grpc/naming/naming.go create mode 100644 vendor/google.golang.org/grpc/regenerate.sh create mode 100644 vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/well_known_types.go create mode 100644 vendor/google.golang.org/protobuf/encoding/protojson/decode.go create mode 100644 vendor/google.golang.org/protobuf/encoding/protojson/doc.go create mode 100644 vendor/google.golang.org/protobuf/encoding/protojson/encode.go create mode 100644 vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go create mode 100644 vendor/google.golang.org/protobuf/internal/encoding/json/decode.go create mode 100644 vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go create mode 100644 vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go create mode 100644 vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go create mode 100644 vendor/google.golang.org/protobuf/internal/encoding/json/encode.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/any_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/api_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/descriptor_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/doc.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/duration_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/field_mask_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/source_context_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/struct_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/timestamp_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/type_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/wrappers_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/any_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/api_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/doc.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/duration_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/empty_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/goname.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/map_entry.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/struct_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/type_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/wrappers.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/genname/name.go create mode 100644 vendor/google.golang.org/protobuf/types/known/fieldmaskpb/field_mask.pb.go create mode 100644 vendor/gopkg.in/yaml.v3/.travis.yml create mode 100644 vendor/gopkg.in/yaml.v3/LICENSE create mode 100644 vendor/gopkg.in/yaml.v3/NOTICE create mode 100644 vendor/gopkg.in/yaml.v3/README.md create mode 100644 vendor/gopkg.in/yaml.v3/apic.go create mode 100644 vendor/gopkg.in/yaml.v3/decode.go create mode 100644 vendor/gopkg.in/yaml.v3/emitterc.go create mode 100644 vendor/gopkg.in/yaml.v3/encode.go create mode 100644 vendor/gopkg.in/yaml.v3/go.mod create mode 100644 vendor/gopkg.in/yaml.v3/parserc.go create mode 100644 vendor/gopkg.in/yaml.v3/readerc.go create mode 100644 vendor/gopkg.in/yaml.v3/resolve.go create mode 100644 vendor/gopkg.in/yaml.v3/scannerc.go create mode 100644 vendor/gopkg.in/yaml.v3/sorter.go create mode 100644 vendor/gopkg.in/yaml.v3/writerc.go create mode 100644 vendor/gopkg.in/yaml.v3/yaml.go create mode 100644 vendor/gopkg.in/yaml.v3/yamlh.go create mode 100644 vendor/gopkg.in/yaml.v3/yamlprivateh.go delete mode 100644 vendor/honnef.co/go/tools/LICENSE delete mode 100644 vendor/honnef.co/go/tools/LICENSE-THIRD-PARTY delete mode 100644 vendor/honnef.co/go/tools/arg/arg.go delete mode 100644 vendor/honnef.co/go/tools/cmd/staticcheck/README.md delete mode 100644 vendor/honnef.co/go/tools/cmd/staticcheck/staticcheck.go delete mode 100644 vendor/honnef.co/go/tools/code/code.go delete mode 100644 vendor/honnef.co/go/tools/config/config.go delete mode 100644 vendor/honnef.co/go/tools/config/example.conf delete mode 100644 vendor/honnef.co/go/tools/deprecated/stdlib.go delete mode 100644 vendor/honnef.co/go/tools/edit/edit.go delete mode 100644 vendor/honnef.co/go/tools/facts/deprecated.go delete mode 100644 vendor/honnef.co/go/tools/facts/generated.go delete mode 100644 vendor/honnef.co/go/tools/facts/purity.go delete mode 100644 vendor/honnef.co/go/tools/facts/token.go delete mode 100644 vendor/honnef.co/go/tools/functions/loops.go delete mode 100644 vendor/honnef.co/go/tools/functions/stub.go delete mode 100644 vendor/honnef.co/go/tools/functions/terminates.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/callee.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/identical.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/imports.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/map.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/methodsetcache.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/ui.go delete mode 100644 vendor/honnef.co/go/tools/internal/cache/cache.go delete mode 100644 vendor/honnef.co/go/tools/internal/cache/default.go delete mode 100644 vendor/honnef.co/go/tools/internal/cache/hash.go delete mode 100644 vendor/honnef.co/go/tools/internal/passes/buildir/buildir.go delete mode 100644 vendor/honnef.co/go/tools/internal/renameio/renameio.go delete mode 100644 vendor/honnef.co/go/tools/internal/robustio/robustio.go delete mode 100644 vendor/honnef.co/go/tools/internal/robustio/robustio_darwin.go delete mode 100644 vendor/honnef.co/go/tools/internal/robustio/robustio_flaky.go delete mode 100644 vendor/honnef.co/go/tools/internal/robustio/robustio_other.go delete mode 100644 vendor/honnef.co/go/tools/internal/robustio/robustio_windows.go delete mode 100644 vendor/honnef.co/go/tools/internal/sharedcheck/lint.go delete mode 100644 vendor/honnef.co/go/tools/ir/LICENSE delete mode 100644 vendor/honnef.co/go/tools/ir/blockopt.go delete mode 100644 vendor/honnef.co/go/tools/ir/builder.go delete mode 100644 vendor/honnef.co/go/tools/ir/const.go delete mode 100644 vendor/honnef.co/go/tools/ir/create.go delete mode 100644 vendor/honnef.co/go/tools/ir/doc.go delete mode 100644 vendor/honnef.co/go/tools/ir/dom.go delete mode 100644 vendor/honnef.co/go/tools/ir/emit.go delete mode 100644 vendor/honnef.co/go/tools/ir/exits.go delete mode 100644 vendor/honnef.co/go/tools/ir/func.go delete mode 100644 vendor/honnef.co/go/tools/ir/html.go delete mode 100644 vendor/honnef.co/go/tools/ir/identical.go delete mode 100644 vendor/honnef.co/go/tools/ir/identical_17.go delete mode 100644 vendor/honnef.co/go/tools/ir/irutil/load.go delete mode 100644 vendor/honnef.co/go/tools/ir/irutil/switch.go delete mode 100644 vendor/honnef.co/go/tools/ir/irutil/util.go delete mode 100644 vendor/honnef.co/go/tools/ir/irutil/visit.go delete mode 100644 vendor/honnef.co/go/tools/ir/lift.go delete mode 100644 vendor/honnef.co/go/tools/ir/lvalue.go delete mode 100644 vendor/honnef.co/go/tools/ir/methods.go delete mode 100644 vendor/honnef.co/go/tools/ir/mode.go delete mode 100644 vendor/honnef.co/go/tools/ir/print.go delete mode 100644 vendor/honnef.co/go/tools/ir/sanity.go delete mode 100644 vendor/honnef.co/go/tools/ir/source.go delete mode 100644 vendor/honnef.co/go/tools/ir/ssa.go delete mode 100644 vendor/honnef.co/go/tools/ir/staticcheck.conf delete mode 100644 vendor/honnef.co/go/tools/ir/util.go delete mode 100644 vendor/honnef.co/go/tools/ir/wrappers.go delete mode 100644 vendor/honnef.co/go/tools/ir/write.go delete mode 100644 vendor/honnef.co/go/tools/lint/lint.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintdsl/lintdsl.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/format/format.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/stats.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/stats_bsd.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/stats_posix.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/util.go delete mode 100644 vendor/honnef.co/go/tools/lint/runner.go delete mode 100644 vendor/honnef.co/go/tools/lint/stats.go delete mode 100644 vendor/honnef.co/go/tools/loader/loader.go delete mode 100644 vendor/honnef.co/go/tools/pattern/convert.go delete mode 100644 vendor/honnef.co/go/tools/pattern/doc.go delete mode 100644 vendor/honnef.co/go/tools/pattern/fuzz.go delete mode 100644 vendor/honnef.co/go/tools/pattern/lexer.go delete mode 100644 vendor/honnef.co/go/tools/pattern/match.go delete mode 100644 vendor/honnef.co/go/tools/pattern/parser.go delete mode 100644 vendor/honnef.co/go/tools/pattern/pattern.go delete mode 100644 vendor/honnef.co/go/tools/printf/fuzz.go delete mode 100644 vendor/honnef.co/go/tools/printf/printf.go delete mode 100644 vendor/honnef.co/go/tools/report/report.go delete mode 100644 vendor/honnef.co/go/tools/simple/analysis.go delete mode 100644 vendor/honnef.co/go/tools/simple/doc.go delete mode 100644 vendor/honnef.co/go/tools/simple/lint.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/analysis.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/buildtag.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/doc.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/lint.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/rules.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/structtag.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/analysis.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/doc.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/lint.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/names.go delete mode 100644 vendor/honnef.co/go/tools/unused/edge.go delete mode 100644 vendor/honnef.co/go/tools/unused/edgekind_string.go delete mode 100644 vendor/honnef.co/go/tools/unused/implements.go delete mode 100644 vendor/honnef.co/go/tools/unused/unused.go delete mode 100644 vendor/honnef.co/go/tools/version/buildinfo.go delete mode 100644 vendor/honnef.co/go/tools/version/buildinfo111.go delete mode 100644 vendor/honnef.co/go/tools/version/version.go diff --git a/Dockerfile b/Dockerfile index 518bb37..f145a38 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,14 @@ COPY . /src/github.com/arussellsaw/news RUN cd /src/github.com/arussellsaw/news && CGO_ENABLED=0 go build -o news -mod=vendor FROM alpine:latest AS final -RUN apk --no-cache add ca-certificates +RUN apk --no-cache add ca-certificates nodejs nodejs-npm + + +COPY --from=build /src/github.com/arussellsaw/news/readability-server /app/readability-server + +WORKDIR /app/readability-server + +RUN npm install WORKDIR /app diff --git a/Makefile b/Makefile index 6e53899..f24024b 100644 --- a/Makefile +++ b/Makefile @@ -4,5 +4,8 @@ build: deploy: build push gcloud beta run deploy news --image gcr.io/russellsaw/news:latest +deploy-worker: build push + gcloud beta run deploy news-background --image gcr.io/russellsaw/news:latest + push: docker push gcr.io/russellsaw/news diff --git a/cmd/articles/main.go b/cmd/articles/main.go new file mode 100644 index 0000000..8cabff4 --- /dev/null +++ b/cmd/articles/main.go @@ -0,0 +1,105 @@ +package main + +import ( + secretmanager "cloud.google.com/go/secretmanager/apiv1beta1" + "context" + "fmt" + "github.com/arussellsaw/news/dao" + "github.com/arussellsaw/news/domain" + "github.com/arussellsaw/news/pkg/util" + "github.com/monzo/slog" + "github.com/pacedotdev/firesearch-sdk/clients/go/firesearch" + secrets "google.golang.org/genproto/googleapis/cloud/secretmanager/v1beta1" + "os" + "time" +) + +func main() { + ctx := context.Background() + + var logger slog.Logger + logger = util.ContextParamLogger{Logger: &util.StackDriverLogger{}} + logger = util.ColourLogger{Writer: os.Stdout} + slog.SetDefaultLogger(logger) + + err := dao.Init(ctx) + if err != nil { + slog.Critical(ctx, "Error setting up dao: %s", err) + return + } + + sm, err := secretmanager.NewClient(ctx) + if err != nil { + panic(err) + } + defer sm.Close() + + res, err := sm.AccessSecretVersion( + ctx, + &secrets.AccessSecretVersionRequest{Name: fmt.Sprintf( + "projects/266969078315/secrets/%s/versions/latest", + "FIRESEARCH_API_KEY", + )}, + ) + if err != nil { + panic(err) + } + + slog.Info(ctx, res.Payload.String()) + client := firesearch.NewClient("https://firesearch-3phpehgkya-ew.a.run.app/api", res.Payload.String()) + indexService := firesearch.NewIndexService(client) + + c := dao.Client() + docs := c.Collection("articles").Documents(ctx) + n := 0 + for { + n++ + start := time.Now() + doc, err := docs.Next() + if err != nil { + slog.Critical(ctx, "error reading article: %s", err) + slog.Info(ctx, "done %v articles", n) + return + } + if doc == nil { + slog.Info(ctx, "done %v articles", n) + return + } + a := domain.Article{} + err = doc.DataTo(&a) + if err != nil { + slog.Critical(ctx, "error reading article: %s", err) + return + } + a.RawHTML() + contentStr := "" + for _, e := range a.Content { + if e.Type != "text" { + continue + } + contentStr = contentStr + e.Value + "" + } + _, err = indexService.PutDoc(ctx, firesearch.PutDocRequest{ + IndexPath: "news/search/articles", + Doc: firesearch.Doc{ + ID: a.ID, + SearchFields: []firesearch.SearchField{ + { + Key: "title", + Value: a.Title, + Store: true, + }, + { + Key: "content", + Value: contentStr, + Store: true, + }, + }, + }, + }) + if err != nil { + slog.Error(ctx, "Error indexing: %s", err) + } + slog.Info(ctx, "Article: %s %s", time.Since(start), a.Link) + } +} diff --git a/cmd/search/main.go b/cmd/search/main.go new file mode 100644 index 0000000..7a59e3a --- /dev/null +++ b/cmd/search/main.go @@ -0,0 +1,68 @@ +package main + +import ( + secretmanager "cloud.google.com/go/secretmanager/apiv1beta1" + "context" + "flag" + "fmt" + "github.com/arussellsaw/news/pkg/util" + "github.com/monzo/slog" + "github.com/pacedotdev/firesearch-sdk/clients/go/firesearch" + secrets "google.golang.org/genproto/googleapis/cloud/secretmanager/v1beta1" + "os" +) + +func main() { + ctx := context.Background() + + var logger slog.Logger + logger = util.ContextParamLogger{Logger: &util.StackDriverLogger{}} + logger = util.ColourLogger{Writer: os.Stdout} + slog.SetDefaultLogger(logger) + + sm, err := secretmanager.NewClient(ctx) + if err != nil { + panic(err) + } + defer sm.Close() + + res, err := sm.AccessSecretVersion( + ctx, + &secrets.AccessSecretVersionRequest{Name: fmt.Sprintf( + "projects/266969078315/secrets/%s/versions/latest", + "FIRESEARCH_API_KEY", + )}, + ) + if err != nil { + panic(err) + } + slog.Info(ctx, res.Payload.String()) + client := firesearch.NewClient("https://firesearch-3phpehgkya-ew.a.run.app/api", res.Payload.String()) + indexService := firesearch.NewIndexService(client) + + query := flag.String("q", "", "query") + flag.Parse() + searchResults, err := indexService.Search(ctx, firesearch.SearchRequest{ + Query: firesearch.SearchQuery{ + IndexPath: "news/search/articles", + Limit: 5, + Text: *query, + Select: []string{"title", "content"}, + }, + }) + if err != nil { + slog.Critical(ctx, "Error searching: %s", err) + return + } + for _, hit := range searchResults.Hits { + title, ok := hit.FieldValue("title") + if !ok { + title = "Untitled" + } + fmt.Printf("\t%s: %s:", hit.ID, title) + for _, highlight := range hit.Highlights { + fmt.Print(" " + highlight.Text) + } + fmt.Println() + } +} diff --git a/dao/dao.go b/dao/dao.go index c3b83c5..fea665a 100644 --- a/dao/dao.go +++ b/dao/dao.go @@ -2,6 +2,7 @@ package dao import ( "context" + "github.com/monzo/slog" "github.com/pkg/errors" "golang.org/x/sync/errgroup" "sync" @@ -42,6 +43,10 @@ type storedEdition struct { Metadata map[string]string } +func Client() *firestore.Client { + return client +} + func GetEditionForTime(ctx context.Context, t time.Time, allowRecent bool) (*domain.Edition, error) { iter := client.Collection("editions"). Where("EndTime", ">", t). @@ -325,14 +330,32 @@ func GetAllSources(ctx context.Context) ([]domain.Source, error) { } func GetArticlesForOwner(ctx context.Context, ownerID string, start, end time.Time) ([]domain.Article, []domain.Source, error) { - sources, err := GetSources(ctx, ownerID) - if err != nil { - return nil, nil, err + var ( + sources []domain.Source + err error + ) + if ownerID != "" { + sources, err = GetSources(ctx, ownerID) + if err != nil { + return nil, nil, err + } + } else { + sources = domain.GetSources() } g := errgroup.Group{} - articles := make(chan domain.Article, 1024) + articles := make(chan domain.Article) for _, s := range sources { s := s + if as, ok := c.Get(s.FeedURL); ok { + as := as + g.Go(func() error { + for _, a := range as { + articles <- a + } + return nil + }) + continue + } g.Go(func() error { docs, err := client.Collection("articles"). Where("Source.FeedURL", "==", s.FeedURL). @@ -343,14 +366,18 @@ func GetArticlesForOwner(ctx context.Context, ownerID string, start, end time.Ti if err != nil { return err } + toCache := []domain.Article{} for _, doc := range docs { a := domain.Article{} err = doc.DataTo(&a) if err != nil { return err } + toCache = append(toCache, a) + slog.Debug(ctx, "Article loaded: %s %s", a.Title, a.Source.FeedURL) articles <- a } + c.Set(s.FeedURL, toCache) return nil }) } @@ -367,3 +394,38 @@ func GetArticlesForOwner(ctx context.Context, ownerID string, start, end time.Ti } return out, sources, nil } + +var c = feedCache{ + c: make(map[string][]domain.Article), + ttl: 20 * time.Minute, +} + +type feedCache struct { + mu sync.RWMutex + c map[string][]domain.Article + + ttl time.Duration +} + +func (c *feedCache) Get(url string) ([]domain.Article, bool) { + c.mu.RLock() + defer c.mu.RUnlock() + as, ok := c.c[url] + return as, ok +} + +func (c *feedCache) Set(url string, as []domain.Article) { + c.mu.Lock() + defer c.mu.Unlock() + c.c[url] = as + go func(url string, ttl time.Duration) { + <-time.After(ttl) + c.Delete(url) + }(url, c.ttl) +} + +func (c *feedCache) Delete(url string) { + c.mu.Lock() + delete(c.c, url) + c.mu.Unlock() +} diff --git a/domain/article.go b/domain/article.go index 1fa266b..98259ed 100644 --- a/domain/article.go +++ b/domain/article.go @@ -1,23 +1,30 @@ package domain import ( + "bytes" + "compress/gzip" + "context" + "github.com/monzo/slog" "html/template" + "io/ioutil" "time" ) type Article struct { - ID string - Title string - Description string - Content []Element - HTMLContent template.HTML - ImageURL string - Link string - Author string - Source Source - Timestamp time.Time - TS string - Layout Layout + ID string + Title string + Description string + CompressedContent []byte + Content []Element + ImageURL string + Link string + Author string + Source Source + Timestamp time.Time + TS string + Layout Layout + + decompressed []byte } type Element struct { @@ -50,3 +57,23 @@ func (a *Article) Trim(size int) { a.Content = append(a.Content, e) } } + +func (a *Article) RawHTML() template.HTML { + if len(a.decompressed) != 0 { + return template.HTML(a.decompressed) + } + slog.Debug(context.Background(), "Decompressing %s", a.ID) + r, _ := gzip.NewReader(bytes.NewReader(a.CompressedContent)) + buf, _ := ioutil.ReadAll(r) + a.decompressed = buf + return template.HTML(buf) +} + +func (a *Article) SetHTMLContent(body string) { + buf := new(bytes.Buffer) + w := gzip.NewWriter(buf) + w.Write([]byte(body)) + w.Flush() + w.Close() + a.CompressedContent = buf.Bytes() +} diff --git a/domain/layout.go b/domain/layout.go index 1282476..5bcb443 100644 --- a/domain/layout.go +++ b/domain/layout.go @@ -98,12 +98,6 @@ func LayoutArticles(aa []Article) []Article { bySize := make([][]Article, 6) for _, a := range aa { s := 0 - for _, c := range a.Content { - if c.Type != "text" { - continue - } - s += len(c.Value) - } switch { case s < 200: bySize[0] = append(bySize[0], a) diff --git a/go.mod b/go.mod index 41f4e8f..9c58b8e 100644 --- a/go.mod +++ b/go.mod @@ -3,36 +3,53 @@ module github.com/arussellsaw/news go 1.13 require ( - cloud.google.com/go/bigquery v1.5.0 - cloud.google.com/go/firestore v1.2.0 - cloud.google.com/go/pubsub v1.3.1 - github.com/PuerkitoBio/goquery v1.5.1 - github.com/araddon/dateparse v0.0.0-20180729174819-cfd92a431d0e + cloud.google.com/go v0.74.0 + cloud.google.com/go/bigquery v1.13.0 + cloud.google.com/go/firestore v1.3.0 + cloud.google.com/go/pubsub v1.8.3 + github.com/PuerkitoBio/goquery v1.6.0 + github.com/andybalholm/cascadia v1.2.0 // indirect + github.com/araddon/dateparse v0.0.0-20201001162425-8aadafed4dc4 + github.com/arussellsaw/slog-gcloud v0.1.5 // indirect github.com/boombuler/barcode v1.0.0 github.com/bwmarrin/snowflake v0.3.0 github.com/dgrijalva/jwt-go v3.2.0+incompatible - github.com/esimov/dithergo v0.0.0-20190411040508-1672f44e9674 + github.com/esimov/dithergo v0.0.0-20200421032300-a58c8e84d6b1 github.com/fatih/color v1.10.0 github.com/fatih/set v0.2.1 + github.com/felixge/fgprof v0.9.1 github.com/gigawattio/window v0.0.0-20180317192513-0f5467e35573 - github.com/golang/protobuf v1.4.0 // indirect - github.com/google/uuid v1.1.1 - github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0 + github.com/google/pprof v0.0.0-20201211104106-9bd6f8a8ed4b // indirect + github.com/google/uuid v1.1.2 + github.com/gorilla/mux v1.8.0 + github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7 github.com/mattheath/kala v0.0.0-20171219141654-d6276794bf0e // indirect - github.com/mattn/go-runewidth v0.0.3 // indirect - github.com/mmcdole/gofeed v1.0.0-beta2 - github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf // indirect - github.com/monzo/slog v0.0.0-20191115111046-002e22b2c169 - github.com/monzo/terrors v0.0.0-20191030112059-325b9ec5dcdf // indirect + github.com/mmcdole/gofeed v1.1.0 + github.com/mmcdole/goxpp v0.0.0-20200921145534-2f3784f67354 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/monzo/slog v0.0.0-20200930150111-c5ba10c39368 + github.com/monzo/terrors v0.0.0-20201123122426-526801726c25 // indirect + github.com/monzo/typhon v0.0.0-20201124115200-3cd56f3c25a7 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 - github.com/olekukonko/tablewriter v0.0.0-20180506121414-d4647c9c7a84 // indirect - github.com/pkg/errors v0.8.1 + github.com/olekukonko/tablewriter v0.0.4 // indirect + github.com/pacedotdev/firesearch-sdk/clients/go/firesearch v0.0.0-20201130164538-902295cdbabd + github.com/pkg/errors v0.9.1 github.com/simplereach/timeutils v1.2.0 // indirect github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect + github.com/stretchr/objx v0.3.0 // indirect + github.com/tdewolff/minify/v2 v2.9.10 // indirect + github.com/tdewolff/parse/v2 v2.5.6 // indirect github.com/thatguystone/swan v0.0.0-20190904205542-d1079a5d0c05 - golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e - golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a - golang.org/x/text v0.3.2 - google.golang.org/api v0.20.0 + golang.org/x/mod v0.4.0 // indirect + golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a + golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f // indirect + golang.org/x/text v0.3.4 + google.golang.org/api v0.36.0 + google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc + google.golang.org/grpc v1.34.0 // indirect gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect + gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect + honnef.co/go/tools v0.0.1-2020.1.6 // indirect ) diff --git a/go.sum b/go.sum index 4e0a3a6..79670ee 100644 --- a/go.sum +++ b/go.sum @@ -12,23 +12,43 @@ cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bP cloud.google.com/go v0.55.0 h1:eoz/lYxKSL4CNAiaUJ0ZfD1J3bfMYbU5B3rwM1C1EIU= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0 h1:WRz29PgAsVEyPSDHyk+0fpEkwEFyfhHn+JbksT6gIL4= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.61.0/go.mod h1:XukKJg4Y7QsUu0Hxg3qQKUWR4VuWivmyMK2+rUyxAqw= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.71.0/go.mod h1:qZfY4Y7AEIQwG/fQYD3xrxLNkQZ0Xzf3HGeqCkA6LVM= +cloud.google.com/go v0.72.0 h1:eWRCuwubtDrCJG0oSUMgnsbD4CmPFQF2ei4OFbXvwww= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0 h1:kpgPA77kSSbjSs+fWHkPTxQ6J5Z2Qkruo5jfXEkHxNQ= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0 h1:K2NyuHRuv15ku6eUpe0DQk5ZykPMnSOnvuVf6IHcjaE= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.13.0 h1:lGHkTMzaXAHUC/QrtLzj6AWjtFXcHQ4Am6N5LdsIct0= +cloud.google.com/go/bigquery v1.13.0/go.mod h1:B2MgahXJfR8MTIIWLmyWtN9p9S+diW0RgU3V9tJ6ilc= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.2.0 h1:zrl+2VJAYC/C6WzEPnkqZIBeHyHFs/UmtzJdXU4Bvmo= cloud.google.com/go/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= +cloud.google.com/go/firestore v1.3.0 h1:QaBSisuvNi9/o+3nCHqUEfduHCPfhEw2jcUofi0n8oY= +cloud.google.com/go/firestore v1.3.0/go.mod h1:Qt0gS9Qz9tROrmgFavo36+hdST1FXvmtnGnO0Dr03pU= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.8.3 h1:kl5QdIn98mYhX+G7OzdQ9W3SQ0XXdhHlTw0GHa723pI= +cloud.google.com/go/pubsub v1.8.3/go.mod h1:m8NMRz5lt0YjbQQ40RjocDVRjgYyzyYpP6ix3dxwRno= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -36,11 +56,19 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= github.com/PuerkitoBio/goquery v1.5.1 h1:PSPBGne8NIUWw+/7vFBV+kG2J/5MOjbzc7154OaKCSE= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= +github.com/PuerkitoBio/goquery v1.6.0 h1:j7taAbelrdcsOlGeMenZxc2AWXD5fieT1/znArdnx94= +github.com/PuerkitoBio/goquery v1.6.0/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= +github.com/andybalholm/cascadia v1.2.0 h1:vuRCkM5Ozh/BfmsaTm26kbjm0mIOM3yS5Ek/F5h18aE= +github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY= github.com/araddon/dateparse v0.0.0-20180729174819-cfd92a431d0e h1:s05JG2GwtJMHaPcXDpo4V35TFgyYZzNsmBlSkHPEbeg= github.com/araddon/dateparse v0.0.0-20180729174819-cfd92a431d0e/go.mod h1:SLqhdZcd+dF3TEVL2RMoob5bBP5R1P1qkox+HtCBgGI= +github.com/araddon/dateparse v0.0.0-20201001162425-8aadafed4dc4 h1:OkS1BqB3CzLtGRznRyvriSY8jeaVk2CrDn2ZiRQgMUI= +github.com/araddon/dateparse v0.0.0-20201001162425-8aadafed4dc4/go.mod h1:hMAUZFIkk4B1FouGxqlogyMyU6BwY/UiVmmbbzz9Up8= +github.com/arussellsaw/slog-gcloud v0.1.5 h1:wU4Y2+rm2+djooxXg2sigl2CO2d/oRqfwUeSWfofvVw= +github.com/arussellsaw/slog-gcloud v0.1.5/go.mod h1:NIG7Wmi2OpzJoofw+hrTz+sdnPDAo8rL3EjkwkUT/vQ= github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= @@ -52,8 +80,14 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P 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/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= 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/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ= +github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/dgrijalva/jwt-go v1.0.2 h1:KPldsxuKGsS2FPWsNeg9ZO18aCrGKujPoWXn2yo+KQM= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= @@ -61,14 +95,21 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn 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= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/esimov/dithergo v0.0.0-20190411040508-1672f44e9674 h1:aGL1DV221m50hQC8Ci71iIBB3iNRPEESEKguyGDF9pM= github.com/esimov/dithergo v0.0.0-20190411040508-1672f44e9674/go.mod h1:IuLZhv47vctnAic87c5rwf6Q1zAZ7MP8bfePn9sLs70= +github.com/esimov/dithergo v0.0.0-20200421032300-a58c8e84d6b1 h1:aSkWlnTXYoLi6ZtVuSLfGQXasuTxFx3DvDr3xiqQHlU= +github.com/esimov/dithergo v0.0.0-20200421032300-a58c8e84d6b1/go.mod h1:IuLZhv47vctnAic87c5rwf6Q1zAZ7MP8bfePn9sLs70= github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/set v0.2.1 h1:nn2CaJyknWE/6txyUDGwysr3G5QC6xWB/PtVjPBbeaA= github.com/fatih/set v0.2.1/go.mod h1:+RKtMCH+favT2+3YecHGxcc0b4KyVWA1QWWJUs4E0CI= +github.com/felixge/fgprof v0.9.1 h1:E6FUJ2Mlv043ipLOCFqo8+cHo9MhQ203E2cdEK/isEs= +github.com/felixge/fgprof v0.9.1/go.mod h1:7/HK6JFtFaARhIljgP2IV8rJLIoHDoOYoUphsnGvqxE= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/gigawattio/window v0.0.0-20180317192513-0f5467e35573 h1:u8AQ9bPa9oC+8/A/jlWouakhIvkFfuxgIIRjiy8av7I= github.com/gigawattio/window v0.0.0-20180317192513-0f5467e35573/go.mod h1:eBvb3i++NHDH4Ugo9qCvMw8t0mTSctaEa5blJbWcNxs= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -85,6 +126,7 @@ github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFU github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -97,6 +139,10 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 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/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -104,23 +150,51 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 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/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200615235658-03e1cf38a040 h1:i7RUpu0EybzQyQvPT7J3MmODs4+gPcHsD/pqW0uIYVo= +github.com/google/pprof v0.0.0-20200615235658-03e1cf38a040/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201117184057-ae444373da19 h1:iFELRewmQ9CldLrqgr0E6b6ZPfZmMvLyyz6kMsR+c4w= +github.com/google/pprof v0.0.0-20201117184057-ae444373da19/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201211104106-9bd6f8a8ed4b h1:AgNyy9WfDQyMiLd6bBVBq4Rrq1wz2PlnAbW22GGu0hk= +github.com/google/pprof v0.0.0-20201211104106-9bd6f8a8ed4b/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= +github.com/google/uuid v1.1.2/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 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0 h1:xqgexXAGQgY3HAjNPSaCqn5Aahbo5TKsmhp8VRfr1iQ= github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk= +github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7 h1:g0fAGBisHaEQ0TRq1iBvemFRf+8AEWEmBESSiWB3Vsc= +github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk= +github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= @@ -137,53 +211,110 @@ github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHX github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mmcdole/gofeed v1.0.0-beta2 h1:CjQ0ADhAwNSb08zknAkGOEYqr8zfZKfrzgk9BxpWP2E= github.com/mmcdole/gofeed v1.0.0-beta2/go.mod h1:/BF9JneEL2/flujm8XHoxUcghdTV6vvb3xx/vKyChFU= +github.com/mmcdole/gofeed v1.1.0 h1:T2WrGLVJRV04PY2qwhEJLHCt9JiCtBhb6SmC8ZvJH08= +github.com/mmcdole/gofeed v1.1.0/go.mod h1:PPiVwgDXLlz2N83KB4TrIim2lyYM5Zn7ZWH9Pi4oHUk= github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf h1:sWGE2v+hO0Nd4yFU/S/mDBM5plIU8v/Qhfz41hkDIAI= github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf/go.mod h1:pasqhqstspkosTneA62Nc+2p9SOBBYAPbnmRRWPQ0V8= +github.com/mmcdole/goxpp v0.0.0-20200921145534-2f3784f67354 h1:Z6i7ND25ixRtXFBylIUggqpvLMV1I15yprcqMVB7WZA= +github.com/mmcdole/goxpp v0.0.0-20200921145534-2f3784f67354/go.mod h1:pasqhqstspkosTneA62Nc+2p9SOBBYAPbnmRRWPQ0V8= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +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= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/monzo/slog v0.0.0-20191115111046-002e22b2c169 h1:Eae/+txk3QnwJjo2qjhRpq3ogLUYJBwlAZqwPSuyFYs= github.com/monzo/slog v0.0.0-20191115111046-002e22b2c169/go.mod h1:WLNpEHhXIwQynoqjGY9HxPbseatrTIBTbG1Rij/oCXY= +github.com/monzo/slog v0.0.0-20200611142344-440dc23ce76d/go.mod h1:WLNpEHhXIwQynoqjGY9HxPbseatrTIBTbG1Rij/oCXY= +github.com/monzo/slog v0.0.0-20200930150111-c5ba10c39368 h1:K+iZ7679lOkew4g6SIWuNBZtK38HYLJBRB42chVxTTY= +github.com/monzo/slog v0.0.0-20200930150111-c5ba10c39368/go.mod h1:WLNpEHhXIwQynoqjGY9HxPbseatrTIBTbG1Rij/oCXY= github.com/monzo/terrors v0.0.0-20191030112059-325b9ec5dcdf h1:bc56AoaESXUcGSkXQwIN5FZwNl+lYr5RWawqzyjCank= github.com/monzo/terrors v0.0.0-20191030112059-325b9ec5dcdf/go.mod h1:gfOuNDWYOyNdgpG0gUVODIjwDBQRXe+mPjnTybHGb5k= +github.com/monzo/terrors v0.0.0-20201123122426-526801726c25 h1:GLQ5by+mG7mSOokXPxuam4P7RrX9jMaxNLIClZV6vgo= +github.com/monzo/terrors v0.0.0-20201123122426-526801726c25/go.mod h1:gfOuNDWYOyNdgpG0gUVODIjwDBQRXe+mPjnTybHGb5k= +github.com/monzo/typhon v0.0.0-20200505200851-d565f398c1c5 h1:xWaC+VJbPkz44gX4vJSBYjr9qqK1rrMTnm/HignWPmc= +github.com/monzo/typhon v0.0.0-20200505200851-d565f398c1c5/go.mod h1:PwlvLMpr2GwvL6TJsROBExc1KTxZz2BHu4wSX7c+dyQ= +github.com/monzo/typhon v0.0.0-20201124115200-3cd56f3c25a7 h1:zw1tXE3S7uWb0nqMeufEfl1L4rY39tUmR+dM+cnBcL4= +github.com/monzo/typhon v0.0.0-20201124115200-3cd56f3c25a7/go.mod h1:PwlvLMpr2GwvL6TJsROBExc1KTxZz2BHu4wSX7c+dyQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d h1:VhgPp6v9qf9Agr/56bj7Y/xa04UccTW04VP0Qed4vnQ= github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d/go.mod h1:YUTz3bUH2ZwIWBy3CJBeOBEugqcmXREj14T+iG/4k4U= github.com/olekukonko/tablewriter v0.0.0-20180506121414-d4647c9c7a84 h1:fiKJgB4JDUd43CApkmCeTSQlWjtTtABrU2qsgbuP0BI= github.com/olekukonko/tablewriter v0.0.0-20180506121414-d4647c9c7a84/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= +github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= +github.com/pacedotdev/firesearch-sdk v0.0.0-20201130164538-902295cdbabd h1:fyuhX6SKwmnw/ggTZ/XPk6JhAZBX/TmyiQENWSWWZAA= +github.com/pacedotdev/firesearch-sdk/clients/go v0.0.0-20201112191500-65884003310b h1:ge2UI+7XFwe71Qz/2TgsVF/Eemc8lPsDEoX47KdnA8Y= +github.com/pacedotdev/firesearch-sdk/clients/go/firesearch v0.0.0-20201130164538-902295cdbabd h1:ujGfjkAdeuI41wH5kb4bzPf2z5UE32bhVGV8ZlxAmWk= +github.com/pacedotdev/firesearch-sdk/clients/go/firesearch v0.0.0-20201130164538-902295cdbabd/go.mod h1:CowxV8GVEaKyDT0Ud3nUMM4c2PN+bDFTe/EPfZJs9Xc= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= 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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxTvN8n+Kvkn6TrbMyxQiuvKdEwFdR9vI= github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= +github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/simplereach/timeutils v1.2.0 h1:btgOAlu9RW6de2r2qQiONhjgxdAG7BL6je0G6J/yPnA= github.com/simplereach/timeutils v1.2.0/go.mod h1:VVbQDfN/FHRZa1LSqcwo4kNZ62OOyqLLGQKYB3pB0Q8= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo= github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tdewolff/minify/v2 v2.3.8 h1:Eyv23Tu+Rb5Q2vyxmvzUgtHetgneqAsaGv3950s1EeA= github.com/tdewolff/minify/v2 v2.3.8/go.mod h1:DD1stRlSx6JsHfl1+E/HVMQeXiec9rD1UQ0epklIZLc= +github.com/tdewolff/minify/v2 v2.9.10 h1:p+ifTTl+JMFFLDYNAm7nxQ9XuCG10HTW00wlPAZ7aoE= +github.com/tdewolff/minify/v2 v2.9.10/go.mod h1:U1Nc+/YBSB0FPEarqcgkYH3Ep4DNyyIbOyl5P4eWMuo= github.com/tdewolff/parse/v2 v2.3.5 h1:/uS8JfhwVJsNkEh769GM5ENv6L9LOh2Z9uW3tCdlhs0= github.com/tdewolff/parse/v2 v2.3.5/go.mod h1:HansaqmN4I/U7L6/tUp0NcwT2tFO0F4EAWYGSDzkYNk= +github.com/tdewolff/parse/v2 v2.5.5/go.mod h1:WzaJpRSbwq++EIQHYIRTpbYKNA3gn9it1Ik++q4zyho= +github.com/tdewolff/parse/v2 v2.5.6 h1:fpy81gxFbbPd0Zv0taPAxXc+c96tdo1tZFYXrr2nQlU= +github.com/tdewolff/parse/v2 v2.5.6/go.mod h1:WzaJpRSbwq++EIQHYIRTpbYKNA3gn9it1Ik++q4zyho= github.com/tdewolff/test v1.0.0/go.mod h1:DiQUlutnqlEvdvhSn2LPGy4TFwRauAaYDsL+683RNX4= +github.com/tdewolff/test v1.0.6/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= github.com/thatguystone/swan v0.0.0-20190904205542-d1079a5d0c05 h1:fo8+75HMGIm8edna4t24LCoBwjRyV6NULVtINYy+wWE= github.com/thatguystone/swan v0.0.0-20190904205542-d1079a5d0c05/go.mod h1:2XDLoG+vmZ+/P5RJbX1uoZ2997NOevNF2CxziICaZHY= +github.com/urfave/cli v1.22.3/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= 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= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= 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= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -207,6 +338,8 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -215,6 +348,9 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= 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.4.0 h1:8pl+sMODzuvGJkmj2W4kZihvVb5mKm8pB/X44PIQHv8= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -228,6 +364,7 @@ golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -237,12 +374,35 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201026091529-146b70c837a4/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201207224615-747e23833adb h1:xj2oMIbduz83x7tzglytWT7spn6rP+9hvKjTpro6/pM= +golang.org/x/net v0.0.0-20201207224615-747e23833adb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 h1:lwlPPsmjDKK0J6eG6xDWd5XPehI0R024zxjDnw3esPA= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19 h1:ZD+2Sd/BnevwJp8PSli8WgGAGzb9IZtxBsv1iZMYeEA= +golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 h1:Lm4OryKCca1vehdsWogr9N4t7NfZxLbJoc/H0w4K4S4= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -251,6 +411,11 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181031143558-9b800f95dbbc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -262,6 +427,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -274,15 +440,35 @@ golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201202213521-69691e467435 h1:25AvDqqB9PrNqj1FLf2/70I4W0L19qqoaFq3gjNwbKk= +golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f h1:QdHQnPce6K4XQewki9WNbG5KOROuDzqO3NaYjI1cXJ0= +golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -318,10 +504,32 @@ golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224 h1:azwY/v0y0K4mFHVsg5+UrTgchqALYWpqVo6vL5OmkmI= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200410194907-79a7a3126eef/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/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= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200713011307-fd294ab11aed/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200727233628-55644ead90ce/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201030143252-cf7a54d06671/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201103235415-b653051172e4/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201202200335-bef1c476418a h1:TYqOq/v+Ri5aADpldxXOj6PmvcPMOJbLjdALzZDQT2M= +golang.org/x/tools v0.0.0-20201202200335-bef1c476418a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2 h1:vEtypaVub6UvKkiXZ2xx9QIvp9TL7sI7xp7vdi2kezA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -334,12 +542,24 @@ google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/ google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0 h1:jz2KixHX7EcCPiQrySzPdnYT7DbINAypCqKZ1Z7GM40= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.34.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0 h1:l2Nfbl2GPXdWorv+dT2XfinX2jOOw4zv1VhLstx+6rE= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -363,6 +583,26 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b h1:j5eujPLMak6H9l2EM381rW9X47/HPUyESXWJW9lVSsQ= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200711021454-869866162049/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200728010541-3dc8dca74b7b/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201030142918-24207fddd1c3/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201104152603-2e45c02ce95c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201203001206-6486ece9c497 h1:jDYzwXmX9tLnuG4sL85HPmE1ruErXOopALp2i/0AHnI= +google.golang.org/genproto v0.0.0-20201203001206-6486ece9c497/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc h1:BgQmMjmd7K1zov8j8lYULHW0WnmBGUIMp6+VDwlGErc= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -373,12 +613,26 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -387,6 +641,10 @@ gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -394,6 +652,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.6/go.mod h1:pyyisuGw24ruLjrr1ddx39WE0y9OooInRzEYLhQB2YY= 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= diff --git a/handler/handle_article.go b/handler/handle_article.go index 2e34a65..5a4734e 100644 --- a/handler/handle_article.go +++ b/handler/handle_article.go @@ -6,13 +6,15 @@ import ( "github.com/monzo/slog" "html/template" "net/http" + "sort" + "strings" ) func handleArticle(w http.ResponseWriter, r *http.Request) { ctx := r.Context() t := template.New("frame.html") - t, err := t.ParseFiles("tmpl/frame.html", "tmpl/article.html") + t, err := t.ParseFiles("tmpl/frame.html", "tmpl/meta.html", "tmpl/article.html") if err != nil { slog.Error(ctx, "Error parsing template: %s", err) http.Error(w, err.Error(), 500) @@ -25,16 +27,19 @@ func handleArticle(w http.ResponseWriter, r *http.Request) { return } u := domain.UserFromContext(ctx) + var sources []domain.Source if u != nil { - sources, err := dao.GetSources(ctx, u.ID) + sources, err = dao.GetSources(ctx, u.ID) if err != nil { http.Error(w, err.Error(), 500) return } - for _, src := range sources { - if src.FeedURL == article.Source.FeedURL { - article.Source = src - } + } else { + sources = domain.GetSources() + } + for _, src := range sources { + if src.FeedURL == article.Source.FeedURL { + article.Source = src } } @@ -42,8 +47,28 @@ func handleArticle(w http.ResponseWriter, r *http.Request) { Article: article, base: base{ User: domain.UserFromContext(ctx), + Meta: Meta{ + Title: article.Title + " - " + article.Source.Name, + Description: preview(article.Content), + Image: article.ImageURL, + URL: r.URL.String(), + }, }, } + + byFeedURL := make(map[string]domain.Source) + smap := make(map[string]struct{}) + for _, s := range sources { + byFeedURL[s.FeedURL] = s + for _, cat := range s.Categories { + smap[cat] = struct{}{} + } + } + for cat := range smap { + a.Categories = append(a.Categories, cat) + } + sort.Strings(a.Categories) + err = t.Execute(w, a) if err != nil { slog.Error(ctx, "Error executing template: %s", err) @@ -56,3 +81,20 @@ type articlePage struct { Article *domain.Article base } + +func preview(es []domain.Element) string { + var out string + for _, e := range es { + if e.Type != "text" { + continue + } + if strings.TrimSpace(e.Value) == "" { + continue + } + out += e.Value + } + if len(out) <= 400 { + return out + } + return out[:400] +} diff --git a/handler/handle_generate_edition.go b/handler/handle_generate_edition.go index 5bfd927..c2e7938 100644 --- a/handler/handle_generate_edition.go +++ b/handler/handle_generate_edition.go @@ -34,7 +34,7 @@ func handleGenerateEdition(w http.ResponseWriter, r *http.Request) { start := time.Now().Add(-72 * time.Hour) end := time.Now() - articles, err := dao.GetArticlesByTime(ctx, start, end) + articles, _, err := dao.GetArticlesForOwner(ctx, "", start, end) if err != nil { httpError(ctx, w, "error getting articles", err) return diff --git a/handler/handle_login.go b/handler/handle_login.go index ae59b44..a524ab7 100644 --- a/handler/handle_login.go +++ b/handler/handle_login.go @@ -25,7 +25,7 @@ func handleLogin(w http.ResponseWriter, r *http.Request) { } t := template.New("frame.html") - t, err := t.ParseFiles("tmpl/frame.html", "tmpl/login.html") + t, err := t.ParseFiles("tmpl/frame.html", "tmpl/meta.html", "tmpl/login.html") if err != nil { slog.Error(ctx, "Error parsing template: %s", err) http.Error(w, err.Error(), 500) diff --git a/handler/handle_news.go b/handler/handle_news.go index c6a0fa2..28168ea 100644 --- a/handler/handle_news.go +++ b/handler/handle_news.go @@ -28,7 +28,7 @@ type newsPage struct { func handleNews(w http.ResponseWriter, r *http.Request) { ctx := r.Context() t := template.New("frame.html") - t, err := t.ParseFiles("tmpl/frame.html", "tmpl/frontpage-1.html", "tmpl/section.html", "tmpl/article-tile.html") + t, err := t.ParseFiles("tmpl/frame.html", "tmpl/meta.html", "tmpl/frontpage-1.html", "tmpl/section.html", "tmpl/article-tile.html") if err != nil { slog.Error(ctx, "Error parsing template: %s", err) http.Error(w, err.Error(), 500) @@ -37,93 +37,95 @@ func handleNews(w http.ResponseWriter, r *http.Request) { u := domain.UserFromContext(ctx) - p := newsPage{ - base: base{ - User: u, - }, - } + var ( + p = newsPage{ + base: base{ + User: u, + Meta: Meta{ + Title: "The Webpage", + Description: "The RSS Reader for the 20th Century", + Image: "/static/images/preview.png", + URL: r.URL.String(), + }, + }, + } + articles []domain.Article + sources []domain.Source + ) + var userID string if u != nil { - articles, sources, err := dao.GetArticlesForOwner(ctx, u.ID, time.Now().Add(-48*time.Hour), time.Now()) - if err != nil { - slog.Error(ctx, "Error getting edition: %s", err) - http.Error(w, err.Error(), 500) - return + userID = u.ID + } + articles, sources, err = dao.GetArticlesForOwner(ctx, userID, time.Now().Add(-48*time.Hour), time.Now()) + if err != nil { + slog.Error(ctx, "Error getting edition: %s", err) + http.Error(w, err.Error(), 500) + return + } + byFeedURL := make(map[string]domain.Source) + smap := make(map[string]struct{}) + for _, s := range sources { + byFeedURL[s.FeedURL] = s + for _, cat := range s.Categories { + smap[cat] = struct{}{} } - byFeedURL := make(map[string]domain.Source) - smap := make(map[string]struct{}) - for _, s := range sources { - byFeedURL[s.FeedURL] = s - for _, cat := range s.Categories { - smap[cat] = struct{}{} + } + for cat := range smap { + p.Categories = append(p.Categories, cat) + } + sort.Strings(p.Categories) + p.DisableCache = true + newArticles := []domain.Article{} +L: + for _, a := range articles { + content := "" + for _, e := range a.Content { + if !utf8.Valid([]byte(e.Value)) { + continue L } - } - for cat := range smap { - p.Categories = append(p.Categories, cat) - } - sort.Strings(p.Categories) - p.DisableCache = true - newArticles := []domain.Article{} - L: - for _, a := range articles { - for _, e := range a.Content { - if !utf8.Valid([]byte(e.Value)) { - continue L - } + if e.Type != "text" { + continue } - a.Source = byFeedURL[a.Source.FeedURL] - newArticles = append(newArticles, a) + content = content + e.Value + " " } - p.Articles = newArticles + a.Content = []domain.Element{{Type: "text", Value: content}} + a.Source = byFeedURL[a.Source.FeedURL] + newArticles = append(newArticles, a) + } + p.Articles = newArticles - bySource := make(map[string][]domain.Article) - for _, a := range p.Articles { - bySource[a.Source.FeedURL] = append(bySource[a.Source.FeedURL], a) - } - newArticles = nil - for _, as := range bySource { - sort.Slice(as, func(i, j int) bool { - return as[i].Timestamp.After(as[j].Timestamp) - }) - } - keys := []string{} - for k := range bySource { - keys = append(keys, k) - } - sort.Strings(keys) - top: - for _, key := range keys { - as, ok := bySource[key] - if !ok { - continue - } - newArticles = append(newArticles, as[0]) - bySource[key] = as[1:] - if len(bySource[key]) == 0 { - delete(bySource, key) - goto top - } + bySource := make(map[string][]domain.Article) + for _, a := range p.Articles { + bySource[a.Source.FeedURL] = append(bySource[a.Source.FeedURL], a) + } + newArticles = nil + for _, as := range bySource { + sort.Slice(as, func(i, j int) bool { + return as[i].Timestamp.After(as[j].Timestamp) + }) + } + keys := []string{} + for k := range bySource { + keys = append(keys, k) + } + sort.Strings(keys) +top: + for _, key := range keys { + as, ok := bySource[key] + if !ok { + continue } - if len(bySource) != 0 { + newArticles = append(newArticles, as[0]) + bySource[key] = as[1:] + if len(bySource[key]) == 0 { + delete(bySource, key) goto top } - p.Articles = newArticles - } else { - e, err := dao.GetEditionForTime(ctx, time.Now(), true) - if err != nil { - slog.Error(ctx, "Error getting edition: %s", err) - http.Error(w, err.Error(), 500) - return - } - if e == nil { - http.NotFound(w, r) - return - } - p.Categories = e.Categories - p.ID = e.ID - p.Title = e.Date - p.Name = e.Name - p.Articles = e.Articles } + if len(bySource) != 0 { + goto top + } + p.Articles = newArticles cat := r.URL.Query().Get("cat") if cat != "" { @@ -164,11 +166,6 @@ func handleNews(w http.ResponseWriter, r *http.Request) { p.Articles = newArticles } - for i := range p.Articles { - p.Articles[i].Description = removeHTMLTag(p.Articles[i].Description) - p.Articles[i].Title = removeHTMLTag(p.Articles[i].Title) - } - err = t.Execute(w, &p) if err != nil { slog.Error(ctx, "Error executing template: %s", err) @@ -224,16 +221,16 @@ func (c *layoutCache) Set(editionID string, i int, a domain.Article) { c.mu.Unlock() } -func (e *newsPage) GetArticle(size int, image bool) domain.Article { +func (e *newsPage) GetArticle(size int, image bool) *domain.Article { if e.claimed == nil { e.claimed = make(map[string]bool) } if a, ok := lc.Get(e.ID, e.cacheIndex); ok && !e.DisableCache { e.cacheIndex++ - return a + return &a } top: - candidates := []domain.Article{} + var candidate domain.Article for _, a := range e.Articles { if a.Size() >= size { if a.ImageURL == "" && image { @@ -242,23 +239,22 @@ top: if e.claimed[a.ID] { continue } - candidates = append(candidates, a) + if a.Timestamp.After(candidate.Timestamp) { + candidate = a + } } } - if len(candidates) == 0 && size > 0 { + if candidate.ID == "" && size > 0 { size -= 100 goto top - } else if len(candidates) == 0 { + } else if candidate.ID == "" { if image { image = false goto top } - return domain.Article{} + return &domain.Article{} } - sort.Slice(candidates, func(i, j int) bool { - return candidates[i].Timestamp.Before(candidates[i].Timestamp) - }) - a := candidates[0] + a := candidate a.ImageURL = func() string { if image { return a.ImageURL @@ -270,6 +266,16 @@ top: if !e.DisableCache { lc.Set(e.ID, e.cacheIndex, a) } + a.Content = capContent(a.Content, size) e.cacheIndex++ - return a + return &a +} + +func capContent(c []domain.Element, size int) []domain.Element { + v := c[0].Value + if len(v) > size+200 { + v = v[:size+200] + } + c[0].Value = v + return c } diff --git a/handler/handle_refresh_article.go b/handler/handle_refresh_article.go index 96e4075..047aa70 100644 --- a/handler/handle_refresh_article.go +++ b/handler/handle_refresh_article.go @@ -5,7 +5,7 @@ import ( "fmt" "github.com/arussellsaw/news/dao" "github.com/monzo/slog" - "html/template" + "github.com/thatguystone/swan" "net/http" "net/url" ) @@ -41,7 +41,16 @@ func handleRefreshArticle(w http.ResponseWriter, r *http.Request) { } a.Content = toElements(article.BodyText, "\n") - a.HTMLContent = template.HTML(article.Body) + a.SetHTMLContent(article.Body) + + sa, err := swan.FromHTML(a.Link, []byte(article.Body)) + if err != nil { + slog.Error(ctx, "Error parsing article: %s", err, slogParams) + return + } + if sa.Img != nil { + a.ImageURL = sa.Img.Src + } err = dao.SetArticle(ctx, a) if err != nil { slog.Error(ctx, "Error storing article: %s", err, slogParams) diff --git a/handler/handle_search.go b/handler/handle_search.go new file mode 100644 index 0000000..8129e3e --- /dev/null +++ b/handler/handle_search.go @@ -0,0 +1,64 @@ +package handler + +import ( + "fmt" + "github.com/arussellsaw/news/dao" + "github.com/arussellsaw/news/domain" + "github.com/pacedotdev/firesearch-sdk/clients/go/firesearch" + "net/http" + "sort" +) + +type result struct { + Article *domain.Article + HitText string +} + +type searchPage struct { + Results []result + Query string + url string +} + +func handleSearch(w http.ResponseWriter, r *http.Request) (interface{}, error) { + ctx := r.Context() + query := r.URL.Query().Get("q") + + searchResults, err := indexService.Search(ctx, firesearch.SearchRequest{ + Query: firesearch.SearchQuery{ + IndexPath: "news/search/articles", + Text: query, + Limit: 200, + Select: []string{"title", "content"}, + }, + }) + if err != nil { + return nil, err + } + p := searchPage{ + Query: query, + url: r.URL.String(), + } + for _, hit := range searchResults.Hits { + article, err := dao.GetArticle(ctx, hit.ID) + if err != nil { + return nil, err + } + p.Results = append(p.Results, result{ + Article: article, + HitText: hit.Highlights[0].Text, + }) + } + sort.Slice(p.Results, func(i, j int) bool { + return p.Results[i].Article.Timestamp.After(p.Results[j].Article.Timestamp) + }) + return p, nil +} + +func (p searchPage) Meta() Meta { + return Meta{ + Title: fmt.Sprintf("Search for %s on The Webpage", p.Query), + URL: p.url, + Image: "/static/images/preview.png", + } +} diff --git a/handler/handle_settings.go b/handler/handle_settings.go index 44129f5..0164dcd 100644 --- a/handler/handle_settings.go +++ b/handler/handle_settings.go @@ -20,13 +20,21 @@ type base struct { ID string Name string Title string + Meta Meta +} + +type Meta struct { + Title string + Description string + Image string + URL string } func handleSettings(w http.ResponseWriter, r *http.Request) { ctx := r.Context() t := template.New("frame.html") - t, err := t.ParseFiles("tmpl/frame.html", "tmpl/settings.html") + t, err := t.ParseFiles("tmpl/frame.html", "tmpl/meta.html", "tmpl/settings.html") if err != nil { slog.Error(ctx, "Error parsing template: %s", err) http.Error(w, err.Error(), 500) diff --git a/handler/pubsub_article.go b/handler/pubsub_article.go index fe59fc3..95cbb0e 100644 --- a/handler/pubsub_article.go +++ b/handler/pubsub_article.go @@ -1,20 +1,26 @@ package handler import ( + "bytes" "context" "encoding/json" - "fmt" "github.com/arussellsaw/news/dao" "github.com/arussellsaw/news/idgen" "github.com/monzo/slog" - "html/template" + "github.com/pacedotdev/firesearch-sdk/clients/go/firesearch" + "github.com/thatguystone/swan" + "golang.org/x/sync/semaphore" "net/http" - "net/url" + "os/exec" "strings" "github.com/arussellsaw/news/domain" ) +var ( + s = semaphore.NewWeighted(20) +) + type ArticleEvent struct { Article domain.Article Source domain.Source @@ -49,39 +55,84 @@ func handlePubsubArticle(w http.ResponseWriter, r *http.Request) { slogParams := map[string]string{ "url": e.Article.Link, } - res, err := c.Get(fmt.Sprintf("https://readability-server.russellsaw.io/?url=%s", url.QueryEscape(e.Article.Link))) + err = s.Acquire(ctx, 1) if err != nil { - slog.Error(ctx, "Error fetching article: %s", err, slogParams) + slog.Error(ctx, "Failed to acquire semaphore: %s", err) + return + } + cmd := exec.Command("node", "./readability-server/index.js", e.Article.Link) + buf := &bytes.Buffer{} + cmd.Stdout = buf + err = cmd.Run() + s.Release(1) + if err != nil { + slog.Error(ctx, "Error fetching article: %s - %s", err, buf.String(), slogParams) return } var article = struct { Body string `json:"body"` BodyText string `json:"body_text"` }{} - err = json.NewDecoder(res.Body).Decode(&article) + err = json.NewDecoder(buf).Decode(&article) if err != nil { slog.Error(ctx, "Error fetching article: %s", err, slogParams) return } + if len(article.Body) > 1024*1024*5 { + slog.Warn(ctx, "dropping article, too large: %s", e.Article.Link) + return + } + a := domain.Article{ ID: idgen.New("art"), - Title: e.Article.Title, - Description: e.Article.Description, - Content: toElements(article.BodyText, "\n"), - HTMLContent: template.HTML(article.Body), + Title: removeHTMLTag(e.Article.Title), + Description: removeHTMLTag(e.Article.Description), + Content: []domain.Element{{Type: "text", Value: removeHTMLTag(article.BodyText)}}, ImageURL: e.Article.ImageURL, Link: e.Article.Link, Source: e.Article.Source, Timestamp: e.Article.Timestamp, TS: e.Article.Timestamp.Format("Mon Jan 2 15:04"), } + a.SetHTMLContent(article.Body) + + sa, err := swan.FromHTML(a.Link, []byte(article.Body)) + if err != nil { + slog.Error(ctx, "Error parsing article: %s", err, slogParams) + return + } + if sa.Img != nil { + a.ImageURL = sa.Img.Src + } + err = dao.SetArticle(ctx, &a) if err != nil { slog.Error(ctx, "Error storing article: %s", err, slogParams) return } slog.Info(ctx, "Stored new article: %s - %s", a.ID, a.Title) + _, err = indexService.PutDoc(ctx, firesearch.PutDocRequest{ + IndexPath: "news/search/articles", + Doc: firesearch.Doc{ + ID: a.ID, + SearchFields: []firesearch.SearchField{ + { + Key: "title", + Value: a.Title, + Store: true, + }, + { + Key: "content", + Value: article.BodyText, + Store: true, + }, + }, + }, + }) + if err != nil { + slog.Error(ctx, "Error indexing: %s", err) + } } func httpError(ctx context.Context, w http.ResponseWriter, msg string, err error) { diff --git a/handler/pubsub_source.go b/handler/pubsub_source.go index 4756c4d..c7f0e83 100644 --- a/handler/pubsub_source.go +++ b/handler/pubsub_source.go @@ -27,12 +27,12 @@ func handlePubsubSource(w http.ResponseWriter, r *http.Request) { ctx = r.Context() ) if err := json.NewDecoder(r.Body).Decode(&m); err != nil { - httpError(ctx, w, "Error decoding event", err) + slog.Error(ctx, "Error decoding event: %s", err) return } if err := json.Unmarshal(m.Message.Data, &e); err != nil { - httpError(ctx, w, "Error decoding feed", err) + slog.Error(ctx, "Error decoding feed: %s", err) return } @@ -40,7 +40,7 @@ func handlePubsubSource(w http.ResponseWriter, r *http.Request) { fp := gofeed.NewParser() feed, err := fp.ParseURL(e.Source.FeedURL) if err != nil { - httpError(ctx, w, "Error parsing rss feed", err) + slog.Error(ctx, "Error parsing feed: %s", err) return } diff --git a/handler/router.go b/handler/router.go index af54f74..9d3bf6e 100644 --- a/handler/router.go +++ b/handler/router.go @@ -2,14 +2,23 @@ package handler import ( "context" - "github.com/arussellsaw/news/domain" - "github.com/monzo/slog" + "fmt" "html/template" "net/http" "net/http/cookiejar" "os" + "cloud.google.com/go/profiler" + secretmanager "cloud.google.com/go/secretmanager/apiv1beta1" + secrets "google.golang.org/genproto/googleapis/cloud/secretmanager/v1beta1" + + "github.com/arussellsaw/news/domain" "github.com/arussellsaw/news/pkg/util" + "github.com/felixge/fgprof" + + "github.com/gorilla/mux" + "github.com/monzo/slog" + "github.com/pacedotdev/firesearch-sdk/clients/go/firesearch" ) var ( @@ -18,13 +27,16 @@ var ( Jar: jar, //binks } - p domain.Publisher + p domain.Publisher + client *firesearch.Client + indexService *firesearch.IndexService ) func Init(ctx context.Context) http.Handler { - m := http.NewServeMux() + m := mux.NewRouter() m.Handle("/", http.HandlerFunc(handleNews)) - m.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static/")))) + fs := http.FileServer(http.Dir("./static/")) + m.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs)) m.Handle("/image", http.HandlerFunc(handleDitherImage)) m.Handle("/article", http.HandlerFunc(handleArticle)) m.Handle("/login", http.HandlerFunc(handleLogin)) @@ -36,26 +48,40 @@ func Init(ctx context.Context) http.Handler { http.Redirect(w, r, "/", http.StatusTemporaryRedirect) })) m.Handle("/favicon.ico", http.NotFoundHandler()) - m.Handle("/generate-edition", http.HandlerFunc(handleGenerateEdition)) m.Handle("/events/source", http.HandlerFunc(handlePubsubSource)) m.Handle("/events/article", http.HandlerFunc(handlePubsubArticle)) m.Handle("/poll", http.HandlerFunc(handlePoll)) m.Handle("/article/debug", http.HandlerFunc(handleDebugArticle)) m.Handle("/article/refresh", http.HandlerFunc(handleRefreshArticle)) m.Handle("/settings/source", genericHandler("tmpl/settings_source.html", sourceSettingsData)) + m.Handle("/search", genericHandler("tmpl/search.html", handleSearch)) + m.Handle("/debug/fgprof", fgprof.Handler()) + cfg := profiler.Config{ + Service: "news", + ServiceVersion: "1.0.0", + ProjectID: "russellsaw", + + // For OpenCensus users: + // To see Profiler agent spans in APM backend, + // set EnableOCTelemetry to true + // EnableOCTelemetry: true, + } + + // Profiler initialization, best done as early as possible. + if err := profiler.Start(cfg); err != nil { + panic(err) + } h := util.CloudContextMiddleware( util.HTTPLogParamsMiddleware( m, ), ) - h, err := domain.AnalyticsMiddleware(h.ServeHTTP) - if err != nil { - panic(err) - } h = sessionMiddleware(h) + var err error + if os.Getenv("USER") == "alexrussell-saw" { slog.Info(ctx, "Using HTTP Publisher") p = &domain.HTTPPublisher{ @@ -70,6 +96,25 @@ func Init(ctx context.Context) http.Handler { } } + sm, err := secretmanager.NewClient(ctx) + if err != nil { + panic(err) + } + defer sm.Close() + + res, err := sm.AccessSecretVersion( + ctx, + &secrets.AccessSecretVersionRequest{Name: fmt.Sprintf( + "projects/266969078315/secrets/%s/versions/latest", + "FIRESEARCH_API_KEY", + )}, + ) + if err != nil { + panic(err) + } + client = firesearch.NewClient("https://firesearch-3phpehgkya-ew.a.run.app/api", res.Payload.String()) + indexService = firesearch.NewIndexService(client) + return h } @@ -88,7 +133,7 @@ func genericHandler(path string, data func(w http.ResponseWriter, r *http.Reques }, } t := template.New("frame.html") - t, err := t.ParseFiles("tmpl/frame.html", path) + t, err := t.ParseFiles("tmpl/frame.html", "tmpl/meta.html", path) if err != nil { slog.Error(ctx, "Error parsing template: %s", err) http.Error(w, err.Error(), 500) @@ -100,6 +145,10 @@ func genericHandler(path string, data func(w http.ResponseWriter, r *http.Reques p.Error = err.Error() } + if mp, ok := p.Data.(MetaProvider); ok { + p.Meta = mp.Meta() + } + err = t.Execute(w, &p) if err != nil { slog.Error(ctx, "Error executing template: %s", err) @@ -109,3 +158,7 @@ func genericHandler(path string, data func(w http.ResponseWriter, r *http.Reques }) } + +type MetaProvider interface { + Meta() Meta +} diff --git a/pkg/util/context.go b/pkg/util/context.go index 68046f4..98143e9 100644 --- a/pkg/util/context.go +++ b/pkg/util/context.go @@ -63,7 +63,7 @@ func SetParam(ctx context.Context, key, value string) context.Context { return ctx } -func Params(ctx context.Context) map[string]string { +func Params(ctx context.Context) map[string]interface{} { container, ok := ctx.Value(paramKey("params")).(paramContainer) if !ok { return nil @@ -71,7 +71,7 @@ func Params(ctx context.Context) map[string]string { container.mu.Lock() defer container.mu.Unlock() - params := make(map[string]string) + params := make(map[string]interface{}) for k, v := range container.params { params[k] = v } diff --git a/pkg/util/slog.go b/pkg/util/slog.go index ceb91e6..9f92183 100644 --- a/pkg/util/slog.go +++ b/pkg/util/slog.go @@ -79,7 +79,7 @@ type Entry struct { Severity string `json:"severity,omitempty"` Trace string `json:"logging.googleapis.com/trace,omitempty"` - Params map[string]string `json:"params,omitempty"` + Params map[string]interface{} `json:"params,omitempty"` } // String renders an entry structure to the JSON format expected by Stackdriver. diff --git a/readability-server/index.js b/readability-server/index.js index d96ec45..c56f563 100644 --- a/readability-server/index.js +++ b/readability-server/index.js @@ -5,25 +5,22 @@ const fetch = require('node-fetch'); const createDOMPurify = require('dompurify'); const url = require('url'); -const handler = function (req, res) { - const articleURL = new URL(req.url, "http://localhost:9090/").searchParams.get("url") - fetch(articleURL) - .then(res => res.text()) - .then(body => { - var doc = new JSDOM(body, { - url: articleURL - }); - const DOMPurify = createDOMPurify(doc.window); - let reader = new Readability(doc.window.document); - let article = reader.parse(); - let clean = DOMPurify.sanitize(article.content, {SAFE_FOR_TEMPLATES: true}); - res.setHeader("Content-Type", "application/json") - res.end(JSON.stringify({ - body: clean, - body_text: article.textContent - })) - }) -} - -const server = http.createServer(handler); -server.listen(8080); \ No newline at end of file +const articleURL = process.argv[2]; +fetch(articleURL) + .then(res => res.text()) + .then(body => { + var doc = new JSDOM(body, { + url: articleURL + }); + const DOMPurify = createDOMPurify(doc.window); + let reader = new Readability(doc.window.document); + let article = reader.parse(); + let clean = DOMPurify.sanitize(article.content, {SAFE_FOR_TEMPLATES: true}); + console.log(JSON.stringify({ + body: clean, + body_text: article.textContent + })) + }).catch(error => { + console.log(error) + process.exit(1) + }) diff --git a/readability-server/package-lock.json b/readability-server/package-lock.json new file mode 100644 index 0000000..8b4362a --- /dev/null +++ b/readability-server/package-lock.json @@ -0,0 +1,721 @@ +{ + "name": "readability-server", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@mozilla/readability": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.3.0.tgz", + "integrity": "sha512-q8f1CAZsRKK1j+O0BmikGIlKSK03RpT4woT0PCQwhw0nH0z4+rG026AkxoPcjT7Dsgh1ifGscW8tOpvjoyOjvw==" + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + } + } + }, + "dompurify": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.2.3.tgz", + "integrity": "sha512-8Hv7Q0FuwD9rWoB6qI2eZsfKbGXfoUVuGHHrE15vgk4ReOKwOkSgbqb2OMFtc0d5besOEkoLkcyuV10zQ2X5gw==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "is-potential-custom-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", + "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdom": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", + "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "requires": { + "abab": "^2.0.3", + "acorn": "^7.1.1", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.2.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.0", + "domexception": "^2.0.1", + "escodegen": "^1.14.1", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", + "nwsapi": "^2.2.0", + "parse5": "5.1.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.8", + "saxes": "^5.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0", + "ws": "^7.2.3", + "xml-name-validator": "^3.0.0" + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "requires": { + "punycode": "^2.1.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "ws": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", + "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + } + } +} diff --git a/static/bulma.min.css b/static/bulma.min.css index 74d8cf8..a807a31 100644 --- a/static/bulma.min.css +++ b/static/bulma.min.css @@ -1 +1 @@ -/*! bulma.io v0.8.2 | MIT License | github.com/jgthms/bulma */@-webkit-keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}.breadcrumb,.button,.delete,.file,.is-unselectable,.modal-close,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:.625em;margin-top:-.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:.625em}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.highlight:not(:last-child),.level:not(:last-child),.list:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.pagination:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.tabs:not(:last-child),.title:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:0;position:relative;vertical-align:top;width:20px}.delete::after,.delete::before,.modal-close::after,.modal-close::before{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:focus,.delete:hover,.modal-close:focus,.modal-close:hover{background-color:rgba(10,10,10,.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,.4)}.is-small.delete,.is-small.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.control.is-loading::after,.loader,.select.is-loading::after{-webkit-animation:spinAround .5s infinite linear;animation:spinAround .5s infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img,.is-overlay,.modal,.modal-background{bottom:0;left:0;position:absolute;right:0;top:0}.button,.file-cta,.file-name,.input,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.select select,.textarea{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(.5em - 1px);padding-left:calc(.75em - 1px);padding-right:calc(.75em - 1px);padding-top:calc(.5em - 1px);position:relative;vertical-align:top}.button:active,.button:focus,.file-cta:active,.file-cta:focus,.file-name:active,.file-name:focus,.input:active,.input:focus,.is-active.button,.is-active.file-cta,.is-active.file-name,.is-active.input,.is-active.pagination-ellipsis,.is-active.pagination-link,.is-active.pagination-next,.is-active.pagination-previous,.is-active.textarea,.is-focused.button,.is-focused.file-cta,.is-focused.file-name,.is-focused.input,.is-focused.pagination-ellipsis,.is-focused.pagination-link,.is-focused.pagination-next,.is-focused.pagination-previous,.is-focused.textarea,.pagination-ellipsis:active,.pagination-ellipsis:focus,.pagination-link:active,.pagination-link:focus,.pagination-next:active,.pagination-next:focus,.pagination-previous:active,.pagination-previous:focus,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{outline:0}.button[disabled],.file-cta[disabled],.file-name[disabled],.input[disabled],.pagination-ellipsis[disabled],.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .button,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .input,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-previous,fieldset[disabled] .select select,fieldset[disabled] .textarea{cursor:not-allowed}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,::after,::before{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:hidden;overflow-y:scroll;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,select,textarea{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:#4a4a4a;font-size:1em;font-weight:400;line-height:1.5}a{color:#3273dc;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:#f5f5f5;color:#f14668;font-size:.875em;font-weight:400;padding:.25em .5em .25em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=checkbox],input[type=radio]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#363636;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#4a4a4a;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:left}table th{color:#363636}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left!important}.is-pulled-right{float:right!important}.is-clipped{overflow:hidden!important}.is-size-1{font-size:3rem!important}.is-size-2{font-size:2.5rem!important}.is-size-3{font-size:2rem!important}.is-size-4{font-size:1.5rem!important}.is-size-5{font-size:1.25rem!important}.is-size-6{font-size:1rem!important}.is-size-7{font-size:.75rem!important}@media screen and (max-width:768px){.is-size-1-mobile{font-size:3rem!important}.is-size-2-mobile{font-size:2.5rem!important}.is-size-3-mobile{font-size:2rem!important}.is-size-4-mobile{font-size:1.5rem!important}.is-size-5-mobile{font-size:1.25rem!important}.is-size-6-mobile{font-size:1rem!important}.is-size-7-mobile{font-size:.75rem!important}}@media screen and (min-width:769px),print{.is-size-1-tablet{font-size:3rem!important}.is-size-2-tablet{font-size:2.5rem!important}.is-size-3-tablet{font-size:2rem!important}.is-size-4-tablet{font-size:1.5rem!important}.is-size-5-tablet{font-size:1.25rem!important}.is-size-6-tablet{font-size:1rem!important}.is-size-7-tablet{font-size:.75rem!important}}@media screen and (max-width:1023px){.is-size-1-touch{font-size:3rem!important}.is-size-2-touch{font-size:2.5rem!important}.is-size-3-touch{font-size:2rem!important}.is-size-4-touch{font-size:1.5rem!important}.is-size-5-touch{font-size:1.25rem!important}.is-size-6-touch{font-size:1rem!important}.is-size-7-touch{font-size:.75rem!important}}@media screen and (min-width:1024px){.is-size-1-desktop{font-size:3rem!important}.is-size-2-desktop{font-size:2.5rem!important}.is-size-3-desktop{font-size:2rem!important}.is-size-4-desktop{font-size:1.5rem!important}.is-size-5-desktop{font-size:1.25rem!important}.is-size-6-desktop{font-size:1rem!important}.is-size-7-desktop{font-size:.75rem!important}}@media screen and (min-width:1216px){.is-size-1-widescreen{font-size:3rem!important}.is-size-2-widescreen{font-size:2.5rem!important}.is-size-3-widescreen{font-size:2rem!important}.is-size-4-widescreen{font-size:1.5rem!important}.is-size-5-widescreen{font-size:1.25rem!important}.is-size-6-widescreen{font-size:1rem!important}.is-size-7-widescreen{font-size:.75rem!important}}@media screen and (min-width:1408px){.is-size-1-fullhd{font-size:3rem!important}.is-size-2-fullhd{font-size:2.5rem!important}.is-size-3-fullhd{font-size:2rem!important}.is-size-4-fullhd{font-size:1.5rem!important}.is-size-5-fullhd{font-size:1.25rem!important}.is-size-6-fullhd{font-size:1rem!important}.is-size-7-fullhd{font-size:.75rem!important}}.has-text-centered{text-align:center!important}.has-text-justified{text-align:justify!important}.has-text-left{text-align:left!important}.has-text-right{text-align:right!important}@media screen and (max-width:768px){.has-text-centered-mobile{text-align:center!important}}@media screen and (min-width:769px),print{.has-text-centered-tablet{text-align:center!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-centered-tablet-only{text-align:center!important}}@media screen and (max-width:1023px){.has-text-centered-touch{text-align:center!important}}@media screen and (min-width:1024px){.has-text-centered-desktop{text-align:center!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-centered-desktop-only{text-align:center!important}}@media screen and (min-width:1216px){.has-text-centered-widescreen{text-align:center!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-centered-widescreen-only{text-align:center!important}}@media screen and (min-width:1408px){.has-text-centered-fullhd{text-align:center!important}}@media screen and (max-width:768px){.has-text-justified-mobile{text-align:justify!important}}@media screen and (min-width:769px),print{.has-text-justified-tablet{text-align:justify!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-justified-tablet-only{text-align:justify!important}}@media screen and (max-width:1023px){.has-text-justified-touch{text-align:justify!important}}@media screen and (min-width:1024px){.has-text-justified-desktop{text-align:justify!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-justified-desktop-only{text-align:justify!important}}@media screen and (min-width:1216px){.has-text-justified-widescreen{text-align:justify!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-justified-widescreen-only{text-align:justify!important}}@media screen and (min-width:1408px){.has-text-justified-fullhd{text-align:justify!important}}@media screen and (max-width:768px){.has-text-left-mobile{text-align:left!important}}@media screen and (min-width:769px),print{.has-text-left-tablet{text-align:left!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-left-tablet-only{text-align:left!important}}@media screen and (max-width:1023px){.has-text-left-touch{text-align:left!important}}@media screen and (min-width:1024px){.has-text-left-desktop{text-align:left!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-left-desktop-only{text-align:left!important}}@media screen and (min-width:1216px){.has-text-left-widescreen{text-align:left!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-left-widescreen-only{text-align:left!important}}@media screen and (min-width:1408px){.has-text-left-fullhd{text-align:left!important}}@media screen and (max-width:768px){.has-text-right-mobile{text-align:right!important}}@media screen and (min-width:769px),print{.has-text-right-tablet{text-align:right!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-right-tablet-only{text-align:right!important}}@media screen and (max-width:1023px){.has-text-right-touch{text-align:right!important}}@media screen and (min-width:1024px){.has-text-right-desktop{text-align:right!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-right-desktop-only{text-align:right!important}}@media screen and (min-width:1216px){.has-text-right-widescreen{text-align:right!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-right-widescreen-only{text-align:right!important}}@media screen and (min-width:1408px){.has-text-right-fullhd{text-align:right!important}}.is-capitalized{text-transform:capitalize!important}.is-lowercase{text-transform:lowercase!important}.is-uppercase{text-transform:uppercase!important}.is-italic{font-style:italic!important}.has-text-white{color:#fff!important}a.has-text-white:focus,a.has-text-white:hover{color:#e6e6e6!important}.has-background-white{background-color:#fff!important}.has-text-black{color:#0a0a0a!important}a.has-text-black:focus,a.has-text-black:hover{color:#000!important}.has-background-black{background-color:#0a0a0a!important}.has-text-light{color:#f5f5f5!important}a.has-text-light:focus,a.has-text-light:hover{color:#dbdbdb!important}.has-background-light{background-color:#f5f5f5!important}.has-text-dark{color:#363636!important}a.has-text-dark:focus,a.has-text-dark:hover{color:#1c1c1c!important}.has-background-dark{background-color:#363636!important}.has-text-primary{color:#00d1b2!important}a.has-text-primary:focus,a.has-text-primary:hover{color:#009e86!important}.has-background-primary{background-color:#00d1b2!important}.has-text-link{color:#3273dc!important}a.has-text-link:focus,a.has-text-link:hover{color:#205bbc!important}.has-background-link{background-color:#3273dc!important}.has-text-info{color:#3298dc!important}a.has-text-info:focus,a.has-text-info:hover{color:#207dbc!important}.has-background-info{background-color:#3298dc!important}.has-text-success{color:#48c774!important}a.has-text-success:focus,a.has-text-success:hover{color:#34a85c!important}.has-background-success{background-color:#48c774!important}.has-text-warning{color:#ffdd57!important}a.has-text-warning:focus,a.has-text-warning:hover{color:#ffd324!important}.has-background-warning{background-color:#ffdd57!important}.has-text-danger{color:#f14668!important}a.has-text-danger:focus,a.has-text-danger:hover{color:#ee1742!important}.has-background-danger{background-color:#f14668!important}.has-text-black-bis{color:#121212!important}.has-background-black-bis{background-color:#121212!important}.has-text-black-ter{color:#242424!important}.has-background-black-ter{background-color:#242424!important}.has-text-grey-darker{color:#363636!important}.has-background-grey-darker{background-color:#363636!important}.has-text-grey-dark{color:#4a4a4a!important}.has-background-grey-dark{background-color:#4a4a4a!important}.has-text-grey{color:#7a7a7a!important}.has-background-grey{background-color:#7a7a7a!important}.has-text-grey-light{color:#b5b5b5!important}.has-background-grey-light{background-color:#b5b5b5!important}.has-text-grey-lighter{color:#dbdbdb!important}.has-background-grey-lighter{background-color:#dbdbdb!important}.has-text-white-ter{color:#f5f5f5!important}.has-background-white-ter{background-color:#f5f5f5!important}.has-text-white-bis{color:#fafafa!important}.has-background-white-bis{background-color:#fafafa!important}.has-text-weight-light{font-weight:300!important}.has-text-weight-normal{font-weight:400!important}.has-text-weight-medium{font-weight:500!important}.has-text-weight-semibold{font-weight:600!important}.has-text-weight-bold{font-weight:700!important}.is-family-primary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-secondary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-sans-serif{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-monospace{font-family:monospace!important}.is-family-code{font-family:monospace!important}.is-block{display:block!important}@media screen and (max-width:768px){.is-block-mobile{display:block!important}}@media screen and (min-width:769px),print{.is-block-tablet{display:block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-block-tablet-only{display:block!important}}@media screen and (max-width:1023px){.is-block-touch{display:block!important}}@media screen and (min-width:1024px){.is-block-desktop{display:block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-block-desktop-only{display:block!important}}@media screen and (min-width:1216px){.is-block-widescreen{display:block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-block-widescreen-only{display:block!important}}@media screen and (min-width:1408px){.is-block-fullhd{display:block!important}}.is-flex{display:flex!important}@media screen and (max-width:768px){.is-flex-mobile{display:flex!important}}@media screen and (min-width:769px),print{.is-flex-tablet{display:flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-flex-tablet-only{display:flex!important}}@media screen and (max-width:1023px){.is-flex-touch{display:flex!important}}@media screen and (min-width:1024px){.is-flex-desktop{display:flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-flex-desktop-only{display:flex!important}}@media screen and (min-width:1216px){.is-flex-widescreen{display:flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-flex-widescreen-only{display:flex!important}}@media screen and (min-width:1408px){.is-flex-fullhd{display:flex!important}}.is-inline{display:inline!important}@media screen and (max-width:768px){.is-inline-mobile{display:inline!important}}@media screen and (min-width:769px),print{.is-inline-tablet{display:inline!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-tablet-only{display:inline!important}}@media screen and (max-width:1023px){.is-inline-touch{display:inline!important}}@media screen and (min-width:1024px){.is-inline-desktop{display:inline!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-desktop-only{display:inline!important}}@media screen and (min-width:1216px){.is-inline-widescreen{display:inline!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-widescreen-only{display:inline!important}}@media screen and (min-width:1408px){.is-inline-fullhd{display:inline!important}}.is-inline-block{display:inline-block!important}@media screen and (max-width:768px){.is-inline-block-mobile{display:inline-block!important}}@media screen and (min-width:769px),print{.is-inline-block-tablet{display:inline-block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-block-tablet-only{display:inline-block!important}}@media screen and (max-width:1023px){.is-inline-block-touch{display:inline-block!important}}@media screen and (min-width:1024px){.is-inline-block-desktop{display:inline-block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-block-desktop-only{display:inline-block!important}}@media screen and (min-width:1216px){.is-inline-block-widescreen{display:inline-block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-block-widescreen-only{display:inline-block!important}}@media screen and (min-width:1408px){.is-inline-block-fullhd{display:inline-block!important}}.is-inline-flex{display:inline-flex!important}@media screen and (max-width:768px){.is-inline-flex-mobile{display:inline-flex!important}}@media screen and (min-width:769px),print{.is-inline-flex-tablet{display:inline-flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-flex-tablet-only{display:inline-flex!important}}@media screen and (max-width:1023px){.is-inline-flex-touch{display:inline-flex!important}}@media screen and (min-width:1024px){.is-inline-flex-desktop{display:inline-flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-flex-desktop-only{display:inline-flex!important}}@media screen and (min-width:1216px){.is-inline-flex-widescreen{display:inline-flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-flex-widescreen-only{display:inline-flex!important}}@media screen and (min-width:1408px){.is-inline-flex-fullhd{display:inline-flex!important}}.is-hidden{display:none!important}.is-sr-only{border:none!important;clip:rect(0,0,0,0)!important;height:.01em!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:.01em!important}@media screen and (max-width:768px){.is-hidden-mobile{display:none!important}}@media screen and (min-width:769px),print{.is-hidden-tablet{display:none!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-hidden-tablet-only{display:none!important}}@media screen and (max-width:1023px){.is-hidden-touch{display:none!important}}@media screen and (min-width:1024px){.is-hidden-desktop{display:none!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-hidden-desktop-only{display:none!important}}@media screen and (min-width:1216px){.is-hidden-widescreen{display:none!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-hidden-widescreen-only{display:none!important}}@media screen and (min-width:1408px){.is-hidden-fullhd{display:none!important}}.is-invisible{visibility:hidden!important}@media screen and (max-width:768px){.is-invisible-mobile{visibility:hidden!important}}@media screen and (min-width:769px),print{.is-invisible-tablet{visibility:hidden!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-invisible-tablet-only{visibility:hidden!important}}@media screen and (max-width:1023px){.is-invisible-touch{visibility:hidden!important}}@media screen and (min-width:1024px){.is-invisible-desktop{visibility:hidden!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-invisible-desktop-only{visibility:hidden!important}}@media screen and (min-width:1216px){.is-invisible-widescreen{visibility:hidden!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-invisible-widescreen-only{visibility:hidden!important}}@media screen and (min-width:1408px){.is-invisible-fullhd{visibility:hidden!important}}.is-marginless{margin:0!important}.is-paddingless{padding:0!important}.is-radiusless{border-radius:0!important}.is-shadowless{box-shadow:none!important}.is-relative{position:relative!important}.box{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px #3273dc}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2),0 0 0 1px #3273dc}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-large,.button .icon.is-medium,.button .icon.is-small{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button.is-hovered,.button:hover{border-color:#b5b5b5;color:#363636}.button.is-focused,.button:focus{border-color:#3273dc;color:#363636}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-active,.button:active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#4a4a4a;text-decoration:underline}.button.is-text.is-focused,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text:hover{background-color:#f5f5f5;color:#363636}.button.is-text.is-active,.button.is-text:active{background-color:#e8e8e8;color:#363636}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white.is-hovered,.button.is-white:hover{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white.is-focused,.button.is-white:focus{border-color:transparent;color:#0a0a0a}.button.is-white.is-focused:not(:active),.button.is-white:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.button.is-white.is-active,.button.is-white:active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-hovered,.button.is-white.is-inverted:hover{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined.is-focused,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-outlined.is-loading.is-focused::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined.is-focused,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined:hover{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black.is-hovered,.button.is-black:hover{background-color:#040404;border-color:transparent;color:#fff}.button.is-black.is-focused,.button.is-black:focus{border-color:transparent;color:#fff}.button.is-black.is-focused:not(:active),.button.is-black:focus:not(:active){box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.button.is-black.is-active,.button.is-black:active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-hovered,.button.is-black.is-inverted:hover{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined.is-focused,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-outlined.is-loading.is-focused::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined.is-focused,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined:hover{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-hovered,.button.is-light:hover{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused,.button.is-light:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused:not(:active),.button.is-light:focus:not(:active){box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.button.is-light.is-active,.button.is-light:active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-hovered,.button.is-light.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined.is-focused,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-outlined.is-loading.is-focused::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-light.is-inverted.is-outlined.is-focused,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-dark{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark.is-hovered,.button.is-dark:hover{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark.is-focused,.button.is-dark:focus{border-color:transparent;color:#fff}.button.is-dark.is-focused:not(:active),.button.is-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.button.is-dark.is-active,.button.is-dark:active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],fieldset[disabled] .button.is-dark{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-hovered,.button.is-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined.is-focused,.button.is-dark.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined:hover{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-outlined.is-loading.is-focused::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined.is-focused,.button.is-dark.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary{background-color:#00d1b2;border-color:transparent;color:#fff}.button.is-primary.is-hovered,.button.is-primary:hover{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary.is-focused,.button.is-primary:focus{border-color:transparent;color:#fff}.button.is-primary.is-focused:not(:active),.button.is-primary:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.button.is-primary.is-active,.button.is-primary:active{background-color:#00b89c;border-color:transparent;color:#fff}.button.is-primary[disabled],fieldset[disabled] .button.is-primary{background-color:#00d1b2;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-hovered,.button.is-primary.is-inverted:hover{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],fieldset[disabled] .button.is-primary.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#00d1b2}.button.is-primary.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;color:#00d1b2}.button.is-primary.is-outlined.is-focused,.button.is-primary.is-outlined.is-hovered,.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined:hover{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.button.is-primary.is-outlined.is-loading::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-outlined.is-loading.is-focused::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-outlined.is-loading:focus::after,.button.is-primary.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;box-shadow:none;color:#00d1b2}.button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined.is-focused,.button.is-primary.is-inverted.is-outlined.is-hovered,.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined:hover{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light{background-color:#ebfffc;color:#00947e}.button.is-primary.is-light.is-hovered,.button.is-primary.is-light:hover{background-color:#defffa;border-color:transparent;color:#00947e}.button.is-primary.is-light.is-active,.button.is-primary.is-light:active{background-color:#d1fff8;border-color:transparent;color:#00947e}.button.is-link{background-color:#3273dc;border-color:transparent;color:#fff}.button.is-link.is-hovered,.button.is-link:hover{background-color:#276cda;border-color:transparent;color:#fff}.button.is-link.is-focused,.button.is-link:focus{border-color:transparent;color:#fff}.button.is-link.is-focused:not(:active),.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#2366d1;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#3273dc;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-hovered,.button.is-link.is-inverted:hover{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3273dc}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;color:#3273dc}.button.is-link.is-outlined.is-focused,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined:hover{background-color:#3273dc;border-color:#3273dc;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-outlined.is-loading.is-focused::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;box-shadow:none;color:#3273dc}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined.is-focused,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined:hover{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eef3fc;color:#2160c4}.button.is-link.is-light.is-hovered,.button.is-link.is-light:hover{background-color:#e3ecfa;border-color:transparent;color:#2160c4}.button.is-link.is-light.is-active,.button.is-link.is-light:active{background-color:#d8e4f8;border-color:transparent;color:#2160c4}.button.is-info{background-color:#3298dc;border-color:transparent;color:#fff}.button.is-info.is-hovered,.button.is-info:hover{background-color:#2793da;border-color:transparent;color:#fff}.button.is-info.is-focused,.button.is-info:focus{border-color:transparent;color:#fff}.button.is-info.is-focused:not(:active),.button.is-info:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.button.is-info.is-active,.button.is-info:active{background-color:#238cd1;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3298dc;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-hovered,.button.is-info.is-inverted:hover{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3298dc}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;color:#3298dc}.button.is-info.is-outlined.is-focused,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined:hover{background-color:#3298dc;border-color:#3298dc;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-outlined.is-loading.is-focused::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;box-shadow:none;color:#3298dc}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined.is-focused,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined:hover{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.button.is-info.is-light.is-hovered,.button.is-info.is-light:hover{background-color:#e3f1fa;border-color:transparent;color:#1d72aa}.button.is-info.is-light.is-active,.button.is-info.is-light:active{background-color:#d8ebf8;border-color:transparent;color:#1d72aa}.button.is-success{background-color:#48c774;border-color:transparent;color:#fff}.button.is-success.is-hovered,.button.is-success:hover{background-color:#3ec46d;border-color:transparent;color:#fff}.button.is-success.is-focused,.button.is-success:focus{border-color:transparent;color:#fff}.button.is-success.is-focused:not(:active),.button.is-success:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.button.is-success.is-active,.button.is-success:active{background-color:#3abb67;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#48c774;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-hovered,.button.is-success.is-inverted:hover{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#48c774}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined{background-color:transparent;border-color:#48c774;color:#48c774}.button.is-success.is-outlined.is-focused,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined:hover{background-color:#48c774;border-color:#48c774;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-outlined.is-loading.is-focused::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#48c774;box-shadow:none;color:#48c774}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined.is-focused,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined:hover{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effaf3;color:#257942}.button.is-success.is-light.is-hovered,.button.is-success.is-light:hover{background-color:#e6f7ec;border-color:transparent;color:#257942}.button.is-success.is-light.is-active,.button.is-success.is-light:active{background-color:#dcf4e4;border-color:transparent;color:#257942}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-hovered,.button.is-warning:hover{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused,.button.is-warning:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused:not(:active),.button.is-warning:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.button.is-warning.is-active,.button.is-warning:active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-hovered,.button.is-warning.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined.is-focused,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined:hover{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-outlined.is-loading.is-focused::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning.is-inverted.is-outlined.is-focused,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light.is-hovered,.button.is-warning.is-light:hover{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light.is-active,.button.is-warning.is-light:active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#f14668;border-color:transparent;color:#fff}.button.is-danger.is-hovered,.button.is-danger:hover{background-color:#f03a5f;border-color:transparent;color:#fff}.button.is-danger.is-focused,.button.is-danger:focus{border-color:transparent;color:#fff}.button.is-danger.is-focused:not(:active),.button.is-danger:focus:not(:active){box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.button.is-danger.is-active,.button.is-danger:active{background-color:#ef2e55;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#f14668;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-hovered,.button.is-danger.is-inverted:hover{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f14668}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;color:#f14668}.button.is-danger.is-outlined.is-focused,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined:hover{background-color:#f14668;border-color:#f14668;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-outlined.is-loading.is-focused::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;box-shadow:none;color:#f14668}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined.is-focused,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined:hover{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.button.is-danger.is-light.is-hovered,.button.is-danger.is-light:hover{background-color:#fde0e6;border-color:transparent;color:#cc0f35}.button.is-danger.is-light.is-active,.button.is-danger.is-light:active{background-color:#fcd4dc;border-color:transparent;color:#cc0f35}.button.is-small{border-radius:2px;font-size:.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent!important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute!important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded{border-radius:290486px;padding-left:calc(1em + .25em);padding-right:calc(1em + .25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button.is-hovered,.buttons.has-addons .button:hover{z-index:2}.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-focused,.buttons.has-addons .button.is-selected,.buttons.has-addons .button:active,.buttons.has-addons .button:focus{z-index:3}.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button.is-selected:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button:focus:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width:1024px){.container{max-width:960px}}@media screen and (max-width:1215px){.container.is-widescreen{max-width:1152px}}@media screen and (max-width:1407px){.container.is-fullhd{max-width:1344px}}@media screen and (min-width:1216px){.container{max-width:1152px}}@media screen and (min-width:1408px){.container{max-width:1344px}}.content li+li{margin-top:.25em}.content blockquote:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content p:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child),.content ul:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#363636;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:.8em}.content h5{font-size:1.125em;margin-bottom:.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol:not([type]).is-lower-alpha{list-style-type:lower-alpha}.content ol:not([type]).is-lower-roman{list-style-type:lower-roman}.content ol:not([type]).is-upper-alpha{list-style-type:upper-alpha}.content ol:not([type]).is-upper-roman{list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:1.25em 1.5em;white-space:pre;word-wrap:normal}.content sub,.content sup{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.content table th{color:#363636}.content table th:not([align]){text-align:left}.content table thead td,.content table thead th{border-width:0 0 2px;color:#363636}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#363636}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small{font-size:.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image{display:block;position:relative}.image img{display:block;height:auto;width:100%}.image img.is-rounded{border-radius:290486px}.image.is-fullwidth{width:100%}.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img{height:100%;width:100%}.image.is-1by1,.image.is-square{padding-top:100%}.image.is-5by4{padding-top:80%}.image.is-4by3{padding-top:75%}.image.is-3by2{padding-top:66.6666%}.image.is-5by3{padding-top:60%}.image.is-16by9{padding-top:56.25%}.image.is-2by1{padding-top:50%}.image.is-3by1{padding-top:33.3333%}.image.is-4by5{padding-top:125%}.image.is-3by4{padding-top:133.3333%}.image.is-2by3{padding-top:150%}.image.is-3by5{padding-top:166.6666%}.image.is-9by16{padding-top:177.7777%}.image.is-1by2{padding-top:200%}.image.is-1by3{padding-top:300%}.image.is-16x16{height:16px;width:16px}.image.is-24x24{height:24px;width:24px}.image.is-32x32{height:32px;width:32px}.image.is-48x48{height:48px;width:48px}.image.is-64x64{height:64px;width:64px}.image.is-96x96{height:96px;width:96px}.image.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:0 0}.notification>.delete{position:absolute;right:.5rem;top:.5rem}.notification .content,.notification .subtitle,.notification .title{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.notification.is-dark{background-color:#363636;color:#fff}.notification.is-primary{background-color:#00d1b2;color:#fff}.notification.is-primary.is-light{background-color:#ebfffc;color:#00947e}.notification.is-link{background-color:#3273dc;color:#fff}.notification.is-link.is-light{background-color:#eef3fc;color:#2160c4}.notification.is-info{background-color:#3298dc;color:#fff}.notification.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.notification.is-success{background-color:#48c774;color:#fff}.notification.is-success.is-light{background-color:#effaf3;color:#257942}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#f14668;color:#fff}.notification.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#4a4a4a}.progress::-moz-progress-bar{background-color:#4a4a4a}.progress::-ms-fill{background-color:#4a4a4a;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right,#fff 30%,#ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right,#0a0a0a 30%,#ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right,#f5f5f5 30%,#ededed 30%)}.progress.is-dark::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate{background-image:linear-gradient(to right,#363636 30%,#ededed 30%)}.progress.is-primary::-webkit-progress-value{background-color:#00d1b2}.progress.is-primary::-moz-progress-bar{background-color:#00d1b2}.progress.is-primary::-ms-fill{background-color:#00d1b2}.progress.is-primary:indeterminate{background-image:linear-gradient(to right,#00d1b2 30%,#ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#3273dc}.progress.is-link::-moz-progress-bar{background-color:#3273dc}.progress.is-link::-ms-fill{background-color:#3273dc}.progress.is-link:indeterminate{background-image:linear-gradient(to right,#3273dc 30%,#ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3298dc}.progress.is-info::-moz-progress-bar{background-color:#3298dc}.progress.is-info::-ms-fill{background-color:#3298dc}.progress.is-info:indeterminate{background-image:linear-gradient(to right,#3298dc 30%,#ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#48c774}.progress.is-success::-moz-progress-bar{background-color:#48c774}.progress.is-success::-ms-fill{background-color:#48c774}.progress.is-success:indeterminate{background-image:linear-gradient(to right,#48c774 30%,#ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right,#ffdd57 30%,#ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#f14668}.progress.is-danger::-moz-progress-bar{background-color:#f14668}.progress.is-danger::-ms-fill{background-color:#f14668}.progress.is-danger:indeterminate{background-image:linear-gradient(to right,#f14668 30%,#ededed 30%)}.progress:indeterminate{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moveIndeterminate;animation-name:moveIndeterminate;-webkit-animation-timing-function:linear;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right,#4a4a4a 30%,#ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress.is-small{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@-webkit-keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.table td.is-link,.table th.is-link{background-color:#3273dc;border-color:#3273dc;color:#fff}.table td.is-info,.table th.is-info{background-color:#3298dc;border-color:#3298dc;color:#fff}.table td.is-success,.table th.is-success{background-color:#48c774;border-color:#48c774;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.table td.is-danger,.table th.is-danger{background-color:#f14668;border-color:#f14668;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#00d1b2;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table th{color:#363636}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#00d1b2;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#363636}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#363636}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:.25em .5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag{margin-bottom:.5rem}.tags .tag:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag{margin-right:.25rem;margin-left:.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child){margin-left:.5rem}.tags.is-right .tag:not(:last-child){margin-right:0}.tags.has-addons .tag{margin-right:0}.tags.has-addons .tag:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.tags.has-addons .tag:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.tag:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#4a4a4a;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:.75em;padding-right:.75em;white-space:nowrap}.tag:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag:not(body).is-white{background-color:#fff;color:#0a0a0a}.tag:not(body).is-black{background-color:#0a0a0a;color:#fff}.tag:not(body).is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.tag:not(body).is-dark{background-color:#363636;color:#fff}.tag:not(body).is-primary{background-color:#00d1b2;color:#fff}.tag:not(body).is-primary.is-light{background-color:#ebfffc;color:#00947e}.tag:not(body).is-link{background-color:#3273dc;color:#fff}.tag:not(body).is-link.is-light{background-color:#eef3fc;color:#2160c4}.tag:not(body).is-info{background-color:#3298dc;color:#fff}.tag:not(body).is-info.is-light{background-color:#eef6fc;color:#1d72aa}.tag:not(body).is-success{background-color:#48c774;color:#fff}.tag:not(body).is-success.is-light{background-color:#effaf3;color:#257942}.tag:not(body).is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.tag:not(body).is-warning.is-light{background-color:#fffbeb;color:#947600}.tag:not(body).is-danger{background-color:#f14668;color:#fff}.tag:not(body).is-danger.is-light{background-color:#feecf0;color:#cc0f35}.tag:not(body).is-normal{font-size:.75rem}.tag:not(body).is-medium{font-size:1rem}.tag:not(body).is-large{font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag:not(body).is-delete{margin-left:1px;padding:0;position:relative;width:2em}.tag:not(body).is-delete::after,.tag:not(body).is-delete::before{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag:not(body).is-delete::before{height:1px;width:50%}.tag:not(body).is-delete::after{height:50%;width:1px}.tag:not(body).is-delete:focus,.tag:not(body).is-delete:hover{background-color:#e8e8e8}.tag:not(body).is-delete:active{background-color:#dbdbdb}.tag:not(body).is-rounded{border-radius:290486px}a.tag:hover{text-decoration:underline}.subtitle,.title{word-break:break-word}.subtitle em,.subtitle span,.title em,.title span{font-weight:inherit}.subtitle sub,.title sub{font-size:.75em}.subtitle sup,.title sup{font-size:.75em}.subtitle .tag,.title .tag{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:#f5f5f5;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:.25rem .5rem;text-align:center;vertical-align:top}.input,.select select,.textarea{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,.select select::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(54,54,54,.3)}.input::-webkit-input-placeholder,.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(54,54,54,.3)}.input:-moz-placeholder,.select select:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(54,54,54,.3)}.input:-ms-input-placeholder,.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(54,54,54,.3)}.input:hover,.is-hovered.input,.is-hovered.textarea,.select select.is-hovered,.select select:hover,.textarea:hover{border-color:#b5b5b5}.input:active,.input:focus,.is-active.input,.is-active.textarea,.is-focused.input,.is-focused.textarea,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{border-color:#3273dc;box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.input[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .input,fieldset[disabled] .select select,fieldset[disabled] .textarea{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder{color:rgba(122,122,122,.3)}.input,.textarea{box-shadow:inset 0 .0625em .125em rgba(10,10,10,.05);max-width:100%;width:100%}.input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,.is-white.textarea{border-color:#fff}.is-white.input:active,.is-white.input:focus,.is-white.is-active.input,.is-white.is-active.textarea,.is-white.is-focused.input,.is-white.is-focused.textarea,.is-white.textarea:active,.is-white.textarea:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.is-black.input,.is-black.textarea{border-color:#0a0a0a}.is-black.input:active,.is-black.input:focus,.is-black.is-active.input,.is-black.is-active.textarea,.is-black.is-focused.input,.is-black.is-focused.textarea,.is-black.textarea:active,.is-black.textarea:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.is-light.input,.is-light.textarea{border-color:#f5f5f5}.is-light.input:active,.is-light.input:focus,.is-light.is-active.input,.is-light.is-active.textarea,.is-light.is-focused.input,.is-light.is-focused.textarea,.is-light.textarea:active,.is-light.textarea:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.is-dark.input,.is-dark.textarea{border-color:#363636}.is-dark.input:active,.is-dark.input:focus,.is-dark.is-active.input,.is-dark.is-active.textarea,.is-dark.is-focused.input,.is-dark.is-focused.textarea,.is-dark.textarea:active,.is-dark.textarea:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.is-primary.input,.is-primary.textarea{border-color:#00d1b2}.is-primary.input:active,.is-primary.input:focus,.is-primary.is-active.input,.is-primary.is-active.textarea,.is-primary.is-focused.input,.is-primary.is-focused.textarea,.is-primary.textarea:active,.is-primary.textarea:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.is-link.input,.is-link.textarea{border-color:#3273dc}.is-link.input:active,.is-link.input:focus,.is-link.is-active.input,.is-link.is-active.textarea,.is-link.is-focused.input,.is-link.is-focused.textarea,.is-link.textarea:active,.is-link.textarea:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.is-info.input,.is-info.textarea{border-color:#3298dc}.is-info.input:active,.is-info.input:focus,.is-info.is-active.input,.is-info.is-active.textarea,.is-info.is-focused.input,.is-info.is-focused.textarea,.is-info.textarea:active,.is-info.textarea:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.is-success.input,.is-success.textarea{border-color:#48c774}.is-success.input:active,.is-success.input:focus,.is-success.is-active.input,.is-success.is-active.textarea,.is-success.is-focused.input,.is-success.is-focused.textarea,.is-success.textarea:active,.is-success.textarea:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.is-warning.input,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:active,.is-warning.input:focus,.is-warning.is-active.input,.is-warning.is-active.textarea,.is-warning.is-focused.input,.is-warning.is-focused.textarea,.is-warning.textarea:active,.is-warning.textarea:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.is-danger.input,.is-danger.textarea{border-color:#f14668}.is-danger.input:active,.is-danger.input:focus,.is-danger.is-active.input,.is-danger.is-active.textarea,.is-danger.is-focused.input,.is-danger.is-focused.textarea,.is-danger.textarea:active,.is-danger.textarea:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.is-small.input,.is-small.textarea{border-radius:2px;font-size:.75rem}.is-medium.input,.is-medium.textarea{font-size:1.25rem}.is-large.input,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,.is-inline.textarea{display:inline;width:auto}.input.is-rounded{border-radius:290486px;padding-left:calc(calc(.75em - 1px) + .375em);padding-right:calc(calc(.75em - 1px) + .375em)}.input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#3273dc;right:1.125em;z-index:4}.select.is-rounded select{border-radius:290486px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:0}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select.is-hovered,.select.is-white select:hover{border-color:#f2f2f2}.select.is-white select.is-active,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select.is-hovered,.select.is-black select:hover{border-color:#000}.select.is-black select.is-active,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select.is-hovered,.select.is-light select:hover{border-color:#e8e8e8}.select.is-light select.is-active,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.select.is-dark:not(:hover)::after{border-color:#363636}.select.is-dark select{border-color:#363636}.select.is-dark select.is-hovered,.select.is-dark select:hover{border-color:#292929}.select.is-dark select.is-active,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.select.is-primary:not(:hover)::after{border-color:#00d1b2}.select.is-primary select{border-color:#00d1b2}.select.is-primary select.is-hovered,.select.is-primary select:hover{border-color:#00b89c}.select.is-primary select.is-active,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.select.is-link:not(:hover)::after{border-color:#3273dc}.select.is-link select{border-color:#3273dc}.select.is-link select.is-hovered,.select.is-link select:hover{border-color:#2366d1}.select.is-link select.is-active,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.select.is-info:not(:hover)::after{border-color:#3298dc}.select.is-info select{border-color:#3298dc}.select.is-info select.is-hovered,.select.is-info select:hover{border-color:#238cd1}.select.is-info select.is-active,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.select.is-success:not(:hover)::after{border-color:#48c774}.select.is-success select{border-color:#48c774}.select.is-success select.is-hovered,.select.is-success select:hover{border-color:#3abb67}.select.is-success select.is-active,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select.is-hovered,.select.is-warning select:hover{border-color:#ffd83d}.select.is-warning select.is-active,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.select.is-danger:not(:hover)::after{border-color:#f14668}.select.is-danger select{border-color:#f14668}.select.is-danger select.is-hovered,.select.is-danger select:hover{border-color:#ef2e55}.select.is-danger select.is-active,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.select.is-small{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:.625em;transform:none}.select.is-loading.is-small:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white.is-hovered .file-cta,.file.is-white:hover .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white.is-focused .file-cta,.file.is-white:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,255,255,.25);color:#0a0a0a}.file.is-white.is-active .file-cta,.file.is-white:active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black.is-hovered .file-cta,.file.is-black:hover .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black.is-focused .file-cta,.file.is-black:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(10,10,10,.25);color:#fff}.file.is-black.is-active .file-cta,.file.is-black:active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-hovered .file-cta,.file.is-light:hover .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-focused .file-cta,.file.is-light:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(245,245,245,.25);color:rgba(0,0,0,.7)}.file.is-light.is-active .file-cta,.file.is-light:active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-dark .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark.is-hovered .file-cta,.file.is-dark:hover .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark.is-focused .file-cta,.file.is-dark:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(54,54,54,.25);color:#fff}.file.is-dark.is-active .file-cta,.file.is-dark:active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta{background-color:#00d1b2;border-color:transparent;color:#fff}.file.is-primary.is-hovered .file-cta,.file.is-primary:hover .file-cta{background-color:#00c4a7;border-color:transparent;color:#fff}.file.is-primary.is-focused .file-cta,.file.is-primary:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(0,209,178,.25);color:#fff}.file.is-primary.is-active .file-cta,.file.is-primary:active .file-cta{background-color:#00b89c;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#3273dc;border-color:transparent;color:#fff}.file.is-link.is-hovered .file-cta,.file.is-link:hover .file-cta{background-color:#276cda;border-color:transparent;color:#fff}.file.is-link.is-focused .file-cta,.file.is-link:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,115,220,.25);color:#fff}.file.is-link.is-active .file-cta,.file.is-link:active .file-cta{background-color:#2366d1;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3298dc;border-color:transparent;color:#fff}.file.is-info.is-hovered .file-cta,.file.is-info:hover .file-cta{background-color:#2793da;border-color:transparent;color:#fff}.file.is-info.is-focused .file-cta,.file.is-info:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,152,220,.25);color:#fff}.file.is-info.is-active .file-cta,.file.is-info:active .file-cta{background-color:#238cd1;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#48c774;border-color:transparent;color:#fff}.file.is-success.is-hovered .file-cta,.file.is-success:hover .file-cta{background-color:#3ec46d;border-color:transparent;color:#fff}.file.is-success.is-focused .file-cta,.file.is-success:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,199,116,.25);color:#fff}.file.is-success.is-active .file-cta,.file.is-success:active .file-cta{background-color:#3abb67;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-hovered .file-cta,.file.is-warning:hover .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-focused .file-cta,.file.is-warning:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,221,87,.25);color:rgba(0,0,0,.7)}.file.is-warning.is-active .file-cta,.file.is-warning:active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-danger .file-cta{background-color:#f14668;border-color:transparent;color:#fff}.file.is-danger.is-hovered .file-cta,.file.is-danger:hover .file-cta{background-color:#f03a5f;border-color:transparent;color:#fff}.file.is-danger.is-focused .file-cta,.file.is-danger:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(241,70,104,.25);color:#fff}.file.is-danger.is-active .file-cta,.file.is-danger:active .file-cta{background-color:#ef2e55;border-color:transparent;color:#fff}.file.is-small{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:0;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:left;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:.5em}.label.is-small{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark{color:#363636}.help.is-primary{color:#00d1b2}.help.is-link{color:#3273dc}.help.is-info{color:#3298dc}.help.is-success{color:#48c774}.help.is-warning{color:#ffdd57}.help.is-danger{color:#f14668}.field:not(:last-child){margin-bottom:.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]).is-hovered,.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .input:not([disabled]).is-hovered,.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]).is-hovered,.field.has-addons .control .select select:not([disabled]):hover{z-index:2}.field.has-addons .control .button:not([disabled]).is-active,.field.has-addons .control .button:not([disabled]).is-focused,.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .input:not([disabled]).is-active,.field.has-addons .control .input:not([disabled]).is-focused,.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control .select select:not([disabled]).is-active,.field.has-addons .control .select select:not([disabled]).is-focused,.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select:not([disabled]):focus{z-index:3}.field.has-addons .control .button:not([disabled]).is-active:hover,.field.has-addons .control .button:not([disabled]).is-focused:hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .input:not([disabled]).is-active:hover,.field.has-addons .control .input:not([disabled]).is-focused:hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control .select select:not([disabled]).is-active:hover,.field.has-addons .control .select select:not([disabled]).is-focused:hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select:not([disabled]):focus:hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width:769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width:768px){.field-label{margin-bottom:.5rem}}@media screen and (min-width:769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small{font-size:.75rem;padding-top:.375em}.field-label.is-normal{padding-top:.375em}.field-label.is-medium{font-size:1.25rem;padding-top:.375em}.field-label.is-large{font-size:1.5rem;padding-top:.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width:769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:left}.control.has-icons-left .input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#4a4a4a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute!important;right:.625em;top:.625em;z-index:4}.control.is-loading.is-small:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#3273dc;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#363636;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ol,.breadcrumb ul{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;max-width:100%;position:relative}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 .125em .25em rgba(10,10,10,.1);display:flex}.card-header-title{align-items:center;color:#363636;display:flex;flex-grow:1;font-weight:700;padding:.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem 1rem}.card-image{display:block;position:relative}.card-content{background-color:transparent;padding:1.5rem}.card-footer{background-color:transparent;border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:.875rem;line-height:1.5;padding:.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:left;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#3273dc;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width:769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .subtitle,.level-item .title{margin-bottom:0}@media screen and (max-width:768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width:769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width:768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width:769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width:769px),print{.level-right{display:flex}}.list{background-color:#fff;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1)}.list-item{display:block;padding:.5em 1em}.list-item:not(a){color:#4a4a4a}.list-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.list-item:not(:last-child){border-bottom:1px solid #dbdbdb}.list-item.is-active{background-color:#3273dc;color:#fff}a.list-item{background-color:#f5f5f5;cursor:pointer}.media{align-items:flex-start;display:flex;text-align:left}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:left}@media screen and (max-width:768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#4a4a4a;display:block;padding:.5em .75em}.menu-list a:hover{background-color:#f5f5f5;color:#363636}.menu-list a.is-active{background-color:#3273dc;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#7a7a7a;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark{background-color:#fafafa}.message.is-dark .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body{border-color:#363636}.message.is-primary{background-color:#ebfffc}.message.is-primary .message-header{background-color:#00d1b2;color:#fff}.message.is-primary .message-body{border-color:#00d1b2;color:#00947e}.message.is-link{background-color:#eef3fc}.message.is-link .message-header{background-color:#3273dc;color:#fff}.message.is-link .message-body{border-color:#3273dc;color:#2160c4}.message.is-info{background-color:#eef6fc}.message.is-info .message-header{background-color:#3298dc;color:#fff}.message.is-info .message-body{border-color:#3298dc;color:#1d72aa}.message.is-success{background-color:#effaf3}.message.is-success .message-header{background-color:#48c774;color:#fff}.message.is-success .message-body{border-color:#48c774;color:#257942}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#feecf0}.message.is-danger .message-header{background-color:#f14668;color:#fff}.message.is-danger .message-body{border-color:#f14668;color:#cc0f35}.message-header{align-items:center;background-color:#4a4a4a;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#4a4a4a;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,.86)}.modal-card,.modal-content{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width:769px),print{.modal-card,.modal-content{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:0 0;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-foot,.modal-card-head{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#363636;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link,.navbar.is-white .navbar-brand>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width:1024px){.navbar.is-white .navbar-end .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-start>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link::after,.navbar.is-white .navbar-start .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand .navbar-link,.navbar.is-black .navbar-brand>.navbar-item{color:#fff}.navbar.is-black .navbar-brand .navbar-link.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-black .navbar-end .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-start>.navbar-item{color:#fff}.navbar.is-black .navbar-end .navbar-link.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-end .navbar-link::after,.navbar.is-black .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link,.navbar.is-light .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-light .navbar-end .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link::after,.navbar.is-light .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,.7)}}.navbar.is-dark{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand .navbar-link,.navbar.is-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-dark .navbar-end .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-dark .navbar-end .navbar-link.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-end .navbar-link::after,.navbar.is-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary{background-color:#00d1b2;color:#fff}.navbar.is-primary .navbar-brand .navbar-link,.navbar.is-primary .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary .navbar-brand .navbar-link.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-primary .navbar-end .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-start>.navbar-item{color:#fff}.navbar.is-primary .navbar-end .navbar-link.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-end .navbar-link::after,.navbar.is-primary .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active{background-color:#00d1b2;color:#fff}}.navbar.is-link{background-color:#3273dc;color:#fff}.navbar.is-link .navbar-brand .navbar-link,.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand .navbar-link.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-link .navbar-end .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end .navbar-link.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-end .navbar-link::after,.navbar.is-link .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#3273dc;color:#fff}}.navbar.is-info{background-color:#3298dc;color:#fff}.navbar.is-info .navbar-brand .navbar-link,.navbar.is-info .navbar-brand>.navbar-item{color:#fff}.navbar.is-info .navbar-brand .navbar-link.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-info .navbar-end .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-start>.navbar-item{color:#fff}.navbar.is-info .navbar-end .navbar-link.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-end .navbar-link::after,.navbar.is-info .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3298dc;color:#fff}}.navbar.is-success{background-color:#48c774;color:#fff}.navbar.is-success .navbar-brand .navbar-link,.navbar.is-success .navbar-brand>.navbar-item{color:#fff}.navbar.is-success .navbar-brand .navbar-link.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-success .navbar-end .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-start>.navbar-item{color:#fff}.navbar.is-success .navbar-end .navbar-link.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-end .navbar-link::after,.navbar.is-success .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#48c774;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link,.navbar.is-warning .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-warning .navbar-end .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link::after,.navbar.is-warning .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,.7)}}.navbar.is-danger{background-color:#f14668;color:#fff}.navbar.is-danger .navbar-brand .navbar-link,.navbar.is-danger .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger .navbar-brand .navbar-link.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-danger .navbar-end .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-start>.navbar-item{color:#fff}.navbar.is-danger .navbar-end .navbar-link.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-end .navbar-link::after,.navbar.is-danger .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f14668;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}body.has-navbar-fixed-top,html.has-navbar-fixed-top{padding-top:3.25rem}body.has-navbar-fixed-bottom,html.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:.5rem .75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-.25rem;margin-right:-.25rem}.navbar-link,a.navbar-item{cursor:pointer}.navbar-link.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,a.navbar-item.is-active,a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover{background-color:#fafafa;color:#3273dc}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#3273dc}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#3273dc;border-bottom-style:solid;border-bottom-width:3px;color:#3273dc;padding-bottom:calc(.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#3273dc;margin-top:-.375em;right:1.125em}.navbar-dropdown{font-size:.875rem;padding-bottom:.5rem;padding-top:.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:.5rem 0}@media screen and (max-width:1023px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,.1);padding:.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}body.has-navbar-fixed-top-touch,html.has-navbar-fixed-top-touch{padding-top:3.25rem}body.has-navbar-fixed-bottom-touch,html.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu,.navbar-start{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-end,.navbar.is-spaced .navbar-start{align-items:center}.navbar.is-spaced .navbar-link,.navbar.is-spaced a.navbar-item{border-radius:4px}.navbar.is-transparent .navbar-link.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover{background-color:transparent!important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent!important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(.25em,-.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,.1);display:none;font-size:.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-dropdown{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity,transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.container>.navbar .navbar-brand,.navbar>.container .navbar-brand{margin-left:-.75rem}.container>.navbar .navbar-menu,.navbar>.container .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-desktop{top:0}body.has-navbar-fixed-top-desktop,html.has-navbar-fixed-top-desktop{padding-top:3.25rem}body.has-navbar-fixed-bottom-desktop,html.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}body.has-spaced-navbar-fixed-top,html.has-spaced-navbar-fixed-top{padding-top:5.25rem}body.has-spaced-navbar-fixed-bottom,html.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}.navbar-link.is-active,a.navbar-item.is-active{color:#0a0a0a}.navbar-link.is-active:not(:focus):not(:hover),a.navbar-item.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown.is-active .navbar-link,.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-next,.pagination.is-rounded .pagination-previous{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-link,.pagination-next,.pagination-previous{border-color:#dbdbdb;color:#363636;min-width:2.5em}.pagination-link:hover,.pagination-next:hover,.pagination-previous:hover{border-color:#b5b5b5;color:#363636}.pagination-link:focus,.pagination-next:focus,.pagination-previous:focus{border-color:#3273dc}.pagination-link:active,.pagination-next:active,.pagination-previous:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2)}.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:.5}.pagination-next,.pagination-previous{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#3273dc;border-color:#3273dc;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width:768px){.pagination{flex-wrap:wrap}.pagination-next,.pagination-previous{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width:769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading{background-color:#00d1b2;color:#fff}.panel.is-primary .panel-tabs a.is-active{border-bottom-color:#00d1b2}.panel.is-primary .panel-block.is-active .panel-icon{color:#00d1b2}.panel.is-link .panel-heading{background-color:#3273dc;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#3273dc}.panel.is-link .panel-block.is-active .panel-icon{color:#3273dc}.panel.is-info .panel-heading{background-color:#3298dc;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3298dc}.panel.is-info .panel-block.is-active .panel-icon{color:#3298dc}.panel.is-success .panel-heading{background-color:#48c774;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#48c774}.panel.is-success .panel-block.is-active .panel-icon{color:#48c774}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#f14668;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f14668}.panel.is-danger .panel-block.is-active .panel-icon{color:#f14668}.panel-block:not(:last-child),.panel-tabs:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#363636;font-size:1.25em;font-weight:700;line-height:1.25;padding:.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#4a4a4a}.panel-list a:hover{color:#3273dc}.panel-block{align-items:center;color:#363636;display:flex;justify-content:flex-start;padding:.5em .75em}.panel-block input[type=checkbox]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#3273dc;color:#363636}.panel-block.is-active .panel-icon{color:#3273dc}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#4a4a4a;display:flex;justify-content:center;margin-bottom:-1px;padding:.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#363636;color:#363636}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#3273dc;color:#3273dc}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:.75em;padding-right:.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:transparent!important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-radius:4px 0 0 4px}.tabs.is-toggle li:last-child a{border-radius:0 4px 4px 0}.tabs.is-toggle li.is-active a{background-color:#3273dc;border-color:#3273dc;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-small{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width:768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width:769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width:1023px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width:1024px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width:1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width:1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0!important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width:769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width:1024px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap:0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap:0rem}@media screen and (max-width:768px){.columns.is-variable.is-0-mobile{--columnGap:0rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-0-tablet{--columnGap:0rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-0-tablet-only{--columnGap:0rem}}@media screen and (max-width:1023px){.columns.is-variable.is-0-touch{--columnGap:0rem}}@media screen and (min-width:1024px){.columns.is-variable.is-0-desktop{--columnGap:0rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-0-desktop-only{--columnGap:0rem}}@media screen and (min-width:1216px){.columns.is-variable.is-0-widescreen{--columnGap:0rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-0-widescreen-only{--columnGap:0rem}}@media screen and (min-width:1408px){.columns.is-variable.is-0-fullhd{--columnGap:0rem}}.columns.is-variable.is-1{--columnGap:0.25rem}@media screen and (max-width:768px){.columns.is-variable.is-1-mobile{--columnGap:0.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-1-tablet{--columnGap:0.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-1-tablet-only{--columnGap:0.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-1-touch{--columnGap:0.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-1-desktop{--columnGap:0.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-1-desktop-only{--columnGap:0.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-1-widescreen{--columnGap:0.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-1-widescreen-only{--columnGap:0.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-1-fullhd{--columnGap:0.25rem}}.columns.is-variable.is-2{--columnGap:0.5rem}@media screen and (max-width:768px){.columns.is-variable.is-2-mobile{--columnGap:0.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-2-tablet{--columnGap:0.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-2-tablet-only{--columnGap:0.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-2-touch{--columnGap:0.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-2-desktop{--columnGap:0.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-2-desktop-only{--columnGap:0.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-2-widescreen{--columnGap:0.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-2-widescreen-only{--columnGap:0.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-2-fullhd{--columnGap:0.5rem}}.columns.is-variable.is-3{--columnGap:0.75rem}@media screen and (max-width:768px){.columns.is-variable.is-3-mobile{--columnGap:0.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-3-tablet{--columnGap:0.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-3-tablet-only{--columnGap:0.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-3-touch{--columnGap:0.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-3-desktop{--columnGap:0.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-3-desktop-only{--columnGap:0.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-3-widescreen{--columnGap:0.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-3-widescreen-only{--columnGap:0.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-3-fullhd{--columnGap:0.75rem}}.columns.is-variable.is-4{--columnGap:1rem}@media screen and (max-width:768px){.columns.is-variable.is-4-mobile{--columnGap:1rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-4-tablet{--columnGap:1rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-4-tablet-only{--columnGap:1rem}}@media screen and (max-width:1023px){.columns.is-variable.is-4-touch{--columnGap:1rem}}@media screen and (min-width:1024px){.columns.is-variable.is-4-desktop{--columnGap:1rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-4-desktop-only{--columnGap:1rem}}@media screen and (min-width:1216px){.columns.is-variable.is-4-widescreen{--columnGap:1rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-4-widescreen-only{--columnGap:1rem}}@media screen and (min-width:1408px){.columns.is-variable.is-4-fullhd{--columnGap:1rem}}.columns.is-variable.is-5{--columnGap:1.25rem}@media screen and (max-width:768px){.columns.is-variable.is-5-mobile{--columnGap:1.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-5-tablet{--columnGap:1.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-5-tablet-only{--columnGap:1.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-5-touch{--columnGap:1.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-5-desktop{--columnGap:1.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-5-desktop-only{--columnGap:1.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-5-widescreen{--columnGap:1.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-5-widescreen-only{--columnGap:1.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-5-fullhd{--columnGap:1.25rem}}.columns.is-variable.is-6{--columnGap:1.5rem}@media screen and (max-width:768px){.columns.is-variable.is-6-mobile{--columnGap:1.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-6-tablet{--columnGap:1.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-6-tablet-only{--columnGap:1.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-6-touch{--columnGap:1.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-6-desktop{--columnGap:1.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-6-desktop-only{--columnGap:1.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-6-widescreen{--columnGap:1.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-6-widescreen-only{--columnGap:1.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-6-fullhd{--columnGap:1.5rem}}.columns.is-variable.is-7{--columnGap:1.75rem}@media screen and (max-width:768px){.columns.is-variable.is-7-mobile{--columnGap:1.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-7-tablet{--columnGap:1.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-7-tablet-only{--columnGap:1.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-7-touch{--columnGap:1.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-7-desktop{--columnGap:1.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-7-desktop-only{--columnGap:1.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-7-widescreen{--columnGap:1.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-7-widescreen-only{--columnGap:1.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-7-fullhd{--columnGap:1.75rem}}.columns.is-variable.is-8{--columnGap:2rem}@media screen and (max-width:768px){.columns.is-variable.is-8-mobile{--columnGap:2rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-8-tablet{--columnGap:2rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-8-tablet-only{--columnGap:2rem}}@media screen and (max-width:1023px){.columns.is-variable.is-8-touch{--columnGap:2rem}}@media screen and (min-width:1024px){.columns.is-variable.is-8-desktop{--columnGap:2rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-8-desktop-only{--columnGap:2rem}}@media screen and (min-width:1216px){.columns.is-variable.is-8-widescreen{--columnGap:2rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-8-widescreen-only{--columnGap:2rem}}@media screen and (min-width:1408px){.columns.is-variable.is-8-fullhd{--columnGap:2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:-webkit-min-content;min-height:-moz-min-content;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0!important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem!important}@media screen and (min-width:769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:0 0}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width:1023px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white .navbar-link.is-active,.hero.is-white .navbar-link:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black .navbar-link.is-active,.hero.is-black .navbar-link:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black a.navbar-item:hover{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}@media screen and (max-width:768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,.7)}.hero.is-light .subtitle{color:rgba(0,0,0,.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,.7)}.hero.is-light .navbar-link.is-active,.hero.is-light .navbar-link:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.hero.is-light .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}}.hero.is-dark{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong{color:inherit}.hero.is-dark .title{color:#fff}.hero.is-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-dark .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.hero.is-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-dark .navbar-link.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark a.navbar-item:hover{background-color:#292929;color:#fff}.hero.is-dark .tabs a{color:#fff;opacity:.9}.hero.is-dark .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}@media screen and (max-width:768px){.hero.is-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}}.hero.is-primary{background-color:#00d1b2;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong{color:inherit}.hero.is-primary .title{color:#fff}.hero.is-primary .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary .subtitle a:not(.button),.hero.is-primary .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-primary .navbar-menu{background-color:#00d1b2}}.hero.is-primary .navbar-item,.hero.is-primary .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary .navbar-link.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary a.navbar-item:hover{background-color:#00b89c;color:#fff}.hero.is-primary .tabs a{color:#fff;opacity:.9}.hero.is-primary .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#00d1b2}.hero.is-primary.is-bold{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}@media screen and (max-width:768px){.hero.is-primary.is-bold .navbar-menu{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}}.hero.is-link{background-color:#3273dc;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-link .navbar-menu{background-color:#3273dc}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link .navbar-link.is-active,.hero.is-link .navbar-link:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link a.navbar-item:hover{background-color:#2366d1;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3273dc}.hero.is-link.is-bold{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}@media screen and (max-width:768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}}.hero.is-info{background-color:#3298dc;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-info .navbar-menu{background-color:#3298dc}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info .navbar-link.is-active,.hero.is-info .navbar-link:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info a.navbar-item:hover{background-color:#238cd1;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3298dc}.hero.is-info.is-bold{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}@media screen and (max-width:768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}}.hero.is-success{background-color:#48c774;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-success .navbar-menu{background-color:#48c774}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success .navbar-link.is-active,.hero.is-success .navbar-link:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success a.navbar-item:hover{background-color:#3abb67;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#48c774}.hero.is-success.is-bold{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}@media screen and (max-width:768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning .navbar-link.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}@media screen and (max-width:768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}}.hero.is-danger{background-color:#f14668;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-danger .navbar-menu{background-color:#f14668}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger .navbar-link.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger a.navbar-item:hover{background-color:#ef2e55;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f14668}.hero.is-danger.is-bold{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}@media screen and (max-width:768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}}.hero.is-small .hero-body{padding:1.5rem}@media screen and (min-width:769px),print{.hero.is-medium .hero-body{padding:9rem 1.5rem}}@media screen and (min-width:769px),print{.hero.is-large .hero-body{padding:18rem 1.5rem}}.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body,.hero.is-halfheight .hero-body{align-items:center;display:flex}.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container,.hero.is-halfheight .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.hero-video.is-transparent{opacity:.3}@media screen and (max-width:768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width:768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:.75rem}}@media screen and (min-width:769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-foot,.hero-head{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width:1024px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem} \ No newline at end of file +/*! bulma.io v0.9.1 | MIT License | github.com/jgthms/bulma */@-webkit-keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}.breadcrumb,.button,.delete,.file,.is-unselectable,.modal-close,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:.625em;margin-top:-.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:.625em}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.highlight:not(:last-child),.level:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.pagination:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.tabs:not(:last-child),.title:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:0;position:relative;vertical-align:top;width:20px}.delete::after,.delete::before,.modal-close::after,.modal-close::before{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:focus,.delete:hover,.modal-close:focus,.modal-close:hover{background-color:rgba(10,10,10,.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,.4)}.is-small.delete,.is-small.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.control.is-loading::after,.loader,.select.is-loading::after{-webkit-animation:spinAround .5s infinite linear;animation:spinAround .5s infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img,.is-overlay,.modal,.modal-background{bottom:0;left:0;position:absolute;right:0;top:0}.button,.file-cta,.file-name,.input,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.select select,.textarea{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(.5em - 1px);padding-left:calc(.75em - 1px);padding-right:calc(.75em - 1px);padding-top:calc(.5em - 1px);position:relative;vertical-align:top}.button:active,.button:focus,.file-cta:active,.file-cta:focus,.file-name:active,.file-name:focus,.input:active,.input:focus,.is-active.button,.is-active.file-cta,.is-active.file-name,.is-active.input,.is-active.pagination-ellipsis,.is-active.pagination-link,.is-active.pagination-next,.is-active.pagination-previous,.is-active.textarea,.is-focused.button,.is-focused.file-cta,.is-focused.file-name,.is-focused.input,.is-focused.pagination-ellipsis,.is-focused.pagination-link,.is-focused.pagination-next,.is-focused.pagination-previous,.is-focused.textarea,.pagination-ellipsis:active,.pagination-ellipsis:focus,.pagination-link:active,.pagination-link:focus,.pagination-next:active,.pagination-next:focus,.pagination-previous:active,.pagination-previous:focus,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{outline:0}.button[disabled],.file-cta[disabled],.file-name[disabled],.input[disabled],.pagination-ellipsis[disabled],.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .button,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .input,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-previous,fieldset[disabled] .select select,fieldset[disabled] .textarea{cursor:not-allowed}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,::after,::before{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:hidden;overflow-y:scroll;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:#4a4a4a;font-size:1em;font-weight:400;line-height:1.5}a{color:#3273dc;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:#f5f5f5;color:#da1039;font-size:.875em;font-weight:400;padding:.25em .5em .25em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=checkbox],input[type=radio]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#363636;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#4a4a4a;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#363636}.box{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px #3273dc}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2),0 0 0 1px #3273dc}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-large,.button .icon.is-medium,.button .icon.is-small{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button.is-hovered,.button:hover{border-color:#b5b5b5;color:#363636}.button.is-focused,.button:focus{border-color:#3273dc;color:#363636}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-active,.button:active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#4a4a4a;text-decoration:underline}.button.is-text.is-focused,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text:hover{background-color:#f5f5f5;color:#363636}.button.is-text.is-active,.button.is-text:active{background-color:#e8e8e8;color:#363636}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white.is-hovered,.button.is-white:hover{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white.is-focused,.button.is-white:focus{border-color:transparent;color:#0a0a0a}.button.is-white.is-focused:not(:active),.button.is-white:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.button.is-white.is-active,.button.is-white:active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-hovered,.button.is-white.is-inverted:hover{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined.is-focused,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-outlined.is-loading.is-focused::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined.is-focused,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined:hover{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black.is-hovered,.button.is-black:hover{background-color:#040404;border-color:transparent;color:#fff}.button.is-black.is-focused,.button.is-black:focus{border-color:transparent;color:#fff}.button.is-black.is-focused:not(:active),.button.is-black:focus:not(:active){box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.button.is-black.is-active,.button.is-black:active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-hovered,.button.is-black.is-inverted:hover{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined.is-focused,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-outlined.is-loading.is-focused::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined.is-focused,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined:hover{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-hovered,.button.is-light:hover{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused,.button.is-light:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused:not(:active),.button.is-light:focus:not(:active){box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.button.is-light.is-active,.button.is-light:active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-hovered,.button.is-light.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined.is-focused,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-outlined.is-loading.is-focused::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-light.is-inverted.is-outlined.is-focused,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-dark{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark.is-hovered,.button.is-dark:hover{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark.is-focused,.button.is-dark:focus{border-color:transparent;color:#fff}.button.is-dark.is-focused:not(:active),.button.is-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.button.is-dark.is-active,.button.is-dark:active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],fieldset[disabled] .button.is-dark{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-hovered,.button.is-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined.is-focused,.button.is-dark.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined:hover{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-outlined.is-loading.is-focused::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined.is-focused,.button.is-dark.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary{background-color:#00d1b2;border-color:transparent;color:#fff}.button.is-primary.is-hovered,.button.is-primary:hover{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary.is-focused,.button.is-primary:focus{border-color:transparent;color:#fff}.button.is-primary.is-focused:not(:active),.button.is-primary:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.button.is-primary.is-active,.button.is-primary:active{background-color:#00b89c;border-color:transparent;color:#fff}.button.is-primary[disabled],fieldset[disabled] .button.is-primary{background-color:#00d1b2;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-hovered,.button.is-primary.is-inverted:hover{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],fieldset[disabled] .button.is-primary.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#00d1b2}.button.is-primary.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;color:#00d1b2}.button.is-primary.is-outlined.is-focused,.button.is-primary.is-outlined.is-hovered,.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined:hover{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.button.is-primary.is-outlined.is-loading::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-outlined.is-loading.is-focused::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-outlined.is-loading:focus::after,.button.is-primary.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;box-shadow:none;color:#00d1b2}.button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined.is-focused,.button.is-primary.is-inverted.is-outlined.is-hovered,.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined:hover{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light{background-color:#ebfffc;color:#00947e}.button.is-primary.is-light.is-hovered,.button.is-primary.is-light:hover{background-color:#defffa;border-color:transparent;color:#00947e}.button.is-primary.is-light.is-active,.button.is-primary.is-light:active{background-color:#d1fff8;border-color:transparent;color:#00947e}.button.is-link{background-color:#3273dc;border-color:transparent;color:#fff}.button.is-link.is-hovered,.button.is-link:hover{background-color:#276cda;border-color:transparent;color:#fff}.button.is-link.is-focused,.button.is-link:focus{border-color:transparent;color:#fff}.button.is-link.is-focused:not(:active),.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#2366d1;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#3273dc;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-hovered,.button.is-link.is-inverted:hover{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3273dc}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;color:#3273dc}.button.is-link.is-outlined.is-focused,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined:hover{background-color:#3273dc;border-color:#3273dc;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-outlined.is-loading.is-focused::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;box-shadow:none;color:#3273dc}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined.is-focused,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined:hover{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eef3fc;color:#2160c4}.button.is-link.is-light.is-hovered,.button.is-link.is-light:hover{background-color:#e3ecfa;border-color:transparent;color:#2160c4}.button.is-link.is-light.is-active,.button.is-link.is-light:active{background-color:#d8e4f8;border-color:transparent;color:#2160c4}.button.is-info{background-color:#3298dc;border-color:transparent;color:#fff}.button.is-info.is-hovered,.button.is-info:hover{background-color:#2793da;border-color:transparent;color:#fff}.button.is-info.is-focused,.button.is-info:focus{border-color:transparent;color:#fff}.button.is-info.is-focused:not(:active),.button.is-info:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.button.is-info.is-active,.button.is-info:active{background-color:#238cd1;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3298dc;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-hovered,.button.is-info.is-inverted:hover{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3298dc}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;color:#3298dc}.button.is-info.is-outlined.is-focused,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined:hover{background-color:#3298dc;border-color:#3298dc;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-outlined.is-loading.is-focused::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;box-shadow:none;color:#3298dc}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined.is-focused,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined:hover{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.button.is-info.is-light.is-hovered,.button.is-info.is-light:hover{background-color:#e3f1fa;border-color:transparent;color:#1d72aa}.button.is-info.is-light.is-active,.button.is-info.is-light:active{background-color:#d8ebf8;border-color:transparent;color:#1d72aa}.button.is-success{background-color:#48c774;border-color:transparent;color:#fff}.button.is-success.is-hovered,.button.is-success:hover{background-color:#3ec46d;border-color:transparent;color:#fff}.button.is-success.is-focused,.button.is-success:focus{border-color:transparent;color:#fff}.button.is-success.is-focused:not(:active),.button.is-success:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.button.is-success.is-active,.button.is-success:active{background-color:#3abb67;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#48c774;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-hovered,.button.is-success.is-inverted:hover{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#48c774}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined{background-color:transparent;border-color:#48c774;color:#48c774}.button.is-success.is-outlined.is-focused,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined:hover{background-color:#48c774;border-color:#48c774;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-outlined.is-loading.is-focused::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#48c774;box-shadow:none;color:#48c774}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined.is-focused,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined:hover{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effaf3;color:#257942}.button.is-success.is-light.is-hovered,.button.is-success.is-light:hover{background-color:#e6f7ec;border-color:transparent;color:#257942}.button.is-success.is-light.is-active,.button.is-success.is-light:active{background-color:#dcf4e4;border-color:transparent;color:#257942}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-hovered,.button.is-warning:hover{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused,.button.is-warning:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused:not(:active),.button.is-warning:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.button.is-warning.is-active,.button.is-warning:active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-hovered,.button.is-warning.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined.is-focused,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined:hover{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-outlined.is-loading.is-focused::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning.is-inverted.is-outlined.is-focused,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light.is-hovered,.button.is-warning.is-light:hover{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light.is-active,.button.is-warning.is-light:active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#f14668;border-color:transparent;color:#fff}.button.is-danger.is-hovered,.button.is-danger:hover{background-color:#f03a5f;border-color:transparent;color:#fff}.button.is-danger.is-focused,.button.is-danger:focus{border-color:transparent;color:#fff}.button.is-danger.is-focused:not(:active),.button.is-danger:focus:not(:active){box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.button.is-danger.is-active,.button.is-danger:active{background-color:#ef2e55;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#f14668;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-hovered,.button.is-danger.is-inverted:hover{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f14668}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;color:#f14668}.button.is-danger.is-outlined.is-focused,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined:hover{background-color:#f14668;border-color:#f14668;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-outlined.is-loading.is-focused::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;box-shadow:none;color:#f14668}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined.is-focused,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined:hover{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.button.is-danger.is-light.is-hovered,.button.is-danger.is-light:hover{background-color:#fde0e6;border-color:transparent;color:#cc0f35}.button.is-danger.is-light.is-active,.button.is-danger.is-light:active{background-color:#fcd4dc;border-color:transparent;color:#cc0f35}.button.is-small{border-radius:2px;font-size:.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent!important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute!important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded{border-radius:290486px;padding-left:calc(1em + .25em);padding-right:calc(1em + .25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button.is-hovered,.buttons.has-addons .button:hover{z-index:2}.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-focused,.buttons.has-addons .button.is-selected,.buttons.has-addons .button:active,.buttons.has-addons .button:focus{z-index:3}.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button.is-selected:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button:focus:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none!important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width:1024px){.container{max-width:960px}}@media screen and (max-width:1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width:1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width:1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width:1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:.25em}.content blockquote:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content p:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child),.content ul:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#363636;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:.8em}.content h5{font-size:1.125em;margin-bottom:.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol:not([type]).is-lower-alpha{list-style-type:lower-alpha}.content ol:not([type]).is-lower-roman{list-style-type:lower-roman}.content ol:not([type]).is-upper-alpha{list-style-type:upper-alpha}.content ol:not([type]).is-upper-roman{list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:1.25em 1.5em;white-space:pre;word-wrap:normal}.content sub,.content sup{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.content table th{color:#363636}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#363636}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#363636}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small{font-size:.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image{display:block;position:relative}.image img{display:block;height:auto;width:100%}.image img.is-rounded{border-radius:290486px}.image.is-fullwidth{width:100%}.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img{height:100%;width:100%}.image.is-1by1,.image.is-square{padding-top:100%}.image.is-5by4{padding-top:80%}.image.is-4by3{padding-top:75%}.image.is-3by2{padding-top:66.6666%}.image.is-5by3{padding-top:60%}.image.is-16by9{padding-top:56.25%}.image.is-2by1{padding-top:50%}.image.is-3by1{padding-top:33.3333%}.image.is-4by5{padding-top:125%}.image.is-3by4{padding-top:133.3333%}.image.is-2by3{padding-top:150%}.image.is-3by5{padding-top:166.6666%}.image.is-9by16{padding-top:177.7777%}.image.is-1by2{padding-top:200%}.image.is-1by3{padding-top:300%}.image.is-16x16{height:16px;width:16px}.image.is-24x24{height:24px;width:24px}.image.is-32x32{height:32px;width:32px}.image.is-48x48{height:48px;width:48px}.image.is-64x64{height:64px;width:64px}.image.is-96x96{height:96px;width:96px}.image.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:0 0}.notification>.delete{right:.5rem;position:absolute;top:.5rem}.notification .content,.notification .subtitle,.notification .title{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.notification.is-dark{background-color:#363636;color:#fff}.notification.is-primary{background-color:#00d1b2;color:#fff}.notification.is-primary.is-light{background-color:#ebfffc;color:#00947e}.notification.is-link{background-color:#3273dc;color:#fff}.notification.is-link.is-light{background-color:#eef3fc;color:#2160c4}.notification.is-info{background-color:#3298dc;color:#fff}.notification.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.notification.is-success{background-color:#48c774;color:#fff}.notification.is-success.is-light{background-color:#effaf3;color:#257942}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#f14668;color:#fff}.notification.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#4a4a4a}.progress::-moz-progress-bar{background-color:#4a4a4a}.progress::-ms-fill{background-color:#4a4a4a;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right,#fff 30%,#ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right,#0a0a0a 30%,#ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right,#f5f5f5 30%,#ededed 30%)}.progress.is-dark::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate{background-image:linear-gradient(to right,#363636 30%,#ededed 30%)}.progress.is-primary::-webkit-progress-value{background-color:#00d1b2}.progress.is-primary::-moz-progress-bar{background-color:#00d1b2}.progress.is-primary::-ms-fill{background-color:#00d1b2}.progress.is-primary:indeterminate{background-image:linear-gradient(to right,#00d1b2 30%,#ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#3273dc}.progress.is-link::-moz-progress-bar{background-color:#3273dc}.progress.is-link::-ms-fill{background-color:#3273dc}.progress.is-link:indeterminate{background-image:linear-gradient(to right,#3273dc 30%,#ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3298dc}.progress.is-info::-moz-progress-bar{background-color:#3298dc}.progress.is-info::-ms-fill{background-color:#3298dc}.progress.is-info:indeterminate{background-image:linear-gradient(to right,#3298dc 30%,#ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#48c774}.progress.is-success::-moz-progress-bar{background-color:#48c774}.progress.is-success::-ms-fill{background-color:#48c774}.progress.is-success:indeterminate{background-image:linear-gradient(to right,#48c774 30%,#ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right,#ffdd57 30%,#ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#f14668}.progress.is-danger::-moz-progress-bar{background-color:#f14668}.progress.is-danger::-ms-fill{background-color:#f14668}.progress.is-danger:indeterminate{background-image:linear-gradient(to right,#f14668 30%,#ededed 30%)}.progress:indeterminate{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moveIndeterminate;animation-name:moveIndeterminate;-webkit-animation-timing-function:linear;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right,#4a4a4a 30%,#ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@-webkit-keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.table td.is-link,.table th.is-link{background-color:#3273dc;border-color:#3273dc;color:#fff}.table td.is-info,.table th.is-info{background-color:#3298dc;border-color:#3298dc;color:#fff}.table td.is-success,.table th.is-success{background-color:#48c774;border-color:#48c774;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.table td.is-danger,.table th.is-danger{background-color:#f14668;border-color:#f14668;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#00d1b2;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#363636}.table th:not([align]){text-align:inherit}.table tr.is-selected{background-color:#00d1b2;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#363636}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#363636}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:.25em .5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag{margin-bottom:.5rem}.tags .tag:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag{margin-right:.25rem;margin-left:.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child){margin-left:.5rem}.tags.is-right .tag:not(:last-child){margin-right:0}.tags.has-addons .tag{margin-right:0}.tags.has-addons .tag:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#4a4a4a;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:.75em;padding-right:.75em;white-space:nowrap}.tag:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag:not(body).is-white{background-color:#fff;color:#0a0a0a}.tag:not(body).is-black{background-color:#0a0a0a;color:#fff}.tag:not(body).is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.tag:not(body).is-dark{background-color:#363636;color:#fff}.tag:not(body).is-primary{background-color:#00d1b2;color:#fff}.tag:not(body).is-primary.is-light{background-color:#ebfffc;color:#00947e}.tag:not(body).is-link{background-color:#3273dc;color:#fff}.tag:not(body).is-link.is-light{background-color:#eef3fc;color:#2160c4}.tag:not(body).is-info{background-color:#3298dc;color:#fff}.tag:not(body).is-info.is-light{background-color:#eef6fc;color:#1d72aa}.tag:not(body).is-success{background-color:#48c774;color:#fff}.tag:not(body).is-success.is-light{background-color:#effaf3;color:#257942}.tag:not(body).is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.tag:not(body).is-warning.is-light{background-color:#fffbeb;color:#947600}.tag:not(body).is-danger{background-color:#f14668;color:#fff}.tag:not(body).is-danger.is-light{background-color:#feecf0;color:#cc0f35}.tag:not(body).is-normal{font-size:.75rem}.tag:not(body).is-medium{font-size:1rem}.tag:not(body).is-large{font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag:not(body).is-delete{margin-left:1px;padding:0;position:relative;width:2em}.tag:not(body).is-delete::after,.tag:not(body).is-delete::before{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag:not(body).is-delete::before{height:1px;width:50%}.tag:not(body).is-delete::after{height:50%;width:1px}.tag:not(body).is-delete:focus,.tag:not(body).is-delete:hover{background-color:#e8e8e8}.tag:not(body).is-delete:active{background-color:#dbdbdb}.tag:not(body).is-rounded{border-radius:290486px}a.tag:hover{text-decoration:underline}.subtitle,.title{word-break:break-word}.subtitle em,.subtitle span,.title em,.title span{font-weight:inherit}.subtitle sub,.title sub{font-size:.75em}.subtitle sup,.title sup{font-size:.75em}.subtitle .tag,.title .tag{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:#f5f5f5;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:.25rem .5rem;text-align:center;vertical-align:top}.input,.select select,.textarea{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,.select select::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(54,54,54,.3)}.input::-webkit-input-placeholder,.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(54,54,54,.3)}.input:-moz-placeholder,.select select:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(54,54,54,.3)}.input:-ms-input-placeholder,.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(54,54,54,.3)}.input:hover,.is-hovered.input,.is-hovered.textarea,.select select.is-hovered,.select select:hover,.textarea:hover{border-color:#b5b5b5}.input:active,.input:focus,.is-active.input,.is-active.textarea,.is-focused.input,.is-focused.textarea,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{border-color:#3273dc;box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.input[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .input,fieldset[disabled] .select select,fieldset[disabled] .textarea{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder{color:rgba(122,122,122,.3)}.input,.textarea{box-shadow:inset 0 .0625em .125em rgba(10,10,10,.05);max-width:100%;width:100%}.input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,.is-white.textarea{border-color:#fff}.is-white.input:active,.is-white.input:focus,.is-white.is-active.input,.is-white.is-active.textarea,.is-white.is-focused.input,.is-white.is-focused.textarea,.is-white.textarea:active,.is-white.textarea:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.is-black.input,.is-black.textarea{border-color:#0a0a0a}.is-black.input:active,.is-black.input:focus,.is-black.is-active.input,.is-black.is-active.textarea,.is-black.is-focused.input,.is-black.is-focused.textarea,.is-black.textarea:active,.is-black.textarea:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.is-light.input,.is-light.textarea{border-color:#f5f5f5}.is-light.input:active,.is-light.input:focus,.is-light.is-active.input,.is-light.is-active.textarea,.is-light.is-focused.input,.is-light.is-focused.textarea,.is-light.textarea:active,.is-light.textarea:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.is-dark.input,.is-dark.textarea{border-color:#363636}.is-dark.input:active,.is-dark.input:focus,.is-dark.is-active.input,.is-dark.is-active.textarea,.is-dark.is-focused.input,.is-dark.is-focused.textarea,.is-dark.textarea:active,.is-dark.textarea:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.is-primary.input,.is-primary.textarea{border-color:#00d1b2}.is-primary.input:active,.is-primary.input:focus,.is-primary.is-active.input,.is-primary.is-active.textarea,.is-primary.is-focused.input,.is-primary.is-focused.textarea,.is-primary.textarea:active,.is-primary.textarea:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.is-link.input,.is-link.textarea{border-color:#3273dc}.is-link.input:active,.is-link.input:focus,.is-link.is-active.input,.is-link.is-active.textarea,.is-link.is-focused.input,.is-link.is-focused.textarea,.is-link.textarea:active,.is-link.textarea:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.is-info.input,.is-info.textarea{border-color:#3298dc}.is-info.input:active,.is-info.input:focus,.is-info.is-active.input,.is-info.is-active.textarea,.is-info.is-focused.input,.is-info.is-focused.textarea,.is-info.textarea:active,.is-info.textarea:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.is-success.input,.is-success.textarea{border-color:#48c774}.is-success.input:active,.is-success.input:focus,.is-success.is-active.input,.is-success.is-active.textarea,.is-success.is-focused.input,.is-success.is-focused.textarea,.is-success.textarea:active,.is-success.textarea:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.is-warning.input,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:active,.is-warning.input:focus,.is-warning.is-active.input,.is-warning.is-active.textarea,.is-warning.is-focused.input,.is-warning.is-focused.textarea,.is-warning.textarea:active,.is-warning.textarea:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.is-danger.input,.is-danger.textarea{border-color:#f14668}.is-danger.input:active,.is-danger.input:focus,.is-danger.is-active.input,.is-danger.is-active.textarea,.is-danger.is-focused.input,.is-danger.is-focused.textarea,.is-danger.textarea:active,.is-danger.textarea:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.is-small.input,.is-small.textarea{border-radius:2px;font-size:.75rem}.is-medium.input,.is-medium.textarea{font-size:1.25rem}.is-large.input,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,.is-inline.textarea{display:inline;width:auto}.input.is-rounded{border-radius:290486px;padding-left:calc(calc(.75em - 1px) + .375em);padding-right:calc(calc(.75em - 1px) + .375em)}.input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox input[disabled],.checkbox[disabled],.radio input[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#3273dc;right:1.125em;z-index:4}.select.is-rounded select{border-radius:290486px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:0}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select.is-hovered,.select.is-white select:hover{border-color:#f2f2f2}.select.is-white select.is-active,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select.is-hovered,.select.is-black select:hover{border-color:#000}.select.is-black select.is-active,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select.is-hovered,.select.is-light select:hover{border-color:#e8e8e8}.select.is-light select.is-active,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.select.is-dark:not(:hover)::after{border-color:#363636}.select.is-dark select{border-color:#363636}.select.is-dark select.is-hovered,.select.is-dark select:hover{border-color:#292929}.select.is-dark select.is-active,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.select.is-primary:not(:hover)::after{border-color:#00d1b2}.select.is-primary select{border-color:#00d1b2}.select.is-primary select.is-hovered,.select.is-primary select:hover{border-color:#00b89c}.select.is-primary select.is-active,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.select.is-link:not(:hover)::after{border-color:#3273dc}.select.is-link select{border-color:#3273dc}.select.is-link select.is-hovered,.select.is-link select:hover{border-color:#2366d1}.select.is-link select.is-active,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.select.is-info:not(:hover)::after{border-color:#3298dc}.select.is-info select{border-color:#3298dc}.select.is-info select.is-hovered,.select.is-info select:hover{border-color:#238cd1}.select.is-info select.is-active,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.select.is-success:not(:hover)::after{border-color:#48c774}.select.is-success select{border-color:#48c774}.select.is-success select.is-hovered,.select.is-success select:hover{border-color:#3abb67}.select.is-success select.is-active,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select.is-hovered,.select.is-warning select:hover{border-color:#ffd83d}.select.is-warning select.is-active,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.select.is-danger:not(:hover)::after{border-color:#f14668}.select.is-danger select{border-color:#f14668}.select.is-danger select.is-hovered,.select.is-danger select:hover{border-color:#ef2e55}.select.is-danger select.is-active,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.select.is-small{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:.625em;transform:none}.select.is-loading.is-small:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white.is-hovered .file-cta,.file.is-white:hover .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white.is-focused .file-cta,.file.is-white:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,255,255,.25);color:#0a0a0a}.file.is-white.is-active .file-cta,.file.is-white:active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black.is-hovered .file-cta,.file.is-black:hover .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black.is-focused .file-cta,.file.is-black:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(10,10,10,.25);color:#fff}.file.is-black.is-active .file-cta,.file.is-black:active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-hovered .file-cta,.file.is-light:hover .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-focused .file-cta,.file.is-light:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(245,245,245,.25);color:rgba(0,0,0,.7)}.file.is-light.is-active .file-cta,.file.is-light:active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-dark .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark.is-hovered .file-cta,.file.is-dark:hover .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark.is-focused .file-cta,.file.is-dark:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(54,54,54,.25);color:#fff}.file.is-dark.is-active .file-cta,.file.is-dark:active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta{background-color:#00d1b2;border-color:transparent;color:#fff}.file.is-primary.is-hovered .file-cta,.file.is-primary:hover .file-cta{background-color:#00c4a7;border-color:transparent;color:#fff}.file.is-primary.is-focused .file-cta,.file.is-primary:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(0,209,178,.25);color:#fff}.file.is-primary.is-active .file-cta,.file.is-primary:active .file-cta{background-color:#00b89c;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#3273dc;border-color:transparent;color:#fff}.file.is-link.is-hovered .file-cta,.file.is-link:hover .file-cta{background-color:#276cda;border-color:transparent;color:#fff}.file.is-link.is-focused .file-cta,.file.is-link:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,115,220,.25);color:#fff}.file.is-link.is-active .file-cta,.file.is-link:active .file-cta{background-color:#2366d1;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3298dc;border-color:transparent;color:#fff}.file.is-info.is-hovered .file-cta,.file.is-info:hover .file-cta{background-color:#2793da;border-color:transparent;color:#fff}.file.is-info.is-focused .file-cta,.file.is-info:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,152,220,.25);color:#fff}.file.is-info.is-active .file-cta,.file.is-info:active .file-cta{background-color:#238cd1;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#48c774;border-color:transparent;color:#fff}.file.is-success.is-hovered .file-cta,.file.is-success:hover .file-cta{background-color:#3ec46d;border-color:transparent;color:#fff}.file.is-success.is-focused .file-cta,.file.is-success:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,199,116,.25);color:#fff}.file.is-success.is-active .file-cta,.file.is-success:active .file-cta{background-color:#3abb67;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-hovered .file-cta,.file.is-warning:hover .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-focused .file-cta,.file.is-warning:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,221,87,.25);color:rgba(0,0,0,.7)}.file.is-warning.is-active .file-cta,.file.is-warning:active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-danger .file-cta{background-color:#f14668;border-color:transparent;color:#fff}.file.is-danger.is-hovered .file-cta,.file.is-danger:hover .file-cta{background-color:#f03a5f;border-color:transparent;color:#fff}.file.is-danger.is-focused .file-cta,.file.is-danger:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(241,70,104,.25);color:#fff}.file.is-danger.is-active .file-cta,.file.is-danger:active .file-cta{background-color:#ef2e55;border-color:transparent;color:#fff}.file.is-small{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:0;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:.5em}.label.is-small{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark{color:#363636}.help.is-primary{color:#00d1b2}.help.is-link{color:#3273dc}.help.is-info{color:#3298dc}.help.is-success{color:#48c774}.help.is-warning{color:#ffdd57}.help.is-danger{color:#f14668}.field:not(:last-child){margin-bottom:.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]).is-hovered,.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .input:not([disabled]).is-hovered,.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]).is-hovered,.field.has-addons .control .select select:not([disabled]):hover{z-index:2}.field.has-addons .control .button:not([disabled]).is-active,.field.has-addons .control .button:not([disabled]).is-focused,.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .input:not([disabled]).is-active,.field.has-addons .control .input:not([disabled]).is-focused,.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control .select select:not([disabled]).is-active,.field.has-addons .control .select select:not([disabled]).is-focused,.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select:not([disabled]):focus{z-index:3}.field.has-addons .control .button:not([disabled]).is-active:hover,.field.has-addons .control .button:not([disabled]).is-focused:hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .input:not([disabled]).is-active:hover,.field.has-addons .control .input:not([disabled]).is-focused:hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control .select select:not([disabled]).is-active:hover,.field.has-addons .control .select select:not([disabled]).is-focused:hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select:not([disabled]):focus:hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width:769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width:768px){.field-label{margin-bottom:.5rem}}@media screen and (min-width:769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small{font-size:.75rem;padding-top:.375em}.field-label.is-normal{padding-top:.375em}.field-label.is-medium{font-size:1.25rem;padding-top:.375em}.field-label.is-large{font-size:1.5rem;padding-top:.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width:769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#4a4a4a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute!important;right:.625em;top:.625em;z-index:4}.control.is-loading.is-small:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#3273dc;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#363636;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ol,.breadcrumb ul{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;max-width:100%;overflow:hidden;position:relative}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 .125em .25em rgba(10,10,10,.1);display:flex}.card-header-title{align-items:center;color:#363636;display:flex;flex-grow:1;font-weight:700;padding:.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem 1rem}.card-image{display:block;position:relative}.card-content{background-color:transparent;padding:1.5rem}.card-footer{background-color:transparent;border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:.875rem;line-height:1.5;padding:.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#3273dc;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width:769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .subtitle,.level-item .title{margin-bottom:0}@media screen and (max-width:768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width:769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width:768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width:769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width:769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width:768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#4a4a4a;display:block;padding:.5em .75em}.menu-list a:hover{background-color:#f5f5f5;color:#363636}.menu-list a.is-active{background-color:#3273dc;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#7a7a7a;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark{background-color:#fafafa}.message.is-dark .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body{border-color:#363636}.message.is-primary{background-color:#ebfffc}.message.is-primary .message-header{background-color:#00d1b2;color:#fff}.message.is-primary .message-body{border-color:#00d1b2;color:#00947e}.message.is-link{background-color:#eef3fc}.message.is-link .message-header{background-color:#3273dc;color:#fff}.message.is-link .message-body{border-color:#3273dc;color:#2160c4}.message.is-info{background-color:#eef6fc}.message.is-info .message-header{background-color:#3298dc;color:#fff}.message.is-info .message-body{border-color:#3298dc;color:#1d72aa}.message.is-success{background-color:#effaf3}.message.is-success .message-header{background-color:#48c774;color:#fff}.message.is-success .message-body{border-color:#48c774;color:#257942}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#feecf0}.message.is-danger .message-header{background-color:#f14668;color:#fff}.message.is-danger .message-body{border-color:#f14668;color:#cc0f35}.message-header{align-items:center;background-color:#4a4a4a;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#4a4a4a;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,.86)}.modal-card,.modal-content{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width:769px){.modal-card,.modal-content{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:0 0;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-foot,.modal-card-head{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#363636;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link,.navbar.is-white .navbar-brand>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width:1024px){.navbar.is-white .navbar-end .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-start>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link::after,.navbar.is-white .navbar-start .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand .navbar-link,.navbar.is-black .navbar-brand>.navbar-item{color:#fff}.navbar.is-black .navbar-brand .navbar-link.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-black .navbar-end .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-start>.navbar-item{color:#fff}.navbar.is-black .navbar-end .navbar-link.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-end .navbar-link::after,.navbar.is-black .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link,.navbar.is-light .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-light .navbar-end .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link::after,.navbar.is-light .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,.7)}}.navbar.is-dark{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand .navbar-link,.navbar.is-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-dark .navbar-end .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-dark .navbar-end .navbar-link.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-end .navbar-link::after,.navbar.is-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary{background-color:#00d1b2;color:#fff}.navbar.is-primary .navbar-brand .navbar-link,.navbar.is-primary .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary .navbar-brand .navbar-link.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-primary .navbar-end .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-start>.navbar-item{color:#fff}.navbar.is-primary .navbar-end .navbar-link.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-end .navbar-link::after,.navbar.is-primary .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active{background-color:#00d1b2;color:#fff}}.navbar.is-link{background-color:#3273dc;color:#fff}.navbar.is-link .navbar-brand .navbar-link,.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand .navbar-link.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-link .navbar-end .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end .navbar-link.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-end .navbar-link::after,.navbar.is-link .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#3273dc;color:#fff}}.navbar.is-info{background-color:#3298dc;color:#fff}.navbar.is-info .navbar-brand .navbar-link,.navbar.is-info .navbar-brand>.navbar-item{color:#fff}.navbar.is-info .navbar-brand .navbar-link.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-info .navbar-end .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-start>.navbar-item{color:#fff}.navbar.is-info .navbar-end .navbar-link.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-end .navbar-link::after,.navbar.is-info .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3298dc;color:#fff}}.navbar.is-success{background-color:#48c774;color:#fff}.navbar.is-success .navbar-brand .navbar-link,.navbar.is-success .navbar-brand>.navbar-item{color:#fff}.navbar.is-success .navbar-brand .navbar-link.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-success .navbar-end .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-start>.navbar-item{color:#fff}.navbar.is-success .navbar-end .navbar-link.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-end .navbar-link::after,.navbar.is-success .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#48c774;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link,.navbar.is-warning .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-warning .navbar-end .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link::after,.navbar.is-warning .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,.7)}}.navbar.is-danger{background-color:#f14668;color:#fff}.navbar.is-danger .navbar-brand .navbar-link,.navbar.is-danger .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger .navbar-brand .navbar-link.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-danger .navbar-end .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-start>.navbar-item{color:#fff}.navbar.is-danger .navbar-end .navbar-link.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-end .navbar-link::after,.navbar.is-danger .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f14668;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}body.has-navbar-fixed-top,html.has-navbar-fixed-top{padding-top:3.25rem}body.has-navbar-fixed-bottom,html.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:.5rem .75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-.25rem;margin-right:-.25rem}.navbar-link,a.navbar-item{cursor:pointer}.navbar-link.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,a.navbar-item.is-active,a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover{background-color:#fafafa;color:#3273dc}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#3273dc}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#3273dc;border-bottom-style:solid;border-bottom-width:3px;color:#3273dc;padding-bottom:calc(.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#3273dc;margin-top:-.375em;right:1.125em}.navbar-dropdown{font-size:.875rem;padding-bottom:.5rem;padding-top:.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:.5rem 0}@media screen and (max-width:1023px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,.1);padding:.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}body.has-navbar-fixed-top-touch,html.has-navbar-fixed-top-touch{padding-top:3.25rem}body.has-navbar-fixed-bottom-touch,html.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu,.navbar-start{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-end,.navbar.is-spaced .navbar-start{align-items:center}.navbar.is-spaced .navbar-link,.navbar.is-spaced a.navbar-item{border-radius:4px}.navbar.is-transparent .navbar-link.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover{background-color:transparent!important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent!important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(.25em,-.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,.1);display:none;font-size:.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-dropdown{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity,transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.container>.navbar .navbar-brand,.navbar>.container .navbar-brand{margin-left:-.75rem}.container>.navbar .navbar-menu,.navbar>.container .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-desktop{top:0}body.has-navbar-fixed-top-desktop,html.has-navbar-fixed-top-desktop{padding-top:3.25rem}body.has-navbar-fixed-bottom-desktop,html.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}body.has-spaced-navbar-fixed-top,html.has-spaced-navbar-fixed-top{padding-top:5.25rem}body.has-spaced-navbar-fixed-bottom,html.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}.navbar-link.is-active,a.navbar-item.is-active{color:#0a0a0a}.navbar-link.is-active:not(:focus):not(:hover),a.navbar-item.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown.is-active .navbar-link,.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-next,.pagination.is-rounded .pagination-previous{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-link,.pagination-next,.pagination-previous{border-color:#dbdbdb;color:#363636;min-width:2.5em}.pagination-link:hover,.pagination-next:hover,.pagination-previous:hover{border-color:#b5b5b5;color:#363636}.pagination-link:focus,.pagination-next:focus,.pagination-previous:focus{border-color:#3273dc}.pagination-link:active,.pagination-next:active,.pagination-previous:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2)}.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:.5}.pagination-next,.pagination-previous{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#3273dc;border-color:#3273dc;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width:768px){.pagination{flex-wrap:wrap}.pagination-next,.pagination-previous{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width:769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading{background-color:#00d1b2;color:#fff}.panel.is-primary .panel-tabs a.is-active{border-bottom-color:#00d1b2}.panel.is-primary .panel-block.is-active .panel-icon{color:#00d1b2}.panel.is-link .panel-heading{background-color:#3273dc;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#3273dc}.panel.is-link .panel-block.is-active .panel-icon{color:#3273dc}.panel.is-info .panel-heading{background-color:#3298dc;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3298dc}.panel.is-info .panel-block.is-active .panel-icon{color:#3298dc}.panel.is-success .panel-heading{background-color:#48c774;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#48c774}.panel.is-success .panel-block.is-active .panel-icon{color:#48c774}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#f14668;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f14668}.panel.is-danger .panel-block.is-active .panel-icon{color:#f14668}.panel-block:not(:last-child),.panel-tabs:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#363636;font-size:1.25em;font-weight:700;line-height:1.25;padding:.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#4a4a4a}.panel-list a:hover{color:#3273dc}.panel-block{align-items:center;color:#363636;display:flex;justify-content:flex-start;padding:.5em .75em}.panel-block input[type=checkbox]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#3273dc;color:#363636}.panel-block.is-active .panel-icon{color:#3273dc}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#4a4a4a;display:flex;justify-content:center;margin-bottom:-1px;padding:.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#363636;color:#363636}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#3273dc;color:#3273dc}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:.75em;padding-right:.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:transparent!important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#3273dc;border-color:#3273dc;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-small{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width:768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width:769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width:1023px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width:1024px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width:1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width:1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0!important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width:769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width:1024px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap:0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap:0rem}@media screen and (max-width:768px){.columns.is-variable.is-0-mobile{--columnGap:0rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-0-tablet{--columnGap:0rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-0-tablet-only{--columnGap:0rem}}@media screen and (max-width:1023px){.columns.is-variable.is-0-touch{--columnGap:0rem}}@media screen and (min-width:1024px){.columns.is-variable.is-0-desktop{--columnGap:0rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-0-desktop-only{--columnGap:0rem}}@media screen and (min-width:1216px){.columns.is-variable.is-0-widescreen{--columnGap:0rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-0-widescreen-only{--columnGap:0rem}}@media screen and (min-width:1408px){.columns.is-variable.is-0-fullhd{--columnGap:0rem}}.columns.is-variable.is-1{--columnGap:0.25rem}@media screen and (max-width:768px){.columns.is-variable.is-1-mobile{--columnGap:0.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-1-tablet{--columnGap:0.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-1-tablet-only{--columnGap:0.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-1-touch{--columnGap:0.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-1-desktop{--columnGap:0.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-1-desktop-only{--columnGap:0.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-1-widescreen{--columnGap:0.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-1-widescreen-only{--columnGap:0.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-1-fullhd{--columnGap:0.25rem}}.columns.is-variable.is-2{--columnGap:0.5rem}@media screen and (max-width:768px){.columns.is-variable.is-2-mobile{--columnGap:0.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-2-tablet{--columnGap:0.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-2-tablet-only{--columnGap:0.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-2-touch{--columnGap:0.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-2-desktop{--columnGap:0.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-2-desktop-only{--columnGap:0.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-2-widescreen{--columnGap:0.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-2-widescreen-only{--columnGap:0.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-2-fullhd{--columnGap:0.5rem}}.columns.is-variable.is-3{--columnGap:0.75rem}@media screen and (max-width:768px){.columns.is-variable.is-3-mobile{--columnGap:0.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-3-tablet{--columnGap:0.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-3-tablet-only{--columnGap:0.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-3-touch{--columnGap:0.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-3-desktop{--columnGap:0.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-3-desktop-only{--columnGap:0.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-3-widescreen{--columnGap:0.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-3-widescreen-only{--columnGap:0.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-3-fullhd{--columnGap:0.75rem}}.columns.is-variable.is-4{--columnGap:1rem}@media screen and (max-width:768px){.columns.is-variable.is-4-mobile{--columnGap:1rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-4-tablet{--columnGap:1rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-4-tablet-only{--columnGap:1rem}}@media screen and (max-width:1023px){.columns.is-variable.is-4-touch{--columnGap:1rem}}@media screen and (min-width:1024px){.columns.is-variable.is-4-desktop{--columnGap:1rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-4-desktop-only{--columnGap:1rem}}@media screen and (min-width:1216px){.columns.is-variable.is-4-widescreen{--columnGap:1rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-4-widescreen-only{--columnGap:1rem}}@media screen and (min-width:1408px){.columns.is-variable.is-4-fullhd{--columnGap:1rem}}.columns.is-variable.is-5{--columnGap:1.25rem}@media screen and (max-width:768px){.columns.is-variable.is-5-mobile{--columnGap:1.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-5-tablet{--columnGap:1.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-5-tablet-only{--columnGap:1.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-5-touch{--columnGap:1.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-5-desktop{--columnGap:1.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-5-desktop-only{--columnGap:1.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-5-widescreen{--columnGap:1.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-5-widescreen-only{--columnGap:1.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-5-fullhd{--columnGap:1.25rem}}.columns.is-variable.is-6{--columnGap:1.5rem}@media screen and (max-width:768px){.columns.is-variable.is-6-mobile{--columnGap:1.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-6-tablet{--columnGap:1.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-6-tablet-only{--columnGap:1.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-6-touch{--columnGap:1.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-6-desktop{--columnGap:1.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-6-desktop-only{--columnGap:1.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-6-widescreen{--columnGap:1.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-6-widescreen-only{--columnGap:1.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-6-fullhd{--columnGap:1.5rem}}.columns.is-variable.is-7{--columnGap:1.75rem}@media screen and (max-width:768px){.columns.is-variable.is-7-mobile{--columnGap:1.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-7-tablet{--columnGap:1.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-7-tablet-only{--columnGap:1.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-7-touch{--columnGap:1.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-7-desktop{--columnGap:1.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-7-desktop-only{--columnGap:1.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-7-widescreen{--columnGap:1.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-7-widescreen-only{--columnGap:1.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-7-fullhd{--columnGap:1.75rem}}.columns.is-variable.is-8{--columnGap:2rem}@media screen and (max-width:768px){.columns.is-variable.is-8-mobile{--columnGap:2rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-8-tablet{--columnGap:2rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-8-tablet-only{--columnGap:2rem}}@media screen and (max-width:1023px){.columns.is-variable.is-8-touch{--columnGap:2rem}}@media screen and (min-width:1024px){.columns.is-variable.is-8-desktop{--columnGap:2rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-8-desktop-only{--columnGap:2rem}}@media screen and (min-width:1216px){.columns.is-variable.is-8-widescreen{--columnGap:2rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-8-widescreen-only{--columnGap:2rem}}@media screen and (min-width:1408px){.columns.is-variable.is-8-fullhd{--columnGap:2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:-webkit-min-content;min-height:-moz-min-content;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0!important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem!important}@media screen and (min-width:769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.has-text-white{color:#fff!important}a.has-text-white:focus,a.has-text-white:hover{color:#e6e6e6!important}.has-background-white{background-color:#fff!important}.has-text-black{color:#0a0a0a!important}a.has-text-black:focus,a.has-text-black:hover{color:#000!important}.has-background-black{background-color:#0a0a0a!important}.has-text-light{color:#f5f5f5!important}a.has-text-light:focus,a.has-text-light:hover{color:#dbdbdb!important}.has-background-light{background-color:#f5f5f5!important}.has-text-dark{color:#363636!important}a.has-text-dark:focus,a.has-text-dark:hover{color:#1c1c1c!important}.has-background-dark{background-color:#363636!important}.has-text-primary{color:#00d1b2!important}a.has-text-primary:focus,a.has-text-primary:hover{color:#009e86!important}.has-background-primary{background-color:#00d1b2!important}.has-text-primary-light{color:#ebfffc!important}a.has-text-primary-light:focus,a.has-text-primary-light:hover{color:#b8fff4!important}.has-background-primary-light{background-color:#ebfffc!important}.has-text-primary-dark{color:#00947e!important}a.has-text-primary-dark:focus,a.has-text-primary-dark:hover{color:#00c7a9!important}.has-background-primary-dark{background-color:#00947e!important}.has-text-link{color:#3273dc!important}a.has-text-link:focus,a.has-text-link:hover{color:#205bbc!important}.has-background-link{background-color:#3273dc!important}.has-text-link-light{color:#eef3fc!important}a.has-text-link-light:focus,a.has-text-link-light:hover{color:#c2d5f5!important}.has-background-link-light{background-color:#eef3fc!important}.has-text-link-dark{color:#2160c4!important}a.has-text-link-dark:focus,a.has-text-link-dark:hover{color:#3b79de!important}.has-background-link-dark{background-color:#2160c4!important}.has-text-info{color:#3298dc!important}a.has-text-info:focus,a.has-text-info:hover{color:#207dbc!important}.has-background-info{background-color:#3298dc!important}.has-text-info-light{color:#eef6fc!important}a.has-text-info-light:focus,a.has-text-info-light:hover{color:#c2e0f5!important}.has-background-info-light{background-color:#eef6fc!important}.has-text-info-dark{color:#1d72aa!important}a.has-text-info-dark:focus,a.has-text-info-dark:hover{color:#248fd6!important}.has-background-info-dark{background-color:#1d72aa!important}.has-text-success{color:#48c774!important}a.has-text-success:focus,a.has-text-success:hover{color:#34a85c!important}.has-background-success{background-color:#48c774!important}.has-text-success-light{color:#effaf3!important}a.has-text-success-light:focus,a.has-text-success-light:hover{color:#c8eed6!important}.has-background-success-light{background-color:#effaf3!important}.has-text-success-dark{color:#257942!important}a.has-text-success-dark:focus,a.has-text-success-dark:hover{color:#31a058!important}.has-background-success-dark{background-color:#257942!important}.has-text-warning{color:#ffdd57!important}a.has-text-warning:focus,a.has-text-warning:hover{color:#ffd324!important}.has-background-warning{background-color:#ffdd57!important}.has-text-warning-light{color:#fffbeb!important}a.has-text-warning-light:focus,a.has-text-warning-light:hover{color:#fff1b8!important}.has-background-warning-light{background-color:#fffbeb!important}.has-text-warning-dark{color:#947600!important}a.has-text-warning-dark:focus,a.has-text-warning-dark:hover{color:#c79f00!important}.has-background-warning-dark{background-color:#947600!important}.has-text-danger{color:#f14668!important}a.has-text-danger:focus,a.has-text-danger:hover{color:#ee1742!important}.has-background-danger{background-color:#f14668!important}.has-text-danger-light{color:#feecf0!important}a.has-text-danger-light:focus,a.has-text-danger-light:hover{color:#fabdc9!important}.has-background-danger-light{background-color:#feecf0!important}.has-text-danger-dark{color:#cc0f35!important}a.has-text-danger-dark:focus,a.has-text-danger-dark:hover{color:#ee2049!important}.has-background-danger-dark{background-color:#cc0f35!important}.has-text-black-bis{color:#121212!important}.has-background-black-bis{background-color:#121212!important}.has-text-black-ter{color:#242424!important}.has-background-black-ter{background-color:#242424!important}.has-text-grey-darker{color:#363636!important}.has-background-grey-darker{background-color:#363636!important}.has-text-grey-dark{color:#4a4a4a!important}.has-background-grey-dark{background-color:#4a4a4a!important}.has-text-grey{color:#7a7a7a!important}.has-background-grey{background-color:#7a7a7a!important}.has-text-grey-light{color:#b5b5b5!important}.has-background-grey-light{background-color:#b5b5b5!important}.has-text-grey-lighter{color:#dbdbdb!important}.has-background-grey-lighter{background-color:#dbdbdb!important}.has-text-white-ter{color:#f5f5f5!important}.has-background-white-ter{background-color:#f5f5f5!important}.has-text-white-bis{color:#fafafa!important}.has-background-white-bis{background-color:#fafafa!important}.is-flex-direction-row{flex-direction:row!important}.is-flex-direction-row-reverse{flex-direction:row-reverse!important}.is-flex-direction-column{flex-direction:column!important}.is-flex-direction-column-reverse{flex-direction:column-reverse!important}.is-flex-wrap-nowrap{flex-wrap:nowrap!important}.is-flex-wrap-wrap{flex-wrap:wrap!important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse!important}.is-justify-content-flex-start{justify-content:flex-start!important}.is-justify-content-flex-end{justify-content:flex-end!important}.is-justify-content-center{justify-content:center!important}.is-justify-content-space-between{justify-content:space-between!important}.is-justify-content-space-around{justify-content:space-around!important}.is-justify-content-space-evenly{justify-content:space-evenly!important}.is-justify-content-start{justify-content:start!important}.is-justify-content-end{justify-content:end!important}.is-justify-content-left{justify-content:left!important}.is-justify-content-right{justify-content:right!important}.is-align-content-flex-start{align-content:flex-start!important}.is-align-content-flex-end{align-content:flex-end!important}.is-align-content-center{align-content:center!important}.is-align-content-space-between{align-content:space-between!important}.is-align-content-space-around{align-content:space-around!important}.is-align-content-space-evenly{align-content:space-evenly!important}.is-align-content-stretch{align-content:stretch!important}.is-align-content-start{align-content:start!important}.is-align-content-end{align-content:end!important}.is-align-content-baseline{align-content:baseline!important}.is-align-items-stretch{align-items:stretch!important}.is-align-items-flex-start{align-items:flex-start!important}.is-align-items-flex-end{align-items:flex-end!important}.is-align-items-center{align-items:center!important}.is-align-items-baseline{align-items:baseline!important}.is-align-items-start{align-items:start!important}.is-align-items-end{align-items:end!important}.is-align-items-self-start{align-items:self-start!important}.is-align-items-self-end{align-items:self-end!important}.is-align-self-auto{align-self:auto!important}.is-align-self-flex-start{align-self:flex-start!important}.is-align-self-flex-end{align-self:flex-end!important}.is-align-self-center{align-self:center!important}.is-align-self-baseline{align-self:baseline!important}.is-align-self-stretch{align-self:stretch!important}.is-flex-grow-0{flex-grow:0!important}.is-flex-grow-1{flex-grow:1!important}.is-flex-grow-2{flex-grow:2!important}.is-flex-grow-3{flex-grow:3!important}.is-flex-grow-4{flex-grow:4!important}.is-flex-grow-5{flex-grow:5!important}.is-flex-shrink-0{flex-shrink:0!important}.is-flex-shrink-1{flex-shrink:1!important}.is-flex-shrink-2{flex-shrink:2!important}.is-flex-shrink-3{flex-shrink:3!important}.is-flex-shrink-4{flex-shrink:4!important}.is-flex-shrink-5{flex-shrink:5!important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left!important}.is-pulled-right{float:right!important}.is-radiusless{border-radius:0!important}.is-shadowless{box-shadow:none!important}.is-clickable{cursor:pointer!important}.is-clipped{overflow:hidden!important}.is-relative{position:relative!important}.is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.is-size-1{font-size:3rem!important}.is-size-2{font-size:2.5rem!important}.is-size-3{font-size:2rem!important}.is-size-4{font-size:1.5rem!important}.is-size-5{font-size:1.25rem!important}.is-size-6{font-size:1rem!important}.is-size-7{font-size:.75rem!important}@media screen and (max-width:768px){.is-size-1-mobile{font-size:3rem!important}.is-size-2-mobile{font-size:2.5rem!important}.is-size-3-mobile{font-size:2rem!important}.is-size-4-mobile{font-size:1.5rem!important}.is-size-5-mobile{font-size:1.25rem!important}.is-size-6-mobile{font-size:1rem!important}.is-size-7-mobile{font-size:.75rem!important}}@media screen and (min-width:769px),print{.is-size-1-tablet{font-size:3rem!important}.is-size-2-tablet{font-size:2.5rem!important}.is-size-3-tablet{font-size:2rem!important}.is-size-4-tablet{font-size:1.5rem!important}.is-size-5-tablet{font-size:1.25rem!important}.is-size-6-tablet{font-size:1rem!important}.is-size-7-tablet{font-size:.75rem!important}}@media screen and (max-width:1023px){.is-size-1-touch{font-size:3rem!important}.is-size-2-touch{font-size:2.5rem!important}.is-size-3-touch{font-size:2rem!important}.is-size-4-touch{font-size:1.5rem!important}.is-size-5-touch{font-size:1.25rem!important}.is-size-6-touch{font-size:1rem!important}.is-size-7-touch{font-size:.75rem!important}}@media screen and (min-width:1024px){.is-size-1-desktop{font-size:3rem!important}.is-size-2-desktop{font-size:2.5rem!important}.is-size-3-desktop{font-size:2rem!important}.is-size-4-desktop{font-size:1.5rem!important}.is-size-5-desktop{font-size:1.25rem!important}.is-size-6-desktop{font-size:1rem!important}.is-size-7-desktop{font-size:.75rem!important}}@media screen and (min-width:1216px){.is-size-1-widescreen{font-size:3rem!important}.is-size-2-widescreen{font-size:2.5rem!important}.is-size-3-widescreen{font-size:2rem!important}.is-size-4-widescreen{font-size:1.5rem!important}.is-size-5-widescreen{font-size:1.25rem!important}.is-size-6-widescreen{font-size:1rem!important}.is-size-7-widescreen{font-size:.75rem!important}}@media screen and (min-width:1408px){.is-size-1-fullhd{font-size:3rem!important}.is-size-2-fullhd{font-size:2.5rem!important}.is-size-3-fullhd{font-size:2rem!important}.is-size-4-fullhd{font-size:1.5rem!important}.is-size-5-fullhd{font-size:1.25rem!important}.is-size-6-fullhd{font-size:1rem!important}.is-size-7-fullhd{font-size:.75rem!important}}.has-text-centered{text-align:center!important}.has-text-justified{text-align:justify!important}.has-text-left{text-align:left!important}.has-text-right{text-align:right!important}@media screen and (max-width:768px){.has-text-centered-mobile{text-align:center!important}}@media screen and (min-width:769px),print{.has-text-centered-tablet{text-align:center!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-centered-tablet-only{text-align:center!important}}@media screen and (max-width:1023px){.has-text-centered-touch{text-align:center!important}}@media screen and (min-width:1024px){.has-text-centered-desktop{text-align:center!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-centered-desktop-only{text-align:center!important}}@media screen and (min-width:1216px){.has-text-centered-widescreen{text-align:center!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-centered-widescreen-only{text-align:center!important}}@media screen and (min-width:1408px){.has-text-centered-fullhd{text-align:center!important}}@media screen and (max-width:768px){.has-text-justified-mobile{text-align:justify!important}}@media screen and (min-width:769px),print{.has-text-justified-tablet{text-align:justify!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-justified-tablet-only{text-align:justify!important}}@media screen and (max-width:1023px){.has-text-justified-touch{text-align:justify!important}}@media screen and (min-width:1024px){.has-text-justified-desktop{text-align:justify!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-justified-desktop-only{text-align:justify!important}}@media screen and (min-width:1216px){.has-text-justified-widescreen{text-align:justify!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-justified-widescreen-only{text-align:justify!important}}@media screen and (min-width:1408px){.has-text-justified-fullhd{text-align:justify!important}}@media screen and (max-width:768px){.has-text-left-mobile{text-align:left!important}}@media screen and (min-width:769px),print{.has-text-left-tablet{text-align:left!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-left-tablet-only{text-align:left!important}}@media screen and (max-width:1023px){.has-text-left-touch{text-align:left!important}}@media screen and (min-width:1024px){.has-text-left-desktop{text-align:left!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-left-desktop-only{text-align:left!important}}@media screen and (min-width:1216px){.has-text-left-widescreen{text-align:left!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-left-widescreen-only{text-align:left!important}}@media screen and (min-width:1408px){.has-text-left-fullhd{text-align:left!important}}@media screen and (max-width:768px){.has-text-right-mobile{text-align:right!important}}@media screen and (min-width:769px),print{.has-text-right-tablet{text-align:right!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-right-tablet-only{text-align:right!important}}@media screen and (max-width:1023px){.has-text-right-touch{text-align:right!important}}@media screen and (min-width:1024px){.has-text-right-desktop{text-align:right!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-right-desktop-only{text-align:right!important}}@media screen and (min-width:1216px){.has-text-right-widescreen{text-align:right!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-right-widescreen-only{text-align:right!important}}@media screen and (min-width:1408px){.has-text-right-fullhd{text-align:right!important}}.is-capitalized{text-transform:capitalize!important}.is-lowercase{text-transform:lowercase!important}.is-uppercase{text-transform:uppercase!important}.is-italic{font-style:italic!important}.has-text-weight-light{font-weight:300!important}.has-text-weight-normal{font-weight:400!important}.has-text-weight-medium{font-weight:500!important}.has-text-weight-semibold{font-weight:600!important}.has-text-weight-bold{font-weight:700!important}.is-family-primary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-secondary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-sans-serif{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-monospace{font-family:monospace!important}.is-family-code{font-family:monospace!important}.is-block{display:block!important}@media screen and (max-width:768px){.is-block-mobile{display:block!important}}@media screen and (min-width:769px),print{.is-block-tablet{display:block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-block-tablet-only{display:block!important}}@media screen and (max-width:1023px){.is-block-touch{display:block!important}}@media screen and (min-width:1024px){.is-block-desktop{display:block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-block-desktop-only{display:block!important}}@media screen and (min-width:1216px){.is-block-widescreen{display:block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-block-widescreen-only{display:block!important}}@media screen and (min-width:1408px){.is-block-fullhd{display:block!important}}.is-flex{display:flex!important}@media screen and (max-width:768px){.is-flex-mobile{display:flex!important}}@media screen and (min-width:769px),print{.is-flex-tablet{display:flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-flex-tablet-only{display:flex!important}}@media screen and (max-width:1023px){.is-flex-touch{display:flex!important}}@media screen and (min-width:1024px){.is-flex-desktop{display:flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-flex-desktop-only{display:flex!important}}@media screen and (min-width:1216px){.is-flex-widescreen{display:flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-flex-widescreen-only{display:flex!important}}@media screen and (min-width:1408px){.is-flex-fullhd{display:flex!important}}.is-inline{display:inline!important}@media screen and (max-width:768px){.is-inline-mobile{display:inline!important}}@media screen and (min-width:769px),print{.is-inline-tablet{display:inline!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-tablet-only{display:inline!important}}@media screen and (max-width:1023px){.is-inline-touch{display:inline!important}}@media screen and (min-width:1024px){.is-inline-desktop{display:inline!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-desktop-only{display:inline!important}}@media screen and (min-width:1216px){.is-inline-widescreen{display:inline!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-widescreen-only{display:inline!important}}@media screen and (min-width:1408px){.is-inline-fullhd{display:inline!important}}.is-inline-block{display:inline-block!important}@media screen and (max-width:768px){.is-inline-block-mobile{display:inline-block!important}}@media screen and (min-width:769px),print{.is-inline-block-tablet{display:inline-block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-block-tablet-only{display:inline-block!important}}@media screen and (max-width:1023px){.is-inline-block-touch{display:inline-block!important}}@media screen and (min-width:1024px){.is-inline-block-desktop{display:inline-block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-block-desktop-only{display:inline-block!important}}@media screen and (min-width:1216px){.is-inline-block-widescreen{display:inline-block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-block-widescreen-only{display:inline-block!important}}@media screen and (min-width:1408px){.is-inline-block-fullhd{display:inline-block!important}}.is-inline-flex{display:inline-flex!important}@media screen and (max-width:768px){.is-inline-flex-mobile{display:inline-flex!important}}@media screen and (min-width:769px),print{.is-inline-flex-tablet{display:inline-flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-flex-tablet-only{display:inline-flex!important}}@media screen and (max-width:1023px){.is-inline-flex-touch{display:inline-flex!important}}@media screen and (min-width:1024px){.is-inline-flex-desktop{display:inline-flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-flex-desktop-only{display:inline-flex!important}}@media screen and (min-width:1216px){.is-inline-flex-widescreen{display:inline-flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-flex-widescreen-only{display:inline-flex!important}}@media screen and (min-width:1408px){.is-inline-flex-fullhd{display:inline-flex!important}}.is-hidden{display:none!important}.is-sr-only{border:none!important;clip:rect(0,0,0,0)!important;height:.01em!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:.01em!important}@media screen and (max-width:768px){.is-hidden-mobile{display:none!important}}@media screen and (min-width:769px),print{.is-hidden-tablet{display:none!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-hidden-tablet-only{display:none!important}}@media screen and (max-width:1023px){.is-hidden-touch{display:none!important}}@media screen and (min-width:1024px){.is-hidden-desktop{display:none!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-hidden-desktop-only{display:none!important}}@media screen and (min-width:1216px){.is-hidden-widescreen{display:none!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-hidden-widescreen-only{display:none!important}}@media screen and (min-width:1408px){.is-hidden-fullhd{display:none!important}}.is-invisible{visibility:hidden!important}@media screen and (max-width:768px){.is-invisible-mobile{visibility:hidden!important}}@media screen and (min-width:769px),print{.is-invisible-tablet{visibility:hidden!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-invisible-tablet-only{visibility:hidden!important}}@media screen and (max-width:1023px){.is-invisible-touch{visibility:hidden!important}}@media screen and (min-width:1024px){.is-invisible-desktop{visibility:hidden!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-invisible-desktop-only{visibility:hidden!important}}@media screen and (min-width:1216px){.is-invisible-widescreen{visibility:hidden!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-invisible-widescreen-only{visibility:hidden!important}}@media screen and (min-width:1408px){.is-invisible-fullhd{visibility:hidden!important}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:0 0}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width:1023px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white .navbar-link.is-active,.hero.is-white .navbar-link:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black .navbar-link.is-active,.hero.is-black .navbar-link:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black a.navbar-item:hover{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}@media screen and (max-width:768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,.7)}.hero.is-light .subtitle{color:rgba(0,0,0,.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,.7)}.hero.is-light .navbar-link.is-active,.hero.is-light .navbar-link:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.hero.is-light .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}}.hero.is-dark{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong{color:inherit}.hero.is-dark .title{color:#fff}.hero.is-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-dark .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.hero.is-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-dark .navbar-link.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark a.navbar-item:hover{background-color:#292929;color:#fff}.hero.is-dark .tabs a{color:#fff;opacity:.9}.hero.is-dark .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}@media screen and (max-width:768px){.hero.is-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}}.hero.is-primary{background-color:#00d1b2;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong{color:inherit}.hero.is-primary .title{color:#fff}.hero.is-primary .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary .subtitle a:not(.button),.hero.is-primary .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-primary .navbar-menu{background-color:#00d1b2}}.hero.is-primary .navbar-item,.hero.is-primary .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary .navbar-link.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary a.navbar-item:hover{background-color:#00b89c;color:#fff}.hero.is-primary .tabs a{color:#fff;opacity:.9}.hero.is-primary .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#00d1b2}.hero.is-primary.is-bold{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}@media screen and (max-width:768px){.hero.is-primary.is-bold .navbar-menu{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}}.hero.is-link{background-color:#3273dc;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-link .navbar-menu{background-color:#3273dc}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link .navbar-link.is-active,.hero.is-link .navbar-link:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link a.navbar-item:hover{background-color:#2366d1;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3273dc}.hero.is-link.is-bold{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}@media screen and (max-width:768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}}.hero.is-info{background-color:#3298dc;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-info .navbar-menu{background-color:#3298dc}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info .navbar-link.is-active,.hero.is-info .navbar-link:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info a.navbar-item:hover{background-color:#238cd1;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3298dc}.hero.is-info.is-bold{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}@media screen and (max-width:768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}}.hero.is-success{background-color:#48c774;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-success .navbar-menu{background-color:#48c774}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success .navbar-link.is-active,.hero.is-success .navbar-link:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success a.navbar-item:hover{background-color:#3abb67;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#48c774}.hero.is-success.is-bold{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}@media screen and (max-width:768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning .navbar-link.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}@media screen and (max-width:768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}}.hero.is-danger{background-color:#f14668;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-danger .navbar-menu{background-color:#f14668}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger .navbar-link.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger a.navbar-item:hover{background-color:#ef2e55;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f14668}.hero.is-danger.is-bold{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}@media screen and (max-width:768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}}.hero.is-small .hero-body{padding:1.5rem}@media screen and (min-width:769px),print{.hero.is-medium .hero-body{padding:9rem 1.5rem}}@media screen and (min-width:769px),print{.hero.is-large .hero-body{padding:18rem 1.5rem}}.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body,.hero.is-halfheight .hero-body{align-items:center;display:flex}.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container,.hero.is-halfheight .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.hero-video.is-transparent{opacity:.3}@media screen and (max-width:768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width:768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:.75rem}}@media screen and (min-width:769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-foot,.hero-head{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width:1024px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem} \ No newline at end of file diff --git a/static/images/preview.png b/static/images/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d868a8ff7823390273c4b00617672d5f18bc6d GIT binary patch literal 2470062 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%0Dw<jcEtO#o4F|FPU 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%0Di^kA{$RPB~CB( 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

~WH5ld5^W>g2cV6Ne4YEAr>#R=|f~ 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ℑ zf_mvOzv30!`kPU|Gj9KBRzTm6uBT1xXgYD*vpc=N_^y~2-_9OAato%* z=ku->X@WZ}{E-VDNiyQycGHr%cY^j%FUV$T4PhHTxVFEoVsrllV{x0Lzjur@x+nk+{BV4PKSRH z6zG&HA76K<8jLjQ*ItavFMu9VFQ5!uH zJtuIRi8nqaQ!ZjIOop4gGV4Guq=ecsJLL6vkg=~v_s3WuXd?Vc$hY)67Ho}aZWhDu zM&~ZoYRh-z;>!XEv$gNF_Ke8l0_=)9IHdcKGZXa2w+`JjQP+4JtZkY9>o zLBBbSY|V_4y3%rtxL>uqg;z*)Ye&i#BR|v>*rWnn3){U9b?7h6p!CNr9mX6G1*&lC zldHkQ1^-BpFkyP4kv}isQ-~X*>Te^~TSBN^-}sc0GPprw^Lrkb^NR2S_qj$D?B!jP z@Vwi!zcUwQOX{D|8A3Y|1V@2zVC!~CtsXNh;5MA?H0f%Q>&e5iSCsmfyROqH@E|4+ zkLyEb3~%>1X$nQ8Khf|Cn^Z7-Q8+%CU|LbGd;<=-{rA*f(?K)H4 zx{gX$H)erHRLP`iRqK)lvjG}rC+2rw3i?&#FV$`V-*JPrzv+RL(D`a6o{xS3E(KdP zmWPGNEwyTtsymoiYdbZ`U+HzoDgocDYbxHlbbEd_n|)7QzdQSiXrTj8igLG`fA*%T zGvn{g0GE43^4`Q6Eq-p7i^svzIe(uQp7t&r{Z-nsvKbmep2%TAP4uG8i*huazvCAI zKvTq9o!*pJhYx}=<5p7UwaV(btTvt{0_UFe&C!OASA6O9l_rggfYoWulr%`o{HFPI z-D4Wf+zRu#Z-Mx5@{L(Zms+E_!mZl8hO5=-i2L{22Rj!s_ zgS!^Otn9*6TWb#XPWnkiXrzpYfZJs&(pwV3~v1lHs;8|NI zxs$ES%CE`ydjT=MX+-@K~4&pkO0@t#fGz-Pfsuzsw6D!>K zLm-)Y)?Z?#7OUhhyr=CjwqeIQk8QlLPdIT%sgagWOtwTT@!I>@lp|hU_Bm>%U;WEBs zTE+Ah_gx%x+*Nb9p< z#EJNk;X{BMF0t#6(pT;Nux0K=MdI}C+0O2nEoYw?BjB#Xjhvhl`XvUqyeRoH3>5z()*Ag!@!!VeA9 z07ULuZY_7H8<~$=tDC8R;s4Bfz7p!o9YY<-ss|r%NofKvma>@A7YucT|AC&q`Q{O; z<=J~`HrlU8-GqhF*zK(bQk;ne1>|??_@C|lryisyoi7a&jsyGA5kcJtkrv0%?W#G2 zOx*&dLZ(%OUA4BtIO-n%+5H)G1ik~Y$FF|+7kc)$Msgj&g1asnGm1aIjh+039pu0C zr)r496FjvF5v~a$Snt27;@4CZ;#VB~I5aU#$MOd4yxMFRHxvk|-Xx43+hh(&+Uoi) z*`NloxsV?>hmLs*JrQv8Xn>Z=pN&zQ?9SU#(8v!FavERbIG$QQwMuYX4^E6D=GHLS z^bhj&5aVulU`2Ykj$s!Rc6tV3JQQBp@Ua0x3ZJ~kN{BX zVvT89oTk(u3(6bc z0VH^44lMlr&Fhn~cz&Q>IxBph%i4$FIrCXanM#kJjruOyk>(1|dJv@Zz$$rMu-`4Ypgg ztXj|QORSwtowCeYevX*TQ)x2%u3XrPztz#{H@CK-tTYkvC^hSs(l>Z0{&*mh_LyI} z8Aj`ib#`F!lv)tafzUO`#MH`sQ3)`{g!Rtun57SY8yZ`sS>@2sA#5_v@R`Mp9sm&D z7j9t(Guc=?h1M@PC9bdAhbPq);BVXXj2w^2`KPYB!y$Z@8|ns{>pxr~6#9 z=8YIbx64EgG=lGI`wROUdK84x1M9Vj4V(5{$G+ZY%lU$I!nCokXfOid82&iRdLfHM_xc*9WQBNCd2ZutILCbi9^uSKr83$LYsKrj! zc3G^pG4E8Rx-6smyLqaXpko2;ipLG>Y8XxCuQWqGp2@URd=m|A3j>%NF)7`o-{8&p zm^vR)j_wdo3qE=Y5JE3yU6@#tAd{*VBLMDF^>kO{C9Ayk2F&6)wEme^jb=GDX))-_ zsQWOrYzG#MDNqCZ7P@Qt|E%*Q$Y_6XlCBv#1Ie1mMJs)k6fBsE=TUohqMPvW=-zS; zUNEUAyrc+d79FFB1O#`UUNF97ncTe+9@uxRh14;#8G4)C3o_4*DiGFCXj$<2{r+jB z_*lkWS-?Vq^a3!v54PpqH8lBCkk@)9qd`ZCd5yNqx6W%;)=)_L&;r6bV?pyM?mf-W z$b}E(=bNwEq9G2MGEm#Vn=&h%XqCdg+3KqK=83>DdX`q@KsffNT8Ka6XT5LUE~kO3 zAJBPjyYDk_E<@4Q9i?A7{z*Z>gm{yrG@&Gp_v#VPD|qiT9syYP3Jbvmbr6@iT_2Kd zxp^as4^!XJbXyb7t4P?ei-{h&9-x$<$L9P%)2FZMN%{$2V)F%BDW!iZWJN6rCHaz% z@ci5^%<;BHkWCT(!}YZx)19BQ0F7Na-`w;i8u<*fUzUY(oPPt;1omEMNb9DtC?4ia z=evT0^-a8pERF%L%~53ldop1cw$&Ch69Z|e!8uw--%H?_^pKAqeNLScxmz7v z!Z$Q0d~#zh3|^GMG%Nm?2P?ve&MiST0o?Xbe97xO@ zVlcwe(L9Tu=Ge$M0`0pu!3Jg0B|61AZqAgIDmmzzL~@$KkWC3~7M^k8dl}{;GEoYy z3(7;&)=ixc7lE#FB3)4u5O!SHiVYI8Ghx9eRW*V~QDQF8fp1oiL9JT#{m+u|-(rp@ zWnv+k?u@4`?1g?!3PB$8v!9W(!7f$e7UWkBXI1d4xX*4=n8P~XPX`v0f~7wVFmelb zQb2EviI!#NA!S36#j;krW>xT8)%EKw*<+raw?}U}k?Qid8)VFLP_-=$R{Q^SjsPy8 z$r&c-6Boiy8aP_v1^y|vE*C&>$D@>M6u1s{WT+lOB)uJhwYQgM2Jmn zx{_}&KsbM%1^HP-ZrnJC;?Q8y>idVN>k?rRujdyf+aShiB$Ey1+?EO1yc+wjh9Swi zL#*qo22yAf)vw3P-PO*wymlV~ZojD${J8yK07dz%TZ8)<%RWXkWT}IA6n`x~&j~-Q-b=NOE0`ko* zLN&q|m`ESt0%E3_9#rql+0pf2n<H8k#eZk%KJ z@j~KBcXxx(JCSyX(6_NWAZha)5LQ!(g2_!6wxIVk{c3XhOMD&736UQclr$M@$1MiB zee6Q#K>{a-f$vQI#@_15`<>_e&R|nBqip}i#$WlMY{igoHkAk5jp^5+Zyn9LLeuVY zF;gD0Nm%(?+>N6>+^vx7u^ZKssg<^BH7zP8e!EO#fFai6(*5woxSvcLXYo)}VUK&6 z`RrQYqb;z@Ba62gwMzAk&76yLI|72HMFHk9N1Ln<(f~PuhuT{K^`NWQCi3OXO@RiV zu@#j8J8^9MD~NSpUbUX{Hkvb{G^~TM8ll7~)V1nZU;_HG+tj4CakEadQ3wzd|MBMW zp)2TD2F+rg^5?vJB$vXx2F22c_I5L!_D)keKwlg%TWHS zAJPrl-bL27MU3S$(jin%j8-0Qxm{|7gfp9AOKj4&An_OV9m{5NOzNGHM4ViqP?q|3 zIO8`p?OQ$(%=bH8E4ST<9IVJ0AEGFfd}A*QwVJhkgrQpm@S@>C!ulp%m|om*vF*&u zm2uQLlUGG8N56t!db$Cdo>2d%jc)sPVl`1$i=Y8tti5u(PZOiMb7bsX zD%A2hatN60fI3;%UWMFOEa1D5$*~;`>Ah(4f3pB2lNOxZA)5p{ya#XvQtdHV4ROQQ8sIkB+*Qc)LL$Ma301ZHBc> z))}TFtk{(`iisIL-Qe8gSWF<#4sS-eLhq(Te#U>b`)WqK9&sr@F+4%t?yT)>TxH4{ za9BxjLY*u=DB>p%^Ic!wS?(AQ_K3LT+x!2r%8uVXjnKQ0DU!m>t9<7X-X(mrDr-}3 z`ye?n)E@955q5Tr>(~w3Jx+)#^4PN&tcHM4=MqUCrK0nosc&(edRl9JIPADc?pRbg zhXcSn>t_E50)T#X{Ew?W3E`y8lKwMg7=nouKBW*gHBg?1fYE}i)rwCRQ%BO{U2pfT z2$A__oK8xg6AlD=^%r;Z_T&77utDrbhco!L#lCB zqY83;Zh-$KT%yrV97ZjkqfFy=$0l&feg`{$mloCS^p6qs)VXVqCsT_YMn3HDE*=TU zLRVezqD<_{j2cO@6iOpT`)?!f$y546!bjF^ct4)r@v+YIo zNTI#guAbN(c&I8e6#bM+Hr#pRE~Y^T2%O)7D^#xY`+|uCe9-ya!%rJ_h00M1bpM88bTi_J$Gu45f?544^U!5cq!K8ajkxoGevCz1<2!(6|9~HzO zlPwc}6dMHaU)^67FHoFd7yc>qzj3D%w@z8HeVZWqH!jT<;9w?oJKe$Xc;o`d*rjLf zJe)k+JdwGZ47-=T#(a{oe*&WKUn!$1J(C^xaTe9-ueN<;_PUDAIqu>jxFBL|NE7{L znsL4F0cZbt=r`=X6BzV!UT$-y+T1rD{Kw|BW?=HukmE5H- z0I`8eZX3k(6+A*kE47@yujqs$tEB7G8QAsK9EV*0Z=kPzr>I`%CpxN;I6LjgPj+{5 zF;CUO@%(3;6X#0WBb52t&rQ-luWHZNIB3o@<~v2+obPgV*2T8NKVHev_|mHs?O<17 z-XTx&eN(HuW0-%f`ZMimjhzEqt^r(fec7sG`tPW=-}@WuhU=LI?%@<=BsTk5bolyM z1t-=)igs)`oBgK1)enCK4N`gz_UfQ3Jl~)%m@3a7`U}7l4L&n=1^1tw3hR>q@|HzQ z*+Tgc1KdSd3$7|H!!ho9#)s`3rS;Tb<5^danFq{g3l`-oAvh_dLo-3aEs*=9U;P~p z)p0Ixg8#QaMA{Yc>cg%LvOucwQe*sT!AX{_58oW&y}Tl?EW&k zW4~C(yLB+v3R5TXq(JEur`30%Ng`%6fhQdqv{hxKdJO1rPmRBGEWg096pFU%@cwHh zt`AyV_5sr7rX=zyUxVU?J~j$f?^t%-7x3w34kqUfPJCH!Z7A*Jr(Is*XjmW~-d?U> zU%giAmBOf@d{-h05h9NjUHLhH;i(cgbgz z*7(7b%!A2|?K&F@SbWcYE;WM923x}zwRr?hTpxm2BQ)e{7Mtx#f-EnA2u z#1s^0tZaPZ5zgA?>avmH>slkNy!&v7yy+4WCqDbc?rkhhlrN(U*Vi|R6Z8^Fvq~kZ z1zV(>K51cjftGT~7r#PW|GMmR>3zW3^Gl(BH#d%S2Kk+nKOsr|8YaF3%du{l_H*Tc z``8Mx^hS_;WHLmCaN_&{I%qb^S4TA^mb&oT$q z59^1ISND{%`NN3%1OwO-&pR~i=pLt0+Jha-<)zoO#qpSHYEk$UYmLOgZ*&8dpodUw z4*XDj%U~(0<-XP;cACaNN$uF}Ql+2;urYEVJr1AAt|}?|&WER?gGT|0sZmu}Om+6C+`9 zwi|l!=K(HFmHJ@EgXEe3zeFLo8{kL(xa^C4 zg5OGC2uWVg%&)5H+wI%Vo@#^Mj!f9gUh{aiZ&ViZ?ZyR4iu-c&z~l*ZE0L1Go>s|v zEHcHUxWgwi-T;;fAa(;UHNYmgjq78oZi|Oe1!GEGYeSGe)8Z-W4GE7lo2JV>td=N2 zMNI5Lw|H$8N9F`^diJeD*H(C>OoH54IW`oB;EQxTA9#a0b%QDpa534Pl^S;N8<)1L zkAlQmEEc!6fR9O~(|FrPQGkaJ7Ms&_yMAYQz-`|0v42w$lU1ml&EEto;FLwFuR*lO z_YP@Hwmn+Vj`#dwQ?-=})IweX2r_9D)YmxcqL%4mkz3c9zh0*K_97lIAmktp{gxUK z<-B=GSJcPnp}@g=KXAP@T>nPUi+H+!cbwE-AuO&`7}j0Q$qD zC~BH*+ia-?LY~p3K3;se3BBcG#pWlXppv%7%%RHtHE27#BOoaBRhV(!^}-Xl*%ES= zcP_whbhU1H!qF?Vg$6-X$;12meBA#a{nysbLf-wW!$VR5N7BP1h^`?UX(bu!v#Ex> z;&YS3c<+jO@?cpg%qE?wRC{t(`C{htw~!$nCXHSbMOK;NaaHh^H4A<@ZIlL!I#NkNtwku~l`1SLmm!OZt zabsZQ!Z@L#Oz!zs{k!e+cc57I!Rcs|T+4NR-2&3NbGv?F*5K1tTI910Q$UbU$Mul= z#%f_Y#bq|ytx-sE88d;|bO{SuC~(Y#m4`7iph_G;yU;qZr@7Se%FxTAC+*Ye69K2+tCf>v+TF6BhV z(LgT+3e*7!P@}uHK@oE~r7xn!BJafK>~v%7JZA4V_yNWe0sV&pT_l^XJ{>&~1duRP zxZLs)`~!h}R(pX%V#XS|Umenx7#Gy4w3p4$cyw{BLBuq`{yeV3TR=}cJ>~ z&S-u_LS%?0U~jlpx+Bf9h8bHiqXa6A=O4wPBe~EI*$?)*ZFM>|-9 zr0##10&R|p-D5X$<$Rq3M6JdR!s|ApFP?@edrzMMrC&47?{rEKF?12Ab2sXK#2WJw zR;2R;yY5@e7arHy^Vtgctl~{u9&IK&2Qpu9OMR9uP|f;{!5#2AWRt<^h`$J z+uXsi@GJTh3MGO$+*5dtVt?2{IkZ_vohv`uBG+EmmD@DfeTK|Y>3*Ur_ZTVu^^XT3< zg$lEdznkKrBEBg4im=A*!L^@fKin@@U!QrVakvV~aqrgwdEl5MFDj&!SATH|yk)WP z?IXLH1{x8zcyA>|y8^jA{w&^YMhJhyDqj6H70=hk8xIeXGxmAB7Pf3%&{be^c6jRy zi3;utpAHC{2Heb*6g1GYCmqtN??rU`Xn!4=ojV^1N&;hIVqpIpo<>#qA5m!O<8u4| z=pz3qB=H5X%NqXxfHMUIK_O9hIcSZfSc5n}Q>d@v4sxg)(|>wmXp@disQ;{a$)6S$ z4nLo4EdvR)2M0y88{o&*6q%h}QI+{jKmnY11U>lx<@C0Oxj1Y`5YIukz=LnpVZ<7J z_#$~h0jZ59v0CF<>;4O23t2@Kyu~D>IJkO{|6_2x#uUPr6~-1QI|1nM1vEJb_Nk-^ zycRM?)wbcQn6L~10Xg8llW4K#DL&@o;;W<9r&by-C9)6hQUj~>(%1^b_{U`TCkA8# zDG7^s6-~LfRa8XEDeI7dpE7yj zz5@fAKD3~720YfkOO$f)Sdg&`AJI!iqaWFvnNar&)Z>zFMUp3_UO(6xa&#~SOFKM~ zy2OD^F{pLT&(+8k;;C=pi>?`UUNTI7g0`{I1!yAM7+#uPV7ub9b=vDSe0hm+fCu0m z8B-%Yl(O2sH2z{-6u-XB!Q`gd)X50W6_G4C%Na3eVR^MkDh07E9oiy!Wd&ZEF6+B0lr&(*sF<< zn>%y)ga^fLV~qxBtyfRaFW4Hj_q|4AZ#hj^eZn*Xs}#kJ)DucQxN4PsnI}|QBS?stRzo}F zG3@1BuFYF@>-(8`bk(Dv!nX|0W&pH0Av7VEbko0Zqlj1KUq7FXpG1Gk?TKV*SnYQr z_o!Ls)V;pbKRwVpl|v^EOUoWlZ$1qgN{qkz2C}5=ln`{^g;Ic){yluo z4}RL4qj%|SVuSD~b29*JHAH```RW|?v%rsnuX2ii>j1Mi-0|OU;+Xc~|g{pScJChf$eIE8S z6%*gMDzR!wJQ#=z9yAS30Ls{orAKw1^arnOTvn9jdB}!>kvtc9^h4gKl5sM`hu42LF`6bqxA0MZ?i4>{)Pa2MeYD8x~$xG9_%}) zvc*vaaKMB0c{u8BD+689Hge4kZ~Aa&mkT`=G~4bH?5e!Y%G9!I?<4cl``**l{iY_S zfJUa&A1jJKqIm2BQ=(#~%DI_ZUOY)jE@f{<72YV|A%i6ChXT6pRH=z`s$d@2@$Y|C zst(tz)?ePcMK|PQno=4)5XzZVkFWOn*YM3%Ol!k)@<_M#PF%!CjkTe1JOk!CPwvg0 z^Na(CzP91g`{l-rgBKm34F@%$%otZ#IB{kPN_W%kK z&tn||j&_Fdvs1z9sxJ##t|=}Bsj}0SQdoCIJ1=tZbOjMgc=+R2(2JkW zr#)@AZ2Yrfl()>iD-Lb*Sj_)u31*<-IH|AV#~4ftwrr!SYKZW#C@sp_mY+J_yksF5+M%L{|wCx*{8U2zUjg~`}lE7 zi65r4z#|JExJur;w&W9#>moB?6?(^EJYDHMwC&(`#9URLED&Mkjcdb1d4YdzPh*NZ zu!Q)azMlBeVXym6Ub?3XchC6yFX`7olS06T2~SfhrM9UC{*LVv4dX+xr?qE~rMi9B zJS9bFcezdaKML9KX?QSB8tqAPMmps=#jCh0BI5_;$O}1RZx;KM@EZ0T3y}|L5aWpA z_u#(m@cgjTj|DL-yiP>lFb|klrJl^MkLqdRa(V`sFH7ielW)AnGd2nc0MI&JE?2kN z#Gqf=`a{78dk||ea*!76dG#yE)l!J8q_*4@(LcKzAfhv^Fbzzrkh7y5qkB5XqR8wk zD~vAx7h8BW3mXY+xSj0PCVxiDpogB2jc*avQx$k#Tq?7mGgW{zL#q*f;!d$w>&hIC zKyJ{Zpj#{}e8|8efx+S08G4##3t@b|F9f-RwO6siDqFGcwc8^nfT%6@R%16Y z`CXh6xSw7lxdml<3#XC)IJ&=WTM{~7;CmmK6d7j7IT>>5kM=A2u&YB)XWF`AeEPls zS_I8=fnGd?L!)4vGm3d4QpLPQb|%JWl;``APdn>_t{bRy)=2PDI_WFLJQ=F@Unn1d z>k}jo!+by$6Uy4ii`ZB3Rn|?d>x_Y}kFz?|;?7qw|hY@Qrl~aH37Y2(SkNn+5!6%^+pQpvGQQt;L^T25p z`qVr93YCztMbuAp$psFGCyW~z^tajdx%uP5$q#;YbFtIs3D9sl)p(I9=5);*i!>bS z%5l(j&+wPn;a-QLrlKh}p0-kJd#lQ_e-o|t3gb9OfjG?dbCRcIejwk>@*rVt*Ku)h z25ud4o*Jf5l=CI3DF&_!6;Lt$s;r+Bvu%#-aX!%R+v#(bc$-p8>)S|6$29ftQD3`& zsl-J|_%#~8>s*F%tLGz`OM#-)T$9~(&zbPaI+HYwHZYPjMl`DZ8SX0bz;G*Z z`<5rPOZE(7-n|GQ9Lg+l0t}@J{tr#>;m=n8xc?_HqIRpbS8r{t+IvOZT6$NF7FE<} zMQLrZ2|-J1t6j5I)!KUtN^L?_h+Ql8j6?|e=Kc9Set*KrIeDCOy{_weUQqty789ki zqH>uUec5tf*kXahm1p((_xEm!?0^Z1XA)VJ5xof@Nm>bzZv6-LfY95*_+cLNFQbWw zs%SJJ2fC;<&!HN2(gM&3_lPY`sw!>|wFs}C)t6m7EEHulx`K4sF#xTHmlI3rZ>q|@ zY)s#uL_=)<%eeNw@$;Yx6y-Qjnj)Hz@mec9ix3P9A+X6OyJl0L|P}t10{w;7ygQ2xgMBEKDHtrF1wLe?#Z%P0Q^kGEo zrUQ_+LDYnie3^g-5}y~mp|t5mkO*2&G1h!Mlsf~4f!i|SM&{pQ>B4sw{AICE_)$hU4yzhFGYr^?d2IOIrPpUp0op3m%iu^>3>=rn-qR(`VOdLAHg+t z>>Ymh;pI?j*gv!WRLoPit?8NVYz!NDDVo;_o#AGb@8C3nNDx%B0=(MQ{NxgzhOZFK z3kjhuIU@2y$RVRsPEP2MRS}2X#aLFWV19KU&(vY3;7lhMUx$YGBv}tUQwYSTb3G>X zK|(fBWPYO7k|~e!>U{d7QykbjT0I7YU=! zRw7QawE^eUNB_ua$3=UdQ>a3)Q}gmhzh|*MLzf`t_3)q5;;+mN(Mrevw(M7z=;c22 zyKC@j*{zd&;Cphn*f@_{if*rQai?TCx^Ym*fMesvHn%!YdtAA`w4L$dL916;$r}C4 z1RaT^U$*bB1A0HjXwz|Y^Yjt|QnLc*{WT^RdGLi%4lhL>Jo}bc|5>ICQfyn(0^qBW zFlYTZUi@>ld+J`e$9aPXAAmMUeDVC?Bnd=6jj;5jCs zN!t^2!>xj2Cc^1UWh4XRJ!-$lgZq4u+)BBTAJGH5rhW3qv~aFPn8ER6z@mK!S8052 zJCSa9`!=iQ|M1V353d}P>O=OZjtlv$gD;bqSFSDHTc-*d*NxAUY9Uh({1U(fxGSG!o_|vhFq{G5u*kt9Ixrpbo z3zdBEs$;kDqG5aniMN3+=|>go^IWf=eVF*S|K$<6*UHFfmhrL%(HyAJC#mHs=a}a}y9Y+tw||{J z5scK?I~R}j0{s$|eSQy7bSId;_gbMZ=vDe!RSB(zla3FKn4#iJ{dHBHzJd` zFAk!>jJi6Hb7UpGF~E%Yb3GmxfM^%^U@o2ymgrGN89^yW)?|7^2d{SrBgL{bp!a>C zx>Esr2eE46?repji>P+Bo<<)nY=#V{l~9BRk2`>l>}L z^2M09-J^7z3|}4_@e8e7VZEB=n4151xydWR6$v>>z`V4ly{71g)rFGgM>dNd4&`aV zL&sv_ds~w^HsfA_qmEgS3+JwQug_Qdx;^jt8iw(9K6Q}w09@OCnU|$D@E(v+;F~b_ zORXmTS0ju8EU2H3F1o^0qxm6L#~T3q-agIBG@y{z_4DG#3Q(?`N<(RpVFW+Y)8Iwmi?))`?`#{wPa zKY##F_&z0;tBFkAVaiaNBGNA|<>q*gBnINho$!b2D~RjMvZ*)Nd{&;(4rdDi1y+9< z*f3R<4!0lS_-jpHV)H$*@8_)O*Y?f8)hr@`bg=D+{V*HQi27 zAY2pm_F13qp-Gjk>$sss*Hq@3hinBL0k;|~TE3lw-j)AHHvaDx+kw>Cqk_)Kji>d(Zy*kghE3PFSZ{m~hXv+IP2L@SP@N$yUYI3=vTo*pcV4Xw6wkc9l!1Rke?H!1~c|FzwcT>1{(RVDSTI z%0~P{y)$P$F5kK}4dH7ZOQnI-)u;MVOY%dgehv1sd{=YtNb7lW+D6~=Wk=-D$l;@| zI{;^w`{$cipe61q&T()v!q<**sRLGl(^+2(%NaZ@{2_mvL%CnYdZ9Jk15u!xFL0)b zvvW3?joRtWF4R#E54=AFU_x-$G~-SYpn7W#-}jF?OLH9fzri)~8$;`|ci1zb##u=J z{dLf8f;~+{bN1(QFUn!t>v8QeMj8Npdlr47dRby?dz4K_7kNAH1 z%&2>~Q0ZaCvz5Iy;jp<0s~X#p*baepBue~2YUp>nJ^l3HifesmQ8E*sX{(z$wvhf!LZ=^k^Ppi>a1FpN+-ybh-KT*;4;65YNE3`)Z3B`o`P8 zGcb7R2Vm987G@Mpi0!q2jyl4it9F>qNrF->xRIWD&n#VASWytFU;ng{eoKNBQl25K zTUpwku5_oS4D6Z4N>zj$7`JJ8`3?)f=HSN;gs92)i<*=_^NkMyj9_W7ot=o=zqDBzYyt6? zjhuvs4Ng~PG}}b|_&qD5N%6^Q55KjkFV(&$@Zfn;cf)S0o)V}4{|>NRiv#h~)J^s9 z3C$9nMri1knfKn# zl2eKJkFpv?Pm_iU($f#X0G3QJW9^HLu?V-c4qIEyKddUUs7W$ZZ;ZeBH&?TvO!wik2jbG5WHdESwJO}x|X96b^5(Kx`xSCeU6-WrH+1! zQT?-uUWZRY@71t^W9gToJ$)F?C5OCCTbcT>wb#IZ4?jM(5$B2Qt5(`Hedy75NYCA& zikND*Y2^`s(uR8|=TK@>|I95$>rq;K3D<5{|py5mOUV(szXHG@Cl?zitmawSMi_UU90 zM(_yv=u4r-h8)z^yAQr`701TP zeCno$b9nSF(z-Jy-I}QA8%k(QL)Kilnzu~PxO$@DaZ3@sot$rcO5^#yRD;Uwt-D+!x?Z~Nj|E?5F$Ki8SfRA@RfbH(KXfz44I~v8j!PN zqnG8g(80)P<_l(yNVh&HqHjo-oBMWcdOg7ZxX(|i5%hf%7K)R6VZn?jhl~LcoSlV1 zHxSeNK2_Otzvjvo8?98`GSLz-I_M;qqa*&&7}<2xV+1QRV?r>;X^(u ziym`#oh#i0KjAp&0vLU6if%n1x|SC8PV@ejLESpLrLobB%SZQ06(|JH*7l1j?m;s$ zHV(#@KAv@mkgC+Qbg%XOJZ*-~y^HTliki1z*SO$V{a1faqlecqmld**80Ys~Vg z69@1pOxY1=)$>B`-&>8qvXKucS~Ev}JuWo;PQlj#G~)HgLD57O(AIuS?0h^ zmR+jZ_8UkpVYDb-b@H1E(u~lL%DKp?l}MuPkKwvUFVqLQPzUc$Nvq%h5#*l}XkXYN zHE%@$$S(%(lbjrf!^iR4=#X^LALBZbl#kd(UV%v5_Ow-}vlz$3-K>k5*93 zdbGpdHFVu6^wnj5I7{vRrvM!#Kv-2CT#J-7vc; zOE*6})njp7c5zN*^Ryis`m7rrRdM{k;*7xUg?d~g&2TLp-DC)w7=kXHygv4}fo6fu z=l$A5!bz0PY(c}We55Z=XU#76vrXbvHJrS?^Z^HSSmbxt z!QY;`f+&Z&ZSF+m18n<0WobIF;en4Pp*wox^Zbff-ELVNyOTY@dwMjdqeejW>pkcY z4EXf}fhc`0c7A(B%*j)@{QWlXZwfSuUqP*|@(OGJl~V1v_N<7rRRZPJqOt)!ZJnp8(h@qcW7tEZpch0(jeEtDl2gQz%T~h=4z^<2i?e zkGUD7D*4W|**urb?9IGF5+Hv#(Ztp%e&|@x#nCJ|vqh1oj-PwIFVj255W2QnKn;?8 zGjanWCv6b}e{mtBqB2)Wg>S7L6@kYtpw(QO_ZexZ{l7LV2uCB!g0?3aBD@`UvlPM~ zY536wxy>e5w<C^X+J$nMgVXFX4N z><$foB|$5TaU{_^Pi?`Uf5~adp#j}!s|zn2%=0b*#?_A#OP*x<*D<_5RH@<~8LIn> zq#gF)T9Y}0wERs1t+$8V(%0#1dUT`cZggaamqmq#X*exFIpLa1416#&0|zH~zVx#K zT-Hr#o*i7s*}JhCtccdqy_clMIp4~!IQD^l955H)_H5YV54EgcqjjTg1xI~4%c_C2 zAlH#{)POVh(u-pW-;t^lxq&oa1n19l@$6c58e0 z^qudMT6&wzDcxw0#v5%}wxu_=FdK2NO0ve;rhd}4STw}BNEs*>r(t5N*HT6zO@o5e z^3|jq`{Byo8$d6|0g{o(!9V+FTabrggJX*R@=^5Mc0&5SA*@A1T5xJx{mRnxWI!4* z)59(Pvi0^Sl=)%^`acQPUUeVUS*3tlh*-wpkJmP@6XNz*(jw=oCj>W5)7xEdO5G5P zQ~?Z`CnmXh%s&dZtZ}skj#;7yAY_2BNY>W>l$CKW6!k zXOAk0ypX||zHPep4O0<_^Aw`Id(tMlxTOPG zo<6~Cw++Q8fveiT9^UKR0ciJ5m;NKa8~8zm*DtA=i9YY;Fyl39FPMi+lrkf%0jq>3 zgh$6tf`_HR?^Cb4cmmYbleIQg+KiB~%%)J~EQbp|iea{LqSMev4esyq@+GaDVWPq9 z+;J1JMzZBVe3_QBQ4z1t;On+db#dL%pidEWY1_E~_|#SWUUV&c5`c7=lD;ZULkBFybQ;O$ffs}e4Qb6TPnmV z_g0@cIV+X0b=Zbdt~Nfdm)gfJfGX3F4*R>Nc!O8o+74*DVYF+0@yc`UInB}U((|%@ z3Vi2I`{4HqZQ!_4zjb4hV^HyRB_tt=B^(>ha;k`m;R3C1f}nhkiMx{_85P(2m3tdI zxvYQor+=Grm9`dm7By9J$6ec ze0mW)R>?`H>V5^5M*9A-uLbJv_R-v3hU7qZUz4(9N@thLkH&yk3N%l3*|g+mn};s9 z)4KP3o8#b?$C4{IgZ*|Z6obu`KTb_~*vYgi@vwJj<)h%`heHyZmvp%VP`~^4>lc_2 zbE~GH7k+0wv9(;pulx;E%H=^MaY=fA6X`QmYEfNG#*eO_`lLPvziPPDSbB%&`7`=VVl^*#!83R^{ zdx1^A$<`^krF^rmORH}VG2Sbnm^_(o?L5BkMydPiCO%EehDY7CS~OL=7|B+?zR_Iv zhI_MbKnFWv@kRW`fcy2iaOLm{Bq?=ak0ZY};iJf^OzX2Wu7px1tWm%=AV&i%^J{V4 z8qyr?+f-NI(FCy9(GM7}m=BIB|1W*%7anGb!f05ZrFX7Il$j?K>`LGDG^!dIL{6=Z z|NRXZ+Lq(dF;r0(Vvy*kviyeZTGKV-qs@v#VIz{UsGL#kGs$DNfa@XttDfdjR_KUN z2hg+90+S$C!G%>t@T$s%xorP+&kwlTw9QqHG1ju(OIWDirEkzv>^vC&qswZRxAw90 z6SaJl;h=38^sGhq43M3-lT^NY+4x(9R$K96{NvL0fArQ4uJl0zFsDc17bpt}0T~-i z5MP6hCfH`Yej^w@AHKJ(!0T9;RJytwHJYa6ieSuq@^fKfOQzTXm5D+&cvz&t`YQCZ z(G7aMs94u@{I`+v@LY3UY~5zp=lq;lryPi>iT|!eRGwCBW#N!vHipHrzM%SzQe5bx za6ea#*`D@ms&;AND}A=3ceIqKmk7kkuP;(i#8CpIF1QRFx9se9$OWOi3xG{ZKCRmw z+G`)k+%0eP9smC3-|%xfZBY8W^?!bZ>ZKjiVl(R!Z+*N9oehJS6oUrpg>*=zq9($a zpk|V1G-|}x5_iK&Xq;Z)zaky1#X5GsVfY%iufl@2l6qWb-w90U!VPe|c?}N&Qm2gK zjkyZ=YBgLboln0IL@nrOlN+ec%vD+9g!aY6$}xFPUoa3hJ=SS(& z(@EC8?4tyvj&b%VYqRpJ%F@_=#DePgF5E&#J%|XSMChBWq2tIll13PAe;CF?Nux5` z*6q*>&Sf}Za(mGZuIu{$S2q!{Z6B8uB2bMJ$mTZ8bS|vd<3bA@m3Gr2fqc1gLdc{% zx8F%I4y7^)rz9NF86+9XT1O6Ig_zJ$#sPzfhj||(L3Uy0Ox3G*Bdg@0m zOoXT#krcw#(ZivaxUf)I%!KLi6gi+4{UqE9(4T(}4|5NFt$w(RU8J0cg%KRI2@VSA zOpEKM4_7E#EVe5&V>yPeE=F)!3(^J1&=ae0zL{4eDBE6gj?-|dQ^?swzM#)%Z{&#& z2Lt{#RZXkz>*KxjEbSgC&dt(#vj`15!}G5Kemq_% zCn$Ujg7p?&8$u$*9UMR(X$9WTr$Thc-A`9!ttzO zcUnL-P{OI_Gtg{%|5FZn@Vj@2*BhD9A0=iIpES5-DZgYwUysq7yiJ*W#uJ&0z-l=0 z=nrR7_!qNP$_JCH0|^U6$P+wePrg9VHS~=ItGMHiK4(C$^cZ@2Zda|whxSWThWug< zGxYf=NX9<3rmE&`TG7z__P%R@I`VzBbZ0krfk-Dyar7_^mVFkqE)*Dm zE=^zq6#mw$d4{#aNwxZ4NZUtCibA zP9KaW=fsqIWEr1{#`cmW^oP7$_*G5RF5~01Gs;DovL;i}-33fJ11F%Zopl4^-Pe!aej;~zhzkeDf{~qA$^2F1y zSPzV;tGRqAl~F%+{8Wj8yfP}l!?l?6rLBI414z?x5ZjUJK;CHTo3=w;mJN&7OIy`~ zw8sfrW&uJ3c;wvaaD=xC_>b!huJVD7*%%X_cu>Xqv&&$tf1-<1%K z7a^_=q(m;zT9Sf6v)Q$no_Ej`YZiV;@AxY+0L|Z_ItvBR?*b9lIF6@g#K3 zykuf3IM_5j{2mDgtA=gCf=iTNmHZ26GQ&2!)0)+x}$_ye0!Xe0XY~Q^ELJ6 zFLBrBuk(uiv*(ot2_o) z1BpM^m&sKe)p44MZyfEL$ONrb_V4WnX2a?*?%oL#*I1T>_6*nx?6?gI47Dc{ZtHR~ z+#7r4AO?6G#V4xX$=R;KrZxKnDW6cx2B^C$fBP`)Mo}B3*CXWS%4tv1)qp90^0L3P zeGqU^$%RpoN7y@m^LDQn?VM6VOSzQKHJr0T-a|q&=9#hOE0`(%cVh3`y`}l^bj=A5 zpTz%+J6kts;$OH#qn3HPtF47jCYutg_aUc+i+kF`^GU4^p_)TEJuRQ?EMo%JOV94N zL?2SwIwb-1xH}0nK)G@V#jlX)II42pQ8Ep+7Xq#-( zt<+MR2s6r+g38L+t@A;7>S%YC`}+jCKbFQ*OrhBiEx-qW-;DNna!~{DO+H)`_@GLh zRQs)Spfvn7=uIkjhxf0%KWP!}2&sfnc^`U@jwks*Km#tx_k4+vyTUW&(bGCRi}121 zf0S?8wLp1ZwXbK!kJjcZT@ZVIh{HctRNdie^>TnV3D^D_F~40YlN+j*g=li39hNCi zCGi4VBXrG--k@#N9qK~A$sZIO+p)fF&YQ0iU9kDENX3tZg_zj?tImF4)BD{Cggx-m z;egfGhoc#sr_<+@Ds{u&8>N5i1J))Axfy(wN81H?g{|0JAztdXZtQpi$QASFzfFa< zc+83KA)HUs0G)4>%Re~nJg}HC3nVzY#nwUQ{cUsvq8arxt;be&XX$e9VWyZ~3A1t1 z@=JZNkbYgcJ0Z$Cns>GwmOqd3s<=CTfAcwC$_>!7iThLc^qFe%D{lDsw|VcoaUJxW zcR&K`%H>yFqK1F6rR^4*E;2CxY~2j8{>|s=cyDSvqdPjjez#`%cKFT^sG-q}lkx-) zzhzGqD)(=w2?ia#tEGE<+rSLSqi*RqoI%&QJJ;+)Kvkai!d4<_>TWzLEoCmDj7a6&QPTM)0Lj>gJkfs==Ox6s6A@`939jbeW0z*!Nc^{$!XcQ z@E>!so^oaIgo9vUPdcY{^bX+Qw+?JDVfQ(&&=Ch9`q#8Yo)*lYat-@n$RhPcHjBNj zIjkvNAmBF2=Y!GM_MqeOJIaJXN)gO4-?4>B)FQ!lOj=;cY?nW)Vt~8NA0$~T62*Lt z-)?~DdTb4f{WNepVxi=H0WW3-v;;hsaATgY_p+xEvtSkDBFncT%9rLrkT(jSIJ_i2~y+?f*S+4z9o0`c2QeBA0y(T&qh?s2hf2AN_s%WRXcfnKtgbL5`#;O{9SYH!YJ3XIpHo4QfJ zeo>0Q*>C4LT-O(1t?_GiKtee)I*EQq#34Mt@;%$q8j_U!*zVl?!Buvh{O5njf9U{0 zLD_r(wP{&zghAT+2ljQy27bWOi{PH@lW5nIyXp$Txj8deGu_zSLt^#{7$@Oqhzh2} zMYKa--g`bBv-=x!TE9S-UbdCh>cqB-RgoA-CIL2UM~dwqqS(WaCAve zkFh~mP&{s5r!@R+W}hW7=_d-h=YbMa(n{D5aGHb-5iKVdLVr|mxrBhI5t?;JJF`sv zBfqumc~m7O3cH{cT>Du$0SN+vdJO@y>kVzw`npSj{xe+UlSe*2fzmTY@Cgoo73!7Eq#;z(es=KYE(L;4rf}L#bMQ*k z%V^Nz<`9?-rK<5qi^k12lpea{uO^^2}ltHtH~Q+{fzO1bsUZz#Vn`tmtK< zF-r?V<1$MlV_(W~A4SDfw-L`3*3+IffGf(hTNZ+;r4wwQ_T{04073i2R9lIEjM!k@ zY!Ngud(e_;Ns-v~{s}Aso4HN7)Y3sv&EhXQMW=_5ALf!9Cv!4eMQhuVv&;5I9;K$F#!Eo^9t4}U%)NX?zlP;;abNgd-#({hPi5sc!63ZZWY3? zuZaq1O$Ai&@(0mg!FoF))oj~RBZhijQcL!fH>vTjh=A0(dG5L3kfKAlv>F&ndPk+g z=@g$6c4N^Myw-&Xe4!BH#7{mv>_{|BUTEfXm$mjmINNZlIe2g`c&X!zRN8S?+8tf* z(3c?BD@5woM-4{>mN(NJeKriSdZloA`D#|hgJvOAdxLOE?4S%0DD*ji$-0r7*++|H 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�nqn6|i6RPu5)YA}*cBE~M9M(v(Oc(H9FX}>f= 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 OCzUd?UAS>mKtgel+)32b%k>jnR#PwLS&hEQ6B7 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

0ljSP;Um7=l~;;qc4w0I+PFH<~!KAUlsBfCTF9K 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 lm{J`J4uRGe*3p;z; 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%0Dp_hDs6c6OgN|406Wlo- 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

Ni*wWw<|jk^ao&d<{rie79l$ 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�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%0AiQSxM0o9WS>2pyl1Wcb}-sT>|`6 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

W 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⪚mBN7^ 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 z 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

Ye!AG-s_zGf|L2<~ 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

@@ -20,12 +22,12 @@
{{range .Content}} -

{{.Value}}

+ {{.Value}} {{end}}
(read more) {{end}} @@ -34,30 +36,32 @@ {{if .ID}}
{{range .Content}} -

{{.Value}}

+ {{.Value}} {{end}}
(read more)
{{end}} @@ -66,142 +70,146 @@ {{if .ID}}
{{range .Content}} -

{{.Value}}

+ {{.Value}} {{end}}
(read more) -
{{end}} {{end}} {{define "article"}} -{{if .ID}} -
- -{{end}} + data-src="{{.ImageURL}}" + /> + {{end}} + +

{{.Source.Name}} - {{.TS}}

+
+
+ {{range .Content}} + {{.Value}} + {{end}} +
+ (read more) + + + {{end}} {{end}} {{define "medium-article"}} -{{if .ID}} -
- - (read more) - -
-{{end}} + {{end}} {{end}} {{define "small-article"}} -{{if .ID}} -
- - (read more) - -
-{{end}} + {{end}} {{end}} diff --git a/tmpl/article.html b/tmpl/article.html index 4a2186f..32b2005 100644 --- a/tmpl/article.html +++ b/tmpl/article.html @@ -1,27 +1,17 @@ {{ define "content" }} -
+
-

{{.Article.Title}}

+

{{.Article.Title}}

- {{if not .Article.HTMLContent }} - - {{end}}

{{.Article.Source.Name}} - {{.Article.TS}}

- {{if .Article.HTMLContent }} -
- {{ .Article.HTMLContent }} -
- {{else}} - {{range .Article.Content}} -

{{.Value}}

-
- {{end}} - {{end}} +
+ {{ .Article.RawHTML }} +
{{if .User}} {{if .User.IsAdmin }} diff --git a/tmpl/frame.html b/tmpl/frame.html index a3a3f0f..64ef2f5 100644 --- a/tmpl/frame.html +++ b/tmpl/frame.html @@ -1,6 +1,6 @@ - The Webpage + {{template "meta" .Meta}} @@ -9,6 +9,8 @@ + + @@ -170,80 +194,94 @@ -
+
+
{{ range .Categories }} {{.}} {{ end }} +
- -
-
+
{{ if .Error }} diff --git a/tmpl/frontpage-1.html b/tmpl/frontpage-1.html index ed776b0..29263c3 100644 --- a/tmpl/frontpage-1.html +++ b/tmpl/frontpage-1.html @@ -1,5 +1,5 @@ {{ define "content" }} -
+
{{ template "section-top" . }} {{ template "section-2" . }} diff --git a/tmpl/meta.html b/tmpl/meta.html new file mode 100644 index 0000000..d861d55 --- /dev/null +++ b/tmpl/meta.html @@ -0,0 +1,24 @@ +{{define "meta"}} + {{.Title}} + + + + + + + + + + {{ if .Image}} + + {{end}} + + + + + + + {{ if .Image}} + + {{end}} +{{end}} \ No newline at end of file diff --git a/tmpl/search.html b/tmpl/search.html new file mode 100644 index 0000000..53f15ff --- /dev/null +++ b/tmpl/search.html @@ -0,0 +1,23 @@ +{{define "content"}} +
+

{{.Data.Query}}

+ {{ range .Data.Results }} +
+ {{if .Article.ImageURL}} + + {{else}} +
+ +
+ {{end}} + +
+ {{end}} + powered by Firesearch +
+{{end}} \ No newline at end of file diff --git a/tmpl/section.html b/tmpl/section.html index 897998d..9b63412 100644 --- a/tmpl/section.html +++ b/tmpl/section.html @@ -14,7 +14,7 @@
- {{template "medium-article" .GetArticle 3000 false }} + {{template "medium-article" .GetArticle 2200 false }}
@@ -55,26 +55,26 @@
- {{template "small-article" .GetArticle 0 false }} + {{template "small-article" .GetArticle 500 false }}
- {{template "small-article" .GetArticle 0 false }} + {{template "small-article" .GetArticle 500 false }}
- {{template "small-article" .GetArticle 0 false }} + {{template "small-article" .GetArticle 500 false }}
- {{template "small-article" .GetArticle 0 false }} + {{template "small-article" .GetArticle 500 false }}
- {{template "small-article" .GetArticle 0 false }} + {{template "small-article" .GetArticle 500 false }}
- {{template "small-article" .GetArticle 0 false }} + {{template "small-article" .GetArticle 500 false }}
@@ -102,10 +102,10 @@
- {{template "small-article" .GetArticle 400 false }} + {{template "small-article" .GetArticle 600 false }}
- {{template "small-article" .GetArticle 400 false }} + {{template "small-article" .GetArticle 600 false }}
@@ -138,22 +138,22 @@ {{define "section-6"}}
- {{template "small-article" .GetArticle 400 false }} + {{template "small-article" .GetArticle 600 false }}
- {{template "small-article" .GetArticle 400 false }} + {{template "small-article" .GetArticle 600 false }}
- {{template "small-article" .GetArticle 400 false }} + {{template "small-article" .GetArticle 600 false }}
- {{template "small-article" .GetArticle 400 false }} + {{template "small-article" .GetArticle 600 false }}
- {{template "small-article" .GetArticle 400 false }} + {{template "small-article" .GetArticle 600 false }}
- {{template "small-article" .GetArticle 400 false }} + {{template "small-article" .GetArticle 600 false }}
{{end}} @@ -180,7 +180,7 @@
- {{template "article" .GetArticle 1000 false }} + {{template "article" .GetArticle 2200 false }}
diff --git a/vendor/cloud.google.com/go/.gitignore b/vendor/cloud.google.com/go/.gitignore index ee9694b..cc7e53b 100644 --- a/vendor/cloud.google.com/go/.gitignore +++ b/vendor/cloud.google.com/go/.gitignore @@ -2,6 +2,7 @@ .idea .vscode *.swp +.history # Test files *.test diff --git a/vendor/cloud.google.com/go/CHANGES.md b/vendor/cloud.google.com/go/CHANGES.md index 8c0d7d5..6befd9f 100644 --- a/vendor/cloud.google.com/go/CHANGES.md +++ b/vendor/cloud.google.com/go/CHANGES.md @@ -1,5 +1,350 @@ # Changes + +## [0.74.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.73.0...v0.74.0) (2020-12-10) + + +### Features + +* **all:** auto-regenerate gapics , refs [#3440](https://www.github.com/googleapis/google-cloud-go/issues/3440) [#3436](https://www.github.com/googleapis/google-cloud-go/issues/3436) [#3394](https://www.github.com/googleapis/google-cloud-go/issues/3394) [#3391](https://www.github.com/googleapis/google-cloud-go/issues/3391) [#3374](https://www.github.com/googleapis/google-cloud-go/issues/3374) +* **internal/gapicgen:** support generating only gapics with genlocal ([#3383](https://www.github.com/googleapis/google-cloud-go/issues/3383)) ([eaa742a](https://www.github.com/googleapis/google-cloud-go/commit/eaa742a248dc7d93c019863248f28e37f88aae84)) +* **servicedirectory:** start generating apiv1 ([#3382](https://www.github.com/googleapis/google-cloud-go/issues/3382)) ([2774925](https://www.github.com/googleapis/google-cloud-go/commit/2774925925909071ebc585cf7400373334c156ba)) + + +### Bug Fixes + +* **internal/gapicgen:** don't create genproto pr as draft ([#3379](https://www.github.com/googleapis/google-cloud-go/issues/3379)) ([517ab0f](https://www.github.com/googleapis/google-cloud-go/commit/517ab0f25e544498c5374b256354bc41ba936ad5)) + +## [0.73.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.72.0...v0.73.0) (2020-12-04) + + +### Features + +* **all:** auto-regenerate gapics , refs [#3335](https://www.github.com/googleapis/google-cloud-go/issues/3335) [#3294](https://www.github.com/googleapis/google-cloud-go/issues/3294) [#3250](https://www.github.com/googleapis/google-cloud-go/issues/3250) [#3229](https://www.github.com/googleapis/google-cloud-go/issues/3229) [#3211](https://www.github.com/googleapis/google-cloud-go/issues/3211) [#3217](https://www.github.com/googleapis/google-cloud-go/issues/3217) [#3212](https://www.github.com/googleapis/google-cloud-go/issues/3212) [#3209](https://www.github.com/googleapis/google-cloud-go/issues/3209) [#3206](https://www.github.com/googleapis/google-cloud-go/issues/3206) [#3199](https://www.github.com/googleapis/google-cloud-go/issues/3199) +* **artifactregistry:** start generating apiv1beta2 ([#3352](https://www.github.com/googleapis/google-cloud-go/issues/3352)) ([2e6f20b](https://www.github.com/googleapis/google-cloud-go/commit/2e6f20b0ab438b0b366a1a3802fc64d1a0e66fff)) +* **internal:** copy pubsub Message and PublishResult to internal/pubsub ([#3351](https://www.github.com/googleapis/google-cloud-go/issues/3351)) ([82521ee](https://www.github.com/googleapis/google-cloud-go/commit/82521ee5038735c1663525658d27e4df00ec90be)) +* **internal/gapicgen:** support adding context to regen ([#3174](https://www.github.com/googleapis/google-cloud-go/issues/3174)) ([941ab02](https://www.github.com/googleapis/google-cloud-go/commit/941ab029ba6f7f33e8b2e31e3818aeb68312a999)) +* **internal/kokoro:** add ability to regen all DocFX YAML ([#3191](https://www.github.com/googleapis/google-cloud-go/issues/3191)) ([e12046b](https://www.github.com/googleapis/google-cloud-go/commit/e12046bc4431d33aee72c324e6eb5cc907a4214a)) + + +### Bug Fixes + +* **internal/godocfx:** filter out test packages from other modules ([#3197](https://www.github.com/googleapis/google-cloud-go/issues/3197)) ([1d397aa](https://www.github.com/googleapis/google-cloud-go/commit/1d397aa8b41f8f980cba1d3dcc50f11e4d4f4ca0)) + +## [0.72.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.71.0...v0.72.0) (2020-11-10) + + +### Features + +* **all:** auto-regenerate gapics , refs [#3177](https://www.github.com/googleapis/google-cloud-go/issues/3177) [#3164](https://www.github.com/googleapis/google-cloud-go/issues/3164) [#3149](https://www.github.com/googleapis/google-cloud-go/issues/3149) [#3142](https://www.github.com/googleapis/google-cloud-go/issues/3142) [#3136](https://www.github.com/googleapis/google-cloud-go/issues/3136) [#3130](https://www.github.com/googleapis/google-cloud-go/issues/3130) [#3121](https://www.github.com/googleapis/google-cloud-go/issues/3121) [#3119](https://www.github.com/googleapis/google-cloud-go/issues/3119) + + +### Bug Fixes + +* **all:** Update hand-written clients to not use WithEndpoint override ([#3111](https://www.github.com/googleapis/google-cloud-go/issues/3111)) ([f0cfd05](https://www.github.com/googleapis/google-cloud-go/commit/f0cfd0532f5204ff16f7bae406efa72603d16f44)) +* **internal/godocfx:** rename README files to pkg-readme ([#3185](https://www.github.com/googleapis/google-cloud-go/issues/3185)) ([d3a8571](https://www.github.com/googleapis/google-cloud-go/commit/d3a85719be411b692aede3331abb29b5a7b3da9a)) + + +## [0.71.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.70.0...v0.71.0) (2020-10-30) + + +### Features + +* **all:** auto-regenerate gapics , refs [#3115](https://www.github.com/googleapis/google-cloud-go/issues/3115) [#3106](https://www.github.com/googleapis/google-cloud-go/issues/3106) [#3102](https://www.github.com/googleapis/google-cloud-go/issues/3102) [#3083](https://www.github.com/googleapis/google-cloud-go/issues/3083) [#3073](https://www.github.com/googleapis/google-cloud-go/issues/3073) [#3057](https://www.github.com/googleapis/google-cloud-go/issues/3057) [#3044](https://www.github.com/googleapis/google-cloud-go/issues/3044) +* **billing/budgets:** start generating apiv1 ([#3099](https://www.github.com/googleapis/google-cloud-go/issues/3099)) ([e760c85](https://www.github.com/googleapis/google-cloud-go/commit/e760c859de88a6e79b6dffc653dbf75f1630d8e3)) +* **internal:** auto-run godocfx on new mods ([#3069](https://www.github.com/googleapis/google-cloud-go/issues/3069)) ([49f497e](https://www.github.com/googleapis/google-cloud-go/commit/49f497eab80ce34dfb4ca41f033a5c0429ff5e42)) +* **pubsublite:** Added Pub/Sub Lite clients and routing headers ([#3105](https://www.github.com/googleapis/google-cloud-go/issues/3105)) ([98668fa](https://www.github.com/googleapis/google-cloud-go/commit/98668fa5457d26ed34debee708614f027020e5bc)) +* **pubsublite:** Message type and message routers ([#3077](https://www.github.com/googleapis/google-cloud-go/issues/3077)) ([179fc55](https://www.github.com/googleapis/google-cloud-go/commit/179fc550b545a5344358a243da7007ffaa7b5171)) +* **pubsublite:** Pub/Sub Lite admin client ([#3036](https://www.github.com/googleapis/google-cloud-go/issues/3036)) ([749473e](https://www.github.com/googleapis/google-cloud-go/commit/749473ead30bf1872634821d3238d1299b99acc6)) +* **pubsublite:** Publish settings and errors ([#3075](https://www.github.com/googleapis/google-cloud-go/issues/3075)) ([9eb9fcb](https://www.github.com/googleapis/google-cloud-go/commit/9eb9fcb79f17ad7c08c77c455ba3e8d89e3bdbf2)) +* **pubsublite:** Retryable stream wrapper ([#3068](https://www.github.com/googleapis/google-cloud-go/issues/3068)) ([97cfd45](https://www.github.com/googleapis/google-cloud-go/commit/97cfd4587f2f51996bd685ff486308b70eb51900)) + + +### Bug Fixes + +* **internal/kokoro:** remove unnecessary cd ([#3071](https://www.github.com/googleapis/google-cloud-go/issues/3071)) ([c1a4c3e](https://www.github.com/googleapis/google-cloud-go/commit/c1a4c3eaffcdc3cffe0e223fcfa1f60879cd23bb)) +* **pubsublite:** Disable integration tests for project id ([#3087](https://www.github.com/googleapis/google-cloud-go/issues/3087)) ([a0982f7](https://www.github.com/googleapis/google-cloud-go/commit/a0982f79d6461feabdf31363f29fed7dc5677fe7)) + +## [0.70.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.69.0...v0.70.0) (2020-10-19) + + +### Features + +* **all:** auto-regenerate gapics , refs [#3047](https://www.github.com/googleapis/google-cloud-go/issues/3047) [#3035](https://www.github.com/googleapis/google-cloud-go/issues/3035) [#3025](https://www.github.com/googleapis/google-cloud-go/issues/3025) +* **managedidentities:** start generating apiv1 ([#3032](https://www.github.com/googleapis/google-cloud-go/issues/3032)) ([10ccca2](https://www.github.com/googleapis/google-cloud-go/commit/10ccca238074d24fea580a4cd8e64478818b0b44)) +* **pubsublite:** Types for resource paths and topic/subscription configs ([#3026](https://www.github.com/googleapis/google-cloud-go/issues/3026)) ([6f7fa86](https://www.github.com/googleapis/google-cloud-go/commit/6f7fa86ed906258f98d996aab40184f3a46f9714)) + +## [0.69.1](https://www.github.com/googleapis/google-cloud-go/compare/v0.69.0...v0.69.1) (2020-10-14) + +This is an empty release that was created solely to aid in pubsublite's module +carve out. See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository. + +## [0.69.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.68.0...v0.69.0) (2020-10-14) + + +### Features + +* **accessapproval:** start generating apiv1 ([#3002](https://www.github.com/googleapis/google-cloud-go/issues/3002)) ([709d6e7](https://www.github.com/googleapis/google-cloud-go/commit/709d6e76393e6ac00ff488efd83bfe873173b045)) +* **all:** auto-regenerate gapics , refs [#3010](https://www.github.com/googleapis/google-cloud-go/issues/3010) [#3005](https://www.github.com/googleapis/google-cloud-go/issues/3005) [#2993](https://www.github.com/googleapis/google-cloud-go/issues/2993) [#2989](https://www.github.com/googleapis/google-cloud-go/issues/2989) [#2981](https://www.github.com/googleapis/google-cloud-go/issues/2981) [#2976](https://www.github.com/googleapis/google-cloud-go/issues/2976) [#2968](https://www.github.com/googleapis/google-cloud-go/issues/2968) [#2958](https://www.github.com/googleapis/google-cloud-go/issues/2958) +* **cmd/go-cloud-debug-agent:** mark as deprecated ([#2964](https://www.github.com/googleapis/google-cloud-go/issues/2964)) ([276ec88](https://www.github.com/googleapis/google-cloud-go/commit/276ec88b05852c33a3ba437e18d072f7ffd8fd33)) +* **godocfx:** add nesting to TOC ([#2972](https://www.github.com/googleapis/google-cloud-go/issues/2972)) ([3a49b2d](https://www.github.com/googleapis/google-cloud-go/commit/3a49b2d142a353f98429235c3f380431430b4dbf)) +* **internal/godocfx:** HTML-ify package summary ([#2986](https://www.github.com/googleapis/google-cloud-go/issues/2986)) ([9e64b01](https://www.github.com/googleapis/google-cloud-go/commit/9e64b018255bd8d9b31d60e8f396966251de946b)) +* **internal/kokoro:** make publish_docs VERSION optional ([#2979](https://www.github.com/googleapis/google-cloud-go/issues/2979)) ([76e35f6](https://www.github.com/googleapis/google-cloud-go/commit/76e35f689cb60bd5db8e14b8c8d367c5902bcb0e)) +* **websecurityscanner:** start generating apiv1 ([#3006](https://www.github.com/googleapis/google-cloud-go/issues/3006)) ([1d92e20](https://www.github.com/googleapis/google-cloud-go/commit/1d92e2062a13f62d7a96be53a7354c0cacca6a85)) + + +### Bug Fixes + +* **godocfx:** make extra files optional, filter out third_party ([#2985](https://www.github.com/googleapis/google-cloud-go/issues/2985)) ([f268921](https://www.github.com/googleapis/google-cloud-go/commit/f2689214a24b2e325d3e8f54441bb11fbef925f0)) + +## [0.68.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.67.0...v0.68.0) (2020-10-02) + + +### Features + +* **all:** auto-regenerate gapics , refs [#2952](https://www.github.com/googleapis/google-cloud-go/issues/2952) [#2944](https://www.github.com/googleapis/google-cloud-go/issues/2944) [#2935](https://www.github.com/googleapis/google-cloud-go/issues/2935) + +## [0.67.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.66.0...v0.67.0) (2020-09-29) + + +### Features + +* **all:** auto-regenerate gapics , refs [#2933](https://www.github.com/googleapis/google-cloud-go/issues/2933) [#2919](https://www.github.com/googleapis/google-cloud-go/issues/2919) [#2913](https://www.github.com/googleapis/google-cloud-go/issues/2913) [#2910](https://www.github.com/googleapis/google-cloud-go/issues/2910) [#2899](https://www.github.com/googleapis/google-cloud-go/issues/2899) [#2897](https://www.github.com/googleapis/google-cloud-go/issues/2897) [#2886](https://www.github.com/googleapis/google-cloud-go/issues/2886) [#2877](https://www.github.com/googleapis/google-cloud-go/issues/2877) [#2869](https://www.github.com/googleapis/google-cloud-go/issues/2869) [#2864](https://www.github.com/googleapis/google-cloud-go/issues/2864) +* **assuredworkloads:** start generating apiv1beta1 ([#2866](https://www.github.com/googleapis/google-cloud-go/issues/2866)) ([7598c4d](https://www.github.com/googleapis/google-cloud-go/commit/7598c4dd2462e8270a2c7b1f496af58ca81ff568)) +* **dialogflow/cx:** start generating apiv3beta1 ([#2875](https://www.github.com/googleapis/google-cloud-go/issues/2875)) ([37ca93a](https://www.github.com/googleapis/google-cloud-go/commit/37ca93ad69eda363d956f0174d444ed5914f5a72)) +* **docfx:** add support for examples ([#2884](https://www.github.com/googleapis/google-cloud-go/issues/2884)) ([0cc0de3](https://www.github.com/googleapis/google-cloud-go/commit/0cc0de300d58be6d3b7eeb2f1baebfa6df076830)) +* **godocfx:** include README in output ([#2927](https://www.github.com/googleapis/google-cloud-go/issues/2927)) ([f084690](https://www.github.com/googleapis/google-cloud-go/commit/f084690a2ea08ce73bafaaced95ad271fd01e11e)) +* **talent:** start generating apiv4 ([#2871](https://www.github.com/googleapis/google-cloud-go/issues/2871)) ([5c98071](https://www.github.com/googleapis/google-cloud-go/commit/5c98071b03822c58862d1fa5442ff36d627f1a61)) + + +### Bug Fixes + +* **godocfx:** filter out other modules, sort pkgs ([#2894](https://www.github.com/googleapis/google-cloud-go/issues/2894)) ([868db45](https://www.github.com/googleapis/google-cloud-go/commit/868db45e2e6f4e9ad48432be86c849f335e1083d)) +* **godocfx:** shorten function names ([#2880](https://www.github.com/googleapis/google-cloud-go/issues/2880)) ([48a0217](https://www.github.com/googleapis/google-cloud-go/commit/48a0217930750c1f4327f2622b0f2a3ec8afc0b7)) +* **translate:** properly name examples ([#2892](https://www.github.com/googleapis/google-cloud-go/issues/2892)) ([c19e141](https://www.github.com/googleapis/google-cloud-go/commit/c19e1415e6fa76b7ea66a7fc67ad3ba22670a2ba)), refs [#2883](https://www.github.com/googleapis/google-cloud-go/issues/2883) + +## [0.66.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.65.0...v0.66.0) (2020-09-15) + + +### Features + +* **all:** auto-regenerate gapics , refs [#2849](https://www.github.com/googleapis/google-cloud-go/issues/2849) [#2843](https://www.github.com/googleapis/google-cloud-go/issues/2843) [#2841](https://www.github.com/googleapis/google-cloud-go/issues/2841) [#2819](https://www.github.com/googleapis/google-cloud-go/issues/2819) [#2816](https://www.github.com/googleapis/google-cloud-go/issues/2816) [#2809](https://www.github.com/googleapis/google-cloud-go/issues/2809) [#2801](https://www.github.com/googleapis/google-cloud-go/issues/2801) [#2795](https://www.github.com/googleapis/google-cloud-go/issues/2795) [#2791](https://www.github.com/googleapis/google-cloud-go/issues/2791) [#2788](https://www.github.com/googleapis/google-cloud-go/issues/2788) [#2781](https://www.github.com/googleapis/google-cloud-go/issues/2781) +* **analytics/data:** start generating apiv1alpha ([#2796](https://www.github.com/googleapis/google-cloud-go/issues/2796)) ([e93132c](https://www.github.com/googleapis/google-cloud-go/commit/e93132c77725de3c80c34d566df269eabfcfde93)) +* **area120/tables:** start generating apiv1alpha1 ([#2807](https://www.github.com/googleapis/google-cloud-go/issues/2807)) ([9e5a4d0](https://www.github.com/googleapis/google-cloud-go/commit/9e5a4d0dee0d83be0c020797a2f579d9e42ef521)) +* **cloudbuild:** Start generating apiv1/v3 ([#2830](https://www.github.com/googleapis/google-cloud-go/issues/2830)) ([358a536](https://www.github.com/googleapis/google-cloud-go/commit/358a5368da64cf4868551652e852ceb453504f64)) +* **godocfx:** create Go DocFX YAML generator ([#2854](https://www.github.com/googleapis/google-cloud-go/issues/2854)) ([37c70ac](https://www.github.com/googleapis/google-cloud-go/commit/37c70acd91768567106ff3b2b130835998d974c5)) +* **security/privateca:** start generating apiv1beta1 ([#2806](https://www.github.com/googleapis/google-cloud-go/issues/2806)) ([f985141](https://www.github.com/googleapis/google-cloud-go/commit/f9851412183989dc69733a7e61ad39a9378cd893)) +* **video/transcoder:** start generating apiv1beta1 ([#2797](https://www.github.com/googleapis/google-cloud-go/issues/2797)) ([390dda8](https://www.github.com/googleapis/google-cloud-go/commit/390dda8ff2c526e325e434ad0aec778b7aa97ea4)) +* **workflows:** start generating apiv1beta ([#2799](https://www.github.com/googleapis/google-cloud-go/issues/2799)) ([0e39665](https://www.github.com/googleapis/google-cloud-go/commit/0e39665ccb788caec800e2887d433ca6e0cf9901)) +* **workflows/executions:** start generating apiv1beta ([#2800](https://www.github.com/googleapis/google-cloud-go/issues/2800)) ([7eaa0d1](https://www.github.com/googleapis/google-cloud-go/commit/7eaa0d184c6a2141d8bf4514b3fd20715b50a580)) + + +### Bug Fixes + +* **internal/kokoro:** install the right version of docuploader ([#2861](https://www.github.com/googleapis/google-cloud-go/issues/2861)) ([d8489c1](https://www.github.com/googleapis/google-cloud-go/commit/d8489c141b8b02e83d6426f4baebd3658ae11639)) +* **internal/kokoro:** remove extra dash in doc tarball ([#2862](https://www.github.com/googleapis/google-cloud-go/issues/2862)) ([690ddcc](https://www.github.com/googleapis/google-cloud-go/commit/690ddccc5202b5a70f1afa5c518dca37b6a0861c)) +* **profiler:** do not collect disabled profile types ([#2836](https://www.github.com/googleapis/google-cloud-go/issues/2836)) ([faeb498](https://www.github.com/googleapis/google-cloud-go/commit/faeb4985bf6afdcddba4553efa874642bf7f08ed)), refs [#2835](https://www.github.com/googleapis/google-cloud-go/issues/2835) + + +### Reverts + +* **cloudbuild): "feat(cloudbuild:** Start generating apiv1/v3" ([#2840](https://www.github.com/googleapis/google-cloud-go/issues/2840)) ([3aaf755](https://www.github.com/googleapis/google-cloud-go/commit/3aaf755476dfea1700986fc086f53fc1ab756557)) + +## [0.65.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.64.0...v0.65.0) (2020-08-27) + + +### Announcements + +The following changes will be included in an upcoming release and are not +included in this one. + +#### Default Deadlines + +By default, non-streaming methods, like Create or Get methods, will have a +default deadline applied to the context provided at call time, unless a context +deadline is already set. Streaming methods have no default deadline and will run +indefinitely, unless the context provided at call time contains a deadline. + +To opt-out of this behavior, set the environment variable +`GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE` to `true` prior to +initializing a client. This opt-out mechanism will be removed in a later +release, with a notice similar to this one ahead of its removal. + + +### Features + +* **all:** auto-regenerate gapics , refs [#2774](https://www.github.com/googleapis/google-cloud-go/issues/2774) [#2764](https://www.github.com/googleapis/google-cloud-go/issues/2764) + + +### Bug Fixes + +* **all:** correct minor typos ([#2756](https://www.github.com/googleapis/google-cloud-go/issues/2756)) ([03d78b5](https://www.github.com/googleapis/google-cloud-go/commit/03d78b5627819cb64d1f3866f90043f709e825e1)) +* **compute/metadata:** remove leading slash for Get suffix ([#2760](https://www.github.com/googleapis/google-cloud-go/issues/2760)) ([f0d605c](https://www.github.com/googleapis/google-cloud-go/commit/f0d605ccf32391a9da056a2c551158bd076c128d)) + +## [0.64.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.63.0...v0.64.0) (2020-08-18) + + +### Features + +* **all:** auto-regenerate gapics , refs [#2734](https://www.github.com/googleapis/google-cloud-go/issues/2734) [#2731](https://www.github.com/googleapis/google-cloud-go/issues/2731) [#2730](https://www.github.com/googleapis/google-cloud-go/issues/2730) [#2725](https://www.github.com/googleapis/google-cloud-go/issues/2725) [#2722](https://www.github.com/googleapis/google-cloud-go/issues/2722) [#2706](https://www.github.com/googleapis/google-cloud-go/issues/2706) +* **pubsublite:** start generating v1 ([#2700](https://www.github.com/googleapis/google-cloud-go/issues/2700)) ([d2e777f](https://www.github.com/googleapis/google-cloud-go/commit/d2e777f56e08146646b3ffb7a78856795094ab4e)) + +## [0.63.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.62.0...v0.63.0) (2020-08-05) + + +### Features + +* **all:** auto-regenerate gapics ([#2682](https://www.github.com/googleapis/google-cloud-go/issues/2682)) ([63bfd63](https://www.github.com/googleapis/google-cloud-go/commit/63bfd638da169e0f1f4fa4a5125da2955022dc04)) +* **analytics/admin:** start generating apiv1alpha ([#2670](https://www.github.com/googleapis/google-cloud-go/issues/2670)) ([268199e](https://www.github.com/googleapis/google-cloud-go/commit/268199e5350a64a83ecf198e0e0fa4863f00fa6c)) +* **functions/metadata:** Special-case marshaling ([#2669](https://www.github.com/googleapis/google-cloud-go/issues/2669)) ([d8d7fc6](https://www.github.com/googleapis/google-cloud-go/commit/d8d7fc66cbc42f79bec25fb0daaf53d926e3645b)) +* **gaming:** start generate apiv1 ([#2681](https://www.github.com/googleapis/google-cloud-go/issues/2681)) ([1adfd0a](https://www.github.com/googleapis/google-cloud-go/commit/1adfd0aed6b2c0e1dd0c575a5ec0f49388fa5601)) +* **internal/kokoro:** add script to test compatibility with samples ([#2637](https://www.github.com/googleapis/google-cloud-go/issues/2637)) ([f2aa76a](https://www.github.com/googleapis/google-cloud-go/commit/f2aa76a0058e86c1c33bb634d2c084b58f77ab32)) + +## v0.62.0 + +### Announcements + +- There was a breaking change to `cloud.google.com/go/dataproc/apiv1` that was + merged in [this PR](https://github.com/googleapis/google-cloud-go/pull/2606). + This fixed a broken API response for `DiagnoseCluster`. When polling on the + Long Running Operation(LRO), the API now returns + `(*dataprocpb.DiagnoseClusterResults, error)` whereas it only returned an + `error` before. + +### Changes + +- all: + - Updated all direct dependencies. + - Updated contributing guidelines to suggest allowing edits from maintainers. +- billing/budgets: + - Start generating client for apiv1beta1. +- functions: + - Start generating client for apiv1. +- notebooks: + - Start generating client apiv1beta1. +- profiler: + - update proftest to support parsing floating-point backoff durations. + - Fix the regexp used to parse backoff duration. +- Various updates to autogenerated clients. + +## v0.61.0 + +### Changes + +- all: + - Update all direct dependencies. +- dashboard: + - Start generating client for apiv1. +- policytroubleshooter: + - Start generating client for apiv1. +- profiler: + - Disable OpenCensus Telemetry for requests made by the profiler package by default. You can re-enable it using `profiler.Config.EnableOCTelemetry`. +- Various updates to autogenerated clients. + +## v0.60.0 + +### Changes + +- all: + - Refactored examples to reduce module dependencies. + - Update sub-modules to use cloud.google.com/go v0.59.0. +- internal: + - Start generating client for gaming apiv1beta. +- Various updates to autogenerated clients. + +## v0.59.0 + +### Announcements + +goolgeapis/google-cloud-go has moved its source of truth to GitHub and is no longer a mirror. This means that our +contributing process has changed a bit. We will now be conducting all code reviews on GitHub which means we now accept +pull requests! If you have a version of the codebase previously checked out you may wish to update your git remote to +point to GitHub. + +### Changes + +- all: + - Remove dependency on honnef.co/go/tools. + - Update our contributing instructions now that we use GitHub for reviews. + - Remove some un-inclusive terminology. +- compute/metadata: + - Pass cancelable context to DNS lookup. +- .github: + - Update templates issue/PR templates. +- internal: + - Bump several clients to GA. + - Fix GoDoc badge source. + - Several automation changes related to the move to GitHub. + - Start generating a client for asset v1p5beta1. +- Various updates to autogenerated clients. + +## v0.58.0 + +### Deprecation notice + +- `cloud.google.com/go/monitoring/apiv3` has been deprecated due to breaking + changes in the API. Please migrate to `cloud.google.com/go/monitoring/apiv3/v2`. + +### Changes + +- all: + - The remaining uses of gtransport.Dial have been removed. + - The `genproto` dependency has been updated to a version that makes use of + new `protoreflect` library. For more information on these protobuf changes + please see the following post from the official Go blog: + https://blog.golang.org/protobuf-apiv2. +- internal: + - Started generation of datastore admin v1 client. + - Updated protofuf version used for generation to 3.12.X. + - Update the release levels for several APIs. + - Generate clients with protoc-gen-go@v1.4.1. +- monitoring: + - Re-enable generation of monitoring/apiv3 under v2 directory (see deprecation + notice above). +- profiler: + - Fixed flakiness in tests. +- Various updates to autogenerated clients. + +## v0.57.0 + +- all: + - Update module dependency `google.golang.org/api` to `v0.21.0`. +- errorreporting: + - Add exported SetGoogleClientInfo wrappers to manual file. +- expr/v1alpha1: + - Deprecate client. This client will be removed in a future release. +- internal: + - Fix possible data race in TestTracer. + - Pin versions of tools used for generation. + - Correct the release levels for BigQuery APIs. + - Start generation osconfig v1. +- longrunning: + - Add exported SetGoogleClientInfo wrappers to manual file. +- monitoring: + - Stop generation of monitoring/apiv3 because of incoming breaking change. +- trace: + - Add exported SetGoogleClientInfo wrappers to manual file. +- Various updates to autogenerated clients. + +## v0.56.0 + +- secretmanager: + - add IAM helper +- profiler: + - try all us-west1 zones for integration tests +- internal: + - add config to generate webrisk v1 + - add repo and commit to buildcop invocation + - add recaptchaenterprise v1 generation config + - update microgenerator to v0.12.5 + - add datacatalog client + - start generating security center settings v1beta + - start generating osconfig agentendpoint v1 + - setup generation for bigquery/connection/v1beta1 +- all: + - increase continous testing timeout to 45m + - various updates to autogenerated clients. + ## v0.55.0 - Various updates to autogenerated clients. @@ -1445,5 +1790,3 @@ Natural Language. [`cloud.google.com/go/preview/logging`](https://godoc.org/cloud.google.com/go/preview/logging). This client uses gRPC as its transport layer, and supports log reading, sinks and metrics. It will replace the current client at `cloud.google.com/go/logging` shortly. - - diff --git a/vendor/cloud.google.com/go/CONTRIBUTING.md b/vendor/cloud.google.com/go/CONTRIBUTING.md index 1e45441..6ca285b 100644 --- a/vendor/cloud.google.com/go/CONTRIBUTING.md +++ b/vendor/cloud.google.com/go/CONTRIBUTING.md @@ -14,96 +14,46 @@ 1. Sign one of the [contributor license agreements](#contributor-license-agreements) below. -1. Run `go get golang.org/x/review/git-codereview && go install golang.org/x/review/git-codereview` -to install the code reviewing tool. +1. Clone the repo: + `git clone https://github.com/googleapis/google-cloud-go` - 1. Ensure it's working by running `git codereview` (check your `PATH` if - not). +1. Change into the checked out source: + `cd google-cloud-go` - 1. If you would like, you may want to set up aliases for `git-codereview`, - such that `git codereview change` becomes `git change`. See the - [godoc](https://pkg.go.dev/golang.org/x/review/git-codereview) for details. +1. Fork the repo. - * Should you run into issues with the `git-codereview` tool, please note - that all error messages will assume that you have set up these aliases. +1. Set your fork as a remote: + `git remote add fork git@github.com:GITHUB_USERNAME/google-cloud-go.git` -1. Change to a directory of your choosing and clone the repo. +1. Make changes, commit to your fork. - ``` - cd ~/code - git clone https://code.googlesource.com/gocloud - ``` + Commit messages should follow the + [Conventional Commits Style](https://www.conventionalcommits.org). The scope + portion should always be filled with the name of the package affected by the + changes being made. For example: + ``` + feat(functions): add gophers codelab + ``` - * If you have already checked out the source, make sure that the remote - `git` `origin` is https://code.googlesource.com/gocloud: +1. Send a pull request with your changes. - ``` - git remote -v - # ... - git remote set-url origin https://code.googlesource.com/gocloud - ``` + To minimize friction, consider setting `Allow edits from maintainers` on the + PR, which will enable project committers and automation to update your PR. - * The project uses [Go Modules](https://blog.golang.org/using-go-modules) - for dependency management See - [`gopls`](https://github.com/golang/go/wiki/gopls) for making your editor - work with modules. +1. A maintainer will review the pull request and make comments. -1. Change to the project directory: + Prefer adding additional commits over amending and force-pushing since it can + be difficult to follow code reviews when the commit history changes. - ``` - cd ~/code/gocloud - ``` + Commits will be squashed when they're merged. -1. Make sure your `git` auth is configured correctly by visiting -https://code.googlesource.com, clicking "Generate Password" at the top-right, -and following the directions. Otherwise, `git codereview mail` in the next step -will fail. +## Testing -1. Now you are ready to make changes. Don't create a new branch or make commits in the traditional -way. Use the following`git codereview` commands to create a commit and create a Gerrit CL: +We test code against two versions of Go, the minimum and maximum versions +supported by our clients. To see which versions these are checkout our +[README](README.md#supported-versions). - ``` - git codereview change # Use this instead of git checkout -b - # Make changes. - git add ... - git codereview change # Use this instead of git commit - git codereview mail # If this fails, the error message will contain instructions to fix it. - ``` - - * This will create a new `git` branch for you to develop on. Once your - change is merged, you can delete this branch. - -1. As you make changes for code review, ammend the commit and re-mail the -change: - - ``` - # Make more changes. - git add ... - git codereview change - git codereview mail - ``` - - * **Warning**: do not change the `Change-Id` at the bottom of the commit - message - it's how Gerrit knows which change this is (or if it's new). - - * When you fixes issues from code review, respond to each code review - message then click **Reply** at the top of the page. - - * Each new mailed amendment will create a new patch set for - your change in Gerrit. Patch sets can be compared and reviewed. - - * **Note**: if your change includes a breaking change, our breaking change - detector will cause CI/CD to fail. If your breaking change is acceptable - in some way, add a `BREAKING_CHANGE_ACCEPTABLE=` line to the commit - message to cause the detector not to be run and to make it clear why that is - acceptable. - -1. Finally, add reviewers to your CL when it's ready for review. Reviewers will -not be added automatically. If you're not sure who to add for your code review, -add tbp@, cbro@, and codyoss@. - - -## Integration Tests +### Integration Tests In addition to the unit tests, you may run the integration test suite. These directions describe setting up your environment to run integration tests for @@ -153,7 +103,8 @@ Next, ensure the following APIs are enabled in the general project: - Google Compute Engine Instance Group Updater API - Google Compute Engine Instance Groups API - Kubernetes Engine API -- Stackdriver Error Reporting API +- Cloud Error Reporting API +- Pub/Sub Lite API Next, create a Datastore database in the general project, and a Firestore database in the Firestore project. @@ -178,10 +129,13 @@ project's service account. (e.g. doorway-cliff-677) for the Firestore project. - `GCLOUD_TESTS_GOLANG_FIRESTORE_KEY`: The path to the JSON key file of the Firestore project's service account. +- `GCLOUD_TESTS_API_KEY`: API key for using the Translate API created above. + +As part of the setup that follows, the following variables will be configured: + - `GCLOUD_TESTS_GOLANG_KEYRING`: The full name of the keyring for the tests, in the form "projects/P/locations/L/keyRings/R". The creation of this is described below. -- `GCLOUD_TESTS_API_KEY`: API key for using the Translate API. - `GCLOUD_TESTS_GOLANG_ZONE`: Compute Engine zone. Install the [gcloud command-line tool][gcloudcli] to your machine and use it to @@ -200,7 +154,7 @@ $ gcloud auth login $ gcloud datastore indexes create datastore/testdata/index.yaml # Creates a Google Cloud storage bucket with the same name as your test project, -# and with the Stackdriver Logging service account as owner, for the sink +# and with the Cloud Logging service account as owner, for the sink # integration tests in logging. $ gsutil mb gs://$GCLOUD_TESTS_GOLANG_PROJECT_ID $ gsutil acl ch -g cloud-logs@google.com:O gs://$GCLOUD_TESTS_GOLANG_PROJECT_ID @@ -208,7 +162,7 @@ $ gsutil acl ch -g cloud-logs@google.com:O gs://$GCLOUD_TESTS_GOLANG_PROJECT_ID # Creates a PubSub topic for integration tests of storage notifications. $ gcloud beta pubsub topics create go-storage-notification-test # Next, go to the Pub/Sub dashboard in GCP console. Authorize the user -# "service-@gs-project-accounts.iam.gserviceaccount.com" +# "service-@gs-project-accounts.iam.gserviceaccount.com" # as a publisher to that topic. # Creates a Spanner instance for the spanner integration tests. @@ -227,7 +181,38 @@ $ gcloud kms keys create key2 --keyring $MY_KEYRING --location $MY_LOCATION --pu # Sets the GCLOUD_TESTS_GOLANG_KEYRING environment variable. $ export GCLOUD_TESTS_GOLANG_KEYRING=projects/$GCLOUD_TESTS_GOLANG_PROJECT_ID/locations/$MY_LOCATION/keyRings/$MY_KEYRING # Authorizes Google Cloud Storage to encrypt and decrypt using key1. -gsutil kms authorize -p $GCLOUD_TESTS_GOLANG_PROJECT_ID -k $GCLOUD_TESTS_GOLANG_KEYRING/cryptoKeys/key1 +$ gsutil kms authorize -p $GCLOUD_TESTS_GOLANG_PROJECT_ID -k $GCLOUD_TESTS_GOLANG_KEYRING/cryptoKeys/key1 +``` + +It may be useful to add exports to your shell initialization for future use. +For instance, in `.zshrc`: + +```sh +#### START GO SDK Test Variables +# Developers Console project's ID (e.g. bamboo-shift-455) for the general project. +export GCLOUD_TESTS_GOLANG_PROJECT_ID=your-project + +# The path to the JSON key file of the general project's service account. +export GCLOUD_TESTS_GOLANG_KEY=~/directory/your-project-abcd1234.json + +# Developers Console project's ID (e.g. doorway-cliff-677) for the Firestore project. +export GCLOUD_TESTS_GOLANG_FIRESTORE_PROJECT_ID=your-firestore-project + +# The path to the JSON key file of the Firestore project's service account. +export GCLOUD_TESTS_GOLANG_FIRESTORE_KEY=~/directory/your-firestore-project-abcd1234.json + +# The full name of the keyring for the tests, in the form "projects/P/locations/L/keyRings/R". +# The creation of this is described below. +export MY_KEYRING=my-golang-sdk-test +export MY_LOCATION=global +export GCLOUD_TESTS_GOLANG_KEYRING=projects/$GCLOUD_TESTS_GOLANG_PROJECT_ID/locations/$MY_LOCATION/keyRings/$MY_KEYRING + +# API key for using the Translate API. +export GCLOUD_TESTS_API_KEY=abcdefghijk123456789 + +# Compute Engine zone. (https://cloud.google.com/compute/docs/regions-zones) +export GCLOUD_TESTS_GOLANG_ZONE=your-chosen-region +#### END GO SDK Test Variables ``` #### Running @@ -236,7 +221,15 @@ Once you've done the necessary setup, you can run the integration tests by running: ``` sh -$ go test -v cloud.google.com/go/... +$ go test -v ./... +``` + +Note that the above command will not run the tests in other modules. To run +tests on other modules, first navigate to the appropriate +subdirectory. For instance, to run only the tests for datastore: +``` sh +$ cd datastore +$ go test -v ./... ``` #### Replay diff --git a/vendor/cloud.google.com/go/README.md b/vendor/cloud.google.com/go/README.md index bad1afa..1ffe670 100644 --- a/vendor/cloud.google.com/go/README.md +++ b/vendor/cloud.google.com/go/README.md @@ -1,6 +1,6 @@ # Google Cloud Client Libraries for Go -[![GoDoc](https://pkg.go.dev/cloud.google.com/go?status.svg)](https://pkg.go.dev/cloud.google.com/go) +[![GoDoc](https://godoc.org/cloud.google.com/go?status.svg)](https://pkg.go.dev/cloud.google.com/go) Go packages for [Google Cloud Platform](https://cloud.google.com) services. @@ -29,48 +29,48 @@ make backwards-incompatible changes. ## Supported APIs -Google API | Status | Package -------------------------------------------------|--------------|----------------------------------------------------------- -[Asset][cloud-asset] | stable | [`cloud.google.com/go/asset/apiv1`](https://pkg.go.dev/cloud.google.com/go/asset/v1beta) -[Automl][cloud-automl] | stable | [`cloud.google.com/go/automl/apiv1`](https://pkg.go.dev/cloud.google.com/go/automl/apiv1) -[BigQuery][cloud-bigquery] | stable | [`cloud.google.com/go/bigquery`](https://pkg.go.dev/cloud.google.com/go/bigquery) -[Bigtable][cloud-bigtable] | stable | [`cloud.google.com/go/bigtable`](https://pkg.go.dev/cloud.google.com/go/bigtable) -[Cloudbuild][cloud-build] | stable | [`cloud.google.com/go/cloudbuild/apiv1`](https://pkg.go.dev/cloud.google.com/go/cloudbuild/apiv1) -[Cloudtasks][cloud-tasks] | stable | [`cloud.google.com/go/cloudtasks/apiv2`](https://pkg.go.dev/cloud.google.com/go/cloudtasks/apiv2) -[Container][cloud-container] | stable | [`cloud.google.com/go/container/apiv1`](https://pkg.go.dev/cloud.google.com/go/container/apiv1) -[ContainerAnalysis][cloud-containeranalysis] | beta | [`cloud.google.com/go/containeranalysis/apiv1`](https://pkg.go.dev/cloud.google.com/go/containeranalysis/apiv1) -[Dataproc][cloud-dataproc] | stable | [`cloud.google.com/go/dataproc/apiv1`](https://pkg.go.dev/cloud.google.com/go/dataproc/apiv1) -[Datastore][cloud-datastore] | stable | [`cloud.google.com/go/datastore`](https://pkg.go.dev/cloud.google.com/go/datastore) -[Debugger][cloud-debugger] | stable | [`cloud.google.com/go/debugger/apiv2`](https://pkg.go.dev/cloud.google.com/go/debugger/apiv2) -[Dialogflow][cloud-dialogflow] | stable | [`cloud.google.com/go/dialogflow/apiv2`](https://pkg.go.dev/cloud.google.com/go/dialogflow/apiv2) -[Data Loss Prevention][cloud-dlp] | stable | [`cloud.google.com/go/dlp/apiv2`](https://pkg.go.dev/cloud.google.com/go/dlp/apiv2) -[ErrorReporting][cloud-errors] | alpha | [`cloud.google.com/go/errorreporting`](https://pkg.go.dev/cloud.google.com/go/errorreporting) -[Firestore][cloud-firestore] | stable | [`cloud.google.com/go/firestore`](https://pkg.go.dev/cloud.google.com/go/firestore) -[IAM][cloud-iam] | stable | [`cloud.google.com/go/iam`](https://pkg.go.dev/cloud.google.com/go/iam) -[IoT][cloud-iot] | stable | [`cloud.google.com/go/iot/apiv1`](https://pkg.go.dev/cloud.google.com/go/iot/apiv1) -[IRM][cloud-irm] | alpha | [`cloud.google.com/go/irm/apiv1alpha2`](https://pkg.go.dev/cloud.google.com/go/irm/apiv1alpha2) -[KMS][cloud-kms] | stable | [`cloud.google.com/go/kms/apiv1`](https://pkg.go.dev/cloud.google.com/go/kms/apiv1) -[Natural Language][cloud-natural-language] | stable | [`cloud.google.com/go/language/apiv1`](https://pkg.go.dev/cloud.google.com/go/language/apiv1) -[Logging][cloud-logging] | stable | [`cloud.google.com/go/logging`](https://pkg.go.dev/cloud.google.com/go/logging) -[Memorystore][cloud-memorystore] | alpha | [`cloud.google.com/go/redis/apiv1`](https://pkg.go.dev/cloud.google.com/go/redis/apiv1) -[Monitoring][cloud-monitoring] | stable | [`cloud.google.com/go/monitoring/apiv3`](https://pkg.go.dev/cloud.google.com/go/monitoring/apiv3) -[OS Login][cloud-oslogin] | stable | [`cloud.google.com/go/oslogin/apiv1`](https://pkg.go.dev/cloud.google.com/go/oslogin/apiv1) -[Pub/Sub][cloud-pubsub] | stable | [`cloud.google.com/go/pubsub`](https://pkg.go.dev/cloud.google.com/go/pubsub) -[Phishing Protection][cloud-phishingprotection] | alpha | [`cloud.google.com/go/phishingprotection/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/phishingprotection/apiv1beta1) -[reCAPTCHA Enterprise][cloud-recaptcha] | alpha | [`cloud.google.com/go/recaptchaenterprise/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/recaptchaenterprise/apiv1beta1) -[Recommender][cloud-recommender] | beta | [`cloud.google.com/go/recommender/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/recommender/apiv1beta1) -[Scheduler][cloud-scheduler] | stable | [`cloud.google.com/go/scheduler/apiv1`](https://pkg.go.dev/cloud.google.com/go/scheduler/apiv1) -[Securitycenter][cloud-securitycenter] | stable | [`cloud.google.com/go/securitycenter/apiv1`](https://pkg.go.dev/cloud.google.com/go/securitycenter/apiv1) -[Spanner][cloud-spanner] | stable | [`cloud.google.com/go/spanner`](https://pkg.go.dev/cloud.google.com/go/spanner) -[Speech][cloud-speech] | stable | [`cloud.google.com/go/speech/apiv1`](https://pkg.go.dev/cloud.google.com/go/speech/apiv1) -[Storage][cloud-storage] | stable | [`cloud.google.com/go/storage`](https://pkg.go.dev/cloud.google.com/go/storage) -[Talent][cloud-talent] | alpha | [`cloud.google.com/go/talent/apiv4beta1`](https://pkg.go.dev/cloud.google.com/go/talent/apiv4beta1) -[Text To Speech][cloud-texttospeech] | stable | [`cloud.google.com/go/texttospeech/apiv1`](https://pkg.go.dev/cloud.google.com/go/texttospeech/apiv1) -[Trace][cloud-trace] | stable | [`cloud.google.com/go/trace/apiv2`](https://pkg.go.dev/cloud.google.com/go/trace/apiv2) -[Translate][cloud-translate] | stable | [`cloud.google.com/go/translate`](https://pkg.go.dev/cloud.google.com/go/translate) -[Video Intelligence][cloud-video] | beta | [`cloud.google.com/go/videointelligence/apiv1beta2`](https://pkg.go.dev/cloud.google.com/go/videointelligence/apiv1beta2) -[Vision][cloud-vision] | stable | [`cloud.google.com/go/vision/apiv1`](https://pkg.go.dev/cloud.google.com/go/vision/apiv1) -[Webrisk][cloud-webrisk] | alpha | [`cloud.google.com/go/webrisk/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/webrisk/apiv1beta1) +| Google API | Status | Package | +| ----------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- | +| [Asset][cloud-asset] | stable | [`cloud.google.com/go/asset/apiv1`](https://pkg.go.dev/cloud.google.com/go/asset/v1beta) | +| [Automl][cloud-automl] | stable | [`cloud.google.com/go/automl/apiv1`](https://pkg.go.dev/cloud.google.com/go/automl/apiv1) | +| [BigQuery][cloud-bigquery] | stable | [`cloud.google.com/go/bigquery`](https://pkg.go.dev/cloud.google.com/go/bigquery) | +| [Bigtable][cloud-bigtable] | stable | [`cloud.google.com/go/bigtable`](https://pkg.go.dev/cloud.google.com/go/bigtable) | +| [Cloudbuild][cloud-build] | stable | [`cloud.google.com/go/cloudbuild/apiv1`](https://pkg.go.dev/cloud.google.com/go/cloudbuild/apiv1) | +| [Cloudtasks][cloud-tasks] | stable | [`cloud.google.com/go/cloudtasks/apiv2`](https://pkg.go.dev/cloud.google.com/go/cloudtasks/apiv2) | +| [Container][cloud-container] | stable | [`cloud.google.com/go/container/apiv1`](https://pkg.go.dev/cloud.google.com/go/container/apiv1) | +| [ContainerAnalysis][cloud-containeranalysis] | beta | [`cloud.google.com/go/containeranalysis/apiv1`](https://pkg.go.dev/cloud.google.com/go/containeranalysis/apiv1) | +| [Dataproc][cloud-dataproc] | stable | [`cloud.google.com/go/dataproc/apiv1`](https://pkg.go.dev/cloud.google.com/go/dataproc/apiv1) | +| [Datastore][cloud-datastore] | stable | [`cloud.google.com/go/datastore`](https://pkg.go.dev/cloud.google.com/go/datastore) | +| [Debugger][cloud-debugger] | stable | [`cloud.google.com/go/debugger/apiv2`](https://pkg.go.dev/cloud.google.com/go/debugger/apiv2) | +| [Dialogflow][cloud-dialogflow] | stable | [`cloud.google.com/go/dialogflow/apiv2`](https://pkg.go.dev/cloud.google.com/go/dialogflow/apiv2) | +| [Data Loss Prevention][cloud-dlp] | stable | [`cloud.google.com/go/dlp/apiv2`](https://pkg.go.dev/cloud.google.com/go/dlp/apiv2) | +| [ErrorReporting][cloud-errors] | alpha | [`cloud.google.com/go/errorreporting`](https://pkg.go.dev/cloud.google.com/go/errorreporting) | +| [Firestore][cloud-firestore] | stable | [`cloud.google.com/go/firestore`](https://pkg.go.dev/cloud.google.com/go/firestore) | +| [IAM][cloud-iam] | stable | [`cloud.google.com/go/iam`](https://pkg.go.dev/cloud.google.com/go/iam) | +| [IoT][cloud-iot] | stable | [`cloud.google.com/go/iot/apiv1`](https://pkg.go.dev/cloud.google.com/go/iot/apiv1) | +| [IRM][cloud-irm] | alpha | [`cloud.google.com/go/irm/apiv1alpha2`](https://pkg.go.dev/cloud.google.com/go/irm/apiv1alpha2) | +| [KMS][cloud-kms] | stable | [`cloud.google.com/go/kms/apiv1`](https://pkg.go.dev/cloud.google.com/go/kms/apiv1) | +| [Natural Language][cloud-natural-language] | stable | [`cloud.google.com/go/language/apiv1`](https://pkg.go.dev/cloud.google.com/go/language/apiv1) | +| [Logging][cloud-logging] | stable | [`cloud.google.com/go/logging`](https://pkg.go.dev/cloud.google.com/go/logging) | +| [Memorystore][cloud-memorystore] | alpha | [`cloud.google.com/go/redis/apiv1`](https://pkg.go.dev/cloud.google.com/go/redis/apiv1) | +| [Monitoring][cloud-monitoring] | stable | [`cloud.google.com/go/monitoring/apiv3`](https://pkg.go.dev/cloud.google.com/go/monitoring/apiv3) | +| [OS Login][cloud-oslogin] | stable | [`cloud.google.com/go/oslogin/apiv1`](https://pkg.go.dev/cloud.google.com/go/oslogin/apiv1) | +| [Pub/Sub][cloud-pubsub] | stable | [`cloud.google.com/go/pubsub`](https://pkg.go.dev/cloud.google.com/go/pubsub) | +| [Phishing Protection][cloud-phishingprotection] | alpha | [`cloud.google.com/go/phishingprotection/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/phishingprotection/apiv1beta1) | +| [reCAPTCHA Enterprise][cloud-recaptcha] | alpha | [`cloud.google.com/go/recaptchaenterprise/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/recaptchaenterprise/apiv1beta1) | +| [Recommender][cloud-recommender] | beta | [`cloud.google.com/go/recommender/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/recommender/apiv1beta1) | +| [Scheduler][cloud-scheduler] | stable | [`cloud.google.com/go/scheduler/apiv1`](https://pkg.go.dev/cloud.google.com/go/scheduler/apiv1) | +| [Securitycenter][cloud-securitycenter] | stable | [`cloud.google.com/go/securitycenter/apiv1`](https://pkg.go.dev/cloud.google.com/go/securitycenter/apiv1) | +| [Spanner][cloud-spanner] | stable | [`cloud.google.com/go/spanner`](https://pkg.go.dev/cloud.google.com/go/spanner) | +| [Speech][cloud-speech] | stable | [`cloud.google.com/go/speech/apiv1`](https://pkg.go.dev/cloud.google.com/go/speech/apiv1) | +| [Storage][cloud-storage] | stable | [`cloud.google.com/go/storage`](https://pkg.go.dev/cloud.google.com/go/storage) | +| [Talent][cloud-talent] | alpha | [`cloud.google.com/go/talent/apiv4beta1`](https://pkg.go.dev/cloud.google.com/go/talent/apiv4beta1) | +| [Text To Speech][cloud-texttospeech] | stable | [`cloud.google.com/go/texttospeech/apiv1`](https://pkg.go.dev/cloud.google.com/go/texttospeech/apiv1) | +| [Trace][cloud-trace] | stable | [`cloud.google.com/go/trace/apiv2`](https://pkg.go.dev/cloud.google.com/go/trace/apiv2) | +| [Translate][cloud-translate] | stable | [`cloud.google.com/go/translate`](https://pkg.go.dev/cloud.google.com/go/translate) | +| [Video Intelligence][cloud-video] | beta | [`cloud.google.com/go/videointelligence/apiv1beta2`](https://pkg.go.dev/cloud.google.com/go/videointelligence/apiv1beta2) | +| [Vision][cloud-vision] | stable | [`cloud.google.com/go/vision/apiv1`](https://pkg.go.dev/cloud.google.com/go/vision/apiv1) | +| [Webrisk][cloud-webrisk] | alpha | [`cloud.google.com/go/webrisk/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/webrisk/apiv1beta1) | > **Alpha status**: the API is still being actively developed. As a > result, it might change in backward-incompatible ways and is not recommended @@ -85,10 +85,9 @@ Google API | Status | Package Documentation and examples are available at [pkg.go.dev/cloud.google.com/go](https://pkg.go.dev/cloud.google.com/go) -## Go Versions Supported +## [Go Versions Supported](#supported-versions) -We support the two most recent major versions of Go. If Google App Engine uses -an older version, we support that as well. +We currently support Go versions 1.11 and newer. ## Authorization @@ -127,8 +126,7 @@ client, err := storage.NewClient(ctx, option.WithTokenSource(tokenSource)) Contributions are welcome. Please, see the [CONTRIBUTING](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/CONTRIBUTING.md) -document for details. We're using Gerrit for our code reviews. Please don't open pull -requests against this repo, new pull requests will be automatically closed. +document for details. Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. @@ -177,3 +175,11 @@ for more information. [cloud-video]: https://cloud.google.com/video-intelligence/ [cloud-vision]: https://cloud.google.com/vision [cloud-webrisk]: https://cloud.google.com/web-risk/ + +## Links + +- [Go on Google Cloud](https://cloud.google.com/go/home) +- [Getting started with Go on Google Cloud](https://cloud.google.com/go/getting-started) +- [App Engine Quickstart](https://cloud.google.com/appengine/docs/standard/go/quickstart) +- [Cloud Functions Quickstart](https://cloud.google.com/functions/docs/quickstart-go) +- [Cloud Run Quickstart](https://cloud.google.com/run/docs/quickstarts/build-and-deploy#go) diff --git a/vendor/cloud.google.com/go/RELEASING.md b/vendor/cloud.google.com/go/RELEASING.md index 3fb49c4..d041760 100644 --- a/vendor/cloud.google.com/go/RELEASING.md +++ b/vendor/cloud.google.com/go/RELEASING.md @@ -1,62 +1,6 @@ -# Setup from scratch +# Releasing -1. [Install Go](https://golang.org/dl/). - 1. Ensure that your `GOBIN` directory (by default `$(go env GOPATH)/bin`) - is in your `PATH`. - 1. Check it's working by running `go version`. - * If it doesn't work, check the install location, usually - `/usr/local/go`, is on your `PATH`. - -1. Sign one of the -[contributor license agreements](#contributor-license-agreements) below. - -1. Run `go get golang.org/x/review/git-codereview && go install golang.org/x/review/git-codereview` -to install the code reviewing tool. - - 1. Ensure it's working by running `git codereview` (check your `PATH` if - not). - - 1. If you would like, you may want to set up aliases for `git-codereview`, - such that `git codereview change` becomes `git change`. See the - [godoc](https://pkg.go.dev/golang.org/x/review/git-codereview) for details. - - * Should you run into issues with the `git-codereview` tool, please note - that all error messages will assume that you have set up these aliases. - -1. Change to a directory of your choosing and clone the repo. - - ``` - cd ~/code - git clone https://code.googlesource.com/gocloud - ``` - - * If you have already checked out the source, make sure that the remote - `git` `origin` is https://code.googlesource.com/gocloud: - - ``` - git remote -v - # ... - git remote set-url origin https://code.googlesource.com/gocloud - ``` - - * The project uses [Go Modules](https://blog.golang.org/using-go-modules) - for dependency management See - [`gopls`](https://github.com/golang/go/wiki/gopls) for making your editor - work with modules. - -1. Change to the project directory and add the github remote: - - ``` - cd ~/code/gocloud - git remote add github https://github.com/googleapis/google-cloud-go - ``` - -1. Make sure your `git` auth is configured correctly by visiting -https://code.googlesource.com, clicking "Generate Password" at the top-right, -and following the directions. Otherwise, `git codereview mail` in the next step -will fail. - -# Which module to release? +## Determine which module to release The Go client libraries have several modules. Each module does not strictly correspond to a single library - they correspond to trees of directories. If a @@ -64,17 +8,22 @@ file needs to be released, you must release the closest ancestor module. To see all modules: -``` +```bash $ cat `find . -name go.mod` | grep module +module cloud.google.com/go/pubsub +module cloud.google.com/go/spanner module cloud.google.com/go module cloud.google.com/go/bigtable -module cloud.google.com/go/firestore module cloud.google.com/go/bigquery module cloud.google.com/go/storage -module cloud.google.com/go/datastore -module cloud.google.com/go/pubsub -module cloud.google.com/go/spanner +module cloud.google.com/go/pubsublite +module cloud.google.com/go/firestore module cloud.google.com/go/logging +module cloud.google.com/go/internal/gapicgen +module cloud.google.com/go/internal/godocfx +module cloud.google.com/go/internal/examples/fake +module cloud.google.com/go/internal/examples/mock +module cloud.google.com/go/datastore ``` The `cloud.google.com/go` is the repository root module. Each other module is @@ -90,9 +39,47 @@ of the `cloud.google.com/go` repository root module. Note: releasing `cloud.google.com/go` has no impact on any of the submodules, and vice-versa. They are released entirely independently. -# How to release `cloud.google.com/go` - -1. Navigate to `~/code/gocloud/` and switch to master. +## Test failures + +If there are any test failures in the Kokoro build, releases are blocked until +the failures have been resolved. + +## How to release + +### Automated Releases (`cloud.google.com/go` and submodules) + +We now use [release-please](https://github.com/googleapis/release-please) to +perform automated releases for `cloud.google.com/go` and all submodules. + +1. If there are changes that have not yet been released, a + [pull request](https://github.com/googleapis/google-cloud-go/pull/2971) will + be automatically opened by release-please + with a title like "chore: release X.Y.Z" (for the root module) or + "chore: release datastore X.Y.Z" (for the datastore submodule), where X.Y.Z + is the next version to be released. Find the desired pull request + [here](https://github.com/googleapis/google-cloud-go/pulls) +1. Check for failures in the + [continuous Kokoro build](http://go/google-cloud-go-continuous). If there are + any failures in the most recent build, address them before proceeding with + the release. (This applies even if the failures are in a different submodule + from the one being released.) +1. Review the release notes. These are automatically generated from the titles + of any merged commits since the previous release. If you would like to edit + them, this can be done by updating the changes in the release PR. +1. To cut a release, approve and merge the pull request. Doing so will + update the `CHANGES.md`, tag the merged commit with the appropriate version, + and draft a GitHub release which will copy the notes from `CHANGES.md`. + +### Manual Release (`cloud.google.com/go`) + +If for whatever reason the automated release process is not working as expected, +here is how to manually cut a release of `cloud.google.com/go`. + +1. Check for failures in the + [continuous Kokoro build](http://go/google-cloud-go-continuous). If there are + any failures in the most recent build, address them before proceeding with + the release. +1. Navigate to `google-cloud-go/` and switch to master. 1. `git pull` 1. Run `git tag -l | grep -v beta | grep -v alpha` to see all existing releases. The current latest tag `$CV` is the largest tag. It should look something @@ -104,29 +91,34 @@ They are released entirely independently. (the `git log` is going to show you things in submodules, which are not going to be part of your release). 1. Edit `CHANGES.md` to include a summary of the changes. -1. `cd internal/version && go generate && cd -` -1. Mail the CL: `git add -A && git change && git mail` -1. Wait for the CL to be submitted. Once it's submitted, and without submitting - any other CLs in the meantime: +1. In `internal/version/version.go`, update `const Repo` to today's date with + the format `YYYYMMDD`. +1. In `internal/version` run `go generate`. +1. Commit the changes, ignoring the generated `.go-r` file. Push to your fork, + and create a PR titled `chore: release $NV`. +1. Wait for the PR to be reviewed and merged. Once it's merged, and without + merging any other PRs in the meantime: a. Switch to master. b. `git pull` c. Tag the repo with the next version: `git tag $NV`. - d. Push the tag to both remotes: + d. Push the tag to origin: `git push origin $NV` - `git push github $NV` 1. Update [the releases page](https://github.com/googleapis/google-cloud-go/releases) with the new release, copying the contents of `CHANGES.md`. -# How to release a submodule +### Manual Releases (submodules) -We have several submodules, including `cloud.google.com/go/logging`, -`cloud.google.com/go/datastore`, and so on. - -To release a submodule: +If for whatever reason the automated release process is not working as expected, +here is how to manually cut a release of a submodule. (these instructions assume we're releasing `cloud.google.com/go/datastore` - adjust accordingly) -1. Navigate to `~/code/gocloud/` and switch to master. +1. Check for failures in the + [continuous Kokoro build](http://go/google-cloud-go-continuous). If there are + any failures in the most recent build, address them before proceeding with + the release. (This applies even if the failures are in a different submodule + from the one being released.) +1. Navigate to `google-cloud-go/` and switch to master. 1. `git pull` 1. Run `git tag -l | grep datastore | grep -v beta | grep -v alpha` to see all existing releases. The current latest tag `$CV` is the largest tag. It @@ -135,19 +127,15 @@ To release a submodule: 1. On master, run `git log $CV.. -- datastore/` to list all the changes to the submodule directory since the last release. 1. Edit `datastore/CHANGES.md` to include a summary of the changes. -1. `cd internal/version && go generate && cd -` -1. Mail the CL: `git add -A && git change && git mail` -1. Wait for the CL to be submitted. Once it's submitted, and without submitting - any other CLs in the meantime: +1. In `internal/version` run `go generate`. +1. Commit the changes, ignoring the generated `.go-r` file. Push to your fork, + and create a PR titled `chore(datastore): release $NV`. +1. Wait for the PR to be reviewed and merged. Once it's merged, and without + merging any other PRs in the meantime: a. Switch to master. b. `git pull` c. Tag the repo with the next version: `git tag $NV`. - d. Push the tag to both remotes: + d. Push the tag to origin: `git push origin $NV` - `git push github $NV` 1. Update [the releases page](https://github.com/googleapis/google-cloud-go/releases) with the new release, copying the contents of `datastore/CHANGES.md`. - -# Appendix - -1: This should get better as submodule tooling matures. diff --git a/vendor/cloud.google.com/go/bigquery/CHANGES.md b/vendor/cloud.google.com/go/bigquery/CHANGES.md index 62c6ec8..d4c1a4f 100644 --- a/vendor/cloud.google.com/go/bigquery/CHANGES.md +++ b/vendor/cloud.google.com/go/bigquery/CHANGES.md @@ -1,5 +1,72 @@ # Changes + +## v1.13.0 + +* Support retries for specific http2 transport race. +* Remove unused datasource client from bigquery/datatransfer. +* Adds support for authorized User Defined Functions (UDFs). +* Documentation improvements. +* Various updates to autogenerated clients. + + +## v1.12.0 + +* Adds additional retry support for table deletion. +* Various updates to autogenerated clients. + +## v1.11.2 + +* Addresses issue with consuming query results using an iterator.Pager + +## v1.11.1 + +* Addresses issue with optimized query path changes, released + in v1.11.0 + +## v1.11.0 + +* Add support for optimized query path. +* Documentation improvements. +* Fix issue related to the ReturnType of a bigquery Routine. +* Various updates to autogenerated clients. + +## v1.10.0 + +* Support for Infinity/-Infinity/NaN values in NullFloat64. +* Updates to RowIterator to address issues related to retrieving query + results without explicit destination table references. +* Various updates to autogenerated clients. + +## v1.9.0 + +* SchemaFromJSON will now accept alias type names (e.g. INT64 vs INTEGER, STRUCT vs RECORD). +* Support for IAM on table resources. +* Various updates to autogenerated clients. + +## v1.8.0 + +* Add support for hourly time partitioning. +* Various updates to autogenerated clients. + +## v1.7.0 + +* Add support for extracting BQML models to cloud storage. +* Add support for specifying projected fields when ingesting + datastore backups. +* Fix issue related to defining a range partitioning range + using default values. +* Add bigquery/reservation/v1 API. +* Various updates to autogenerated clients. + +## v1.6.0 + +* Add support for materialized views. +* Add support for policy tags (column ACLs). +* Add bigquery/connection/v1beta1 API. +* Documentation improvements. +* Various updates to autogenerated clients. + ## v1.5.0 * Add v1 endpoint for bigquerystorage API. diff --git a/vendor/cloud.google.com/go/bigquery/bigquery.go b/vendor/cloud.google.com/go/bigquery/bigquery.go index e7afedc..025c5e3 100644 --- a/vendor/cloud.google.com/go/bigquery/bigquery.go +++ b/vendor/cloud.google.com/go/bigquery/bigquery.go @@ -109,6 +109,28 @@ func (c *Client) insertJob(ctx context.Context, job *bq.Job, media io.Reader) (* return bqToJob(res, c) } +// runQuery invokes the optimized query path. +// Due to differences in options it supports, it cannot be used for all existing +// jobs.insert requests that are query jobs. +func (c *Client) runQuery(ctx context.Context, queryRequest *bq.QueryRequest) (*bq.QueryResponse, error) { + call := c.bqs.Jobs.Query(c.projectID, queryRequest) + setClientHeader(call.Header()) + + var res *bq.QueryResponse + var err error + invoke := func() error { + res, err = call.Do() + return err + } + + // We control request ID, so we can always runWithRetry. + err = runWithRetry(ctx, invoke) + if err != nil { + return nil, err + } + return res, nil +} + // Convert a number of milliseconds since the Unix epoch to a time.Time. // Treat an input of zero specially: convert it to the zero time, // rather than the start of the epoch. @@ -144,6 +166,14 @@ func runWithRetry(ctx context.Context, call func() error) error { // retryable; these are returned by systems between the client and the BigQuery // service. func retryableError(err error) bool { + // Special case due to http2: https://github.com/googleapis/google-cloud-go/issues/1793 + // Due to Go's default being higher for streams-per-connection than is accepted by the + // BQ backend, it's possible to get streams refused immediately after a connection is + // started but before we receive SETTINGS frame from the backend. This generally only + // happens when we try to enqueue > 100 requests onto a newly initiated connection. + if err.Error() == "http2: stream closed" { + return true + } e, ok := err.(*googleapi.Error) if !ok { return false diff --git a/vendor/cloud.google.com/go/bigquery/dataset.go b/vendor/cloud.google.com/go/bigquery/dataset.go index 46cbfde..91b649e 100644 --- a/vendor/cloud.google.com/go/bigquery/dataset.go +++ b/vendor/cloud.google.com/go/bigquery/dataset.go @@ -642,6 +642,7 @@ type AccessEntry struct { EntityType EntityType // The type of entity Entity string // The entity (individual or group) granted access View *Table // The view granted access (EntityType must be ViewEntity) + Routine *Routine // The routine granted access (only UDF currently supported) } // AccessRole is the level of access to grant to a dataset. @@ -673,12 +674,15 @@ const ( // allAuthenticatedUsers. SpecialGroupEntity - // ViewEntity is a BigQuery view. + // ViewEntity is a BigQuery logical view. ViewEntity // IAMMemberEntity represents entities present in IAM but not represented using // the other entity types. IAMMemberEntity + + // RoutineEntity is a BigQuery routine, referencing a User Defined Function (UDF). + RoutineEntity ) func (e *AccessEntry) toBQ() (*bq.DatasetAccess, error) { @@ -696,6 +700,8 @@ func (e *AccessEntry) toBQ() (*bq.DatasetAccess, error) { q.View = e.View.toBQ() case IAMMemberEntity: q.IamMember = e.Entity + case RoutineEntity: + q.Routine = e.Routine.toBQ() default: return nil, fmt.Errorf("bigquery: unknown entity type %d", e.EntityType) } @@ -723,6 +729,9 @@ func bqToAccessEntry(q *bq.DatasetAccess, c *Client) (*AccessEntry, error) { case q.IamMember != "": e.Entity = q.IamMember e.EntityType = IAMMemberEntity + case q.Routine != nil: + e.Routine = c.DatasetInProject(q.Routine.ProjectId, q.Routine.DatasetId).Routine(q.Routine.RoutineId) + e.EntityType = RoutineEntity default: return nil, errors.New("bigquery: invalid access value") } diff --git a/vendor/cloud.google.com/go/bigquery/doc.go b/vendor/cloud.google.com/go/bigquery/doc.go index fdfbf60..3a70714 100644 --- a/vendor/cloud.google.com/go/bigquery/doc.go +++ b/vendor/cloud.google.com/go/bigquery/doc.go @@ -253,9 +253,9 @@ it as well, and call its Run method. // Poll the job for completion if desired, as above. To upload, first define a type that implements the ValueSaver interface, which has a single method named Save. -Then create an Uploader, and call its Put method with a slice of values. +Then create an Inserter, and call its Put method with a slice of values. - u := table.Uploader() + u := table.Inserter() // Item implements the ValueSaver interface. items := []*Item{ {Name: "n1", Size: 32.6, Count: 7}, @@ -285,6 +285,9 @@ directly and the schema will be inferred: // TODO: Handle error. } +BigQuery allows for higher throughput when omitting insertion IDs. To enable this, +specify the sentinel `NoDedupeID` value for the insertion ID when implementing a ValueSaver. + Extracting If you've been following so far, extracting data from a BigQuery table @@ -298,11 +301,16 @@ Extractor, then optionally configure it, and lastly call its Run method. Errors -Errors returned by this client are often of the type [`googleapi.Error`](https://godoc.org/google.golang.org/api/googleapi#Error). -These errors can be introspected for more information by type asserting to the richer `googleapi.Error` type. For example: +Errors returned by this client are often of the type googleapi.Error: https://godoc.org/google.golang.org/api/googleapi#Error + +These errors can be introspected for more information by type asserting to the richer *googleapi.Error type. For example: if e, ok := err.(*googleapi.Error); ok { if e.Code = 409 { ... } - } + } + +In some cases, your client may received unstructured googleapi.Error error responses. In such cases, it is likely that +you have exceeded BigQuery request limits, documented at: https://cloud.google.com/bigquery/quotas + */ package bigquery // import "cloud.google.com/go/bigquery" diff --git a/vendor/cloud.google.com/go/bigquery/external.go b/vendor/cloud.google.com/go/bigquery/external.go index da7966a..e8d1fde 100644 --- a/vendor/cloud.google.com/go/bigquery/external.go +++ b/vendor/cloud.google.com/go/bigquery/external.go @@ -34,6 +34,10 @@ const ( Bigtable DataFormat = "BIGTABLE" Parquet DataFormat = "PARQUET" ORC DataFormat = "ORC" + // For BQ ML Models, TensorFlow Saved Model format. + TFSavedModel DataFormat = "ML_TF_SAVED_MODEL" + // For BQ ML Models, xgBoost Booster format. + XGBoostBooster DataFormat = "ML_XGBOOST_BOOSTER" ) // ExternalData is a table which is stored outside of BigQuery. It is implemented by diff --git a/vendor/cloud.google.com/go/bigquery/extract.go b/vendor/cloud.google.com/go/bigquery/extract.go index da426ff..4683925 100644 --- a/vendor/cloud.google.com/go/bigquery/extract.go +++ b/vendor/cloud.google.com/go/bigquery/extract.go @@ -24,8 +24,13 @@ import ( // ExtractConfig holds the configuration for an extract job. type ExtractConfig struct { // Src is the table from which data will be extracted. + // Only one of Src or SrcModel should be specified. Src *Table + // SrcModel is the ML model from which the data will be extracted. + // Only one of Src or SrcModel should be specified. + SrcModel *Model + // Dst is the destination into which the data will be extracted. Dst *GCSReference @@ -49,18 +54,25 @@ func (e *ExtractConfig) toBQ() *bq.JobConfiguration { f := false printHeader = &f } - return &bq.JobConfiguration{ + cfg := &bq.JobConfiguration{ Labels: e.Labels, Extract: &bq.JobConfigurationExtract{ - DestinationUris: append([]string{}, e.Dst.URIs...), - Compression: string(e.Dst.Compression), - DestinationFormat: string(e.Dst.DestinationFormat), - FieldDelimiter: e.Dst.FieldDelimiter, - SourceTable: e.Src.toBQ(), + DestinationUris: append([]string{}, e.Dst.URIs...), + Compression: string(e.Dst.Compression), + DestinationFormat: string(e.Dst.DestinationFormat), + FieldDelimiter: e.Dst.FieldDelimiter, + PrintHeader: printHeader, UseAvroLogicalTypes: e.UseAvroLogicalTypes, }, } + if e.Src != nil { + cfg.Extract.SourceTable = e.Src.toBQ() + } + if e.SrcModel != nil { + cfg.Extract.SourceModel = e.SrcModel.toBQ() + } + return cfg } func bqToExtractConfig(q *bq.JobConfiguration, c *Client) *ExtractConfig { @@ -79,6 +91,7 @@ func bqToExtractConfig(q *bq.JobConfiguration, c *Client) *ExtractConfig { }, DisableHeader: qe.PrintHeader != nil && !*qe.PrintHeader, Src: bqToTable(qe.SourceTable, c), + SrcModel: bqToModel(qe.SourceModel, c), UseAvroLogicalTypes: qe.UseAvroLogicalTypes, } } @@ -103,6 +116,19 @@ func (t *Table) ExtractorTo(dst *GCSReference) *Extractor { } } +// ExtractorTo returns an Extractor which can be persist a BigQuery Model into +// Google Cloud Storage. +// The returned Extractor may be further configured before its Run method is called. +func (m *Model) ExtractorTo(dst *GCSReference) *Extractor { + return &Extractor{ + c: m.c, + ExtractConfig: ExtractConfig{ + SrcModel: m, + Dst: dst, + }, + } +} + // Run initiates an extract job. func (e *Extractor) Run(ctx context.Context) (j *Job, err error) { ctx = trace.StartSpan(ctx, "cloud.google.com/go/bigquery.Extractor.Run") diff --git a/vendor/cloud.google.com/go/bigquery/go.mod b/vendor/cloud.google.com/go/bigquery/go.mod index 32a5503..23593aa 100644 --- a/vendor/cloud.google.com/go/bigquery/go.mod +++ b/vendor/cloud.google.com/go/bigquery/go.mod @@ -3,14 +3,13 @@ module cloud.google.com/go/bigquery go 1.11 require ( - cloud.google.com/go v0.53.0 - cloud.google.com/go/storage v1.6.0 - github.com/golang/protobuf v1.3.4 - github.com/google/go-cmp v0.4.0 + cloud.google.com/go v0.71.0 + cloud.google.com/go/storage v1.10.0 + github.com/golang/protobuf v1.4.3 + github.com/google/go-cmp v0.5.2 github.com/googleapis/gax-go/v2 v2.0.5 - golang.org/x/net v0.0.0-20200226121028-0de0cce0169b // indirect - golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d // indirect - google.golang.org/api v0.19.0 - google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383 - google.golang.org/grpc v1.27.1 + golang.org/x/tools v0.0.0-20201103235415-b653051172e4 // indirect + google.golang.org/api v0.34.0 + google.golang.org/genproto v0.0.0-20201104152603-2e45c02ce95c + google.golang.org/grpc v1.33.1 ) diff --git a/vendor/cloud.google.com/go/bigquery/go.sum b/vendor/cloud.google.com/go/bigquery/go.sum index d1e934a..87fd7ba 100644 --- a/vendor/cloud.google.com/go/bigquery/go.sum +++ b/vendor/cloud.google.com/go/bigquery/go.sum @@ -13,9 +13,24 @@ cloud.google.com/go v0.52.0 h1:GGslhk/BU052LPlnI1vpp3fcbUs+hQ3E+Doti/3/vF8= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0 h1:MZQCQQaRwOrAcuKjiHWHrgKykt4fZyuwF2dtiG3fGW8= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0 h1:3ithwDMr7/3vpAMXiH+ZQnYbuIsh+OPhUPMFC9enmn0= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0 h1:WRz29PgAsVEyPSDHyk+0fpEkwEFyfhHn+JbksT6gIL4= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0 h1:EpMNVUorLiZIELdMZbCYX/ByTFCdoYopYAGxaGVz9ms= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0 h1:RmDygqvj27Zf3fCQjQRtLyC7KwFcHkeJitcO0OoGOcA= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.71.0 h1:2ha722Z08cmRa0orJrzBaszYQcLbLFcsZHsGSj/kIF4= +cloud.google.com/go v0.71.0/go.mod h1:qZfY4Y7AEIQwG/fQYD3xrxLNkQZ0Xzf3HGeqCkA6LVM= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= @@ -26,12 +41,18 @@ cloud.google.com/go/pubsub v1.1.0 h1:9/vpR43S4aJaROxqQHQ3nH9lfyKKV0dC3vOmnw8ebQQ cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0 h1:Lpy6hKgdcl7a3WGSfJIFmxmcdjSpP6OmBEfcOv1Y680= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0 h1:VV2nUM3wwLLGh9lSABFgZMjInyUbJeaRSE64WuAIQ+4= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0 h1:RPUcBvDeYgQFMfQu1eBMq6piD1SXmLH+vK3qjewZPus= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0 h1:UDpwYIwla4jHGzZJaEJYx1tOejbgSoNqsAfHAUYe2r8= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0 h1:86K1Gel7BQ9/WmNWn7dTKMvTLFzwtBe5FNqYbi9X35g= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -41,8 +62,11 @@ 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/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -58,6 +82,9 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= @@ -66,6 +93,20 @@ github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 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/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -75,13 +116,29 @@ github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0 h1:pMen7vLs8nvgEYhywH3KDWJIJTeEr2ULsVWHWYHQyBs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0 h1:wCKgOCHuUEVfsaQLpPSJb7VdYCdTVZQAuOdYm1yc/60= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/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 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -89,6 +146,7 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= @@ -102,6 +160,10 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +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= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -109,10 +171,15 @@ go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= 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= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 h1:OeRHuibLsmZkFj773W4LcfAGsSxJgfPONhr8cmO+eLA= @@ -145,6 +212,8 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNT golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367 h1:0IiAsCRByjO2QjX7ZPkw5oU9x+n1YqRL802rjC0c3Aw= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -154,6 +223,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -165,6 +236,7 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -174,8 +246,28 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjut golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0 h1:MsuvTghUPjX762sGLnGsxC3HM0B5r83wEtYcYR8/vRs= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5 h1:WQ8q63x+f/zpC8Ac1s9wLElVoHhm32p6tudrU72n1QA= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f h1:QBjCr1Fz5kw158VqdE9JfI9cJnl/ymnJWAdMuinqL7Y= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 h1:eDrdRpKgkcCqKZQwyZRyeFZgfqt37SL7Kv3tok06cKE= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201026091529-146b70c837a4 h1:awiuzyrRjJDb+OXi9ceHO3SDxVoN3JER57mhtqkdQBs= +golang.org/x/net v0.0.0-20201026091529-146b70c837a4/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= @@ -184,6 +276,8 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 h1:pE8b58s1HRDMi8RDc79m0H golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -192,6 +286,10 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEha golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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= @@ -215,11 +313,32 @@ golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 h1:sfkvUWPNGwSV+8/fNqctR5lS2 golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d h1:nc5K6ox/4lTFbMVSL9WRR81ixkcwXThoiF6yf+R9scA= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e h1:hq86ru83GdWTlfQFZGO4nZJTU4Bs2wfHl8oFHRaXsfc= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25 h1:OKbAoGs4fGM5cPLlVQLZGYkFC8OnOfgo6tt0Smf9XhM= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f h1:Fqb3ao1hUmOR3GkUOg/Y+BadLwykBIzs5q8Ez2SbHyc= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -259,12 +378,34 @@ golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56 h1:DFtSed2q3HtNuVazwVDZ4nS golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2 h1:L/G4KZvrQn7FWLN/LlulBtBzrLUhqjiGfTWWDmrh+IQ= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d h1:7M9AXzLrJWWGdDYtBblPHBTnHtaN6KKQ98OYb35mLlY= golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb h1:iKlO7ROJc6SttHKlxzwGytRtBUqX4VARrNTgP2YLX5M= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d h1:3K34ovZAOnVaUPxanr0j4ghTZTPTA0CnXvjCl+5lZqk= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4 h1:kDtqNkeBrZb8B+atrj50B5XLHpzXXqcCdZPP/ApQ5NY= +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 h1:lzLdP95xJmMpwQ6LUHwrc5V7js93hTiY7gkznu0BgmY= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88 h1:4j84u0sokprDu3IdSYHJMmou+YSLflMz8p7yAx/QI4g= +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= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d h1:szSOL78iTCl0LF1AMjhSWJj8tIM0KixlUUnBtYXsmd8= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201030143252-cf7a54d06671 h1:8ylPbtgKXakJwDQKPjMJ6BSnlEIFViV0tYnu5/1Omk8= +golang.org/x/tools v0.0.0-20201030143252-cf7a54d06671/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201103235415-b653051172e4 h1:Qe0EMgvVYb6tmJhJHljCj3gS96hvSTkGNaIzp/ivq10= +golang.org/x/tools v0.0.0-20201103235415-b653051172e4/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0 h1:VGGbLNyPF7dvYHhcUGYBBGCRDDK0RRJAI6KCvo0CL+E= @@ -278,8 +419,21 @@ google.golang.org/api v0.17.0 h1:0q95w+VuFtv4PAx4PZVQdBMmYbaCHbnfKaEiDIcVyag= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.18.0 h1:TgDr+1inK2XVUKZx3BYAqQg/GwucGdBkzZjWaTg/I+A= google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0 h1:GwFK8+l5/gdsOYKz5p6M4UK+QT8OvmHWZPJCnf+5DjA= google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0 h1:jz2KixHX7EcCPiQrySzPdnYT7DbINAypCqKZ1Z7GM40= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0 h1:J1Pl9P2lnmYFSJvgs70DKELqHNh8CNWXPbud4njEE2s= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0 h1:cG03eaksBzhfSIk7JRGctfp3lanklcOM/mTGvow7BbQ= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0 h1:jMF5hhVfMkTZwHW1SDpKq5CkgWLXOb31Foaca9Zr3oM= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0 h1:BaiDisFir8O4IJxvAabCGGkQ6yCJegNQqSVoYUNAnbk= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0 h1:yfrXXP61wVuLb0vBcG6qaOoIoqYEzOQS8jum51jkv2w= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.34.0 h1:k40adF3uR+6x/+hO5Dh4ZFUqFp67vxvbpafFiJxl10A= +google.golang.org/api v0.34.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -287,6 +441,8 @@ google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -311,32 +467,76 @@ google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce h1:1mbrb1tUU+Zmt5C google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63 h1:YzfoEYWbODU5Fbt37+h7X16BWQbad7Q4S6gclTKFXM8= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383 h1:Vo0fD5w0fUKriWlZLyrim2GXbumyN0D6euW79T9PgEE= google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171 h1:xes2Q2k+d/+YNXVw0FpZkIDJiaux4OVrRKXRAzH6A0U= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672 h1:jiDSspVssiikoRPFHT6pYrL+CL6/yIc3b9AuHO/4xik= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940 h1:MRHtG0U6SnaUb+s+LhNE1qt1FQ1wlhqr5E4usBKC0uA= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84 h1:pSLkPbrjnPyLDYUO2VM9mDLqo2V6CFBY84lFSZAfoi4= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380 h1:xriR1EgvKfkKxIoU2uUvrMVl+H26359loFFUleSMXFo= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c h1:Lq4llNryJoaVFRmvrIwC/ZHH7tNt4tUYIu8+se2aayY= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201030142918-24207fddd1c3 h1:sg8vLDNIxFPHTchfhH1E3AI32BL3f23oie38xUWnJM8= +google.golang.org/genproto v0.0.0-20201030142918-24207fddd1c3/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201104152603-2e45c02ce95c h1:ahjoEe3C676yt02IE7UtXiitMY2+aTBrJbFF2BIsGmw= +google.golang.org/genproto v0.0.0-20201104152603-2e45c02ce95c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0 h1:T7P4R73V3SSDPhH7WW7ATbfViLtmamH0DKrP3f9AuDI= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1 h1:DGeFlSan2f+WEtCERJ4J9GJWk15TxUi8QGagfI87Xyc= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a h1:LJwr7TCTghdatWv40WobzlKXc9c4s8oGa7QKJUtHhWA= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= diff --git a/vendor/cloud.google.com/go/bigquery/iam.go b/vendor/cloud.google.com/go/bigquery/iam.go new file mode 100644 index 0000000..0303a73 --- /dev/null +++ b/vendor/cloud.google.com/go/bigquery/iam.go @@ -0,0 +1,142 @@ +// Copyright 2020 Google LLC +// +// 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 bigquery + +import ( + "context" + "errors" + "fmt" + + "cloud.google.com/go/iam" + "cloud.google.com/go/internal/trace" + bq "google.golang.org/api/bigquery/v2" + iampb "google.golang.org/genproto/googleapis/iam/v1" +) + +// IAM provides access to an iam.Handle that allows access to IAM functionality for +// the given BigQuery table. For more information, see +// https://pkg.go.dev/cloud.google.com/go/iam +func (t *Table) IAM() *iam.Handle { + return iam.InternalNewHandleClient(&bqIAMClient{ + bqs: t.c.bqs, + }, fmt.Sprintf("projects/%s/datasets/%s/tables/%s", + t.ProjectID, t.DatasetID, t.TableID)) +} + +// bqIAMClient is a client that satisfies the IAM "client" interface. +// +// This client has an explicit assumption that it's only working with Table resources. +type bqIAMClient struct { + bqs *bq.Service +} + +func (c *bqIAMClient) Get(ctx context.Context, resource string) (p *iampb.Policy, err error) { + return c.GetWithVersion(ctx, resource, 1) +} + +func (c *bqIAMClient) GetWithVersion(ctx context.Context, resource string, requestedPolicyVersion int32) (p *iampb.Policy, err error) { + if requestedPolicyVersion > 1 { + return nil, errors.New("bigquery: only IAM policy version 1 is supported") + } + ctx = trace.StartSpan(ctx, "cloud.google.com/go/bigquery.IAM.Get") + defer func() { trace.EndSpan(ctx, err) }() + + iamReq := &bq.GetIamPolicyRequest{ + Options: &bq.GetPolicyOptions{ + RequestedPolicyVersion: int64(requestedPolicyVersion), + }, + } + call := c.bqs.Tables.GetIamPolicy(resource, iamReq) + setClientHeader(call.Header()) + + var bqp *bq.Policy + err = runWithRetry(ctx, func() error { + bqp, err = call.Context(ctx).Do() + return err + }) + if err != nil { + return nil, err + } + return iamFromBigQueryPolicy(bqp), nil +} + +func (c *bqIAMClient) Set(ctx context.Context, resource string, p *iampb.Policy) (err error) { + ctx = trace.StartSpan(ctx, "cloud.google.com/go/bigquery.IAM.Set") + defer func() { trace.EndSpan(ctx, err) }() + + bqp := iamToBigQueryPolicy(p) + call := c.bqs.Tables.SetIamPolicy(resource, &bq.SetIamPolicyRequest{Policy: bqp}) + setClientHeader(call.Header()) + return runWithRetry(ctx, func() error { + _, err := call.Context(ctx).Do() + return err + }) +} + +func (c *bqIAMClient) Test(ctx context.Context, resource string, perms []string) (p []string, err error) { + ctx = trace.StartSpan(ctx, "cloud.google.com/go/bigquery.IAM.Test") + defer func() { trace.EndSpan(ctx, err) }() + + call := c.bqs.Tables.TestIamPermissions(resource, &bq.TestIamPermissionsRequest{Permissions: perms}) + setClientHeader(call.Header()) + + var res *bq.TestIamPermissionsResponse + err = runWithRetry(ctx, func() error { + res, err = call.Context(ctx).Do() + return err + }) + if err != nil { + return nil, err + } + return res.Permissions, nil +} + +func iamToBigQueryPolicy(ip *iampb.Policy) *bq.Policy { + return &bq.Policy{ + Bindings: iamToBigQueryBindings(ip.Bindings), + Etag: string(ip.Etag), + Version: int64(ip.Version), + } +} + +func iamToBigQueryBindings(ibs []*iampb.Binding) []*bq.Binding { + var bqBindings []*bq.Binding + for _, ib := range ibs { + bqBindings = append(bqBindings, &bq.Binding{ + Role: ib.Role, + Members: ib.Members, + }) + } + return bqBindings +} + +func iamFromBigQueryPolicy(bqPolicy *bq.Policy) *iampb.Policy { + return &iampb.Policy{ + Bindings: iamFromBigQueryBindings(bqPolicy.Bindings), + Etag: []byte(bqPolicy.Etag), + Version: int32(bqPolicy.Version), + } +} + +func iamFromBigQueryBindings(bqBindings []*bq.Binding) []*iampb.Binding { + var ibs []*iampb.Binding + for _, bqb := range bqBindings { + ibs = append(ibs, &iampb.Binding{ + Role: bqb.Role, + Members: bqb.Members, + }) + } + return ibs +} diff --git a/vendor/cloud.google.com/go/bigquery/inserter.go b/vendor/cloud.google.com/go/bigquery/inserter.go index 789cd00..53460d0 100644 --- a/vendor/cloud.google.com/go/bigquery/inserter.go +++ b/vendor/cloud.google.com/go/bigquery/inserter.go @@ -206,6 +206,7 @@ func (u *Inserter) newInsertRequest(savers []ValueSaver) (*bq.TableDataInsertAll return nil, err } if insertID == NoDedupeID { + // User wants to opt-out of sending deduplication ID. insertID = "" } else if insertID == "" { insertID = randomIDFn() diff --git a/vendor/cloud.google.com/go/bigquery/iterator.go b/vendor/cloud.google.com/go/bigquery/iterator.go index 298143c..fce76a3 100644 --- a/vendor/cloud.google.com/go/bigquery/iterator.go +++ b/vendor/cloud.google.com/go/bigquery/iterator.go @@ -16,37 +16,37 @@ package bigquery import ( "context" + "errors" "fmt" "reflect" bq "google.golang.org/api/bigquery/v2" + "google.golang.org/api/googleapi" "google.golang.org/api/iterator" ) // Construct a RowIterator. -// If pf is nil, there are no rows in the result set. -func newRowIterator(ctx context.Context, t *Table, pf pageFetcher) *RowIterator { +func newRowIterator(ctx context.Context, src *rowSource, pf pageFetcher) *RowIterator { it := &RowIterator{ - ctx: ctx, - table: t, - pf: pf, - } - if pf != nil { - it.pageInfo, it.nextFunc = iterator.NewPageInfo( - it.fetch, - func() int { return len(it.rows) }, - func() interface{} { r := it.rows; it.rows = nil; return r }) + ctx: ctx, + src: src, + pf: pf, } + it.pageInfo, it.nextFunc = iterator.NewPageInfo( + it.fetch, + func() int { return len(it.rows) }, + func() interface{} { r := it.rows; it.rows = nil; return r }) return it } // A RowIterator provides access to the result of a BigQuery lookup. type RowIterator struct { - ctx context.Context - table *Table - pf pageFetcher + ctx context.Context + src *rowSource + pageInfo *iterator.PageInfo nextFunc func() error + pf pageFetcher // StartIndex can be set before the first call to Next. If PageInfo().Token // is also set, StartIndex is ignored. @@ -63,6 +63,11 @@ type RowIterator struct { structLoader structLoader // used to populate a pointer to a struct } +// We declare a function signature for fetching results. The primary reason +// for this is to enable us to swap out the fetch function with alternate +// implementations (e.g. to enable testing). +type pageFetcher func(ctx context.Context, _ *rowSource, _ Schema, startIndex uint64, pageSize int64, pageToken string) (*fetchPageResult, error) + // Next loads the next row into dst. Its return value is iterator.Done if there // are no more results. Once Next returns iterator.Done, all subsequent calls // will return iterator.Done. @@ -103,9 +108,6 @@ type RowIterator struct { // NullDateTime. You can also use a *[]Value or *map[string]Value to read from a // table with NULLs. func (it *RowIterator) Next(dst interface{}) error { - if it.pf == nil { // There are no rows in the result set. - return iterator.Done - } var vl ValueLoader switch dst := dst.(type) { case ValueLoader: @@ -145,19 +147,42 @@ func isStructPtr(x interface{}) bool { func (it *RowIterator) PageInfo() *iterator.PageInfo { return it.pageInfo } func (it *RowIterator) fetch(pageSize int, pageToken string) (string, error) { - res, err := it.pf(it.ctx, it.table, it.Schema, it.StartIndex, int64(pageSize), pageToken) + res, err := it.pf(it.ctx, it.src, it.Schema, it.StartIndex, int64(pageSize), pageToken) if err != nil { return "", err } it.rows = append(it.rows, res.rows...) - it.Schema = res.schema + if it.Schema == nil { + it.Schema = res.schema + } it.TotalRows = res.totalRows return res.pageToken, nil } -// A pageFetcher returns a page of rows from a destination table. -type pageFetcher func(ctx context.Context, _ *Table, _ Schema, startIndex uint64, pageSize int64, pageToken string) (*fetchPageResult, error) +// rowSource represents one of the multiple sources of data for a row iterator. +// Rows can be read directly from a BigQuery table or from a job reference. +// If a job is present, that's treated as the authoritative source. +// +// rowSource can also cache results for special situations, primarily for the +// fast execution query path which can return status, rows, and schema all at +// once. Our cache data expectations are as follows: +// +// * We can only cache data from the start of a source. +// * We need to cache schema, rows, and next page token to effective service +// a request from cache. +// * cache references are destroyed as soon as they're interrogated. We don't +// want to retain the data unnecessarily, and we expect that the backend +// can always provide them if needed. +type rowSource struct { + j *Job + t *Table + + cachedRows []*bq.TableRow + cachedSchema *bq.TableSchema + cachedNextToken string +} +// fetchPageResult represents a page of rows returned from the backend. type fetchPageResult struct { pageToken string rows [][]Value @@ -165,8 +190,26 @@ type fetchPageResult struct { schema Schema } -// fetchPage gets a page of rows from t. -func fetchPage(ctx context.Context, t *Table, schema Schema, startIndex uint64, pageSize int64, pageToken string) (*fetchPageResult, error) { +// fetchPage is our generalized fetch mechanism. It interrogates from cache, and +// then dispatches to either the appropriate job or table-based backend mechanism +// as needed. +func fetchPage(ctx context.Context, src *rowSource, schema Schema, startIndex uint64, pageSize int64, pageToken string) (*fetchPageResult, error) { + result, err := fetchCachedPage(ctx, src, schema, startIndex, pageSize, pageToken) + if err != nil { + if err != errNoCacheData { + // This likely means something more severe, like a problem with schema. + return nil, err + } + // If we failed to fetch data from cache, invoke the appropriate service method. + if src.j != nil { + return fetchJobResultPage(ctx, src, schema, startIndex, pageSize, pageToken) + } + return fetchTableResultPage(ctx, src, schema, startIndex, pageSize, pageToken) + } + return result, nil +} + +func fetchTableResultPage(ctx context.Context, src *rowSource, schema Schema, startIndex uint64, pageSize int64, pageToken string) (*fetchPageResult, error) { // Fetch the table schema in the background, if necessary. errc := make(chan error, 1) if schema != nil { @@ -175,7 +218,7 @@ func fetchPage(ctx context.Context, t *Table, schema Schema, startIndex uint64, go func() { var bqt *bq.Table err := runWithRetry(ctx, func() (err error) { - bqt, err = t.c.bqs.Tables.Get(t.ProjectID, t.DatasetID, t.TableID). + bqt, err = src.t.c.bqs.Tables.Get(src.t.ProjectID, src.t.DatasetID, src.t.TableID). Fields("schema"). Context(ctx). Do() @@ -187,7 +230,7 @@ func fetchPage(ctx context.Context, t *Table, schema Schema, startIndex uint64, errc <- err }() } - call := t.c.bqs.Tabledata.List(t.ProjectID, t.DatasetID, t.TableID) + call := src.t.c.bqs.Tabledata.List(src.t.ProjectID, src.t.DatasetID, src.t.TableID) setClientHeader(call.Header()) if pageToken != "" { call.PageToken(pageToken) @@ -220,3 +263,100 @@ func fetchPage(ctx context.Context, t *Table, schema Schema, startIndex uint64, schema: schema, }, nil } + +func fetchJobResultPage(ctx context.Context, src *rowSource, schema Schema, startIndex uint64, pageSize int64, pageToken string) (*fetchPageResult, error) { + // reduce data transfered by leveraging api projections + projectedFields := []googleapi.Field{"rows", "pageToken", "totalRows"} + call := src.j.c.bqs.Jobs.GetQueryResults(src.j.projectID, src.j.jobID).Location(src.j.location) + if schema == nil { + // only project schema if we weren't supplied one. + projectedFields = append(projectedFields, "schema") + } + call = call.Fields(projectedFields...) + setClientHeader(call.Header()) + if pageToken != "" { + call.PageToken(pageToken) + } else { + call.StartIndex(startIndex) + } + if pageSize > 0 { + call.MaxResults(pageSize) + } + var res *bq.GetQueryResultsResponse + err := runWithRetry(ctx, func() (err error) { + res, err = call.Context(ctx).Do() + return err + }) + if err != nil { + return nil, err + } + // Populate schema in the rowsource if it's missing + if schema == nil { + schema = bqToSchema(res.Schema) + } + rows, err := convertRows(res.Rows, schema) + if err != nil { + return nil, err + } + return &fetchPageResult{ + pageToken: res.PageToken, + rows: rows, + totalRows: uint64(res.TotalRows), + schema: schema, + }, nil +} + +var errNoCacheData = errors.New("No rows in rowSource cache") + +// fetchCachedPage attempts to service the first page of results. For the jobs path specifically, we have an +// opportunity to fetch rows before the iterator is constructed, and thus serve that data as the first request +// without an unnecessary network round trip. +func fetchCachedPage(ctx context.Context, src *rowSource, schema Schema, startIndex uint64, pageSize int64, pageToken string) (*fetchPageResult, error) { + // we have no cached data + if src.cachedRows == nil { + return nil, errNoCacheData + } + // we have no schema for decoding. convert from the cached representation if available. + if schema == nil { + if src.cachedSchema == nil { + // We can't progress with no schema, destroy references and return a miss. + src.cachedRows = nil + src.cachedNextToken = "" + return nil, errNoCacheData + } + schema = bqToSchema(src.cachedSchema) + } + // Only serve from cache where we're confident we know someone's asking for the first page + // without having to align data. + // + // Future consideration: we could service pagesizes smaller than the cache if we're willing to handle generation + // of pageTokens for the cache. + if pageToken == "" && + startIndex == 0 && + (pageSize == 0 || pageSize == int64(len(src.cachedRows))) { + converted, err := convertRows(src.cachedRows, schema) + if err != nil { + // destroy cache references and return error + src.cachedRows = nil + src.cachedSchema = nil + src.cachedNextToken = "" + return nil, err + } + result := &fetchPageResult{ + pageToken: src.cachedNextToken, + rows: converted, + schema: schema, + totalRows: uint64(len(converted)), + } + // clear cache references and return response. + src.cachedRows = nil + src.cachedSchema = nil + src.cachedNextToken = "" + return result, nil + } + // All other cases are invalid. Destroy any cache references on the way out the door. + src.cachedRows = nil + src.cachedSchema = nil + src.cachedNextToken = "" + return nil, errNoCacheData +} diff --git a/vendor/cloud.google.com/go/bigquery/job.go b/vendor/cloud.google.com/go/bigquery/job.go index 6a51973..6e0745d 100644 --- a/vendor/cloud.google.com/go/bigquery/job.go +++ b/vendor/cloud.google.com/go/bigquery/job.go @@ -284,21 +284,18 @@ func (j *Job) read(ctx context.Context, waitForQuery func(context.Context, strin if !j.isQuery() { return nil, errors.New("bigquery: cannot read from a non-query job") } - destTable := j.config.Query.DestinationTable - // The destination table should only be nil if there was a query error. - projectID := j.projectID - if destTable != nil && projectID != destTable.ProjectId { - return nil, fmt.Errorf("bigquery: job project ID is %q, but destination table's is %q", projectID, destTable.ProjectId) - } - schema, totalRows, err := waitForQuery(ctx, projectID) + schema, totalRows, err := waitForQuery(ctx, j.projectID) if err != nil { return nil, err } - if destTable == nil { - return nil, errors.New("bigquery: query job missing destination table") + // Shave off some potential overhead by only retaining the minimal job representation in the iterator. + itJob := &Job{ + c: j.c, + projectID: j.projectID, + jobID: j.jobID, + location: j.location, } - dt := bqToTable(destTable, j.c) - it := newRowIterator(ctx, dt, pf) + it := newRowIterator(ctx, &rowSource{j: itJob}, pf) it.Schema = schema it.TotalRows = totalRows return it, nil @@ -404,7 +401,7 @@ type QueryStatistics struct { // UNKNOWN: accuracy of the estimate is unknown. // PRECISE: estimate is precise. // LOWER_BOUND: estimate is lower bound of what the query would cost. - // UPPER_BOUND: estiamte is upper bound of what the query would cost. + // UPPER_BOUND: estimate is upper bound of what the query would cost. TotalBytesProcessedAccuracy string // Describes execution plan for the query. diff --git a/vendor/cloud.google.com/go/bigquery/load.go b/vendor/cloud.google.com/go/bigquery/load.go index 26d4978..9fa0190 100644 --- a/vendor/cloud.google.com/go/bigquery/load.go +++ b/vendor/cloud.google.com/go/bigquery/load.go @@ -61,6 +61,10 @@ type LoadConfig struct { // See https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-avro#logical_types // for additional information. UseAvroLogicalTypes bool + + // For ingestion from datastore backups, ProjectionFields governs which fields + // are projected from the backup. The default behavior projects all fields. + ProjectionFields []string } func (l *LoadConfig) toBQ() (*bq.JobConfiguration, io.Reader) { @@ -76,6 +80,7 @@ func (l *LoadConfig) toBQ() (*bq.JobConfiguration, io.Reader) { DestinationEncryptionConfiguration: l.DestinationEncryptionConfig.toBQ(), SchemaUpdateOptions: l.SchemaUpdateOptions, UseAvroLogicalTypes: l.UseAvroLogicalTypes, + ProjectionFields: l.ProjectionFields, }, } media := l.Src.populateLoadConfig(config.Load) @@ -94,6 +99,7 @@ func bqToLoadConfig(q *bq.JobConfiguration, c *Client) *LoadConfig { DestinationEncryptionConfig: bqToEncryptionConfig(q.Load.DestinationEncryptionConfiguration), SchemaUpdateOptions: q.Load.SchemaUpdateOptions, UseAvroLogicalTypes: q.Load.UseAvroLogicalTypes, + ProjectionFields: q.Load.ProjectionFields, } var fc *FileConfig if len(q.Load.SourceUris) == 0 { diff --git a/vendor/cloud.google.com/go/bigquery/model.go b/vendor/cloud.google.com/go/bigquery/model.go index 5b669ab..363133b 100644 --- a/vendor/cloud.google.com/go/bigquery/model.go +++ b/vendor/cloud.google.com/go/bigquery/model.go @@ -46,6 +46,14 @@ func (m *Model) FullyQualifiedName() string { return fmt.Sprintf("%s:%s.%s", m.ProjectID, m.DatasetID, m.ModelID) } +func (m *Model) toBQ() *bq.ModelReference { + return &bq.ModelReference{ + ProjectId: m.ProjectID, + DatasetId: m.DatasetID, + ModelId: m.ModelID, + } +} + // Metadata fetches the metadata for a model, which includes ML training statistics. func (m *Model) Metadata(ctx context.Context) (mm *ModelMetadata, err error) { ctx = trace.StartSpan(ctx, "cloud.google.com/go/bigquery.Model.Metadata") diff --git a/vendor/cloud.google.com/go/bigquery/nulls.go b/vendor/cloud.google.com/go/bigquery/nulls.go index bf3cb9d..6ef53d1 100644 --- a/vendor/cloud.google.com/go/bigquery/nulls.go +++ b/vendor/cloud.google.com/go/bigquery/nulls.go @@ -18,6 +18,7 @@ import ( "bytes" "encoding/json" "fmt" + "math" "reflect" "strconv" "time" @@ -25,6 +26,16 @@ import ( "cloud.google.com/go/civil" ) +var ( + jsonNull = []byte("null") + posInf = []byte(`"+Inf"`) + inf = []byte(`"Inf"`) + minusInf = []byte(`"-Inf"`) + infinity = []byte(`"Infinity"`) + minusInfinity = []byte(`"-Infinity"`) + nan = []byte(`"NaN"`) +) + // NullInt64 represents a BigQuery INT64 that may be NULL. type NullInt64 struct { Int64 int64 @@ -111,7 +122,21 @@ func (n NullDateTime) String() string { func (n NullInt64) MarshalJSON() ([]byte, error) { return nulljson(n.Valid, n.Int64) } // MarshalJSON converts the NullFloat64 to JSON. -func (n NullFloat64) MarshalJSON() ([]byte, error) { return nulljson(n.Valid, n.Float64) } +func (n NullFloat64) MarshalJSON() (b []byte, err error) { + if n.Valid { + switch { + case math.IsInf(n.Float64, 1): + return infinity, nil + case math.IsInf(n.Float64, -1): + return minusInfinity, nil + case math.IsNaN(n.Float64): + return nan, nil + default: + return json.Marshal(n.Float64) + } + } + return jsonNull, nil +} // MarshalJSON converts the NullBool to JSON. func (n NullBool) MarshalJSON() ([]byte, error) { return nulljson(n.Valid, n.Bool) } @@ -151,8 +176,6 @@ func nullstr(valid bool, v interface{}) string { return fmt.Sprint(v) } -var jsonNull = []byte("null") - func nulljson(valid bool, v interface{}) ([]byte, error) { if !valid { return jsonNull, nil @@ -181,8 +204,19 @@ func (n *NullFloat64) UnmarshalJSON(b []byte) error { n.Float64 = 0 if bytes.Equal(b, jsonNull) { return nil + } else if bytes.Equal(b, posInf) || bytes.Equal(b, inf) || bytes.Equal(b, infinity) { + n.Float64 = math.Inf(1) + n.Valid = true + return nil + } else if bytes.Equal(b, minusInf) || bytes.Equal(b, minusInfinity) { + n.Float64 = math.Inf(-1) + n.Valid = true + return nil + } else if bytes.Equal(b, nan) { + n.Float64 = math.NaN() + n.Valid = true + return nil } - if err := json.Unmarshal(b, &n.Float64); err != nil { return err } diff --git a/vendor/cloud.google.com/go/bigquery/query.go b/vendor/cloud.google.com/go/bigquery/query.go index 39c1df0..3ce018e 100644 --- a/vendor/cloud.google.com/go/bigquery/query.go +++ b/vendor/cloud.google.com/go/bigquery/query.go @@ -17,8 +17,10 @@ package bigquery import ( "context" "errors" + "fmt" "cloud.google.com/go/internal/trace" + "cloud.google.com/go/internal/uid" bq "google.golang.org/api/bigquery/v2" ) @@ -324,11 +326,104 @@ func (q *Query) newJob() (*bq.Job, error) { } // Read submits a query for execution and returns the results via a RowIterator. -// It is a shorthand for Query.Run followed by Job.Read. -func (q *Query) Read(ctx context.Context) (*RowIterator, error) { - job, err := q.Run(ctx) +// If the request can be satisfied by running using the optimized query path, it +// is used in place of the jobs.insert path as this path does not expose a job +// object. +func (q *Query) Read(ctx context.Context) (it *RowIterator, err error) { + ctx = trace.StartSpan(ctx, "cloud.google.com/go/bigquery.Query.Run") + defer func() { trace.EndSpan(ctx, err) }() + queryRequest, err := q.probeFastPath() + if err != nil { + // Any error means we fallback to the older mechanism. + job, err := q.Run(ctx) + if err != nil { + return nil, err + } + return job.Read(ctx) + } + // we have a config, run on fastPath. + resp, err := q.client.runQuery(ctx, queryRequest) if err != nil { return nil, err } - return job.Read(ctx) + // construct a minimal job for backing the row iterator. + minimalJob := &Job{ + c: q.client, + jobID: resp.JobReference.JobId, + location: resp.JobReference.Location, + projectID: resp.JobReference.ProjectId, + } + if resp.JobComplete { + rowSource := &rowSource{ + j: minimalJob, + // RowIterator can precache results from the iterator to save a lookup. + cachedRows: resp.Rows, + cachedSchema: resp.Schema, + cachedNextToken: resp.PageToken, + } + return newRowIterator(ctx, rowSource, fetchPage), nil + } + // We're on the fastPath, but we need to poll because the job is incomplete. + // Fallback to job-based Read(). + // + // (Issue 2937) In order to satisfy basic probing of the job in classic path, + // we need to supply additional config which is probed for presence, not contents. + // + minimalJob.config = &bq.JobConfiguration{ + Query: &bq.JobConfigurationQuery{}, + } + + return minimalJob.Read(ctx) +} + +// probeFastPath is used to attempt configuring a jobs.Query request based on a +// user's Query configuration. If all the options set on the job are supported on the +// faster query path, this method returns a QueryRequest suitable for execution. +func (q *Query) probeFastPath() (*bq.QueryRequest, error) { + // This is a denylist of settings which prevent us from composing an equivalent + // bq.QueryRequest due to differences between configuration parameters accepted + // by jobs.insert vs jobs.query. + if q.QueryConfig.Dst != nil || + q.QueryConfig.TableDefinitions != nil || + q.QueryConfig.CreateDisposition != "" || + q.QueryConfig.WriteDisposition != "" || + !(q.QueryConfig.Priority == "" || q.QueryConfig.Priority == InteractivePriority) || + q.QueryConfig.UseLegacySQL || + q.QueryConfig.MaxBillingTier != 0 || + q.QueryConfig.TimePartitioning != nil || + q.QueryConfig.RangePartitioning != nil || + q.QueryConfig.Clustering != nil || + q.QueryConfig.DestinationEncryptionConfig != nil || + q.QueryConfig.SchemaUpdateOptions != nil || + // User has defined the jobID generation behavior + q.JobIDConfig.JobID != "" { + return nil, fmt.Errorf("QueryConfig incompatible with fastPath") + } + pfalse := false + qRequest := &bq.QueryRequest{ + Query: q.QueryConfig.Q, + Location: q.Location, + UseLegacySql: &pfalse, + MaximumBytesBilled: q.QueryConfig.MaxBytesBilled, + RequestId: uid.NewSpace("request", nil).New(), + Labels: q.Labels, + } + if q.QueryConfig.DisableQueryCache { + qRequest.UseQueryCache = &pfalse + } + // Convert query parameters + for _, p := range q.QueryConfig.Parameters { + qp, err := p.toBQ() + if err != nil { + return nil, err + } + qRequest.QueryParameters = append(qRequest.QueryParameters, qp) + } + if q.QueryConfig.DefaultDatasetID != "" { + qRequest.DefaultDataset = &bq.DatasetReference{ + ProjectId: q.QueryConfig.DefaultProjectID, + DatasetId: q.QueryConfig.DefaultDatasetID, + } + } + return qRequest, nil } diff --git a/vendor/cloud.google.com/go/bigquery/routine.go b/vendor/cloud.google.com/go/bigquery/routine.go index c045b64..58f1a78 100644 --- a/vendor/cloud.google.com/go/bigquery/routine.go +++ b/vendor/cloud.google.com/go/bigquery/routine.go @@ -36,6 +36,14 @@ type Routine struct { c *Client } +func (r *Routine) toBQ() *bq.RoutineReference { + return &bq.RoutineReference{ + ProjectId: r.ProjectID, + DatasetId: r.DatasetID, + RoutineId: r.RoutineID, + } +} + // FullyQualifiedName returns an identifer for the routine in project.dataset.routine format. func (r *Routine) FullyQualifiedName() string { return fmt.Sprintf("%s.%s.%s", r.ProjectID, r.DatasetID, r.RoutineID) @@ -156,6 +164,11 @@ func (rm *RoutineMetadata) toBQ() (*bq.Routine, error) { r.Language = rm.Language r.RoutineType = rm.Type r.DefinitionBody = rm.Body + rt, err := rm.ReturnType.toBQ() + if err != nil { + return nil, err + } + r.ReturnType = rt var args []*bq.Argument for _, v := range rm.Arguments { diff --git a/vendor/cloud.google.com/go/bigquery/schema.go b/vendor/cloud.google.com/go/bigquery/schema.go index dc0c87e..a9a50ef 100644 --- a/vendor/cloud.google.com/go/bigquery/schema.go +++ b/vendor/cloud.google.com/go/bigquery/schema.go @@ -64,6 +64,10 @@ type FieldSchema struct { // The field data type. If Type is Record, then this field contains a nested schema, // which is described by Schema. Type FieldType + + // Annotations for enforcing column-level security constraints. + PolicyTags *PolicyTagList + // Describes the nested schema if Type is set to Record. Schema Schema } @@ -73,6 +77,7 @@ func (fs *FieldSchema) toBQ() *bq.TableFieldSchema { Description: fs.Description, Name: fs.Name, Type: string(fs.Type), + PolicyTags: fs.PolicyTags.toBQ(), } if fs.Repeated { @@ -88,6 +93,30 @@ func (fs *FieldSchema) toBQ() *bq.TableFieldSchema { return tfs } +// PolicyTagList represents the annotations on a schema column for enforcing column-level security. +// For more information, see https://cloud.google.com/bigquery/docs/column-level-security-intro +type PolicyTagList struct { + Names []string +} + +func (ptl *PolicyTagList) toBQ() *bq.TableFieldSchemaPolicyTags { + if ptl == nil { + return nil + } + return &bq.TableFieldSchemaPolicyTags{ + Names: ptl.Names, + } +} + +func bqToPolicyTagList(pt *bq.TableFieldSchemaPolicyTags) *PolicyTagList { + if pt == nil { + return nil + } + return &PolicyTagList{ + Names: pt.Names, + } +} + func (s Schema) toBQ() *bq.TableSchema { var fields []*bq.TableFieldSchema for _, f := range s { @@ -103,6 +132,7 @@ func bqToFieldSchema(tfs *bq.TableFieldSchema) *FieldSchema { Repeated: tfs.Mode == "REPEATED", Required: tfs.Mode == "REQUIRED", Type: FieldType(tfs.Type), + PolicyTags: bqToPolicyTagList(tfs.PolicyTags), } for _, f := range tfs.Fields { @@ -170,6 +200,13 @@ var ( NumericFieldType: true, GeographyFieldType: true, } + // The API will accept alias names for the types based on the Standard SQL type names. + fieldAliases = map[FieldType]FieldType{ + "BOOL": BooleanFieldType, + "FLOAT64": FloatFieldType, + "INT64": IntegerFieldType, + "STRUCT": RecordFieldType, + } ) var typeOfByteSlice = reflect.TypeOf([]byte{}) @@ -213,7 +250,7 @@ var typeOfByteSlice = reflect.TypeOf([]byte{}) // DATE NullDate // TIME NullTime // DATETIME NullDateTime -// GEOGRAPHY NullGeography +// GEOGRAPHY NullGeography // // For a nullable BYTES field, use the type []byte and tag the field "nullable" (see below). // For a nullable NUMERIC field, use the type *big.Rat and tag the field "nullable". @@ -461,6 +498,18 @@ type bigQueryJSONField struct { Type string `json:"type"` } +// validateKnownType ensures a type is known (or alias of a known type). +func validateKnownType(in FieldType) (FieldType, error) { + if _, ok := fieldTypes[in]; !ok { + // not a defined type, check aliases. + if resolved, ok := fieldAliases[in]; ok { + return resolved, nil + } + return "", fmt.Errorf("unknown field type (%v)", in) + } + return in, nil +} + // convertSchemaFromJSON generates a Schema: func convertSchemaFromJSON(fs []bigQueryJSONField) (Schema, error) { convertedSchema := Schema{} @@ -480,11 +529,11 @@ func convertSchemaFromJSON(fs []bigQueryJSONField) (Schema, error) { } // Check that the field-type (string) maps to a known FieldType: - if _, ok := fieldTypes[FieldType(f.Type)]; !ok { - return nil, fmt.Errorf("unknown field type (%v)", f.Type) + validType, err := validateKnownType(FieldType(f.Type)) + if err != nil { + return nil, err } - convertedFieldSchema.Type = FieldType(f.Type) - + convertedFieldSchema.Type = validType convertedSchema = append(convertedSchema, convertedFieldSchema) } return convertedSchema, nil diff --git a/vendor/cloud.google.com/go/bigquery/table.go b/vendor/cloud.google.com/go/bigquery/table.go index e5e2c4e..bc96922 100644 --- a/vendor/cloud.google.com/go/bigquery/table.go +++ b/vendor/cloud.google.com/go/bigquery/table.go @@ -54,7 +54,10 @@ type TableMetadata struct { // The table schema. If provided on create, ViewQuery must be empty. Schema Schema - // The query to use for a view. If provided on create, Schema must be nil. + // If non-nil, this table is a materialized view. + MaterializedView *MaterializedViewDefinition + + // The query to use for a logical view. If provided on create, Schema must be nil. ViewQuery string // Use Legacy SQL for the view query. @@ -70,7 +73,7 @@ type TableMetadata struct { // time partitioning or range partitioning can be specified. TimePartitioning *TimePartitioning - // It non-nil, the table is partitioned by integer range. Only one of + // If non-nil, the table is partitioned by integer range. Only one of // time partitioning or range partitioning can be specified. RangePartitioning *RangePartitioning @@ -164,18 +167,86 @@ type TableType string const ( // RegularTable is a regular table. RegularTable TableType = "TABLE" - // ViewTable is a table type describing that the table is view. See more - // information at https://cloud.google.com/bigquery/docs/views. + // ViewTable is a table type describing that the table is a logical view. + // See more information at https://cloud.google.com/bigquery/docs/views. ViewTable TableType = "VIEW" // ExternalTable is a table type describing that the table is an external // table (also known as a federated data source). See more information at // https://cloud.google.com/bigquery/external-data-sources. ExternalTable TableType = "EXTERNAL" + // MaterializedView represents a managed storage table that's derived from + // a base table. + MaterializedView TableType = "MATERIALIZED_VIEW" +) + +// MaterializedViewDefinition contains information for materialized views. +type MaterializedViewDefinition struct { + // EnableRefresh governs whether the derived view is updated to reflect + // changes in the base table. + EnableRefresh bool + + // LastRefreshTime reports the time, in millisecond precision, that the + // materialized view was last updated. + LastRefreshTime time.Time + + // Query contains the SQL query used to define the materialized view. + Query string + + // RefreshInterval defines the maximum frequency, in millisecond precision, + // at which this this materialized view will be refreshed. + RefreshInterval time.Duration +} + +func (mvd *MaterializedViewDefinition) toBQ() *bq.MaterializedViewDefinition { + if mvd == nil { + return nil + } + return &bq.MaterializedViewDefinition{ + EnableRefresh: mvd.EnableRefresh, + Query: mvd.Query, + LastRefreshTime: mvd.LastRefreshTime.UnixNano() / 1e6, + RefreshIntervalMs: int64(mvd.RefreshInterval) / 1e6, + // force sending the bool in all cases due to how Go handles false. + ForceSendFields: []string{"EnableRefresh"}, + } +} + +func bqToMaterializedViewDefinition(q *bq.MaterializedViewDefinition) *MaterializedViewDefinition { + if q == nil { + return nil + } + return &MaterializedViewDefinition{ + EnableRefresh: q.EnableRefresh, + Query: q.Query, + LastRefreshTime: unixMillisToTime(q.LastRefreshTime), + RefreshInterval: time.Duration(q.RefreshIntervalMs) * time.Millisecond, + } +} + +// TimePartitioningType defines the interval used to partition managed data. +type TimePartitioningType string + +const ( + // DayPartitioningType uses a day-based interval for time partitioning. + DayPartitioningType TimePartitioningType = "DAY" + + // HourPartitioningType uses an hour-based interval for time partitioning. + HourPartitioningType TimePartitioningType = "HOUR" + + // MonthPartitioningType uses a month-based interval for time partitioning. + MonthPartitioningType TimePartitioningType = "MONTH" + + // YearPartitioningType uses a year-based interval for time partitioning. + YearPartitioningType TimePartitioningType = "YEAR" ) // TimePartitioning describes the time-based date partitioning on a table. // For more information see: https://cloud.google.com/bigquery/docs/creating-partitioned-tables. type TimePartitioning struct { + // Defines the partition interval type. Supported values are "HOUR", "DAY", "MONTH", and "YEAR". + // When the interval type is not specified, default behavior is DAY. + Type TimePartitioningType + // The amount of time to keep the storage for a partition. // If the duration is empty (0), the data in the partitions do not expire. Expiration time.Duration @@ -197,8 +268,13 @@ func (p *TimePartitioning) toBQ() *bq.TimePartitioning { if p == nil { return nil } + // Treat unspecified values as DAY-based partitioning. + intervalType := DayPartitioningType + if p.Type != "" { + intervalType = p.Type + } return &bq.TimePartitioning{ - Type: "DAY", + Type: string(intervalType), ExpirationMs: int64(p.Expiration / time.Millisecond), Field: p.Field, RequirePartitionFilter: p.RequirePartitionFilter, @@ -210,6 +286,7 @@ func bqToTimePartitioning(q *bq.TimePartitioning) *TimePartitioning { return nil } return &TimePartitioning{ + Type: TimePartitioningType(q.Type), Expiration: time.Duration(q.ExpirationMs) * time.Millisecond, Field: q.Field, RequirePartitionFilter: q.RequirePartitionFilter, @@ -272,9 +349,10 @@ func (rpr *RangePartitioningRange) toBQ() *bq.RangePartitioningRange { return nil } return &bq.RangePartitioningRange{ - Start: rpr.Start, - End: rpr.End, - Interval: rpr.Interval, + Start: rpr.Start, + End: rpr.End, + Interval: rpr.Interval, + ForceSendFields: []string{"Start", "End", "Interval"}, } } @@ -413,6 +491,7 @@ func (tm *TableMetadata) toBQ() (*bq.Table, error) { } else if tm.UseLegacySQL || tm.UseStandardSQL { return nil, errors.New("bigquery: UseLegacy/StandardSQL requires ViewQuery") } + t.MaterializedView = tm.MaterializedView.toBQ() t.TimePartitioning = tm.TimePartitioning.toBQ() t.RangePartitioning = tm.RangePartitioning.toBQ() t.Clustering = tm.Clustering.toBQ() @@ -496,6 +575,9 @@ func bqToTableMetadata(t *bq.Table) (*TableMetadata, error) { EncryptionConfig: bqToEncryptionConfig(t.EncryptionConfiguration), RequirePartitionFilter: t.RequirePartitionFilter, } + if t.MaterializedView != nil { + md.MaterializedView = bqToMaterializedViewDefinition(t.MaterializedView) + } if t.Schema != nil { md.Schema = bqToSchema(t.Schema) } @@ -528,9 +610,13 @@ func (t *Table) Delete(ctx context.Context) (err error) { ctx = trace.StartSpan(ctx, "cloud.google.com/go/bigquery.Table.Delete") defer func() { trace.EndSpan(ctx, err) }() - req := t.c.bqs.Tables.Delete(t.ProjectID, t.DatasetID, t.TableID).Context(ctx) - setClientHeader(req.Header()) - return req.Do() + call := t.c.bqs.Tables.Delete(t.ProjectID, t.DatasetID, t.TableID).Context(ctx) + setClientHeader(call.Header()) + + return runWithRetry(ctx, func() (err error) { + err = call.Do() + return err + }) } // Read fetches the contents of the table. @@ -539,7 +625,7 @@ func (t *Table) Read(ctx context.Context) *RowIterator { } func (t *Table) read(ctx context.Context, pf pageFetcher) *RowIterator { - return newRowIterator(ctx, t, pf) + return newRowIterator(ctx, &rowSource{t: t}, pf) } // NeverExpire is a sentinel value used to remove a table'e expiration time. @@ -583,6 +669,10 @@ func (tm *TableMetadataToUpdate) toBQ() (*bq.Table, error) { t.FriendlyName = optional.ToString(tm.Name) forceSend("FriendlyName") } + if tm.MaterializedView != nil { + t.MaterializedView = tm.MaterializedView.toBQ() + forceSend("MaterializedView") + } if tm.Schema != nil { t.Schema = tm.Schema.toBQ() forceSend("Schema") @@ -673,6 +763,11 @@ type TableMetadataToUpdate struct { // Use Legacy SQL for the view query. UseLegacySQL optional.Bool + // MaterializedView allows changes to the underlying materialized view + // definition. When calling Update, ensure that all mutable fields of + // MaterializedViewDefinition are populated. + MaterializedView *MaterializedViewDefinition + // TimePartitioning allows modification of certain aspects of partition // configuration such as partition expiration and whether partition // filtration is required at query time. When calling Update, ensure diff --git a/vendor/cloud.google.com/go/bigquery/value.go b/vendor/cloud.google.com/go/bigquery/value.go index a7c3ed0..361341c 100644 --- a/vendor/cloud.google.com/go/bigquery/value.go +++ b/vendor/cloud.google.com/go/bigquery/value.go @@ -493,8 +493,17 @@ func setRepeated(field reflect.Value, vslice []Value, setElem setFunc) error { type ValueSaver interface { // Save returns a row to be inserted into a BigQuery table, represented // as a map from field name to Value. - // If insertID is non-empty, BigQuery will use it to de-duplicate - // insertions of this row on a best-effort basis. + // The insertID governs the best-effort deduplication feature of + // BigQuery streaming inserts. + // + // If the insertID is empty, a random insertID will be generated by + // this library to facilitate deduplication. + // + // If the insertID is set to the sentinel value NoDedupeID, an insertID + // is not sent. + // + // For all other non-empty values, BigQuery will use the provided + // value for best-effort deduplication. Save() (row map[string]Value, insertID string, err error) } @@ -502,8 +511,17 @@ type ValueSaver interface { type ValuesSaver struct { Schema Schema - // If non-empty, BigQuery will use InsertID to de-duplicate insertions - // of this row on a best-effort basis. + // InsertID governs the best-effort deduplication feature of + // BigQuery streaming inserts. + // + // If the InsertID is empty, a random insertID will be generated by + // this library to facilitate deduplication. + // + // If the InsertID is set to the sentinel value NoDedupeID, an insertID + // is not sent. + // + // For all other non-empty values, BigQuery will use the provided + // value for best-effort deduplication. InsertID string Row []Value @@ -571,8 +589,17 @@ type StructSaver struct { // Schema is optional for StructSavers that are passed to Uploader.Put. Schema Schema - // If non-empty, BigQuery will use InsertID to de-duplicate insertions - // of this row on a best-effort basis. + // InsertID governs the best-effort deduplication feature of + // BigQuery streaming inserts. + // + // If the InsertID is empty, a random InsertID will be generated by + // this library to facilitate deduplication. + // + // If the InsertID is set to the sentinel value NoDedupeID, an InsertID + // is not sent. + // + // For all other non-empty values, BigQuery will use the provided + // value for best-effort deduplication. InsertID string // Struct should be a struct or a pointer to a struct. diff --git a/vendor/cloud.google.com/go/compute/metadata/metadata.go b/vendor/cloud.google.com/go/compute/metadata/metadata.go index 1a7a4c7..545bd9d 100644 --- a/vendor/cloud.google.com/go/compute/metadata/metadata.go +++ b/vendor/cloud.google.com/go/compute/metadata/metadata.go @@ -140,7 +140,7 @@ func testOnGCE() bool { }() go func() { - addrs, err := net.LookupHost("metadata.google.internal") + addrs, err := net.DefaultResolver.LookupHost(ctx, "metadata.google.internal") if err != nil || len(addrs) == 0 { resc <- false return @@ -296,6 +296,7 @@ func (c *Client) getETag(suffix string) (value, etag string, err error) { // being stable anyway. host = metadataIP } + suffix = strings.TrimLeft(suffix, "/") u := "http://" + host + "/computeMetadata/v1/" + suffix req, err := http.NewRequest("GET", u, nil) if err != nil { diff --git a/vendor/cloud.google.com/go/doc.go b/vendor/cloud.google.com/go/doc.go index 237d845..0130d74 100644 --- a/vendor/cloud.google.com/go/doc.go +++ b/vendor/cloud.google.com/go/doc.go @@ -34,9 +34,18 @@ in this package for details. Timeouts and Cancellation -By default, all requests in sub-packages will run indefinitely, retrying on transient -errors when correctness allows. To set timeouts or arrange for cancellation, use -contexts. See the examples for details. +By default, non-streaming methods, like Create or Get, will have a default deadline applied to the +context provided at call time, unless a context deadline is already set. Streaming +methods have no default deadline and will run indefinitely. To set timeouts or +arrange for cancellation, use contexts. See the examples for details. Transient +errors will be retried when correctness allows. + +To opt out of default deadlines, set the temporary environment variable +GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE to "true" prior to client +creation. This affects all Google Cloud Go client libraries. This opt-out +mechanism will be removed in a future release. File an issue at +https://github.com/googleapis/google-cloud-go if the default deadlines +cannot work for you. Do not attempt to control the initial connection (dialing) of a service by setting a timeout on the context passed to NewClient. Dialing is non-blocking, so timeouts diff --git a/vendor/cloud.google.com/go/firestore/CHANGES.md b/vendor/cloud.google.com/go/firestore/CHANGES.md index 7122e52..3ae7aab 100644 --- a/vendor/cloud.google.com/go/firestore/CHANGES.md +++ b/vendor/cloud.google.com/go/firestore/CHANGES.md @@ -1,5 +1,14 @@ # Changes +## v1.3.0 + +- Add support for LimitToLast feature for queries. This allows + a query to return the final N results. See docs + [here](https://firebase.google.com/docs/reference/js/firebase.database.Query#limittolast). +- Add support for FieldTransformMinimum and FieldTransformMaximum. +- Add exported SetGoogleClientInfo method. +- Various updates to autogenerated clients. + ## v1.2.0 - Deprecate v1beta1 client. diff --git a/vendor/cloud.google.com/go/firestore/apiv1/doc.go b/vendor/cloud.google.com/go/firestore/apiv1/doc.go index 6b9ea76..4fc22bd 100644 --- a/vendor/cloud.google.com/go/firestore/apiv1/doc.go +++ b/vendor/cloud.google.com/go/firestore/apiv1/doc.go @@ -38,10 +38,16 @@ import ( "strings" "unicode" + "google.golang.org/api/option" "google.golang.org/grpc/metadata" ) -const versionClient = "20200325" +// For more information on implementing a client constructor hook, see +// https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors. +type clientHookParams struct{} +type clientHook func(context.Context, clientHookParams) ([]option.ClientOption, error) + +const versionClient = "20200728" func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context { out, _ := metadata.FromOutgoingContext(ctx) diff --git a/vendor/cloud.google.com/go/firestore/apiv1/firestore_client.go b/vendor/cloud.google.com/go/firestore/apiv1/firestore_client.go index d101dd7..41fe646 100644 --- a/vendor/cloud.google.com/go/firestore/apiv1/firestore_client.go +++ b/vendor/cloud.google.com/go/firestore/apiv1/firestore_client.go @@ -34,6 +34,8 @@ import ( "google.golang.org/grpc/metadata" ) +var newClientHook clientHook + // CallOptions contains the retry settings for each method of Client. type CallOptions struct { GetDocument []gax.CallOption @@ -45,9 +47,11 @@ type CallOptions struct { Commit []gax.CallOption Rollback []gax.CallOption RunQuery []gax.CallOption + PartitionQuery []gax.CallOption Write []gax.CallOption Listen []gax.CallOption ListCollectionIds []gax.CallOption + BatchWrite []gax.CallOption CreateDocument []gax.CallOption } @@ -89,7 +93,17 @@ func defaultCallOptions() *CallOptions { }) }), }, - UpdateDocument: []gax.CallOption{}, + UpdateDocument: []gax.CallOption{ + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.Unavailable, + }, gax.Backoff{ + Initial: 100 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 1.30, + }) + }), + }, DeleteDocument: []gax.CallOption{ gax.WithRetry(func() gax.Retryer { return gax.OnCodes([]codes.Code{ @@ -129,7 +143,17 @@ func defaultCallOptions() *CallOptions { }) }), }, - Commit: []gax.CallOption{}, + Commit: []gax.CallOption{ + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.Unavailable, + }, gax.Backoff{ + Initial: 100 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 1.30, + }) + }), + }, Rollback: []gax.CallOption{ gax.WithRetry(func() gax.Retryer { return gax.OnCodes([]codes.Code{ @@ -156,7 +180,8 @@ func defaultCallOptions() *CallOptions { }) }), }, - Write: []gax.CallOption{}, + PartitionQuery: []gax.CallOption{}, + Write: []gax.CallOption{}, Listen: []gax.CallOption{ gax.WithRetry(func() gax.Retryer { return gax.OnCodes([]codes.Code{ @@ -183,7 +208,29 @@ func defaultCallOptions() *CallOptions { }) }), }, - CreateDocument: []gax.CallOption{}, + BatchWrite: []gax.CallOption{ + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.Unavailable, + codes.Aborted, + }, gax.Backoff{ + Initial: 100 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 1.30, + }) + }), + }, + CreateDocument: []gax.CallOption{ + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.Unavailable, + }, gax.Backoff{ + Initial: 100 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 1.30, + }) + }), + }, } } @@ -215,7 +262,17 @@ type Client struct { // integrations with Firebase and Google Cloud Platform (GCP) accelerate // building truly serverless apps. func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { - connPool, err := gtransport.DialPool(ctx, append(defaultClientOptions(), opts...)...) + clientOpts := defaultClientOptions() + + if newClientHook != nil { + hookOpts, err := newClientHook(ctx, clientHookParams{}) + if err != nil { + return nil, err + } + clientOpts = append(clientOpts, hookOpts...) + } + + connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) if err != nil { return nil, err } @@ -225,7 +282,7 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error client: firestorepb.NewFirestoreClient(connPool), } - c.SetGoogleClientInfo() + c.setGoogleClientInfo() return c, nil } @@ -243,10 +300,10 @@ func (c *Client) Close() error { return c.connPool.Close() } -// SetGoogleClientInfo sets the name and version of the application in +// setGoogleClientInfo sets the name and version of the application in // the `x-goog-api-client` header passed on each request. Intended for // use by Google-written clients. -func (c *Client) SetGoogleClientInfo(keyval ...string) { +func (c *Client) setGoogleClientInfo(keyval ...string) { kv := append([]string{"gl-go", versionGo()}, keyval...) kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version) c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...)) @@ -424,6 +481,49 @@ func (c *Client) RunQuery(ctx context.Context, req *firestorepb.RunQueryRequest, return resp, nil } +// PartitionQuery partitions a query by returning partition cursors that can be used to run +// the query in parallel. The returned partition cursors are split points that +// can be used by RunQuery as starting/end points for the query results. +func (c *Client) PartitionQuery(ctx context.Context, req *firestorepb.PartitionQueryRequest, opts ...gax.CallOption) *CursorIterator { + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.PartitionQuery[0:len(c.CallOptions.PartitionQuery):len(c.CallOptions.PartitionQuery)], opts...) + it := &CursorIterator{} + req = proto.Clone(req).(*firestorepb.PartitionQueryRequest) + it.InternalFetch = func(pageSize int, pageToken string) ([]*firestorepb.Cursor, string, error) { + var resp *firestorepb.PartitionQueryResponse + req.PageToken = pageToken + if pageSize > math.MaxInt32 { + req.PageSize = math.MaxInt32 + } else { + req.PageSize = int32(pageSize) + } + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.PartitionQuery(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, "", err + } + + it.Response = resp + return resp.Partitions, resp.NextPageToken, nil + } + fetch := func(pageSize int, pageToken string) (string, error) { + items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) + if err != nil { + return "", err + } + it.items = append(it.items, items...) + return nextPageToken, nil + } + it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) + it.pageInfo.MaxSize = int(req.PageSize) + it.pageInfo.Token = req.PageToken + return it +} + // Write streams batches of document updates and deletes, in order. func (c *Client) Write(ctx context.Context, opts ...gax.CallOption) (firestorepb.Firestore_WriteClient, error) { ctx = insertMetadata(ctx, c.xGoogMetadata) @@ -497,6 +597,31 @@ func (c *Client) ListCollectionIds(ctx context.Context, req *firestorepb.ListCol return it } +// BatchWrite applies a batch of write operations. +// +// The BatchWrite method does not apply the write operations atomically +// and can apply them out of order. Method does not allow more than one write +// per document. Each write succeeds or fails independently. See the +// BatchWriteResponse for the success status of each write. +// +// If you require an atomically applied set of writes, use +// Commit instead. +func (c *Client) BatchWrite(ctx context.Context, req *firestorepb.BatchWriteRequest, opts ...gax.CallOption) (*firestorepb.BatchWriteResponse, error) { + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "database", url.QueryEscape(req.GetDatabase()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.BatchWrite[0:len(c.CallOptions.BatchWrite):len(c.CallOptions.BatchWrite)], opts...) + var resp *firestorepb.BatchWriteResponse + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.BatchWrite(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + // CreateDocument creates a new document. func (c *Client) CreateDocument(ctx context.Context, req *firestorepb.CreateDocumentRequest, opts ...gax.CallOption) (*firestorepb.Document, error) { md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) @@ -514,6 +639,53 @@ func (c *Client) CreateDocument(ctx context.Context, req *firestorepb.CreateDocu return resp, nil } +// CursorIterator manages a stream of *firestorepb.Cursor. +type CursorIterator struct { + items []*firestorepb.Cursor + pageInfo *iterator.PageInfo + nextFunc func() error + + // Response is the raw response for the current page. + // It must be cast to the RPC response type. + // Calling Next() or InternalFetch() updates this value. + Response interface{} + + // InternalFetch is for use by the Google Cloud Libraries only. + // It is not part of the stable interface of this package. + // + // InternalFetch returns results from a single call to the underlying RPC. + // The number of results is no greater than pageSize. + // If there are no more results, nextPageToken is empty and err is nil. + InternalFetch func(pageSize int, pageToken string) (results []*firestorepb.Cursor, nextPageToken string, err error) +} + +// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. +func (it *CursorIterator) PageInfo() *iterator.PageInfo { + return it.pageInfo +} + +// Next returns the next result. Its second return value is iterator.Done if there are no more +// results. Once Next returns Done, all subsequent calls will return Done. +func (it *CursorIterator) Next() (*firestorepb.Cursor, error) { + var item *firestorepb.Cursor + if err := it.nextFunc(); err != nil { + return item, err + } + item = it.items[0] + it.items = it.items[1:] + return item, nil +} + +func (it *CursorIterator) bufLen() int { + return len(it.items) +} + +func (it *CursorIterator) takeBuf() interface{} { + b := it.items + it.items = nil + return b +} + // DocumentIterator manages a stream of *firestorepb.Document. type DocumentIterator struct { items []*firestorepb.Document diff --git a/vendor/cloud.google.com/go/firestore/apiv1/info.go b/vendor/cloud.google.com/go/firestore/apiv1/info.go new file mode 100644 index 0000000..2aa77f6 --- /dev/null +++ b/vendor/cloud.google.com/go/firestore/apiv1/info.go @@ -0,0 +1,24 @@ +// Copyright 2020 Google LLC +// +// 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 firestore + +// SetGoogleClientInfo sets the name and version of the application in +// the `x-goog-api-client` header passed on each request. Also passes any +// provided key-value pairs. Intended for use by Google-written clients. +// +// Internal use only. +func (c *Client) SetGoogleClientInfo(keyval ...string) { + c.setGoogleClientInfo(keyval...) +} diff --git a/vendor/cloud.google.com/go/firestore/docref.go b/vendor/cloud.google.com/go/firestore/docref.go index c58302b..e9363ba 100644 --- a/vendor/cloud.google.com/go/firestore/docref.go +++ b/vendor/cloud.google.com/go/firestore/docref.go @@ -316,8 +316,8 @@ func (d *DocumentRef) fpvsToWrites(fpvs []fpv, pc *pb.Precondition) ([]*pb.Write return nil, err } transforms = append(transforms, t) - case increment: - t, err := incrementTransform(fpv.value.(increment), fpv.fieldPath) + case transform: + t, err := fieldTransform(fpv.value.(transform), fpv.fieldPath) if err != nil { return nil, err } @@ -476,12 +476,16 @@ func arrayRemoveTransform(ar arrayRemove, fp FieldPath) (*pb.DocumentTransform_F }, nil } -type increment struct { - n interface{} +type transform struct { + t *pb.DocumentTransform_FieldTransform + + // For v2 of this package, we may want to remove this field and + // return an error directly from the FieldTransformX functions. + err error } -// Increment returns a special value that can be used with Set, Create, or -// Update that tells the server to increment the field's current value +// FieldTransformIncrement returns a special value that can be used with Set, Create, or +// Update that tells the server to transform the field's current value // by the given value. // // The supported values are: @@ -492,29 +496,106 @@ type increment struct { // // If the field does not yet exist, the transformation will set the field to // the given value. -func Increment(n interface{}) increment { - return increment{n: n} +func FieldTransformIncrement(n interface{}) transform { + v, err := numericTransformValue(n) + return transform{ + t: &pb.DocumentTransform_FieldTransform{ + TransformType: &pb.DocumentTransform_FieldTransform_Increment{ + Increment: v, + }, + }, + err: err, + } +} + +// Increment is an alias for FieldTransformIncrement. +func Increment(n interface{}) transform { + return FieldTransformIncrement(n) } -func incrementTransform(ar increment, fp FieldPath) (*pb.DocumentTransform_FieldTransform, error) { - switch ar.n.(type) { +// FieldTransformMaximum returns a special value that can be used with Set, Create, or +// Update that tells the server to set the field to the maximum of the +// field's current value and the given value. +// +// The supported values are: +// +// int, int8, int16, int32, int64 +// uint8, uint16, uint32 +// float32, float64 +// +// If the field is not an integer or double, or if the field does not yet +// exist, the transformation will set the field to the given value. If a +// maximum operation is applied where the field and the input value are of +// mixed types (that is - one is an integer and one is a double) the field +// takes on the type of the larger operand. If the operands are equivalent +// (e.g. 3 and 3.0), the field does not change. 0, 0.0, and -0.0 are all zero. +// The maximum of a zero stored value and zero input value is always the +// stored value. The maximum of any numeric value x and NaN is NaN. +func FieldTransformMaximum(n interface{}) transform { + v, err := numericTransformValue(n) + return transform{ + t: &pb.DocumentTransform_FieldTransform{ + TransformType: &pb.DocumentTransform_FieldTransform_Maximum{ + Maximum: v, + }, + }, + err: err, + } +} + +// FieldTransformMinimum returns a special value that can be used with Set, Create, or +// Update that tells the server to set the field to the minimum of the +// field's current value and the given value. +// +// The supported values are: +// +// int, int8, int16, int32, int64 +// uint8, uint16, uint32 +// float32, float64 +// +// If the field is not an integer or double, or if the field does not yet +// exist, the transformation will set the field to the given value. If a +// minimum operation is applied where the field and the input value are of +// mixed types (that is - one is an integer and one is a double) the field +// takes on the type of the smaller operand. If the operands are equivalent +// (e.g. 3 and 3.0), the field does not change. 0, 0.0, and -0.0 are all zero. +// The minimum of a zero stored value and zero input value is always the +// stored value. The minimum of any numeric value x and NaN is NaN. +func FieldTransformMinimum(n interface{}) transform { + v, err := numericTransformValue(n) + return transform{ + t: &pb.DocumentTransform_FieldTransform{ + TransformType: &pb.DocumentTransform_FieldTransform_Minimum{ + Minimum: v, + }, + }, + err: err, + } +} + +func numericTransformValue(n interface{}) (*pb.Value, error) { + switch n.(type) { case int, int8, int16, int32, int64, uint8, uint16, uint32, float32, float64: default: - return nil, fmt.Errorf("unsupported type %T for Increment; supported values include int, int8, int16, int32, int64, uint8, uint16, uint32, float32, float64", ar.n) + return nil, fmt.Errorf("unsupported type %T for Increment; supported values include int, int8, int16, int32, int64, uint8, uint16, uint32, float32, float64", n) } - v, _, err := toProtoValue(reflect.ValueOf(ar.n)) + v, _, err := toProtoValue(reflect.ValueOf(n)) if err != nil { return nil, err } - return &pb.DocumentTransform_FieldTransform{ - FieldPath: fp.toServiceFieldPath(), - TransformType: &pb.DocumentTransform_FieldTransform_Increment{ - Increment: v, - }, - }, nil + return v, nil +} + +func fieldTransform(ar transform, fp FieldPath) (*pb.DocumentTransform_FieldTransform, error) { + if ar.err != nil { + return nil, ar.err + } + ft := *ar.t + ft.FieldPath = fp.toServiceFieldPath() + return &ft, nil } type sentinel int diff --git a/vendor/cloud.google.com/go/firestore/document.go b/vendor/cloud.google.com/go/firestore/document.go index ed4c724..ed664fb 100644 --- a/vendor/cloud.google.com/go/firestore/document.go +++ b/vendor/cloud.google.com/go/firestore/document.go @@ -238,8 +238,8 @@ func extractTransformsFromMap(v reflect.Value, prefix FieldPath) ([]*pb.Document return nil, err } transforms = append(transforms, t) - } else if ar, ok := mi.Interface().(increment); ok { - t, err := incrementTransform(ar, path) + } else if ar, ok := mi.Interface().(transform); ok { + t, err := fieldTransform(ar, path) if err != nil { return nil, err } diff --git a/vendor/cloud.google.com/go/firestore/go.mod b/vendor/cloud.google.com/go/firestore/go.mod index 115ca1c..0a686db 100644 --- a/vendor/cloud.google.com/go/firestore/go.mod +++ b/vendor/cloud.google.com/go/firestore/go.mod @@ -3,14 +3,12 @@ module cloud.google.com/go/firestore go 1.11 require ( - cloud.google.com/go v0.55.0 - cloud.google.com/go/pubsub v1.3.1 // indirect - github.com/golang/protobuf v1.3.5 - github.com/google/go-cmp v0.4.0 + cloud.google.com/go v0.61.0 + github.com/golang/protobuf v1.4.2 + github.com/google/go-cmp v0.5.1 github.com/googleapis/gax-go/v2 v2.0.5 - golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect - golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224 // indirect - google.golang.org/api v0.20.0 - google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b - google.golang.org/grpc v1.28.0 + golang.org/x/tools v0.0.0-20200727233628-55644ead90ce // indirect + google.golang.org/api v0.29.0 + google.golang.org/genproto v0.0.0-20200728010541-3dc8dca74b7b + google.golang.org/grpc v1.30.0 ) diff --git a/vendor/cloud.google.com/go/firestore/go.sum b/vendor/cloud.google.com/go/firestore/go.sum index 3bfac60..e133c45 100644 --- a/vendor/cloud.google.com/go/firestore/go.sum +++ b/vendor/cloud.google.com/go/firestore/go.sum @@ -14,8 +14,12 @@ cloud.google.com/go v0.53.0 h1:MZQCQQaRwOrAcuKjiHWHrgKykt4fZyuwF2dtiG3fGW8= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0 h1:3ithwDMr7/3vpAMXiH+ZQnYbuIsh+OPhUPMFC9enmn0= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.55.0 h1:eoz/lYxKSL4CNAiaUJ0ZfD1J3bfMYbU5B3rwM1C1EIU= -cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= +cloud.google.com/go v0.56.0 h1:WRz29PgAsVEyPSDHyk+0fpEkwEFyfhHn+JbksT6gIL4= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0 h1:EpMNVUorLiZIELdMZbCYX/ByTFCdoYopYAGxaGVz9ms= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.61.0 h1:NLQf5e1OMspfNT1RAHOB3ublr1TW3YTXO8OiWwVjK2U= +cloud.google.com/go v0.61.0/go.mod h1:XukKJg4Y7QsUu0Hxg3qQKUWR4VuWivmyMK2+rUyxAqw= cloud.google.com/go/bigquery v1.0.1 h1:hL+ycaJpVE9M7nLoiXb/Pn10ENE2u+oddxbD8uu0ZVU= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0 h1:sAbMqjY1PEQKZBWfbu6Y6bsupJ9c4QdHnzg/VvYTLcE= @@ -24,6 +28,9 @@ cloud.google.com/go/bigquery v1.4.0 h1:xE3CPsOgttP4ACBePh79zTKALtXwn/Edhcr16R5hM cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0 h1:K2NyuHRuv15ku6eUpe0DQk5ZykPMnSOnvuVf6IHcjaE= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0 h1:a/O/bK/vWrYGOTFtH8di4rBxMZnmkjy+Y5LxpDwo+dA= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= @@ -42,6 +49,9 @@ cloud.google.com/go/storage v1.5.0 h1:RPUcBvDeYgQFMfQu1eBMq6piD1SXmLH+vK3qjewZPu cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0 h1:UDpwYIwla4jHGzZJaEJYx1tOejbgSoNqsAfHAUYe2r8= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0 h1:86K1Gel7BQ9/WmNWn7dTKMvTLFzwtBe5FNqYbi9X35g= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -83,6 +93,16 @@ github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 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/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -92,13 +112,21 @@ github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= 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= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= @@ -121,6 +149,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 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= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -128,10 +158,13 @@ go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 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= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 h1:OeRHuibLsmZkFj773W4LcfAGsSxJgfPONhr8cmO+eLA= @@ -175,6 +208,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -186,6 +221,7 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -201,6 +237,17 @@ golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3ob golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5 h1:WQ8q63x+f/zpC8Ac1s9wLElVoHhm32p6tudrU72n1QA= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f h1:QBjCr1Fz5kw158VqdE9JfI9cJnl/ymnJWAdMuinqL7Y= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 h1:eDrdRpKgkcCqKZQwyZRyeFZgfqt37SL7Kv3tok06cKE= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= @@ -219,6 +266,7 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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= @@ -245,15 +293,24 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepx golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d h1:62ap6LNOjDU6uGmKXHJbSfciMoV+FeI1sRXx/pLDL44= -golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d h1:nc5K6ox/4lTFbMVSL9WRR81ixkcwXThoiF6yf+R9scA= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e h1:hq86ru83GdWTlfQFZGO4nZJTU4Bs2wfHl8oFHRaXsfc= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25 h1:OKbAoGs4fGM5cPLlVQLZGYkFC8OnOfgo6tt0Smf9XhM= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -300,10 +357,17 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb h1:iKlO7ROJc6SttHKlxzwGytR golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d h1:3K34ovZAOnVaUPxanr0j4ghTZTPTA0CnXvjCl+5lZqk= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200317043434-63da46f3035e h1:8ogAbHWoJTPepnVbNRqXLOpzMkl0rtRsM7crbflc4XM= -golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224 h1:azwY/v0y0K4mFHVsg5+UrTgchqALYWpqVo6vL5OmkmI= -golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4 h1:kDtqNkeBrZb8B+atrj50B5XLHpzXXqcCdZPP/ApQ5NY= +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 h1:lzLdP95xJmMpwQ6LUHwrc5V7js93hTiY7gkznu0BgmY= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88 h1:4j84u0sokprDu3IdSYHJMmou+YSLflMz8p7yAx/QI4g= +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= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200713011307-fd294ab11aed/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200727233628-55644ead90ce h1:HEwYEPqqa3/M0N2Q6IgtBaf2CaxvmRiVdAhX6LR7uE4= +golang.org/x/tools v0.0.0-20200727233628-55644ead90ce/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= @@ -325,6 +389,14 @@ google.golang.org/api v0.19.0 h1:GwFK8+l5/gdsOYKz5p6M4UK+QT8OvmHWZPJCnf+5DjA= google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0 h1:jz2KixHX7EcCPiQrySzPdnYT7DbINAypCqKZ1Z7GM40= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0 h1:J1Pl9P2lnmYFSJvgs70DKELqHNh8CNWXPbud4njEE2s= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0 h1:cG03eaksBzhfSIk7JRGctfp3lanklcOM/mTGvow7BbQ= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0 h1:jMF5hhVfMkTZwHW1SDpKq5CkgWLXOb31Foaca9Zr3oM= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0 h1:BaiDisFir8O4IJxvAabCGGkQ6yCJegNQqSVoYUNAnbk= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -332,6 +404,8 @@ google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -363,10 +437,19 @@ google.golang.org/genproto v0.0.0-20200305110556-506484158171 h1:xes2Q2k+d/+YNXV google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672 h1:jiDSspVssiikoRPFHT6pYrL+CL6/yIc3b9AuHO/4xik= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24 h1:IGPykv426z7LZSVPlaPufOyphngM4at5uZ7x5alaFvE= -google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b h1:j5eujPLMak6H9l2EM381rW9X47/HPUyESXWJW9lVSsQ= -google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940 h1:MRHtG0U6SnaUb+s+LhNE1qt1FQ1wlhqr5E4usBKC0uA= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84 h1:pSLkPbrjnPyLDYUO2VM9mDLqo2V6CFBY84lFSZAfoi4= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380 h1:xriR1EgvKfkKxIoU2uUvrMVl+H26359loFFUleSMXFo= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200711021454-869866162049/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200728010541-3dc8dca74b7b h1:FWkel6k8GbR7SbBY200Cz8tA58/KtMrfpVZwOOSjOvQ= +google.golang.org/genproto v0.0.0-20200728010541-3dc8dca74b7b/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= @@ -381,6 +464,26 @@ google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0 h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc h1:TnonUr8u3himcMY0vSh23jFOXA+cnucl1gB6EQTReBI= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -394,6 +497,7 @@ honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXe honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= diff --git a/vendor/cloud.google.com/go/firestore/query.go b/vendor/cloud.google.com/go/firestore/query.go index 41a7231..03b32b7 100644 --- a/vendor/cloud.google.com/go/firestore/query.go +++ b/vendor/cloud.google.com/go/firestore/query.go @@ -43,6 +43,7 @@ type Query struct { orders []order offset int32 limit *wrappers.Int32Value + limitToLast bool startVals, endVals []interface{} startDoc, endDoc *DocumentSnapshot startBefore, endBefore bool @@ -162,10 +163,19 @@ func (q Query) Offset(n int) Query { return q } -// Limit returns a new Query that specifies the maximum number of results to return. -// It must not be negative. +// Limit returns a new Query that specifies the maximum number of first results +// to return. It must not be negative. func (q Query) Limit(n int) Query { q.limit = &wrappers.Int32Value{Value: trunc32(n)} + q.limitToLast = false + return q +} + +// LimitToLast returns a new Query that specifies the maximum number of last +// results to return. It must not be negative. +func (q Query) LimitToLast(n int) Query { + q.limit = &wrappers.Int32Value{Value: trunc32(n)} + q.limitToLast = true return q } @@ -572,7 +582,7 @@ func trunc32(i int) int32 { // Documents returns an iterator over the query's resulting documents. func (q Query) Documents(ctx context.Context) *DocumentIterator { return &DocumentIterator{ - iter: newQueryDocumentIterator(withResourceHeader(ctx, q.c.path()), &q, nil), + iter: newQueryDocumentIterator(withResourceHeader(ctx, q.c.path()), &q, nil), q: &q, } } @@ -580,6 +590,7 @@ func (q Query) Documents(ctx context.Context) *DocumentIterator { type DocumentIterator struct { iter docIterator err error + q *Query } // Unexported interface so we can have two different kinds of DocumentIterator: one @@ -599,6 +610,9 @@ func (it *DocumentIterator) Next() (*DocumentSnapshot, error) { if it.err != nil { return nil, it.err } + if it.q.limitToLast { + return nil, errors.New("firestore: queries that include limitToLast constraints cannot be streamed. Use DocumentIterator.GetAll() instead") + } ds, err := it.iter.next() if err != nil { it.err = err @@ -622,6 +636,25 @@ func (it *DocumentIterator) Stop() { // It is not necessary to call Stop on the iterator after calling GetAll. func (it *DocumentIterator) GetAll() ([]*DocumentSnapshot, error) { defer it.Stop() + + q := it.q + limitedToLast := q.limitToLast + if q.limitToLast { + // Flip order statements before posting a request. + for i := range q.orders { + if q.orders[i].dir == Asc { + q.orders[i].dir = Desc + } else { + q.orders[i].dir = Asc + } + } + // Swap cursors. + q.startVals, q.endVals = q.endVals, q.startVals + q.startDoc, q.endDoc = q.endDoc, q.startDoc + q.startBefore, q.endBefore = q.endBefore, q.startBefore + + q.limitToLast = false + } var docs []*DocumentSnapshot for { doc, err := it.Next() @@ -633,6 +666,14 @@ func (it *DocumentIterator) GetAll() ([]*DocumentSnapshot, error) { } docs = append(docs, doc) } + if limitedToLast { + // Flip docs order before return. + for i, j := 0, len(docs)-1; i < j; { + docs[i], docs[j] = docs[j], docs[i] + i++ + j-- + } + } return docs, nil } @@ -747,7 +788,7 @@ func (it *QuerySnapshotIterator) Next() (*QuerySnapshot, error) { } return &QuerySnapshot{ Documents: &DocumentIterator{ - iter: (*btreeDocumentIterator)(btree.BeforeIndex(0)), + iter: (*btreeDocumentIterator)(btree.BeforeIndex(0)), q: &it.Query, }, Size: btree.Len(), Changes: changes, diff --git a/vendor/cloud.google.com/go/firestore/transaction.go b/vendor/cloud.google.com/go/firestore/transaction.go index e3ac314..392168c 100644 --- a/vendor/cloud.google.com/go/firestore/transaction.go +++ b/vendor/cloud.google.com/go/firestore/transaction.go @@ -228,8 +228,9 @@ func (t *Transaction) Documents(q Queryer) *DocumentIterator { t.readAfterWrite = true return &DocumentIterator{err: errReadAfterWrite} } + query := q.query() return &DocumentIterator{ - iter: newQueryDocumentIterator(t.ctx, q.query(), t.id), + iter: newQueryDocumentIterator(t.ctx, query, t.id), q: query, } } diff --git a/vendor/cloud.google.com/go/firestore/watch.go b/vendor/cloud.google.com/go/firestore/watch.go index 1e854e3..671ce9e 100644 --- a/vendor/cloud.google.com/go/firestore/watch.go +++ b/vendor/cloud.google.com/go/firestore/watch.go @@ -236,7 +236,7 @@ func (s *watchStream) handleNextMessage() bool { return false } -// Return true iff in a consistent state, or there is a permanent error. +// Return true if in a consistent state, or there is a permanent error. func (s *watchStream) handleTargetChange(tc *pb.TargetChange) bool { switch tc.TargetChangeType { case pb.TargetChange_NO_CHANGE: diff --git a/vendor/cloud.google.com/go/go.mod b/vendor/cloud.google.com/go/go.mod index 005de64..e4e2434 100644 --- a/vendor/cloud.google.com/go/go.mod +++ b/vendor/cloud.google.com/go/go.mod @@ -3,27 +3,22 @@ module cloud.google.com/go go 1.11 require ( - cloud.google.com/go/bigquery v1.4.0 - cloud.google.com/go/datastore v1.1.0 - cloud.google.com/go/pubsub v1.2.0 - cloud.google.com/go/storage v1.6.0 - github.com/golang/mock v1.4.3 - github.com/golang/protobuf v1.3.5 - github.com/google/go-cmp v0.4.0 - github.com/google/martian v2.1.0+incompatible - github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3 + cloud.google.com/go/storage v1.10.0 + github.com/golang/mock v1.4.4 + github.com/golang/protobuf v1.4.3 + github.com/google/go-cmp v0.5.4 + github.com/google/martian/v3 v3.1.0 + github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2 github.com/googleapis/gax-go/v2 v2.0.5 github.com/jstemmer/go-junit-report v0.9.1 - go.opencensus.io v0.22.3 - golang.org/x/lint v0.0.0-20200302205851-738671d3881b - golang.org/x/net v0.0.0-20200301022130-244492dfa37a - golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d - golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a // indirect - golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d // indirect - golang.org/x/text v0.3.2 - golang.org/x/tools v0.0.0-20200317043434-63da46f3035e - google.golang.org/api v0.20.0 - google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24 - google.golang.org/grpc v1.28.0 - honnef.co/go/tools v0.0.1-2020.1.3 + go.opencensus.io v0.22.5 + golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 + golang.org/x/mod v0.4.0 // indirect + golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 + golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 + golang.org/x/text v0.3.4 + golang.org/x/tools v0.0.0-20201208233053-a543418bbed2 + google.golang.org/api v0.36.0 + google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc + google.golang.org/grpc v1.34.0 ) diff --git a/vendor/cloud.google.com/go/go.sum b/vendor/cloud.google.com/go/go.sum index 8568bce..478b166 100644 --- a/vendor/cloud.google.com/go/go.sum +++ b/vendor/cloud.google.com/go/go.sum @@ -8,12 +8,23 @@ cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go/bigquery v1.0.1 h1:hL+ycaJpVE9M7nLoiXb/Pn10ENE2u+oddxbD8uu0ZVU= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0 h1:sAbMqjY1PEQKZBWfbu6Y6bsupJ9c4QdHnzg/VvYTLcE= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0 h1:xE3CPsOgttP4ACBePh79zTKALtXwn/Edhcr16R5hMWU= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0 h1:a/O/bK/vWrYGOTFtH8di4rBxMZnmkjy+Y5LxpDwo+dA= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= @@ -24,12 +35,18 @@ cloud.google.com/go/pubsub v1.1.0 h1:9/vpR43S4aJaROxqQHQ3nH9lfyKKV0dC3vOmnw8ebQQ cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0 h1:Lpy6hKgdcl7a3WGSfJIFmxmcdjSpP6OmBEfcOv1Y680= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0 h1:VV2nUM3wwLLGh9lSABFgZMjInyUbJeaRSE64WuAIQ+4= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0 h1:RPUcBvDeYgQFMfQu1eBMq6piD1SXmLH+vK3qjewZPus= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0 h1:UDpwYIwla4jHGzZJaEJYx1tOejbgSoNqsAfHAUYe2r8= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0 h1:86K1Gel7BQ9/WmNWn7dTKMvTLFzwtBe5FNqYbi9X35g= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -41,10 +58,12 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P 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/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -62,8 +81,11 @@ github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0 h1:Rd1kQnQu0Hq3qvJppYSG0HtP+f5LPPUiDswTLiEegLg= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -71,8 +93,20 @@ github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= @@ -84,17 +118,36 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0 h1:pMen7vLs8nvgEYhywH3KDWJIJTeEr2ULsVWHWYHQyBs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0 h1:wCKgOCHuUEVfsaQLpPSJb7VdYCdTVZQAuOdYm1yc/60= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57 h1:eqyIo2HjKhKe/mJzTG8n4VqvLXIOEG+SLdDqX7xGtkY= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f h1:Jnx61latede7zDD3DiiP4gmNz33uK0U5HDUaF0a/HVQ= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3 h1:SRgJV+IoxM5MKyFdlSUeNy6/ycRUF2yBAKdAQswoHUk= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99 h1:Ak8CrdlwwXwAZxzS66vgPt4U8yUZX7JwLvVR58FN5jM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2 h1:HyOHhUtuB/Ruw/L5s5pG2D0kckkN2/IzBs9OClGHnHI= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= @@ -105,6 +158,7 @@ github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= @@ -120,7 +174,11 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= 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= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= @@ -128,10 +186,15 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= 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= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4 h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -163,6 +226,8 @@ golang.org/x/lint v0.0.0-20200130185559-910be7a94367 h1:0IiAsCRByjO2QjX7ZPkw5oU9 golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -172,6 +237,10 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0 h1:8pl+sMODzuvGJkmj2W4kZihvVb5mKm8pB/X44PIQHv8= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -185,14 +254,32 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5 h1:WQ8q63x+f/zpC8Ac1s9wLElVoHhm32p6tudrU72n1QA= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f h1:QBjCr1Fz5kw158VqdE9JfI9cJnl/ymnJWAdMuinqL7Y= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 h1:lwlPPsmjDKK0J6eG6xDWd5XPehI0R024zxjDnw3esPA= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -201,6 +288,12 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 h1:Mj83v+wSRNEar42a/MQgxk9X42TdEmrOl9i+y8WbxLo= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 h1:Lm4OryKCca1vehdsWogr9N4t7NfZxLbJoc/H0w4K4S4= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -212,6 +305,10 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -233,18 +330,42 @@ golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d h1:62ap6LNOjDU6uGmKXHJbSfciMoV+FeI1sRXx/pLDL44= -golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e h1:hq86ru83GdWTlfQFZGO4nZJTU4Bs2wfHl8oFHRaXsfc= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25 h1:OKbAoGs4fGM5cPLlVQLZGYkFC8OnOfgo6tt0Smf9XhM= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f h1:Fqb3ao1hUmOR3GkUOg/Y+BadLwykBIzs5q8Ez2SbHyc= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3 h1:kzM6+9dur93BcC2kVlYl34cHU+TYZLanmpSJHVMmL64= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -279,12 +400,31 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200317043434-63da46f3035e h1:8ogAbHWoJTPepnVbNRqXLOpzMkl0rtRsM7crbflc4XM= -golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +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 h1:lzLdP95xJmMpwQ6LUHwrc5V7js93hTiY7gkznu0BgmY= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88 h1:4j84u0sokprDu3IdSYHJMmou+YSLflMz8p7yAx/QI4g= +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= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d h1:szSOL78iTCl0LF1AMjhSWJj8tIM0KixlUUnBtYXsmd8= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2 h1:vEtypaVub6UvKkiXZ2xx9QIvp9TL7sI7xp7vdi2kezA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0 h1:VGGbLNyPF7dvYHhcUGYBBGCRDDK0RRJAI6KCvo0CL+E= @@ -298,8 +438,21 @@ google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb google.golang.org/api v0.17.0 h1:0q95w+VuFtv4PAx4PZVQdBMmYbaCHbnfKaEiDIcVyag= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0 h1:jz2KixHX7EcCPiQrySzPdnYT7DbINAypCqKZ1Z7GM40= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0 h1:J1Pl9P2lnmYFSJvgs70DKELqHNh8CNWXPbud4njEE2s= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0 h1:cG03eaksBzhfSIk7JRGctfp3lanklcOM/mTGvow7BbQ= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0 h1:BaiDisFir8O4IJxvAabCGGkQ6yCJegNQqSVoYUNAnbk= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0 h1:yfrXXP61wVuLb0vBcG6qaOoIoqYEzOQS8jum51jkv2w= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0 h1:TBCmTTxUrRDA1iTctnK/fIeitxIZ+TQuaf0j29fmCGo= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0 h1:l2Nfbl2GPXdWorv+dT2XfinX2jOOw4zv1VhLstx+6rE= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -309,6 +462,10 @@ google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -331,8 +488,26 @@ google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24 h1:IGPykv426z7LZSVPlaPufOyphngM4at5uZ7x5alaFvE= -google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84 h1:pSLkPbrjnPyLDYUO2VM9mDLqo2V6CFBY84lFSZAfoi4= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380 h1:xriR1EgvKfkKxIoU2uUvrMVl+H26359loFFUleSMXFo= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c h1:Lq4llNryJoaVFRmvrIwC/ZHH7tNt4tUYIu8+se2aayY= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc h1:BgQmMjmd7K1zov8j8lYULHW0WnmBGUIMp6+VDwlGErc= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1 h1:Hz2g2wirWK7H0qIIhGIqRGTuMwTE8HEKFnDZZ7lm9NU= @@ -346,8 +521,34 @@ google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0 h1:T7P4R73V3SSDPhH7WW7ATbfViLtmamH0DKrP3f9AuDI= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0 h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc h1:TnonUr8u3himcMY0vSh23jFOXA+cnucl1gB6EQTReBI= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -364,6 +565,7 @@ honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXe honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= diff --git a/vendor/cloud.google.com/go/internal/.repo-metadata-full.json b/vendor/cloud.google.com/go/internal/.repo-metadata-full.json index 54107e1..4870766 100644 --- a/vendor/cloud.google.com/go/internal/.repo-metadata-full.json +++ b/vendor/cloud.google.com/go/internal/.repo-metadata-full.json @@ -1,4 +1,44 @@ { + "cloud.google.com/go/accessapproval/apiv1": { + "distribution_name": "cloud.google.com/go/accessapproval/apiv1", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/accessapproval/apiv1", + "release_level": "beta" + }, + "cloud.google.com/go/analytics/admin/apiv1alpha": { + "distribution_name": "cloud.google.com/go/analytics/admin/apiv1alpha", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/analytics/admin/apiv1alpha", + "release_level": "alpha" + }, + "cloud.google.com/go/analytics/data/apiv1alpha": { + "distribution_name": "cloud.google.com/go/analytics/data/apiv1alpha", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/analytics/data/apiv1alpha", + "release_level": "alpha" + }, + "cloud.google.com/go/area120/tables/apiv1alpha1": { + "distribution_name": "cloud.google.com/go/area120/tables/apiv1alpha1", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/area120/tables/apiv1alpha1", + "release_level": "alpha" + }, + "cloud.google.com/go/artifactregistry/apiv1beta2": { + "distribution_name": "cloud.google.com/go/artifactregistry/apiv1beta2", + "description": "Artifact Registry API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/artifactregistry/apiv1beta2", + "release_level": "beta" + }, "cloud.google.com/go/asset/apiv1": { "distribution_name": "cloud.google.com/go/asset/apiv1", "description": "Cloud Asset API", @@ -23,6 +63,22 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/asset/apiv1p2beta1", "release_level": "beta" }, + "cloud.google.com/go/asset/apiv1p5beta1": { + "distribution_name": "cloud.google.com/go/asset/apiv1p5beta1", + "description": "Cloud Asset API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/asset/apiv1p5beta1", + "release_level": "beta" + }, + "cloud.google.com/go/assuredworkloads/apiv1beta1": { + "distribution_name": "cloud.google.com/go/assuredworkloads/apiv1beta1", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/assuredworkloads/apiv1beta1", + "release_level": "beta" + }, "cloud.google.com/go/automl/apiv1": { "distribution_name": "cloud.google.com/go/automl/apiv1", "description": "Cloud AutoML API", @@ -47,6 +103,22 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/bigquery", "release_level": "ga" }, + "cloud.google.com/go/bigquery/connection/apiv1": { + "distribution_name": "cloud.google.com/go/bigquery/connection/apiv1", + "description": "BigQuery Connection API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/bigquery/connection/apiv1", + "release_level": "ga" + }, + "cloud.google.com/go/bigquery/connection/apiv1beta1": { + "distribution_name": "cloud.google.com/go/bigquery/connection/apiv1beta1", + "description": "BigQuery Connection API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/bigquery/connection/apiv1beta1", + "release_level": "beta" + }, "cloud.google.com/go/bigquery/datatransfer/apiv1": { "distribution_name": "cloud.google.com/go/bigquery/datatransfer/apiv1", "description": "BigQuery Data Transfer API", @@ -55,13 +127,21 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/bigquery/datatransfer/apiv1", "release_level": "ga" }, + "cloud.google.com/go/bigquery/reservation/apiv1": { + "distribution_name": "cloud.google.com/go/bigquery/reservation/apiv1", + "description": "BigQuery Reservation API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/bigquery/reservation/apiv1", + "release_level": "ga" + }, "cloud.google.com/go/bigquery/reservation/apiv1beta1": { "distribution_name": "cloud.google.com/go/bigquery/reservation/apiv1beta1", "description": "BigQuery Reservation API", "language": "Go", "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/bigquery/reservation/apiv1beta1", - "release_level": "alpha" + "release_level": "beta" }, "cloud.google.com/go/bigquery/storage/apiv1": { "distribution_name": "cloud.google.com/go/bigquery/storage/apiv1", @@ -69,7 +149,7 @@ "language": "Go", "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/bigquery/storage/apiv1", - "release_level": "alpha" + "release_level": "ga" }, "cloud.google.com/go/bigquery/storage/apiv1alpha2": { "distribution_name": "cloud.google.com/go/bigquery/storage/apiv1alpha2", @@ -109,6 +189,22 @@ "language": "Go", "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/billing/apiv1", + "release_level": "ga" + }, + "cloud.google.com/go/billing/budgets/apiv1": { + "distribution_name": "cloud.google.com/go/billing/budgets/apiv1", + "description": "Cloud Billing Budget API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/billing/budgets/apiv1", + "release_level": "beta" + }, + "cloud.google.com/go/billing/budgets/apiv1beta1": { + "distribution_name": "cloud.google.com/go/billing/budgets/apiv1beta1", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/billing/budgets/apiv1beta1", "release_level": "beta" }, "cloud.google.com/go/cloudbuild/apiv1/v2": { @@ -159,6 +255,14 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/containeranalysis/apiv1beta1", "release_level": "beta" }, + "cloud.google.com/go/datacatalog/apiv1": { + "distribution_name": "cloud.google.com/go/datacatalog/apiv1", + "description": "Google Cloud Data Catalog API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/datacatalog/apiv1", + "release_level": "ga" + }, "cloud.google.com/go/datacatalog/apiv1beta1": { "distribution_name": "cloud.google.com/go/datacatalog/apiv1beta1", "description": "Google Cloud Data Catalog API", @@ -191,6 +295,14 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/datastore", "release_level": "ga" }, + "cloud.google.com/go/datastore/admin/apiv1": { + "distribution_name": "cloud.google.com/go/datastore/admin/apiv1", + "description": "Cloud Datastore API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/datastore/admin/apiv1", + "release_level": "alpha" + }, "cloud.google.com/go/debugger/apiv2": { "distribution_name": "cloud.google.com/go/debugger/apiv2", "description": "Stackdriver Debugger API", @@ -207,6 +319,14 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/dialogflow/apiv2", "release_level": "ga" }, + "cloud.google.com/go/dialogflow/cx/apiv3beta1": { + "distribution_name": "cloud.google.com/go/dialogflow/cx/apiv3beta1", + "description": "Dialogflow API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/dialogflow/cx/apiv3beta1", + "release_level": "beta" + }, "cloud.google.com/go/dlp/apiv2": { "distribution_name": "cloud.google.com/go/dlp/apiv2", "description": "Cloud Data Loss Prevention (DLP) API", @@ -217,7 +337,7 @@ }, "cloud.google.com/go/errorreporting": { "distribution_name": "cloud.google.com/go/errorreporting", - "description": "Stackdriver Error Reporting API", + "description": "Cloud Error Reporting API", "language": "Go", "client_library_type": "manual", "docs_url": "https://pkg.go.dev/cloud.google.com/go/errorreporting", @@ -225,20 +345,12 @@ }, "cloud.google.com/go/errorreporting/apiv1beta1": { "distribution_name": "cloud.google.com/go/errorreporting/apiv1beta1", - "description": "Stackdriver Error Reporting API", + "description": "Cloud Error Reporting API", "language": "Go", "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/errorreporting/apiv1beta1", "release_level": "beta" }, - "cloud.google.com/go/expr/apiv1alpha1": { - "distribution_name": "cloud.google.com/go/expr/apiv1alpha1", - "description": "Common Expression Language", - "language": "Go", - "client_library_type": "generated", - "docs_url": "https://pkg.go.dev/cloud.google.com/go/expr/apiv1alpha1", - "release_level": "alpha" - }, "cloud.google.com/go/firestore": { "distribution_name": "cloud.google.com/go/firestore", "description": "Cloud Firestore API", @@ -263,12 +375,28 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/firestore/apiv1/admin", "release_level": "ga" }, - "cloud.google.com/go/firestore/apiv1beta1": { - "distribution_name": "cloud.google.com/go/firestore/apiv1beta1", - "description": "Cloud Firestore API", + "cloud.google.com/go/functions/apiv1": { + "distribution_name": "cloud.google.com/go/functions/apiv1", + "description": "", "language": "Go", "client_library_type": "generated", - "docs_url": "https://pkg.go.dev/cloud.google.com/go/firestore/apiv1beta1", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/functions/apiv1", + "release_level": "ga" + }, + "cloud.google.com/go/gaming/apiv1": { + "distribution_name": "cloud.google.com/go/gaming/apiv1", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/gaming/apiv1", + "release_level": "ga" + }, + "cloud.google.com/go/gaming/apiv1beta": { + "distribution_name": "cloud.google.com/go/gaming/apiv1beta", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/gaming/apiv1beta", "release_level": "beta" }, "cloud.google.com/go/iam": { @@ -295,14 +423,6 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/iot/apiv1", "release_level": "ga" }, - "cloud.google.com/go/irm/apiv1alpha2": { - "distribution_name": "cloud.google.com/go/irm/apiv1alpha2", - "description": "Stackdriver Incident Response \u0026 Management API", - "language": "Go", - "client_library_type": "generated", - "docs_url": "https://pkg.go.dev/cloud.google.com/go/irm/apiv1alpha2", - "release_level": "alpha" - }, "cloud.google.com/go/kms/apiv1": { "distribution_name": "cloud.google.com/go/kms/apiv1", "description": "Cloud Key Management Service (KMS) API", @@ -329,7 +449,7 @@ }, "cloud.google.com/go/logging": { "distribution_name": "cloud.google.com/go/logging", - "description": "Stackdriver Logging API", + "description": "Cloud Logging API", "language": "Go", "client_library_type": "manual", "docs_url": "https://pkg.go.dev/cloud.google.com/go/logging", @@ -337,7 +457,7 @@ }, "cloud.google.com/go/logging/apiv2": { "distribution_name": "cloud.google.com/go/logging/apiv2", - "description": "Stackdriver Logging API", + "description": "Cloud Logging API", "language": "Go", "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/logging/apiv2", @@ -351,6 +471,14 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/longrunning/autogen", "release_level": "alpha" }, + "cloud.google.com/go/managedidentities/apiv1": { + "distribution_name": "cloud.google.com/go/managedidentities/apiv1", + "description": "Managed Service for Microsoft Active Directory API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/managedidentities/apiv1", + "release_level": "beta" + }, "cloud.google.com/go/memcache/apiv1beta2": { "distribution_name": "cloud.google.com/go/memcache/apiv1beta2", "description": "Cloud Memorystore for Memcached API", @@ -359,12 +487,36 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/memcache/apiv1beta2", "release_level": "beta" }, - "cloud.google.com/go/monitoring/apiv3": { - "distribution_name": "cloud.google.com/go/monitoring/apiv3", - "description": "Stackdriver Monitoring API", + "cloud.google.com/go/monitoring/apiv3/v2": { + "distribution_name": "cloud.google.com/go/monitoring/apiv3/v2", + "description": "Cloud Monitoring API", "language": "Go", "client_library_type": "generated", - "docs_url": "https://pkg.go.dev/cloud.google.com/go/monitoring/apiv3", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/monitoring/apiv3/v2", + "release_level": "ga" + }, + "cloud.google.com/go/monitoring/dashboard/apiv1": { + "distribution_name": "cloud.google.com/go/monitoring/dashboard/apiv1", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/monitoring/dashboard/apiv1", + "release_level": "ga" + }, + "cloud.google.com/go/notebooks/apiv1beta1": { + "distribution_name": "cloud.google.com/go/notebooks/apiv1beta1", + "description": "Notebooks API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/notebooks/apiv1beta1", + "release_level": "beta" + }, + "cloud.google.com/go/osconfig/agentendpoint/apiv1": { + "distribution_name": "cloud.google.com/go/osconfig/agentendpoint/apiv1", + "description": "OS Config API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/osconfig/agentendpoint/apiv1", "release_level": "ga" }, "cloud.google.com/go/osconfig/agentendpoint/apiv1beta": { @@ -375,6 +527,14 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/osconfig/agentendpoint/apiv1beta", "release_level": "beta" }, + "cloud.google.com/go/osconfig/apiv1": { + "distribution_name": "cloud.google.com/go/osconfig/apiv1", + "description": "OS Config API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/osconfig/apiv1", + "release_level": "ga" + }, "cloud.google.com/go/osconfig/apiv1beta": { "distribution_name": "cloud.google.com/go/osconfig/apiv1beta", "description": "Cloud OS Config API", @@ -407,6 +567,22 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/phishingprotection/apiv1beta1", "release_level": "beta" }, + "cloud.google.com/go/policytroubleshooter/apiv1": { + "distribution_name": "cloud.google.com/go/policytroubleshooter/apiv1", + "description": "Policy Troubleshooter API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/policytroubleshooter/apiv1", + "release_level": "ga" + }, + "cloud.google.com/go/profiler": { + "distribution_name": "cloud.google.com/go/profiler", + "description": "Cloud Profiler", + "language": "Go", + "client_library_type": "manual", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/profiler", + "release_level": "ga" + }, "cloud.google.com/go/pubsub": { "distribution_name": "cloud.google.com/go/pubsub", "description": "Cloud PubSub", @@ -423,6 +599,22 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/pubsub/apiv1", "release_level": "ga" }, + "cloud.google.com/go/pubsublite/apiv1": { + "distribution_name": "cloud.google.com/go/pubsublite/apiv1", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/pubsublite/apiv1", + "release_level": "beta" + }, + "cloud.google.com/go/recaptchaenterprise/apiv1": { + "distribution_name": "cloud.google.com/go/recaptchaenterprise/apiv1", + "description": "reCAPTCHA Enterprise API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/recaptchaenterprise/apiv1", + "release_level": "ga" + }, "cloud.google.com/go/recaptchaenterprise/apiv1beta1": { "distribution_name": "cloud.google.com/go/recaptchaenterprise/apiv1beta1", "description": "reCAPTCHA Enterprise API", @@ -437,7 +629,7 @@ "language": "Go", "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/recommender/apiv1", - "release_level": "alpha" + "release_level": "ga" }, "cloud.google.com/go/recommender/apiv1beta1": { "distribution_name": "cloud.google.com/go/recommender/apiv1beta1", @@ -493,7 +685,7 @@ "language": "Go", "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/secretmanager/apiv1", - "release_level": "beta" + "release_level": "ga" }, "cloud.google.com/go/secretmanager/apiv1beta1": { "distribution_name": "cloud.google.com/go/secretmanager/apiv1beta1", @@ -503,9 +695,17 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/secretmanager/apiv1beta1", "release_level": "beta" }, + "cloud.google.com/go/security/privateca/apiv1beta1": { + "distribution_name": "cloud.google.com/go/security/privateca/apiv1beta1", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/security/privateca/apiv1beta1", + "release_level": "beta" + }, "cloud.google.com/go/securitycenter/apiv1": { "distribution_name": "cloud.google.com/go/securitycenter/apiv1", - "description": "Cloud Security Command Center API", + "description": "Security Command Center API", "language": "Go", "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/securitycenter/apiv1", @@ -513,7 +713,7 @@ }, "cloud.google.com/go/securitycenter/apiv1beta1": { "distribution_name": "cloud.google.com/go/securitycenter/apiv1beta1", - "description": "Cloud Security Command Center API", + "description": "Security Command Center API", "language": "Go", "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/securitycenter/apiv1beta1", @@ -521,12 +721,28 @@ }, "cloud.google.com/go/securitycenter/apiv1p1beta1": { "distribution_name": "cloud.google.com/go/securitycenter/apiv1p1beta1", - "description": "Cloud Security Command Center API", + "description": "Security Command Center API", "language": "Go", "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/securitycenter/apiv1p1beta1", "release_level": "beta" }, + "cloud.google.com/go/securitycenter/settings/apiv1beta1": { + "distribution_name": "cloud.google.com/go/securitycenter/settings/apiv1beta1", + "description": "Cloud Security Command Center API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/securitycenter/settings/apiv1beta1", + "release_level": "beta" + }, + "cloud.google.com/go/servicedirectory/apiv1": { + "distribution_name": "cloud.google.com/go/servicedirectory/apiv1", + "description": "Service Directory API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/servicedirectory/apiv1", + "release_level": "beta" + }, "cloud.google.com/go/servicedirectory/apiv1beta1": { "distribution_name": "cloud.google.com/go/servicedirectory/apiv1beta1", "description": "Service Directory API", @@ -591,6 +807,14 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/storage", "release_level": "ga" }, + "cloud.google.com/go/talent/apiv4": { + "distribution_name": "cloud.google.com/go/talent/apiv4", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/talent/apiv4", + "release_level": "beta" + }, "cloud.google.com/go/talent/apiv4beta1": { "distribution_name": "cloud.google.com/go/talent/apiv4beta1", "description": "Cloud Talent Solution API", @@ -639,6 +863,14 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/translate/apiv3", "release_level": "ga" }, + "cloud.google.com/go/video/transcoder/apiv1beta1": { + "distribution_name": "cloud.google.com/go/video/transcoder/apiv1beta1", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/video/transcoder/apiv1beta1", + "release_level": "beta" + }, "cloud.google.com/go/videointelligence/apiv1": { "distribution_name": "cloud.google.com/go/videointelligence/apiv1", "description": "Cloud Video Intelligence API", @@ -671,6 +903,14 @@ "docs_url": "https://pkg.go.dev/cloud.google.com/go/vision/apiv1p1beta1", "release_level": "beta" }, + "cloud.google.com/go/webrisk/apiv1": { + "distribution_name": "cloud.google.com/go/webrisk/apiv1", + "description": "Web Risk API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/webrisk/apiv1", + "release_level": "ga" + }, "cloud.google.com/go/webrisk/apiv1beta1": { "distribution_name": "cloud.google.com/go/webrisk/apiv1beta1", "description": "Web Risk API", @@ -678,5 +918,29 @@ "client_library_type": "generated", "docs_url": "https://pkg.go.dev/cloud.google.com/go/webrisk/apiv1beta1", "release_level": "beta" + }, + "cloud.google.com/go/websecurityscanner/apiv1": { + "distribution_name": "cloud.google.com/go/websecurityscanner/apiv1", + "description": "Web Security Scanner API", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/websecurityscanner/apiv1", + "release_level": "beta" + }, + "cloud.google.com/go/workflows/apiv1beta": { + "distribution_name": "cloud.google.com/go/workflows/apiv1beta", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/workflows/apiv1beta", + "release_level": "beta" + }, + "cloud.google.com/go/workflows/executions/apiv1beta": { + "distribution_name": "cloud.google.com/go/workflows/executions/apiv1beta", + "description": "", + "language": "Go", + "client_library_type": "generated", + "docs_url": "https://pkg.go.dev/cloud.google.com/go/workflows/executions/apiv1beta", + "release_level": "beta" } } diff --git a/vendor/cloud.google.com/go/internal/uid/uid.go b/vendor/cloud.google.com/go/internal/uid/uid.go new file mode 100644 index 0000000..2f229d6 --- /dev/null +++ b/vendor/cloud.google.com/go/internal/uid/uid.go @@ -0,0 +1,149 @@ +// Copyright 2017 Google LLC +// +// 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 uid supports generating unique IDs. Its chief purpose is to prevent +// multiple test executions from interfering with each other, and to facilitate +// cleanup of old entities that may remain if tests exit early. +package uid + +import ( + "fmt" + "regexp" + "strconv" + "sync/atomic" + "time" +) + +// A Space manages a set of unique IDs distinguished by a prefix. +type Space struct { + Prefix string // Prefix of UIDs. Read-only. + Sep rune // Separates UID parts. Read-only. + Time time.Time // Timestamp for UIDs. Read-only. + re *regexp.Regexp + count int32 // atomic + short bool +} + +// Options are optional values for a Space. +type Options struct { + Sep rune // Separates parts of the UID. Defaults to '-'. + Time time.Time // Timestamp for all UIDs made with this space. Defaults to current time. + + // Short, if true, makes the result of space.New shorter by 6 characters. + // This can be useful for character restricted IDs. It will use a shorter + // but less readable time representation, and will only use two characters + // for the count suffix instead of four. + // + // e.x. normal: gotest-20181030-59751273685000-0001 + // e.x. short: gotest-1540917351273685000-01 + Short bool +} + +// NewSpace creates a new UID space. A UID Space is used to generate unique IDs. +func NewSpace(prefix string, opts *Options) *Space { + var short bool + sep := '-' + tm := time.Now().UTC() + if opts != nil { + short = opts.Short + if opts.Sep != 0 { + sep = opts.Sep + } + if !opts.Time.IsZero() { + tm = opts.Time + } + } + var re string + + if short { + re = fmt.Sprintf(`^%s%[2]c(\d+)%[2]c\d+$`, regexp.QuoteMeta(prefix), sep) + } else { + re = fmt.Sprintf(`^%s%[2]c(\d{4})(\d{2})(\d{2})%[2]c(\d+)%[2]c\d+$`, + regexp.QuoteMeta(prefix), sep) + } + + return &Space{ + Prefix: prefix, + Sep: sep, + Time: tm, + re: regexp.MustCompile(re), + short: short, + } +} + +// New generates a new unique ID. The ID consists of the Space's prefix, a +// timestamp, and a counter value. All unique IDs generated in the same test +// execution will have the same timestamp. +// +// Aside from the characters in the prefix, IDs contain only letters, numbers +// and sep. +func (s *Space) New() string { + c := atomic.AddInt32(&s.count, 1) + + if s.short && c > 99 { + // Short spaces only have space for 99 IDs. (two characters) + panic("Short space called New more than 99 times. Ran out of IDs.") + } else if c > 9999 { + // Spaces only have space for 9999 IDs. (four characters) + panic("New called more than 9999 times. Ran out of IDs.") + } + + if s.short { + return fmt.Sprintf("%s%c%d%c%02d", s.Prefix, s.Sep, s.Time.UnixNano(), s.Sep, c) + } + + // Write the time as a date followed by nanoseconds from midnight of that date. + // That makes it easier to see the approximate time of the ID when it is displayed. + y, m, d := s.Time.Date() + ns := s.Time.Sub(time.Date(y, m, d, 0, 0, 0, 0, time.UTC)) + // Zero-pad the counter for lexical sort order for IDs with the same timestamp. + return fmt.Sprintf("%s%c%04d%02d%02d%c%d%c%04d", + s.Prefix, s.Sep, y, m, d, s.Sep, ns, s.Sep, c) +} + +// Timestamp extracts the timestamp of uid, which must have been generated by +// s. The second return value is true on success, false if there was a problem. +func (s *Space) Timestamp(uid string) (time.Time, bool) { + subs := s.re.FindStringSubmatch(uid) + if subs == nil { + return time.Time{}, false + } + + if s.short { + ns, err := strconv.ParseInt(subs[1], 10, 64) + if err != nil { + return time.Time{}, false + } + return time.Unix(ns/1e9, ns%1e9), true + } + + y, err1 := strconv.Atoi(subs[1]) + m, err2 := strconv.Atoi(subs[2]) + d, err3 := strconv.Atoi(subs[3]) + ns, err4 := strconv.Atoi(subs[4]) + if err1 != nil || err2 != nil || err3 != nil || err4 != nil { + return time.Time{}, false + } + return time.Date(y, time.Month(m), d, 0, 0, 0, ns, time.UTC), true +} + +// Older reports whether uid was created by m and has a timestamp older than +// the current time by at least d. +func (s *Space) Older(uid string, d time.Duration) bool { + ts, ok := s.Timestamp(uid) + if !ok { + return false + } + return time.Since(ts) > d +} diff --git a/vendor/cloud.google.com/go/internal/version/version.go b/vendor/cloud.google.com/go/internal/version/version.go index 4a60935..fd9dd91 100644 --- a/vendor/cloud.google.com/go/internal/version/version.go +++ b/vendor/cloud.google.com/go/internal/version/version.go @@ -26,7 +26,7 @@ import ( // Repo is the current version of the client libraries in this // repo. It should be a date in YYYYMMDD format. -const Repo = "20200316" +const Repo = "20201104" // Go returns the Go runtime version. The returned string // has no whitespace. diff --git a/vendor/cloud.google.com/go/profiler/heap.go b/vendor/cloud.google.com/go/profiler/heap.go new file mode 100644 index 0000000..704e72e --- /dev/null +++ b/vendor/cloud.google.com/go/profiler/heap.go @@ -0,0 +1,116 @@ +// Copyright 2018 Google LLC +// +// 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 profiler + +import ( + "bytes" + "context" + "fmt" + "runtime" + "time" + + "github.com/google/pprof/profile" +) + +// heapProfile collects an in-use heap profile. The heap profiles returned by +// the runtime also include the heap allocation metrics. We zero those out +// since all allocations since program start are recorded, so these make the +// profile large and there is a separate alloc profile type which shows +// allocations from a set duration. +func heapProfile(prof *bytes.Buffer) error { + p, err := goHeapProfile() + if err != nil { + return err + } + for _, s := range p.Sample { + s.Value[0] = 0 + s.Value[1] = 0 + } + + // Merge profile with itself to remove samples with only zero values and + // reduce profile size. + p, err = profile.Merge([]*profile.Profile{p}) + if err != nil { + return err + } + return p.Write(prof) +} + +// deltaAllocProfile collects an allocation profile by gathering a heap profile, +// sleeping for the specified duration, gathering another heap profile and +// subtracting the initial one from that. It then drops the in-use metrics from +// the profile. If requested, it forces the GC before taking each of the heap +// profiles, which improves the profile accuracy (see docs in +// https://golang.org/src/runtime/mprof.go on why). +func deltaAllocProfile(ctx context.Context, duration time.Duration, forceGC bool, prof *bytes.Buffer) error { + p1, err := allocProfile(forceGC) + if err != nil { + return err + } + + sleep(ctx, duration) + + p2, err := allocProfile(forceGC) + if err != nil { + return err + } + + p1.Scale(-1) + p, err := profile.Merge([]*profile.Profile{p1, p2}) + if err != nil { + return err + } + p.DurationNanos = duration.Nanoseconds() + return p.Write(prof) +} + +// allocProfile collects a single heap profile, and removes all metrics but +// allocation metrics. +func allocProfile(forceGC bool) (*profile.Profile, error) { + if forceGC { + runtime.GC() + } + p, err := goHeapProfile() + if err != nil { + return nil, err + } + p.SampleType = p.SampleType[:2] + for _, s := range p.Sample { + s.Value = s.Value[:2] + } + return p, nil +} + +// goHeapProfile collects a heap profile. It returns an error if the metrics +// in the collected heap profile do not match the expected metrics. +func goHeapProfile() (*profile.Profile, error) { + var prof bytes.Buffer + if err := writeHeapProfile(&prof); err != nil { + return nil, fmt.Errorf("failed to write heap profile: %v", err) + } + p, err := profile.Parse(&prof) + if err != nil { + return nil, err + } + if got := len(p.SampleType); got != 4 { + return nil, fmt.Errorf("invalid heap profile: got %d sample types, want 4", got) + } + for i, want := range []string{"alloc_objects", "alloc_space", "inuse_objects", "inuse_space"} { + if got := p.SampleType[i].Type; got != want { + return nil, fmt.Errorf("invalid heap profile: got %q sample type at index %d, want %q", got, i, want) + } + } + return p, nil +} diff --git a/vendor/cloud.google.com/go/profiler/mutex.go b/vendor/cloud.google.com/go/profiler/mutex.go new file mode 100644 index 0000000..c432adb --- /dev/null +++ b/vendor/cloud.google.com/go/profiler/mutex.go @@ -0,0 +1,23 @@ +// Copyright 2017 Google LLC +// +// 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 profiler + +import "runtime" + +func enableMutexProfiling() bool { + // One percent of mutex contention events are profiled. + runtime.SetMutexProfileFraction(100) + return true +} diff --git a/vendor/cloud.google.com/go/profiler/profiler.go b/vendor/cloud.google.com/go/profiler/profiler.go new file mode 100644 index 0000000..fdcfc2d --- /dev/null +++ b/vendor/cloud.google.com/go/profiler/profiler.go @@ -0,0 +1,614 @@ +// Copyright 2017 Google LLC +// +// 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 profiler is a client for the Cloud Profiler service. +// +// Usage example: +// +// import "cloud.google.com/go/profiler" +// ... +// if err := profiler.Start(profiler.Config{Service: "my-service"}); err != nil { +// // TODO: Handle error. +// } +// +// Calling Start will start a goroutine to collect profiles and upload to +// the profiler server, at the rhythm specified by the server. +// +// The caller must provide the service string in the config, and may provide +// other information as well. See Config for details. +// +// Profiler has CPU, heap and goroutine profiling enabled by default. Mutex +// profiling can be enabled in the config. Note that goroutine and mutex +// profiles are shown as "threads" and "contention" profiles in the profiler +// UI. +package profiler + +import ( + "bytes" + "context" + "errors" + "fmt" + "log" + "os" + "regexp" + "runtime" + "runtime/pprof" + "sync" + "time" + + gcemd "cloud.google.com/go/compute/metadata" + "cloud.google.com/go/internal/version" + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes" + "github.com/google/pprof/profile" + gax "github.com/googleapis/gax-go/v2" + "google.golang.org/api/option" + gtransport "google.golang.org/api/transport/grpc" + pb "google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2" + edpb "google.golang.org/genproto/googleapis/rpc/errdetails" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + grpcmd "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +var ( + config Config + startOnce allowUntilSuccess + mutexEnabled bool + // The functions below are stubbed to be overrideable for testing. + getProjectID = gcemd.ProjectID + getInstanceName = gcemd.InstanceName + getZone = gcemd.Zone + startCPUProfile = pprof.StartCPUProfile + stopCPUProfile = pprof.StopCPUProfile + writeHeapProfile = pprof.WriteHeapProfile + sleep = gax.Sleep + dialGRPC = gtransport.DialPool + onGCE = gcemd.OnGCE + serviceRegexp = regexp.MustCompile(`^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$`) + + // For testing only. + // When the profiling loop has exited without error and this channel is + // non-nil, "true" will be sent to this channel. + profilingDone chan bool +) + +const ( + apiAddress = "cloudprofiler.googleapis.com:443" + xGoogAPIMetadata = "x-goog-api-client" + zoneNameLabel = "zone" + versionLabel = "version" + languageLabel = "language" + instanceLabel = "instance" + scope = "https://www.googleapis.com/auth/monitoring.write" + + initialBackoff = time.Minute + // Ensure the agent will recover within 1 hour. + maxBackoff = time.Hour + backoffMultiplier = 1.3 // Backoff envelope increases by this factor on each retry. + retryInfoMetadata = "google.rpc.retryinfo-bin" +) + +// Config is the profiler configuration. +type Config struct { + // Service must be provided to start the profiler. It specifies the name of + // the service under which the profiled data will be recorded and exposed at + // the Profiler UI for the project. You can specify an arbitrary string, but + // see Deployment.target at + // https://github.com/googleapis/googleapis/blob/master/google/devtools/cloudprofiler/v2/profiler.proto + // for restrictions. If the parameter is not set, the agent will probe + // GAE_SERVICE environment variable which is present in Google App Engine + // environment. + // NOTE: The string should be the same across different replicas of + // your service so that the globally constant profiling rate is + // maintained. Do not put things like PID or unique pod ID in the name. + Service string + + // ServiceVersion is an optional field specifying the version of the + // service. It can be an arbitrary string. Profiler profiles + // once per minute for each version of each service in each zone. + // ServiceVersion defaults to GAE_VERSION environment variable if that is + // set, or to empty string otherwise. + ServiceVersion string + + // DebugLogging enables detailed debug logging from profiler. It + // defaults to false. + DebugLogging bool + + // MutexProfiling enables mutex profiling. It defaults to false. + // Note that mutex profiling is not supported by Go versions older + // than Go 1.8. + MutexProfiling bool + + // When true, collecting the CPU profiles is disabled. + NoCPUProfiling bool + + // When true, collecting the allocation profiles is disabled. + NoAllocProfiling bool + + // AllocForceGC forces garbage collection before the collection of each heap + // profile collected to produce the allocation profile. This increases the + // accuracy of allocation profiling. It defaults to false. + AllocForceGC bool + + // When true, collecting the heap profiles is disabled. + NoHeapProfiling bool + + // When true, collecting the goroutine profiles is disabled. + NoGoroutineProfiling bool + + // When true, the agent sends all telemetries via OpenCensus exporter, which + // can be viewed in Cloud Trace and Cloud Monitoring. + // Default is false. + EnableOCTelemetry bool + + // ProjectID is the Cloud Console project ID to use instead of the one set by + // GOOGLE_CLOUD_PROJECT environment variable or read from the VM metadata + // server. + // + // Set this if you are running the agent in your local environment + // or anywhere else outside of Google Cloud Platform. + ProjectID string + + // APIAddr is the HTTP endpoint to use to connect to the profiler + // agent API. Defaults to the production environment, overridable + // for testing. + APIAddr string + + // Instance is the name of Compute Engine instance the profiler agent runs + // on. This is normally determined from the Compute Engine metadata server + // and doesn't need to be initialized. It needs to be set in rare cases where + // the metadata server is present but is flaky or otherwise misbehave. + Instance string + + // Zone is the zone of Compute Engine instance the profiler agent runs + // on. This is normally determined from the Compute Engine metadata server + // and doesn't need to be initialized. It needs to be set in rare cases where + // the metadata server is present but is flaky or otherwise misbehave. + Zone string + + // numProfiles is the number of profiles which should be collected before + // the profile collection loop exits.When numProfiles is 0, profiles will + // be collected for the duration of the program. For testing only. + numProfiles int +} + +// allowUntilSuccess is an object that will perform action till +// it succeeds once. +// This is a modified form of Go's sync.Once +type allowUntilSuccess struct { + m sync.Mutex + done uint32 +} + +// do calls function f only if it hasnt returned nil previously. +// Once f returns nil, do will not call function f any more. +// This is a modified form of Go's sync.Once.Do +func (o *allowUntilSuccess) do(f func() error) (err error) { + o.m.Lock() + defer o.m.Unlock() + if o.done == 0 { + if err = f(); err == nil { + o.done = 1 + } + } else { + debugLog("profiler.Start() called again after it was previously called") + err = nil + } + return err +} + +// Start starts a goroutine to collect and upload profiles. The +// caller must provide the service string in the config. See +// Config for details. Start should only be called once. Any +// additional calls will be ignored. +func Start(cfg Config, options ...option.ClientOption) error { + startError := startOnce.do(func() error { + return start(cfg, options...) + }) + return startError +} + +func start(cfg Config, options ...option.ClientOption) error { + if err := initializeConfig(cfg); err != nil { + debugLog("failed to initialize config: %v", err) + return err + } + if config.MutexProfiling { + if mutexEnabled = enableMutexProfiling(); !mutexEnabled { + return fmt.Errorf("mutex profiling is not supported by %s, requires Go 1.8 or later", runtime.Version()) + } + } + + ctx := context.Background() + + opts := []option.ClientOption{ + option.WithEndpoint(config.APIAddr), + option.WithScopes(scope), + option.WithUserAgent(fmt.Sprintf("gcloud-go-profiler/%s", version.Repo)), + } + if !config.EnableOCTelemetry { + opts = append(opts, option.WithTelemetryDisabled()) + } + opts = append(opts, options...) + + connPool, err := dialGRPC(ctx, opts...) + if err != nil { + debugLog("failed to dial GRPC: %v", err) + return err + } + + a, err := initializeAgent(pb.NewProfilerServiceClient(connPool)) + if err != nil { + debugLog("failed to start the profiling agent: %v", err) + return err + } + go pollProfilerService(withXGoogHeader(ctx), a) + return nil +} + +func debugLog(format string, e ...interface{}) { + if config.DebugLogging { + log.Printf(format, e...) + } +} + +// agent polls the profiler server for instructions on behalf of a task, +// and collects and uploads profiles as requested. +type agent struct { + client pb.ProfilerServiceClient + deployment *pb.Deployment + profileLabels map[string]string + profileTypes []pb.ProfileType +} + +// abortedBackoffDuration retrieves the retry duration from gRPC trailing +// metadata, which is set by the profiler server. +func abortedBackoffDuration(md grpcmd.MD) (time.Duration, error) { + elem := md[retryInfoMetadata] + if len(elem) <= 0 { + return 0, errors.New("no retry info") + } + + var retryInfo edpb.RetryInfo + if err := proto.Unmarshal([]byte(elem[0]), &retryInfo); err != nil { + return 0, err + } else if time, err := ptypes.Duration(retryInfo.RetryDelay); err != nil { + return 0, err + } else { + if time < 0 { + return 0, errors.New("negative retry duration") + } + return time, nil + } +} + +type retryer struct { + backoff gax.Backoff + md grpcmd.MD +} + +func (r *retryer) Retry(err error) (time.Duration, bool) { + st, _ := status.FromError(err) + if st != nil && st.Code() == codes.Aborted { + dur, err := abortedBackoffDuration(r.md) + if err == nil { + return dur, true + } + debugLog("failed to get backoff duration: %v", err) + } + return r.backoff.Pause(), true +} + +// createProfile talks to the profiler server to create profile. In +// case of error, the goroutine will sleep and retry. Sleep duration may +// be specified by the server. Otherwise it will be an exponentially +// increasing value, bounded by maxBackoff. +func (a *agent) createProfile(ctx context.Context) *pb.Profile { + req := pb.CreateProfileRequest{ + Parent: "projects/" + a.deployment.ProjectId, + Deployment: a.deployment, + ProfileType: a.profileTypes, + } + + var p *pb.Profile + md := grpcmd.New(map[string]string{}) + + gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + debugLog("creating a new profile via profiler service") + var err error + p, err = a.client.CreateProfile(ctx, &req, grpc.Trailer(&md)) + if err != nil { + debugLog("failed to create profile, will retry: %v", err) + } + return err + }, gax.WithRetry(func() gax.Retryer { + return &retryer{ + backoff: gax.Backoff{ + Initial: initialBackoff, + Max: maxBackoff, + Multiplier: backoffMultiplier, + }, + md: md, + } + })) + + debugLog("successfully created profile %v", p.GetProfileType()) + return p +} + +func (a *agent) profileAndUpload(ctx context.Context, p *pb.Profile) { + var prof bytes.Buffer + pt := p.GetProfileType() + + ptEnabled := false + for _, enabled := range a.profileTypes { + if enabled == pt { + ptEnabled = true + break + } + } + + if !ptEnabled { + debugLog("skipping collection of disabled profile type: %v", pt) + return + } + + switch pt { + case pb.ProfileType_CPU: + duration, err := ptypes.Duration(p.Duration) + if err != nil { + debugLog("failed to get profile duration for CPU profile: %v", err) + return + } + if err := startCPUProfile(&prof); err != nil { + debugLog("failed to start CPU profile: %v", err) + return + } + sleep(ctx, duration) + stopCPUProfile() + case pb.ProfileType_HEAP: + if err := heapProfile(&prof); err != nil { + debugLog("failed to write heap profile: %v", err) + return + } + case pb.ProfileType_HEAP_ALLOC: + duration, err := ptypes.Duration(p.Duration) + if err != nil { + debugLog("failed to get profile duration for allocation profile: %v", err) + return + } + if err := deltaAllocProfile(ctx, duration, config.AllocForceGC, &prof); err != nil { + debugLog("failed to collect allocation profile: %v", err) + return + } + case pb.ProfileType_THREADS: + if err := pprof.Lookup("goroutine").WriteTo(&prof, 0); err != nil { + debugLog("failed to collect goroutine profile: %v", err) + return + } + case pb.ProfileType_CONTENTION: + duration, err := ptypes.Duration(p.Duration) + if err != nil { + debugLog("failed to get profile duration: %v", err) + return + } + if err := deltaMutexProfile(ctx, duration, &prof); err != nil { + debugLog("failed to collect mutex profile: %v", err) + return + } + default: + debugLog("unexpected profile type: %v", pt) + return + } + + p.ProfileBytes = prof.Bytes() + p.Labels = a.profileLabels + req := pb.UpdateProfileRequest{Profile: p} + + // Upload profile, discard profile in case of error. + debugLog("start uploading profile") + if _, err := a.client.UpdateProfile(ctx, &req); err != nil { + debugLog("failed to upload profile: %v", err) + } +} + +// deltaMutexProfile writes mutex profile changes over a time period specified +// with 'duration' to 'prof'. +func deltaMutexProfile(ctx context.Context, duration time.Duration, prof *bytes.Buffer) error { + if !mutexEnabled { + return errors.New("mutex profiling is not enabled") + } + p0, err := mutexProfile() + if err != nil { + return err + } + sleep(ctx, duration) + p, err := mutexProfile() + if err != nil { + return err + } + + p0.Scale(-1) + p, err = profile.Merge([]*profile.Profile{p0, p}) + if err != nil { + return err + } + + return p.Write(prof) +} + +func mutexProfile() (*profile.Profile, error) { + p := pprof.Lookup("mutex") + if p == nil { + return nil, errors.New("mutex profiling is not supported") + } + var buf bytes.Buffer + if err := p.WriteTo(&buf, 0); err != nil { + return nil, err + } + return profile.Parse(&buf) +} + +// withXGoogHeader sets the name and version of the application in +// the `x-goog-api-client` header passed on each request. Intended for +// use by Google-written clients. +func withXGoogHeader(ctx context.Context, keyval ...string) context.Context { + kv := append([]string{"gl-go", version.Go(), "gccl", version.Repo}, keyval...) + kv = append(kv, "gax", gax.Version, "grpc", grpc.Version) + + md, _ := grpcmd.FromOutgoingContext(ctx) + md = md.Copy() + md[xGoogAPIMetadata] = []string{gax.XGoogHeader(kv...)} + return grpcmd.NewOutgoingContext(ctx, md) +} + +// initializeAgent initializes the profiling agent. It returns an error if +// profile collection should not be started because collection is disabled +// for all profile types. +func initializeAgent(c pb.ProfilerServiceClient) (*agent, error) { + labels := map[string]string{languageLabel: "go"} + if config.Zone != "" { + labels[zoneNameLabel] = config.Zone + } + if config.ServiceVersion != "" { + labels[versionLabel] = config.ServiceVersion + } + d := &pb.Deployment{ + ProjectId: config.ProjectID, + Target: config.Service, + Labels: labels, + } + + profileLabels := map[string]string{} + + if config.Instance != "" { + profileLabels[instanceLabel] = config.Instance + } + + var profileTypes []pb.ProfileType + if !config.NoCPUProfiling { + profileTypes = append(profileTypes, pb.ProfileType_CPU) + } + if !config.NoHeapProfiling { + profileTypes = append(profileTypes, pb.ProfileType_HEAP) + } + if !config.NoGoroutineProfiling { + profileTypes = append(profileTypes, pb.ProfileType_THREADS) + } + if !config.NoAllocProfiling { + profileTypes = append(profileTypes, pb.ProfileType_HEAP_ALLOC) + } + if mutexEnabled { + profileTypes = append(profileTypes, pb.ProfileType_CONTENTION) + } + + if len(profileTypes) == 0 { + return nil, fmt.Errorf("collection is not enabled for any profile types") + } + + return &agent{ + client: c, + deployment: d, + profileLabels: profileLabels, + profileTypes: profileTypes, + }, nil +} + +func initializeConfig(cfg Config) error { + config = cfg + + if config.Service == "" { + for _, ev := range []string{"GAE_SERVICE", "K_SERVICE"} { + if val := os.Getenv(ev); val != "" { + config.Service = val + break + } + } + } + if config.Service == "" { + return errors.New("service name must be configured") + } + if !serviceRegexp.MatchString(config.Service) { + return fmt.Errorf("service name %q does not match regular expression %v", config.Service, serviceRegexp) + } + + if config.ServiceVersion == "" { + for _, ev := range []string{"GAE_VERSION", "K_REVISION"} { + if val := os.Getenv(ev); val != "" { + config.ServiceVersion = val + break + } + } + } + + if projectID := os.Getenv("GOOGLE_CLOUD_PROJECT"); config.ProjectID == "" && projectID != "" { + // Cloud Shell and App Engine set this environment variable to the project + // ID, so use it if present. In case of App Engine the project ID is also + // available from the GCE metadata server, but by using the environment + // variable saves one request to the metadata server. The environment + // project ID is only used if no project ID is provided in the + // configuration. + config.ProjectID = projectID + } + if onGCE() { + var err error + if config.ProjectID == "" { + if config.ProjectID, err = getProjectID(); err != nil { + return fmt.Errorf("failed to get the project ID from Compute Engine metadata: %v", err) + } + } + + if config.Zone == "" { + if config.Zone, err = getZone(); err != nil { + return fmt.Errorf("failed to get zone from Compute Engine metadata: %v", err) + } + } + + if config.Instance == "" { + if config.Instance, err = getInstanceName(); err != nil { + if _, ok := err.(gcemd.NotDefinedError); !ok { + return fmt.Errorf("failed to get instance name from Compute Engine metadata: %v", err) + } + debugLog("failed to get instance name from Compute Engine metadata, will use empty name: %v", err) + } + } + } else { + if config.ProjectID == "" { + return fmt.Errorf("project ID must be specified in the configuration if running outside of GCP") + } + } + + if config.APIAddr == "" { + config.APIAddr = apiAddress + } + return nil +} + +// pollProfilerService starts an endless loop to poll the profiler +// server for instructions, and collects and uploads profiles as +// requested. +func pollProfilerService(ctx context.Context, a *agent) { + debugLog("Cloud Profiler Go Agent version: %s", version.Repo) + debugLog("profiler has started") + for i := 0; config.numProfiles == 0 || i < config.numProfiles; i++ { + p := a.createProfile(ctx) + a.profileAndUpload(ctx, p) + } + + if profilingDone != nil { + profilingDone <- true + } +} diff --git a/vendor/cloud.google.com/go/pubsub/CHANGES.md b/vendor/cloud.google.com/go/pubsub/CHANGES.md index 49de654..25a4b4b 100644 --- a/vendor/cloud.google.com/go/pubsub/CHANGES.md +++ b/vendor/cloud.google.com/go/pubsub/CHANGES.md @@ -1,5 +1,59 @@ # Changes +### [1.8.3](https://www.github.com/googleapis/google-cloud-go/compare/pubsub/v1.8.2...v1.8.3) (2020-11-10) + + +### Bug Fixes + +* **pubsub:** retry deadline exceeded errors in Acknowledge ([#3157](https://www.github.com/googleapis/google-cloud-go/issues/3157)) ([ae75b46](https://www.github.com/googleapis/google-cloud-go/commit/ae75b46033d9f14f41c1bde4b9646c93f8e2bbad)) + +## v1.8.2 + +- Fixes: + - fix(pubsub): track errors in published messages opencensus metric (#2970) + - fix(pubsub): do not propagate context deadline exceeded error (#3055) + +## v1.8.1 + +- Suppress connection is closing on error on subscriber close. (#2951) + +## v1.8.0 + +- Add status code to error injection in pstest. This is a BREAKING CHANGE. + +## v1.7.0 + +- Add reactor options to pstest server. (#2916) + +## v1.6.2 + +- Make message.Modacks thread safe in pstest. (#2755) +- Fix issue with closing publisher and subscriber client errors. (#2867) +- Fix updating subscription filtering/retry policy in pstest. (#2901) + +## v1.6.1 + +- Fix issue where EnableMessageOrdering wasn't being parsed properly to `SubscriptionConfig`. + +## v1.6.0 + +- Fix issue where subscriber streams were limited because it was using a single grpc conn. + - As a side effect, publisher and subscriber grpc conns are no longer shared. +- Add fake time function in pstest. +- Add support for server side flow control. + +## v1.5.0 + +- Add support for subscription detachment. +- Add support for message filtering in subscriptions. +- Add support for RetryPolicy (server-side feature). +- Fix publish error path when ordering key is disabled. +- Fix panic on Topic.ResumePublish method. + +## v1.4.0 + +- Add support for upcoming ordering keys feature. + ## v1.3.1 - Fix bug with removing dead letter policy from a subscription diff --git a/vendor/cloud.google.com/go/pubsub/apiv1/doc.go b/vendor/cloud.google.com/go/pubsub/apiv1/doc.go index 378e9b7..c738b77 100644 --- a/vendor/cloud.google.com/go/pubsub/apiv1/doc.go +++ b/vendor/cloud.google.com/go/pubsub/apiv1/doc.go @@ -29,19 +29,27 @@ // To close the open connection, use the Close() method. // // For information about setting deadlines, reusing contexts, and more -// please visit godoc.org/cloud.google.com/go. +// please visit pkg.go.dev/cloud.google.com/go. package pubsub // import "cloud.google.com/go/pubsub/apiv1" import ( "context" + "os" "runtime" + "strconv" "strings" "unicode" + "google.golang.org/api/option" "google.golang.org/grpc/metadata" ) -const versionClient = "20200312" +// For more information on implementing a client constructor hook, see +// https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors. +type clientHookParams struct{} +type clientHook func(context.Context, clientHookParams) ([]option.ClientOption, error) + +const versionClient = "20201110" func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context { out, _ := metadata.FromOutgoingContext(ctx) @@ -54,6 +62,16 @@ func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context { return metadata.NewOutgoingContext(ctx, out) } +func checkDisableDeadlines() (bool, error) { + raw, ok := os.LookupEnv("GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE") + if !ok { + return false, nil + } + + b, err := strconv.ParseBool(raw) + return b, err +} + // DefaultAuthScopes reports the default set of authentication scopes to use with this package. func DefaultAuthScopes() []string { return []string{ diff --git a/vendor/cloud.google.com/go/pubsub/apiv1/info.go b/vendor/cloud.google.com/go/pubsub/apiv1/info.go new file mode 100644 index 0000000..fde99d8 --- /dev/null +++ b/vendor/cloud.google.com/go/pubsub/apiv1/info.go @@ -0,0 +1,33 @@ +// Copyright 2020 Google LLC +// +// 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 pubsub + +// SetGoogleClientInfo sets the name and version of the application in +// the `x-goog-api-client` header passed on each request. Also passes any +// provided key-value pairs. Intended for use by Google-written clients. +// +// Internal use only. +func (pc *PublisherClient) SetGoogleClientInfo(keyval ...string) { + pc.setGoogleClientInfo(keyval...) +} + +// SetGoogleClientInfo sets the name and version of the application in +// the `x-goog-api-client` header passed on each request. Also passes any +// provided key-value pairs. Intended for use by Google-written clients. +// +// Internal use only. +func (sc *SubscriberClient) SetGoogleClientInfo(keyval ...string) { + sc.setGoogleClientInfo(keyval...) +} diff --git a/vendor/cloud.google.com/go/pubsub/apiv1/publisher_client.go b/vendor/cloud.google.com/go/pubsub/apiv1/publisher_client.go index 96c392f..25f9897 100644 --- a/vendor/cloud.google.com/go/pubsub/apiv1/publisher_client.go +++ b/vendor/cloud.google.com/go/pubsub/apiv1/publisher_client.go @@ -27,6 +27,7 @@ import ( gax "github.com/googleapis/gax-go/v2" "google.golang.org/api/iterator" "google.golang.org/api/option" + "google.golang.org/api/option/internaloption" gtransport "google.golang.org/api/transport/grpc" pubsubpb "google.golang.org/genproto/googleapis/pubsub/v1" "google.golang.org/grpc" @@ -34,6 +35,8 @@ import ( "google.golang.org/grpc/metadata" ) +var newPublisherClientHook clientHook + // PublisherCallOptions contains the retry settings for each method of PublisherClient. type PublisherCallOptions struct { CreateTopic []gax.CallOption @@ -44,11 +47,13 @@ type PublisherCallOptions struct { ListTopicSubscriptions []gax.CallOption ListTopicSnapshots []gax.CallOption DeleteTopic []gax.CallOption + DetachSubscription []gax.CallOption } func defaultPublisherClientOptions() []option.ClientOption { return []option.ClientOption{ - option.WithEndpoint("pubsub.googleapis.com:443"), + internaloption.WithDefaultEndpoint("pubsub.googleapis.com:443"), + internaloption.WithDefaultMTLSEndpoint("pubsub.mtls.googleapis.com:443"), option.WithGRPCDialOption(grpc.WithDisableServiceConfig()), option.WithScopes(DefaultAuthScopes()...), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( @@ -160,6 +165,17 @@ func defaultPublisherCallOptions() *PublisherCallOptions { }) }), }, + DetachSubscription: []gax.CallOption{ + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.Unavailable, + }, gax.Backoff{ + Initial: 100 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 1.30, + }) + }), + }, } } @@ -170,6 +186,9 @@ type PublisherClient struct { // Connection pool of gRPC connections to the service. connPool gtransport.ConnPool + // flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE + disableDeadlines bool + // The gRPC API client. publisherClient pubsubpb.PublisherClient @@ -185,17 +204,33 @@ type PublisherClient struct { // The service that an application uses to manipulate topics, and to send // messages to a topic. func NewPublisherClient(ctx context.Context, opts ...option.ClientOption) (*PublisherClient, error) { - connPool, err := gtransport.DialPool(ctx, append(defaultPublisherClientOptions(), opts...)...) + clientOpts := defaultPublisherClientOptions() + + if newPublisherClientHook != nil { + hookOpts, err := newPublisherClientHook(ctx, clientHookParams{}) + if err != nil { + return nil, err + } + clientOpts = append(clientOpts, hookOpts...) + } + + disableDeadlines, err := checkDisableDeadlines() + if err != nil { + return nil, err + } + + connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) if err != nil { return nil, err } c := &PublisherClient{ - connPool: connPool, - CallOptions: defaultPublisherCallOptions(), + connPool: connPool, + disableDeadlines: disableDeadlines, + CallOptions: defaultPublisherCallOptions(), publisherClient: pubsubpb.NewPublisherClient(connPool), } - c.SetGoogleClientInfo() + c.setGoogleClientInfo() return c, nil } @@ -213,19 +248,22 @@ func (c *PublisherClient) Close() error { return c.connPool.Close() } -// SetGoogleClientInfo sets the name and version of the application in +// setGoogleClientInfo sets the name and version of the application in // the `x-goog-api-client` header passed on each request. Intended for // use by Google-written clients. -func (c *PublisherClient) SetGoogleClientInfo(keyval ...string) { +func (c *PublisherClient) setGoogleClientInfo(keyval ...string) { kv := append([]string{"gl-go", versionGo()}, keyval...) kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version) c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...)) } -// CreateTopic creates the given topic with the given name. See the -// -// resource name rules (at https://cloud.google.com/pubsub/docs/admin#resource_names). +// CreateTopic creates the given topic with the given name. See the resource name rules (at https://cloud.google.com/pubsub/docs/admin#resource_names). func (c *PublisherClient) CreateTopic(ctx context.Context, req *pubsubpb.Topic, opts ...gax.CallOption) (*pubsubpb.Topic, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.CreateTopic[0:len(c.CallOptions.CreateTopic):len(c.CallOptions.CreateTopic)], opts...) @@ -244,6 +282,11 @@ func (c *PublisherClient) CreateTopic(ctx context.Context, req *pubsubpb.Topic, // UpdateTopic updates an existing topic. Note that certain properties of a // topic are not modifiable. func (c *PublisherClient) UpdateTopic(ctx context.Context, req *pubsubpb.UpdateTopicRequest, opts ...gax.CallOption) (*pubsubpb.Topic, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "topic.name", url.QueryEscape(req.GetTopic().GetName()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.UpdateTopic[0:len(c.CallOptions.UpdateTopic):len(c.CallOptions.UpdateTopic)], opts...) @@ -262,6 +305,11 @@ func (c *PublisherClient) UpdateTopic(ctx context.Context, req *pubsubpb.UpdateT // Publish adds one or more messages to the topic. Returns NOT_FOUND if the topic // does not exist. func (c *PublisherClient) Publish(ctx context.Context, req *pubsubpb.PublishRequest, opts ...gax.CallOption) (*pubsubpb.PublishResponse, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "topic", url.QueryEscape(req.GetTopic()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.Publish[0:len(c.CallOptions.Publish):len(c.CallOptions.Publish)], opts...) @@ -279,6 +327,11 @@ func (c *PublisherClient) Publish(ctx context.Context, req *pubsubpb.PublishRequ // GetTopic gets the configuration of a topic. func (c *PublisherClient) GetTopic(ctx context.Context, req *pubsubpb.GetTopicRequest, opts ...gax.CallOption) (*pubsubpb.Topic, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "topic", url.QueryEscape(req.GetTopic()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.GetTopic[0:len(c.CallOptions.GetTopic):len(c.CallOptions.GetTopic)], opts...) @@ -319,7 +372,7 @@ func (c *PublisherClient) ListTopics(ctx context.Context, req *pubsubpb.ListTopi } it.Response = resp - return resp.Topics, resp.NextPageToken, nil + return resp.GetTopics(), resp.GetNextPageToken(), nil } fetch := func(pageSize int, pageToken string) (string, error) { items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) @@ -330,12 +383,12 @@ func (c *PublisherClient) ListTopics(ctx context.Context, req *pubsubpb.ListTopi return nextPageToken, nil } it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) - it.pageInfo.MaxSize = int(req.PageSize) - it.pageInfo.Token = req.PageToken + it.pageInfo.MaxSize = int(req.GetPageSize()) + it.pageInfo.Token = req.GetPageToken() return it } -// ListTopicSubscriptions lists the names of the subscriptions on this topic. +// ListTopicSubscriptions lists the names of the attached subscriptions on this topic. func (c *PublisherClient) ListTopicSubscriptions(ctx context.Context, req *pubsubpb.ListTopicSubscriptionsRequest, opts ...gax.CallOption) *StringIterator { md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "topic", url.QueryEscape(req.GetTopic()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) @@ -360,7 +413,7 @@ func (c *PublisherClient) ListTopicSubscriptions(ctx context.Context, req *pubsu } it.Response = resp - return resp.Subscriptions, resp.NextPageToken, nil + return resp.GetSubscriptions(), resp.GetNextPageToken(), nil } fetch := func(pageSize int, pageToken string) (string, error) { items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) @@ -371,17 +424,16 @@ func (c *PublisherClient) ListTopicSubscriptions(ctx context.Context, req *pubsu return nextPageToken, nil } it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) - it.pageInfo.MaxSize = int(req.PageSize) - it.pageInfo.Token = req.PageToken + it.pageInfo.MaxSize = int(req.GetPageSize()) + it.pageInfo.Token = req.GetPageToken() return it } // ListTopicSnapshots lists the names of the snapshots on this topic. Snapshots are used in -// Seek (at https://cloud.google.com/pubsub/docs/replay-overview) -// operations, which allow -// you to manage message acknowledgments in bulk. That is, you can set the -// acknowledgment state of messages in an existing subscription to the state -// captured by a snapshot. +// Seek (at https://cloud.google.com/pubsub/docs/replay-overview) operations, +// which allow you to manage message acknowledgments in bulk. That is, you can +// set the acknowledgment state of messages in an existing subscription to the +// state captured by a snapshot. func (c *PublisherClient) ListTopicSnapshots(ctx context.Context, req *pubsubpb.ListTopicSnapshotsRequest, opts ...gax.CallOption) *StringIterator { md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "topic", url.QueryEscape(req.GetTopic()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) @@ -406,7 +458,7 @@ func (c *PublisherClient) ListTopicSnapshots(ctx context.Context, req *pubsubpb. } it.Response = resp - return resp.Snapshots, resp.NextPageToken, nil + return resp.GetSnapshots(), resp.GetNextPageToken(), nil } fetch := func(pageSize int, pageToken string) (string, error) { items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) @@ -417,8 +469,8 @@ func (c *PublisherClient) ListTopicSnapshots(ctx context.Context, req *pubsubpb. return nextPageToken, nil } it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) - it.pageInfo.MaxSize = int(req.PageSize) - it.pageInfo.Token = req.PageToken + it.pageInfo.MaxSize = int(req.GetPageSize()) + it.pageInfo.Token = req.GetPageToken() return it } @@ -428,6 +480,11 @@ func (c *PublisherClient) ListTopicSnapshots(ctx context.Context, req *pubsubpb. // configuration or subscriptions. Existing subscriptions to this topic are // not deleted, but their topic field is set to _deleted-topic_. func (c *PublisherClient) DeleteTopic(ctx context.Context, req *pubsubpb.DeleteTopicRequest, opts ...gax.CallOption) error { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "topic", url.QueryEscape(req.GetTopic()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.DeleteTopic[0:len(c.CallOptions.DeleteTopic):len(c.CallOptions.DeleteTopic)], opts...) @@ -439,6 +496,31 @@ func (c *PublisherClient) DeleteTopic(ctx context.Context, req *pubsubpb.DeleteT return err } +// DetachSubscription detaches a subscription from this topic. All messages retained in the +// subscription are dropped. Subsequent Pull and StreamingPull requests +// will return FAILED_PRECONDITION. If the subscription is a push +// subscription, pushes to the endpoint will stop. +func (c *PublisherClient) DetachSubscription(ctx context.Context, req *pubsubpb.DetachSubscriptionRequest, opts ...gax.CallOption) (*pubsubpb.DetachSubscriptionResponse, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "subscription", url.QueryEscape(req.GetSubscription()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.DetachSubscription[0:len(c.CallOptions.DetachSubscription):len(c.CallOptions.DetachSubscription)], opts...) + var resp *pubsubpb.DetachSubscriptionResponse + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.publisherClient.DetachSubscription(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + // StringIterator manages a stream of string. type StringIterator struct { items []string diff --git a/vendor/cloud.google.com/go/pubsub/apiv1/subscriber_client.go b/vendor/cloud.google.com/go/pubsub/apiv1/subscriber_client.go index 5bbf890..f0b3ae4 100644 --- a/vendor/cloud.google.com/go/pubsub/apiv1/subscriber_client.go +++ b/vendor/cloud.google.com/go/pubsub/apiv1/subscriber_client.go @@ -27,6 +27,7 @@ import ( gax "github.com/googleapis/gax-go/v2" "google.golang.org/api/iterator" "google.golang.org/api/option" + "google.golang.org/api/option/internaloption" gtransport "google.golang.org/api/transport/grpc" pubsubpb "google.golang.org/genproto/googleapis/pubsub/v1" "google.golang.org/grpc" @@ -34,6 +35,8 @@ import ( "google.golang.org/grpc/metadata" ) +var newSubscriberClientHook clientHook + // SubscriberCallOptions contains the retry settings for each method of SubscriberClient. type SubscriberCallOptions struct { CreateSubscription []gax.CallOption @@ -56,7 +59,8 @@ type SubscriberCallOptions struct { func defaultSubscriberClientOptions() []option.ClientOption { return []option.ClientOption{ - option.WithEndpoint("pubsub.googleapis.com:443"), + internaloption.WithDefaultEndpoint("pubsub.googleapis.com:443"), + internaloption.WithDefaultMTLSEndpoint("pubsub.mtls.googleapis.com:443"), option.WithGRPCDialOption(grpc.WithDisableServiceConfig()), option.WithScopes(DefaultAuthScopes()...), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( @@ -270,6 +274,9 @@ type SubscriberClient struct { // Connection pool of gRPC connections to the service. connPool gtransport.ConnPool + // flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE + disableDeadlines bool + // The gRPC API client. subscriberClient pubsubpb.SubscriberClient @@ -286,17 +293,33 @@ type SubscriberClient struct { // consume messages from a subscription via the Pull method or by // establishing a bi-directional stream using the StreamingPull method. func NewSubscriberClient(ctx context.Context, opts ...option.ClientOption) (*SubscriberClient, error) { - connPool, err := gtransport.DialPool(ctx, append(defaultSubscriberClientOptions(), opts...)...) + clientOpts := defaultSubscriberClientOptions() + + if newSubscriberClientHook != nil { + hookOpts, err := newSubscriberClientHook(ctx, clientHookParams{}) + if err != nil { + return nil, err + } + clientOpts = append(clientOpts, hookOpts...) + } + + disableDeadlines, err := checkDisableDeadlines() + if err != nil { + return nil, err + } + + connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) if err != nil { return nil, err } c := &SubscriberClient{ - connPool: connPool, - CallOptions: defaultSubscriberCallOptions(), + connPool: connPool, + disableDeadlines: disableDeadlines, + CallOptions: defaultSubscriberCallOptions(), subscriberClient: pubsubpb.NewSubscriberClient(connPool), } - c.SetGoogleClientInfo() + c.setGoogleClientInfo() return c, nil } @@ -314,29 +337,32 @@ func (c *SubscriberClient) Close() error { return c.connPool.Close() } -// SetGoogleClientInfo sets the name and version of the application in +// setGoogleClientInfo sets the name and version of the application in // the `x-goog-api-client` header passed on each request. Intended for // use by Google-written clients. -func (c *SubscriberClient) SetGoogleClientInfo(keyval ...string) { +func (c *SubscriberClient) setGoogleClientInfo(keyval ...string) { kv := append([]string{"gl-go", versionGo()}, keyval...) kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version) c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...)) } -// CreateSubscription creates a subscription to a given topic. See the -// -// resource name rules (at https://cloud.google.com/pubsub/docs/admin#resource_names). +// CreateSubscription creates a subscription to a given topic. See the [resource name rules] +// (https://cloud.google.com/pubsub/docs/admin#resource_names (at https://cloud.google.com/pubsub/docs/admin#resource_names)). // If the subscription already exists, returns ALREADY_EXISTS. // If the corresponding topic doesn’t exist, returns NOT_FOUND. // // If the name is not provided in the request, the server will assign a random // name for this subscription on the same project as the topic, conforming -// to the -// resource name -// format (at https://cloud.google.com/pubsub/docs/admin#resource_names). The -// generated name is populated in the returned Subscription object. Note that -// for REST API requests, you must specify a name in the request. +// to the [resource name format] +// (https://cloud.google.com/pubsub/docs/admin#resource_names (at https://cloud.google.com/pubsub/docs/admin#resource_names)). The generated +// name is populated in the returned Subscription object. Note that for REST +// API requests, you must specify a name in the request. func (c *SubscriberClient) CreateSubscription(ctx context.Context, req *pubsubpb.Subscription, opts ...gax.CallOption) (*pubsubpb.Subscription, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.CreateSubscription[0:len(c.CallOptions.CreateSubscription):len(c.CallOptions.CreateSubscription)], opts...) @@ -354,6 +380,11 @@ func (c *SubscriberClient) CreateSubscription(ctx context.Context, req *pubsubpb // GetSubscription gets the configuration details of a subscription. func (c *SubscriberClient) GetSubscription(ctx context.Context, req *pubsubpb.GetSubscriptionRequest, opts ...gax.CallOption) (*pubsubpb.Subscription, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "subscription", url.QueryEscape(req.GetSubscription()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.GetSubscription[0:len(c.CallOptions.GetSubscription):len(c.CallOptions.GetSubscription)], opts...) @@ -372,6 +403,11 @@ func (c *SubscriberClient) GetSubscription(ctx context.Context, req *pubsubpb.Ge // UpdateSubscription updates an existing subscription. Note that certain properties of a // subscription, such as its topic, are not modifiable. func (c *SubscriberClient) UpdateSubscription(ctx context.Context, req *pubsubpb.UpdateSubscriptionRequest, opts ...gax.CallOption) (*pubsubpb.Subscription, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "subscription.name", url.QueryEscape(req.GetSubscription().GetName()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.UpdateSubscription[0:len(c.CallOptions.UpdateSubscription):len(c.CallOptions.UpdateSubscription)], opts...) @@ -412,7 +448,7 @@ func (c *SubscriberClient) ListSubscriptions(ctx context.Context, req *pubsubpb. } it.Response = resp - return resp.Subscriptions, resp.NextPageToken, nil + return resp.GetSubscriptions(), resp.GetNextPageToken(), nil } fetch := func(pageSize int, pageToken string) (string, error) { items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) @@ -423,8 +459,8 @@ func (c *SubscriberClient) ListSubscriptions(ctx context.Context, req *pubsubpb. return nextPageToken, nil } it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) - it.pageInfo.MaxSize = int(req.PageSize) - it.pageInfo.Token = req.PageToken + it.pageInfo.MaxSize = int(req.GetPageSize()) + it.pageInfo.Token = req.GetPageToken() return it } @@ -434,6 +470,11 @@ func (c *SubscriberClient) ListSubscriptions(ctx context.Context, req *pubsubpb. // the same name, but the new one has no association with the old // subscription or its topic unless the same topic is specified. func (c *SubscriberClient) DeleteSubscription(ctx context.Context, req *pubsubpb.DeleteSubscriptionRequest, opts ...gax.CallOption) error { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "subscription", url.QueryEscape(req.GetSubscription()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.DeleteSubscription[0:len(c.CallOptions.DeleteSubscription):len(c.CallOptions.DeleteSubscription)], opts...) @@ -451,6 +492,11 @@ func (c *SubscriberClient) DeleteSubscription(ctx context.Context, req *pubsubpb // processing was interrupted. Note that this does not modify the // subscription-level ackDeadlineSeconds used for subsequent messages. func (c *SubscriberClient) ModifyAckDeadline(ctx context.Context, req *pubsubpb.ModifyAckDeadlineRequest, opts ...gax.CallOption) error { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "subscription", url.QueryEscape(req.GetSubscription()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.ModifyAckDeadline[0:len(c.CallOptions.ModifyAckDeadline):len(c.CallOptions.ModifyAckDeadline)], opts...) @@ -470,6 +516,11 @@ func (c *SubscriberClient) ModifyAckDeadline(ctx context.Context, req *pubsubpb. // but such a message may be redelivered later. Acknowledging a message more // than once will not result in an error. func (c *SubscriberClient) Acknowledge(ctx context.Context, req *pubsubpb.AcknowledgeRequest, opts ...gax.CallOption) error { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "subscription", url.QueryEscape(req.GetSubscription()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.Acknowledge[0:len(c.CallOptions.Acknowledge):len(c.CallOptions.Acknowledge)], opts...) @@ -485,6 +536,11 @@ func (c *SubscriberClient) Acknowledge(ctx context.Context, req *pubsubpb.Acknow // there are too many concurrent pull requests pending for the given // subscription. func (c *SubscriberClient) Pull(ctx context.Context, req *pubsubpb.PullRequest, opts ...gax.CallOption) (*pubsubpb.PullResponse, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "subscription", url.QueryEscape(req.GetSubscription()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.Pull[0:len(c.CallOptions.Pull):len(c.CallOptions.Pull)], opts...) @@ -529,6 +585,11 @@ func (c *SubscriberClient) StreamingPull(ctx context.Context, opts ...gax.CallOp // attributes of a push subscription. Messages will accumulate for delivery // continuously through the call regardless of changes to the PushConfig. func (c *SubscriberClient) ModifyPushConfig(ctx context.Context, req *pubsubpb.ModifyPushConfigRequest, opts ...gax.CallOption) error { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "subscription", url.QueryEscape(req.GetSubscription()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.ModifyPushConfig[0:len(c.CallOptions.ModifyPushConfig):len(c.CallOptions.ModifyPushConfig)], opts...) @@ -546,6 +607,11 @@ func (c *SubscriberClient) ModifyPushConfig(ctx context.Context, req *pubsubpb.M // is, you can set the acknowledgment state of messages in an existing // subscription to the state captured by a snapshot. func (c *SubscriberClient) GetSnapshot(ctx context.Context, req *pubsubpb.GetSnapshotRequest, opts ...gax.CallOption) (*pubsubpb.Snapshot, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "snapshot", url.QueryEscape(req.GetSnapshot()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.GetSnapshot[0:len(c.CallOptions.GetSnapshot):len(c.CallOptions.GetSnapshot)], opts...) @@ -561,12 +627,10 @@ func (c *SubscriberClient) GetSnapshot(ctx context.Context, req *pubsubpb.GetSna return resp, nil } -// ListSnapshots lists the existing snapshots. Snapshots are used in -// Seek (at https://cloud.google.com/pubsub/docs/replay-overview) -// operations, which allow -// you to manage message acknowledgments in bulk. That is, you can set the -// acknowledgment state of messages in an existing subscription to the state -// captured by a snapshot. +// ListSnapshots lists the existing snapshots. Snapshots are used in Seek (at https://cloud.google.com/pubsub/docs/replay-overview) operations, which +// allow you to manage message acknowledgments in bulk. That is, you can set +// the acknowledgment state of messages in an existing subscription to the +// state captured by a snapshot. func (c *SubscriberClient) ListSnapshots(ctx context.Context, req *pubsubpb.ListSnapshotsRequest, opts ...gax.CallOption) *SnapshotIterator { md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "project", url.QueryEscape(req.GetProject()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) @@ -591,7 +655,7 @@ func (c *SubscriberClient) ListSnapshots(ctx context.Context, req *pubsubpb.List } it.Response = resp - return resp.Snapshots, resp.NextPageToken, nil + return resp.GetSnapshots(), resp.GetNextPageToken(), nil } fetch := func(pageSize int, pageToken string) (string, error) { items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) @@ -602,19 +666,16 @@ func (c *SubscriberClient) ListSnapshots(ctx context.Context, req *pubsubpb.List return nextPageToken, nil } it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) - it.pageInfo.MaxSize = int(req.PageSize) - it.pageInfo.Token = req.PageToken + it.pageInfo.MaxSize = int(req.GetPageSize()) + it.pageInfo.Token = req.GetPageToken() return it } // CreateSnapshot creates a snapshot from the requested subscription. Snapshots are used in -// Seek (at https://cloud.google.com/pubsub/docs/replay-overview) -// operations, which allow -// you to manage message acknowledgments in bulk. That is, you can set the -// acknowledgment state of messages in an existing subscription to the state -// captured by a snapshot. -// -// +// Seek (at https://cloud.google.com/pubsub/docs/replay-overview) operations, +// which allow you to manage message acknowledgments in bulk. That is, you can +// set the acknowledgment state of messages in an existing subscription to the +// state captured by a snapshot. // If the snapshot already exists, returns ALREADY_EXISTS. // If the requested subscription doesn’t exist, returns NOT_FOUND. // If the backlog in the subscription is too old – and the resulting snapshot @@ -622,12 +683,16 @@ func (c *SubscriberClient) ListSnapshots(ctx context.Context, req *pubsubpb.List // See also the Snapshot.expire_time field. If the name is not provided in // the request, the server will assign a random // name for this snapshot on the same project as the subscription, conforming -// to the -// resource name -// format (at https://cloud.google.com/pubsub/docs/admin#resource_names). The +// to the [resource name format] +// (https://cloud.google.com/pubsub/docs/admin#resource_names (at https://cloud.google.com/pubsub/docs/admin#resource_names)). The // generated name is populated in the returned Snapshot object. Note that for // REST API requests, you must specify a name in the request. func (c *SubscriberClient) CreateSnapshot(ctx context.Context, req *pubsubpb.CreateSnapshotRequest, opts ...gax.CallOption) (*pubsubpb.Snapshot, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.CreateSnapshot[0:len(c.CallOptions.CreateSnapshot):len(c.CallOptions.CreateSnapshot)], opts...) @@ -650,6 +715,11 @@ func (c *SubscriberClient) CreateSnapshot(ctx context.Context, req *pubsubpb.Cre // acknowledgment state of messages in an existing subscription to the state // captured by a snapshot. func (c *SubscriberClient) UpdateSnapshot(ctx context.Context, req *pubsubpb.UpdateSnapshotRequest, opts ...gax.CallOption) (*pubsubpb.Snapshot, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "snapshot.name", url.QueryEscape(req.GetSnapshot().GetName()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.UpdateSnapshot[0:len(c.CallOptions.UpdateSnapshot):len(c.CallOptions.UpdateSnapshot)], opts...) @@ -665,19 +735,21 @@ func (c *SubscriberClient) UpdateSnapshot(ctx context.Context, req *pubsubpb.Upd return resp, nil } -// DeleteSnapshot removes an existing snapshot. Snapshots are used in -// Seek (at https://cloud.google.com/pubsub/docs/replay-overview) -// operations, which allow -// you to manage message acknowledgments in bulk. That is, you can set the -// acknowledgment state of messages in an existing subscription to the state -// captured by a snapshot. -// -// +// DeleteSnapshot removes an existing snapshot. Snapshots are used in [Seek] +// (https://cloud.google.com/pubsub/docs/replay-overview (at https://cloud.google.com/pubsub/docs/replay-overview)) operations, which +// allow you to manage message acknowledgments in bulk. That is, you can set +// the acknowledgment state of messages in an existing subscription to the +// state captured by a snapshot. // When the snapshot is deleted, all messages retained in the snapshot // are immediately dropped. After a snapshot is deleted, a new one may be // created with the same name, but the new one has no association with the old // snapshot or its subscription, unless the same subscription is specified. func (c *SubscriberClient) DeleteSnapshot(ctx context.Context, req *pubsubpb.DeleteSnapshotRequest, opts ...gax.CallOption) error { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "snapshot", url.QueryEscape(req.GetSnapshot()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.DeleteSnapshot[0:len(c.CallOptions.DeleteSnapshot):len(c.CallOptions.DeleteSnapshot)], opts...) @@ -690,14 +762,17 @@ func (c *SubscriberClient) DeleteSnapshot(ctx context.Context, req *pubsubpb.Del } // Seek seeks an existing subscription to a point in time or to a given snapshot, -// whichever is provided in the request. Snapshots are used in -// Seek (at https://cloud.google.com/pubsub/docs/replay-overview) -// operations, which allow -// you to manage message acknowledgments in bulk. That is, you can set the -// acknowledgment state of messages in an existing subscription to the state -// captured by a snapshot. Note that both the subscription and the snapshot -// must be on the same topic. +// whichever is provided in the request. Snapshots are used in Seek (at https://cloud.google.com/pubsub/docs/replay-overview) operations, which +// allow you to manage message acknowledgments in bulk. That is, you can set +// the acknowledgment state of messages in an existing subscription to the +// state captured by a snapshot. Note that both the subscription and the +// snapshot must be on the same topic. func (c *SubscriberClient) Seek(ctx context.Context, req *pubsubpb.SeekRequest, opts ...gax.CallOption) (*pubsubpb.SeekResponse, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "subscription", url.QueryEscape(req.GetSubscription()))) ctx = insertMetadata(ctx, c.xGoogMetadata, md) opts = append(c.CallOptions.Seek[0:len(c.CallOptions.Seek):len(c.CallOptions.Seek)], opts...) diff --git a/vendor/cloud.google.com/go/pubsub/go.mod b/vendor/cloud.google.com/go/pubsub/go.mod index 3417dd9..75c2f10 100644 --- a/vendor/cloud.google.com/go/pubsub/go.mod +++ b/vendor/cloud.google.com/go/pubsub/go.mod @@ -3,17 +3,16 @@ module cloud.google.com/go/pubsub go 1.11 require ( - cloud.google.com/go v0.54.0 - cloud.google.com/go/bigquery v1.5.0 // indirect - github.com/golang/protobuf v1.3.4 - github.com/google/go-cmp v0.4.0 + cloud.google.com/go v0.71.0 + github.com/golang/protobuf v1.4.3 + github.com/google/go-cmp v0.5.2 github.com/googleapis/gax-go/v2 v2.0.5 - go.opencensus.io v0.22.3 - golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d - golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e - golang.org/x/time v0.0.0-20191024005414-555d28b269f0 - golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d // indirect - google.golang.org/api v0.20.0 - google.golang.org/genproto v0.0.0-20200312145019-da6875a35672 - google.golang.org/grpc v1.28.0 + go.opencensus.io v0.22.5 + golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 + golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 + golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e + golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd // indirect + google.golang.org/api v0.35.0 + google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb + google.golang.org/grpc v1.33.2 ) diff --git a/vendor/cloud.google.com/go/pubsub/go.sum b/vendor/cloud.google.com/go/pubsub/go.sum index 5befa33..eb3337e 100644 --- a/vendor/cloud.google.com/go/pubsub/go.sum +++ b/vendor/cloud.google.com/go/pubsub/go.sum @@ -3,39 +3,44 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1 h1:lRi0CHyU+ytlvylOlFKKq0af6JncuyoRh1J+QJBqQx0= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3 h1:AVXDdKsrtX33oR9fbCMu/+c1o8Ofjq6Ku/MInaLVg5Y= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0 h1:0E3eE8MX426vUOs7aHfI7aN1BrIzzzf4ccKCSfSjGmc= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0 h1:GGslhk/BU052LPlnI1vpp3fcbUs+hQ3E+Doti/3/vF8= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0 h1:MZQCQQaRwOrAcuKjiHWHrgKykt4fZyuwF2dtiG3fGW8= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0 h1:3ithwDMr7/3vpAMXiH+ZQnYbuIsh+OPhUPMFC9enmn0= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go/bigquery v1.0.1 h1:hL+ycaJpVE9M7nLoiXb/Pn10ENE2u+oddxbD8uu0ZVU= +cloud.google.com/go v0.56.0 h1:WRz29PgAsVEyPSDHyk+0fpEkwEFyfhHn+JbksT6gIL4= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0 h1:EpMNVUorLiZIELdMZbCYX/ByTFCdoYopYAGxaGVz9ms= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0 h1:RmDygqvj27Zf3fCQjQRtLyC7KwFcHkeJitcO0OoGOcA= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.71.0 h1:2ha722Z08cmRa0orJrzBaszYQcLbLFcsZHsGSj/kIF4= +cloud.google.com/go v0.71.0/go.mod h1:qZfY4Y7AEIQwG/fQYD3xrxLNkQZ0Xzf3HGeqCkA6LVM= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0 h1:sAbMqjY1PEQKZBWfbu6Y6bsupJ9c4QdHnzg/VvYTLcE= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0 h1:xE3CPsOgttP4ACBePh79zTKALtXwn/Edhcr16R5hMWU= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0 h1:K2NyuHRuv15ku6eUpe0DQk5ZykPMnSOnvuVf6IHcjaE= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= +cloud.google.com/go/bigquery v1.7.0 h1:a/O/bK/vWrYGOTFtH8di4rBxMZnmkjy+Y5LxpDwo+dA= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/storage v1.0.0 h1:VV2nUM3wwLLGh9lSABFgZMjInyUbJeaRSE64WuAIQ+4= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0 h1:RPUcBvDeYgQFMfQu1eBMq6piD1SXmLH+vK3qjewZPus= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0 h1:UDpwYIwla4jHGzZJaEJYx1tOejbgSoNqsAfHAUYe2r8= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0 h1:86K1Gel7BQ9/WmNWn7dTKMvTLFzwtBe5FNqYbi9X35g= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -54,10 +59,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -66,39 +69,63 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 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/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= 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/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/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 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= @@ -111,34 +138,33 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +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= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= 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 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 h1:OeRHuibLsmZkFj773W4LcfAGsSxJgfPONhr8cmO+eLA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979 h1:Agxu5KLo8o7Bb634SVDnhIfpTvxmzUwhbYAzBvXt6h4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587 h1:5Uz0rkjCFu9BC9gCRN7EkwVvhNyQgGWb8KNJrPwBoHY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299 h1:zQpM52jfKHG6II1ISZY1ZcpygvuSFZpLwfluuF89XOg= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a h1:7Wlg8L54In96HTWOaI4sreLJ6qfyGuvSau5el3fK41Y= golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd h1:zkO/Lhoka23X63N9OSzpSeROEUQ5ODw47tM3YWjygbs= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 h1:QE6XYQK6naiK1EPAe1g/ILLxN5RBoH5xkJk3CqlMI/Y= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -146,14 +172,10 @@ golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTk golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422 h1:QzoH/1pFpZguR8NrRHLcO6jKqfv2zpuSqZLgdm7ZmjI= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac h1:8R1esu+8QioDxo4E4mX6bFztO+dMTM49DNAaWfO5OeY= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367 h1:0IiAsCRByjO2QjX7ZPkw5oU9x+n1YqRL802rjC0c3Aw= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= @@ -161,11 +183,12 @@ golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -175,37 +198,55 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0 h1:MsuvTghUPjX762sGLnGsxC3HM0B5r83wEtYcYR8/vRs= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5 h1:WQ8q63x+f/zpC8Ac1s9wLElVoHhm32p6tudrU72n1QA= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f h1:QBjCr1Fz5kw158VqdE9JfI9cJnl/ymnJWAdMuinqL7Y= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 h1:eDrdRpKgkcCqKZQwyZRyeFZgfqt37SL7Kv3tok06cKE= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201026091529-146b70c837a4 h1:awiuzyrRjJDb+OXi9ceHO3SDxVoN3JER57mhtqkdQBs= +golang.org/x/net v0.0.0-20201026091529-146b70c837a4/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 h1:pE8b58s1HRDMi8RDc79m0HISf9D4TzseP40cEA6IGfs= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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= @@ -213,34 +254,47 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8 h1:JA8d3MPx/IToSyXZG/RhwYEtfrKO1Fxrqe8KrkiLXKM= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1 h1:gZpLHxUX5BdYLA08Lj4YCJNN/jk7KtquiArPoeX0WvA= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 h1:sfkvUWPNGwSV+8/fNqctR5lS2AqCSqYwXdrjCxp/dXo= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d h1:nc5K6ox/4lTFbMVSL9WRR81ixkcwXThoiF6yf+R9scA= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e h1:hq86ru83GdWTlfQFZGO4nZJTU4Bs2wfHl8oFHRaXsfc= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25 h1:OKbAoGs4fGM5cPLlVQLZGYkFC8OnOfgo6tt0Smf9XhM= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f h1:Fqb3ao1hUmOR3GkUOg/Y+BadLwykBIzs5q8Ez2SbHyc= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -252,10 +306,8 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0 h1:Dh6fw+p6FyRl5x/FvNswO1ji0lIGzm3KP8Y9VkS9PTE= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff h1:On1qIo75ByTwFJ4/W2bIqHcwJ9XAqtSWUs8GwRrIhtc= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -264,110 +316,138 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4 h1:Toz2IK7k8rbltAXwNAxKcn9OzqyNfMUhUNjz3sL0NMk= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c h1:2EA2K0k9bcvvEDlqD8xdlOhCOqq+O/p9Voqi4x9W1YU= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a h1:7YaEqUc1tUg0yDwvdX+3U5bwrBg7u3FFAZ5D8gUs4/c= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56 h1:DFtSed2q3HtNuVazwVDZ4nSRS/JrZEig0gz2BY4VNrg= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2 h1:L/G4KZvrQn7FWLN/LlulBtBzrLUhqjiGfTWWDmrh+IQ= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d h1:7M9AXzLrJWWGdDYtBblPHBTnHtaN6KKQ98OYb35mLlY= golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb h1:iKlO7ROJc6SttHKlxzwGytRtBUqX4VARrNTgP2YLX5M= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d h1:3K34ovZAOnVaUPxanr0j4ghTZTPTA0CnXvjCl+5lZqk= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4 h1:kDtqNkeBrZb8B+atrj50B5XLHpzXXqcCdZPP/ApQ5NY= +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 h1:lzLdP95xJmMpwQ6LUHwrc5V7js93hTiY7gkznu0BgmY= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88 h1:4j84u0sokprDu3IdSYHJMmou+YSLflMz8p7yAx/QI4g= +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= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d h1:szSOL78iTCl0LF1AMjhSWJj8tIM0KixlUUnBtYXsmd8= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201030143252-cf7a54d06671 h1:8ylPbtgKXakJwDQKPjMJ6BSnlEIFViV0tYnu5/1Omk8= +golang.org/x/tools v0.0.0-20201030143252-cf7a54d06671/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd h1:kJP9fbfkpUoA4y03Nxor8be+YbShcXP16fc7G4nlgpw= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0 h1:yzlyyDW/J0w8yNFJIhiAJy4kq74S+1DOLdawELNxFMA= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0 h1:0q95w+VuFtv4PAx4PZVQdBMmYbaCHbnfKaEiDIcVyag= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0 h1:TgDr+1inK2XVUKZx3BYAqQg/GwucGdBkzZjWaTg/I+A= google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0 h1:GwFK8+l5/gdsOYKz5p6M4UK+QT8OvmHWZPJCnf+5DjA= google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0 h1:jz2KixHX7EcCPiQrySzPdnYT7DbINAypCqKZ1Z7GM40= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.34.0 h1:k40adF3uR+6x/+hO5Dh4ZFUqFp67vxvbpafFiJxl10A= +google.golang.org/api v0.34.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.35.0 h1:TBCmTTxUrRDA1iTctnK/fIeitxIZ+TQuaf0j29fmCGo= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51 h1:Ex1mq5jaJof+kRnYi3SlYJ8KKa9Ao3NHyIT5XJ1gF6U= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb h1:ADPHZzpzM4tk4V4S5cnCrr5SwzvlrPRmqqCuJDB8UTs= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba h1:pRj9OXZbwNtbtZtOB4dLwfK4u+EVRMvP+e9zKkg2grM= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150 h1:VPpdpQkGvFicX9yo4G5oxZPi9ALBnEOZblPSa/Wa2m4= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce h1:1mbrb1tUU+Zmt5C94IGKADBTJZjZXAd+BubWi7r9EiI= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63 h1:YzfoEYWbODU5Fbt37+h7X16BWQbad7Q4S6gclTKFXM8= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383 h1:Vo0fD5w0fUKriWlZLyrim2GXbumyN0D6euW79T9PgEE= google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171 h1:xes2Q2k+d/+YNXVw0FpZkIDJiaux4OVrRKXRAzH6A0U= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672 h1:jiDSspVssiikoRPFHT6pYrL+CL6/yIc3b9AuHO/4xik= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201030142918-24207fddd1c3/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb h1:MoNcrN5yaH+35Ge8RUwFbL7ekwq9ED2fiDpgWKrR29w= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1 h1:DGeFlSan2f+WEtCERJ4J9GJWk15TxUi8QGagfI87Xyc= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a h1:LJwr7TCTghdatWv40WobzlKXc9c4s8oGa7QKJUtHhWA= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= diff --git a/vendor/cloud.google.com/go/pubsub/internal/scheduler/publish_scheduler.go b/vendor/cloud.google.com/go/pubsub/internal/scheduler/publish_scheduler.go new file mode 100644 index 0000000..7d70b92 --- /dev/null +++ b/vendor/cloud.google.com/go/pubsub/internal/scheduler/publish_scheduler.go @@ -0,0 +1,186 @@ +// Copyright 2019 Google LLC +// +// 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 scheduler + +import ( + "errors" + "reflect" + "sync" + "time" + + "google.golang.org/api/support/bundler" +) + +// PublishScheduler is a scheduler which is designed for Pub/Sub's Publish flow. +// It bundles items before handling them. All items in this PublishScheduler use +// the same handler. +// +// Each item is added with a given key. Items added to the empty string key are +// handled in random order. Items added to any other key are handled +// sequentially. +type PublishScheduler struct { + // Settings passed down to each bundler that gets created. + DelayThreshold time.Duration + BundleCountThreshold int + BundleByteThreshold int + BundleByteLimit int + BufferedByteLimit int + + mu sync.Mutex + bundlers map[string]*bundler.Bundler + outstanding map[string]int + + keysMu sync.RWMutex + // keysWithErrors tracks ordering keys that cannot accept new messages. + // A bundler might not accept new messages if publishing has failed + // for a specific ordering key, and can be resumed with topic.ResumePublish(). + keysWithErrors map[string]struct{} + + // workers is a channel that represents workers. Rather than a pool, where + // worker are "removed" until the pool is empty, the channel is more like a + // set of work desks, where workers are "added" until all the desks are full. + // + // workers does not restrict the amount of goroutines in the bundlers. + // Rather, it acts as the flow control for completion of bundler work. + workers chan struct{} + handle func(bundle interface{}) + done chan struct{} +} + +// NewPublishScheduler returns a new PublishScheduler. +// +// The workers arg is the number of workers that will operate on the queue of +// work. A reasonably large number of workers is highly recommended. If the +// workers arg is 0, then a healthy default of 10 workers is used. +// +// The scheduler does not use a parent context. If it did, canceling that +// context would immediately stop the scheduler without waiting for +// undelivered messages. +// +// The scheduler should be stopped only with FlushAndStop. +func NewPublishScheduler(workers int, handle func(bundle interface{})) *PublishScheduler { + if workers == 0 { + workers = 10 + } + + s := PublishScheduler{ + bundlers: make(map[string]*bundler.Bundler), + outstanding: make(map[string]int), + keysWithErrors: make(map[string]struct{}), + workers: make(chan struct{}, workers), + handle: handle, + done: make(chan struct{}), + } + + return &s +} + +// Add adds an item to the scheduler at a given key. +// +// Add never blocks. Buffering happens in the scheduler's publishers. There is +// no flow control. +// +// Since ordered keys require only a single outstanding RPC at once, it is +// possible to send ordered key messages to Topic.Publish (and subsequently to +// PublishScheduler.Add) faster than the bundler can publish them to the +// Pub/Sub service, resulting in a backed up queue of Pub/Sub bundles. Each +// item in the bundler queue is a goroutine. +func (s *PublishScheduler) Add(key string, item interface{}, size int) error { + select { + case <-s.done: + return errors.New("draining") + default: + } + + s.mu.Lock() + defer s.mu.Unlock() + b, ok := s.bundlers[key] + if !ok { + s.outstanding[key] = 1 + b = bundler.NewBundler(item, func(bundle interface{}) { + s.workers <- struct{}{} + s.handle(bundle) + <-s.workers + + nlen := reflect.ValueOf(bundle).Len() + s.mu.Lock() + s.outstanding[key] -= nlen + if s.outstanding[key] == 0 { + delete(s.outstanding, key) + delete(s.bundlers, key) + } + s.mu.Unlock() + }) + b.DelayThreshold = s.DelayThreshold + b.BundleCountThreshold = s.BundleCountThreshold + b.BundleByteThreshold = s.BundleByteThreshold + b.BundleByteLimit = s.BundleByteLimit + b.BufferedByteLimit = s.BufferedByteLimit + + if b.BufferedByteLimit == 0 { + b.BufferedByteLimit = 1e9 + } + + if key == "" { + // There's no way to express "unlimited" in the bundler, so we use + // some high number. + b.HandlerLimit = 1e9 + } else { + // HandlerLimit=1 causes the bundler to act as a sequential queue. + b.HandlerLimit = 1 + } + + s.bundlers[key] = b + } + s.outstanding[key]++ + return b.Add(item, size) +} + +// FlushAndStop begins flushing items from bundlers and from the scheduler. It +// blocks until all items have been flushed. +func (s *PublishScheduler) FlushAndStop() { + close(s.done) + for _, b := range s.bundlers { + b.Flush() + } +} + +// IsPaused checks if the bundler associated with an ordering keys is +// paused. +func (s *PublishScheduler) IsPaused(orderingKey string) bool { + s.keysMu.RLock() + defer s.keysMu.RUnlock() + _, ok := s.keysWithErrors[orderingKey] + return ok +} + +// Pause pauses the bundler associated with the provided ordering key, +// preventing it from accepting new messages. Any outstanding messages +// that haven't been published will error. If orderingKey is empty, +// this is a no-op. +func (s *PublishScheduler) Pause(orderingKey string) { + if orderingKey != "" { + s.keysMu.Lock() + defer s.keysMu.Unlock() + s.keysWithErrors[orderingKey] = struct{}{} + } +} + +// Resume resumes accepting message with the provided ordering key. +func (s *PublishScheduler) Resume(orderingKey string) { + s.keysMu.Lock() + defer s.keysMu.Unlock() + delete(s.keysWithErrors, orderingKey) +} diff --git a/vendor/cloud.google.com/go/pubsub/internal/scheduler/receive_scheduler.go b/vendor/cloud.google.com/go/pubsub/internal/scheduler/receive_scheduler.go new file mode 100644 index 0000000..c33f0a7 --- /dev/null +++ b/vendor/cloud.google.com/go/pubsub/internal/scheduler/receive_scheduler.go @@ -0,0 +1,139 @@ +// Copyright 2019 Google LLC +// +// 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 scheduler + +import ( + "errors" + "sync" +) + +// ReceiveScheduler is a scheduler which is designed for Pub/Sub's Receive flow. +// +// Each item is added with a given key. Items added to the empty string key are +// handled in random order. Items added to any other key are handled +// sequentially. +type ReceiveScheduler struct { + // workers is a channel that represents workers. Rather than a pool, where + // worker are "removed" until the pool is empty, the channel is more like a + // set of work desks, where workers are "added" until all the desks are full. + // + // A worker taking an item from the unordered queue (key="") completes a + // single item and then goes back to the pool. + // + // A worker taking an item from an ordered queue (key="something") completes + // all work in that queue until the queue is empty, then deletes the queue, + // then goes back to the pool. + workers chan struct{} + done chan struct{} + + mu sync.Mutex + m map[string][]func() +} + +// NewReceiveScheduler creates a new ReceiveScheduler. +// +// The workers arg is the number of concurrent calls to handle. If the workers +// arg is 0, then a healthy default of 10 workers is used. If less than 0, this +// will be set to an large number, similar to PublishScheduler's handler limit. +func NewReceiveScheduler(workers int) *ReceiveScheduler { + if workers == 0 { + workers = 10 + } else if workers < 0 { + workers = 1e9 + } + + return &ReceiveScheduler{ + workers: make(chan struct{}, workers), + done: make(chan struct{}), + m: make(map[string][]func()), + } +} + +// Add adds the item to be handled. Add may block. +// +// Buffering happens above the ReceiveScheduler in the form of a flow controller +// that requests batches of messages to pull. A backed up ReceiveScheduler.Add +// call causes pushback to the pubsub service (less Receive calls on the +// long-lived stream), which keeps memory footprint stable. +func (s *ReceiveScheduler) Add(key string, item interface{}, handle func(item interface{})) error { + select { + case <-s.done: + return errors.New("draining") + default: + } + + if key == "" { + // Spawn a worker. + s.workers <- struct{}{} + go func() { + // Unordered keys can be handled immediately. + handle(item) + <-s.workers + }() + return nil + } + + // Add it to the queue. This has to happen before we enter the goroutine + // below to prevent a race from the next iteration of the key-loop + // adding another item before this one gets queued. + + s.mu.Lock() + _, ok := s.m[key] + s.m[key] = append(s.m[key], func() { + handle(item) + }) + s.mu.Unlock() + if ok { + // Someone is already working on this key. + return nil + } + + // Spawn a worker. + s.workers <- struct{}{} + + go func() { + defer func() { <-s.workers }() + + // Key-Loop: loop through the available items in the key's queue. + for { + s.mu.Lock() + if len(s.m[key]) == 0 { + // We're done processing items - the queue is empty. Delete + // the queue from the map and free up the worker. + delete(s.m, key) + s.mu.Unlock() + return + } + // Pop an item from the queue. + next := s.m[key][0] + s.m[key] = s.m[key][1:] + s.mu.Unlock() + + next() // Handle next in queue. + } + }() + + return nil +} + +// Shutdown begins flushing messages and stops accepting new Add calls. Shutdown +// does not block, or wait for all messages to be flushed. +func (s *ReceiveScheduler) Shutdown() { + select { + case <-s.done: + default: + close(s.done) + } +} diff --git a/vendor/cloud.google.com/go/pubsub/iterator.go b/vendor/cloud.google.com/go/pubsub/iterator.go index c42fb02..49a3742 100644 --- a/vendor/cloud.google.com/go/pubsub/iterator.go +++ b/vendor/cloud.google.com/go/pubsub/iterator.go @@ -17,6 +17,7 @@ package pubsub import ( "context" "io" + "strings" "sync" "time" @@ -75,7 +76,7 @@ type messageIterator struct { func newMessageIterator(subc *vkit.SubscriberClient, subName string, maxExtensionPeriod *time.Duration, po *pullOptions) *messageIterator { var ps *pullStream if !po.synchronous { - ps = newPullStream(context.Background(), subc.StreamingPull, subName) + ps = newPullStream(context.Background(), subc.StreamingPull, subName, po.maxOutstandingMessages, po.maxOutstandingBytes) } // The period will update each tick based on the distribution of acks. We'll start by arbitrarily sending // the first keepAlive halfway towards the minimum ack deadline. @@ -384,12 +385,53 @@ func (it *messageIterator) sendAck(m map[string]bool) bool { return it.sendAckIDRPC(m, maxPayload-overhead, func(ids []string) error { recordStat(it.ctx, AckCount, int64(len(ids))) addAcks(ids) - // Use context.Background() as the call's context, not it.ctx. We don't - // want to cancel this RPC when the iterator is stopped. - return it.subc.Acknowledge(context.Background(), &pb.AcknowledgeRequest{ - Subscription: it.subName, - AckIds: ids, - }) + bo := gax.Backoff{ + Initial: 100 * time.Millisecond, + Max: time.Second, + Multiplier: 2, + } + cctx, cancel := context.WithTimeout(context.Background(), 3*time.Minute) + defer cancel() + for { + // Use context.Background() as the call's context, not it.ctx. We don't + // want to cancel this RPC when the iterator is stopped. + cctx2, cancel2 := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel2() + err := it.subc.Acknowledge(cctx2, &pb.AcknowledgeRequest{ + Subscription: it.subName, + AckIds: ids, + }) + // Retry DeadlineExceeded errors a few times before giving up and + // allowing the message to expire and be redelivered. + // The underlying library handles other retries, currently only + // codes.Unavailable. + switch status.Code(err) { + case codes.DeadlineExceeded: + // Use the outer context with timeout here. Errors from gax, including + // context deadline exceeded should be transparent, as unacked messages + // will be redelivered. + if err := gax.Sleep(cctx, bo.Pause()); err != nil { + return nil + } + default: + if err == nil { + return nil + } + // This addresses an error where `context deadline exceeded` errors + // not captured by the previous case causes fatal errors. + // See https://github.com/googleapis/google-cloud-go/issues/3060 + if strings.Contains(err.Error(), "context deadline exceeded") { + // Context deadline exceeded errors here should be transparent + // to prevent the iterator from shutting down. + if err := gax.Sleep(cctx, bo.Pause()); err != nil { + return nil + } + continue + } + // Any other error is fatal. + return err + } + } }) } @@ -438,6 +480,16 @@ func (it *messageIterator) sendModAck(m map[string]bool, deadline time.Duration) recordStat(it.ctx, ModAckTimeoutCount, 1) return nil default: + if err == nil { + return nil + } + // This addresses an error where `context deadline exceeded` errors + // not captured by the previous case causes fatal errors. + // See https://github.com/googleapis/google-cloud-go/issues/3060 + if strings.Contains(err.Error(), "context deadline exceeded") { + recordStat(it.ctx, ModAckTimeoutCount, 1) + return nil + } // Any other error is fatal. return err } diff --git a/vendor/cloud.google.com/go/pubsub/message.go b/vendor/cloud.google.com/go/pubsub/message.go index 051c1df..00076ef 100644 --- a/vendor/cloud.google.com/go/pubsub/message.go +++ b/vendor/cloud.google.com/go/pubsub/message.go @@ -23,23 +23,25 @@ import ( // Message represents a Pub/Sub message. type Message struct { - // ID identifies this message. - // This ID is assigned by the server and is populated for Messages obtained from a subscription. + // ID identifies this message. This ID is assigned by the server and is + // populated for Messages obtained from a subscription. + // // This field is read-only. ID string // Data is the actual data in the message. Data []byte - // Attributes represents the key-value pairs the current message - // is labelled with. + // Attributes represents the key-value pairs the current message is + // labelled with. Attributes map[string]string // ackID is the identifier to acknowledge this message. ackID string - // The time at which the message was published. - // This is populated by the server for Messages obtained from a subscription. + // PublishTime is the time at which the message was published. This is + // populated by the server for Messages obtained from a subscription. + // // This field is read-only. PublishTime time.Time @@ -52,10 +54,6 @@ type Message struct { // If dead lettering is enabled, this will be set on all attempts, starting // with value 1. Otherwise, the value will be nil. // This field is read-only. - // - // It is EXPERIMENTAL and a part of a closed alpha that may not be - // accessible to all users. This field is subject to change or removal - // without notice. DeliveryAttempt *int // size is the approximate size of the message's data and attributes. @@ -65,6 +63,10 @@ type Message struct { // The done method of the iterator that created this Message. doneFunc func(string, bool, time.Time) + + // OrderingKey identifies related messages for which publish order should + // be respected. If empty string is used, message will be sent unordered. + OrderingKey string } func toMessage(resp *pb.ReceivedMessage) (*Message, error) { @@ -90,6 +92,7 @@ func toMessage(resp *pb.ReceivedMessage) (*Message, error) { ID: resp.Message.MessageId, PublishTime: pubTime, DeliveryAttempt: deliveryAttempt, + OrderingKey: resp.Message.OrderingKey, }, nil } @@ -116,5 +119,7 @@ func (m *Message) done(ack bool) { return } m.calledDone = true - m.doneFunc(m.ackID, ack, m.receiveTime) + if m.doneFunc != nil { + m.doneFunc(m.ackID, ack, m.receiveTime) + } } diff --git a/vendor/cloud.google.com/go/pubsub/pubsub.go b/vendor/cloud.google.com/go/pubsub/pubsub.go index a14f669..12e190c 100644 --- a/vendor/cloud.google.com/go/pubsub/pubsub.go +++ b/vendor/cloud.google.com/go/pubsub/pubsub.go @@ -19,6 +19,7 @@ import ( "fmt" "os" "runtime" + "strings" "time" "cloud.google.com/go/internal/version" @@ -61,6 +62,7 @@ func NewClient(ctx context.Context, projectID string, opts ...option.ClientOptio return nil, fmt.Errorf("grpc.Dial: %v", err) } o = []option.ClientOption{option.WithGRPCConn(conn)} + o = append(o, option.WithTelemetryDisabled()) } else { numConns := runtime.GOMAXPROCS(0) if numConns > 4 { @@ -73,19 +75,15 @@ func NewClient(ctx context.Context, projectID string, opts ...option.ClientOptio Time: 5 * time.Minute, })), } - o = append(o, openCensusOptions()...) } o = append(o, opts...) pubc, err := vkit.NewPublisherClient(ctx, o...) if err != nil { - return nil, fmt.Errorf("pubsub: %v", err) + return nil, fmt.Errorf("pubsub(publisher): %v", err) } - subc, err := vkit.NewSubscriberClient(ctx, option.WithGRPCConn(pubc.Connection())) + subc, err := vkit.NewSubscriberClient(ctx, o...) if err != nil { - // Should never happen, since we are passing in the connection. - // If it does, we cannot close, because the user may have passed in their - // own connection originally. - return nil, fmt.Errorf("pubsub: %v", err) + return nil, fmt.Errorf("pubsub(subscriber): %v", err) } pubc.SetGoogleClientInfo("gccl", version.Repo) return &Client{ @@ -101,10 +99,22 @@ func NewClient(ctx context.Context, projectID string, opts ...option.ClientOptio // If the client is available for the lifetime of the program, then Close need not be // called at exit. func (c *Client) Close() error { - // Return the first error, because the first call closes the connection. - err := c.pubc.Close() - _ = c.subc.Close() - return err + pubErr := c.pubc.Close() + subErr := c.subc.Close() + if pubErr != nil { + return fmt.Errorf("pubsub publisher closing error: %v", pubErr) + } + if subErr != nil { + // Suppress client connection closing errors. This will only happen + // when using the client in conjunction with the Pub/Sub emulator + // or fake (pstest). Closing both clients separately will never + // return this error against the live Pub/Sub service. + if strings.Contains(subErr.Error(), "the client connection is closing") { + return nil + } + return fmt.Errorf("pubsub subscriber closing error: %v", subErr) + } + return nil } func (c *Client) fullyQualifiedProjectName() string { diff --git a/vendor/cloud.google.com/go/pubsub/pullstream.go b/vendor/cloud.google.com/go/pubsub/pullstream.go index dd0e6c6..137dac3 100644 --- a/vendor/cloud.google.com/go/pubsub/pullstream.go +++ b/vendor/cloud.google.com/go/pubsub/pullstream.go @@ -39,7 +39,7 @@ type pullStream struct { // for testing type streamingPullFunc func(context.Context, ...gax.CallOption) (pb.Subscriber_StreamingPullClient, error) -func newPullStream(ctx context.Context, streamingPull streamingPullFunc, subName string) *pullStream { +func newPullStream(ctx context.Context, streamingPull streamingPullFunc, subName string, maxOutstandingMessages int, maxOutstandingBytes int) *pullStream { ctx = withSubscriptionKey(ctx, subName) return &pullStream{ ctx: ctx, @@ -51,6 +51,8 @@ func newPullStream(ctx context.Context, streamingPull streamingPullFunc, subName Subscription: subName, // We modack messages when we receive them, so this value doesn't matter too much. StreamAckDeadlineSeconds: 60, + MaxOutstandingMessages: int64(maxOutstandingMessages), + MaxOutstandingBytes: int64(maxOutstandingBytes), }) } if err != nil { diff --git a/vendor/cloud.google.com/go/pubsub/subscription.go b/vendor/cloud.google.com/go/pubsub/subscription.go index 045ddef..0af3238 100644 --- a/vendor/cloud.google.com/go/pubsub/subscription.go +++ b/vendor/cloud.google.com/go/pubsub/subscription.go @@ -25,6 +25,7 @@ import ( "cloud.google.com/go/iam" "cloud.google.com/go/internal/optional" + "cloud.google.com/go/pubsub/internal/scheduler" "github.com/golang/protobuf/ptypes" durpb "github.com/golang/protobuf/ptypes/duration" gax "github.com/googleapis/gax-go/v2" @@ -222,13 +223,36 @@ type SubscriptionConfig struct { // The set of labels for the subscription. Labels map[string]string + // EnableMessageOrdering enables message ordering. + // + // It is EXPERIMENTAL and a part of a closed alpha that may not be + // accessible to all users. This field is subject to change or removal + // without notice. + EnableMessageOrdering bool + // DeadLetterPolicy specifies the conditions for dead lettering messages in // a subscription. If not set, dead lettering is disabled. + DeadLetterPolicy *DeadLetterPolicy + + // Filter is an expression written in the Cloud Pub/Sub filter language. If + // non-empty, then only `PubsubMessage`s whose `attributes` field matches the + // filter are delivered on this subscription. If empty, then no messages are + // filtered out. Cannot be changed after the subscription is created. // // It is EXPERIMENTAL and a part of a closed alpha that may not be // accessible to all users. This field is subject to change or removal // without notice. - DeadLetterPolicy *DeadLetterPolicy + Filter string + + // RetryPolicy specifies how Cloud Pub/Sub retries message delivery. + RetryPolicy *RetryPolicy + + // Detached indicates whether the subscription is detached from its topic. + // Detached subscriptions don't receive messages from their topic and don't + // retain any backlog. `Pull` and `StreamingPull` requests will return + // FAILED_PRECONDITION. If the subscription is a push subscription, pushes to + // the endpoint will not be made. + Detached bool } func (cfg *SubscriptionConfig) toProto(name string) *pb.Subscription { @@ -244,6 +268,10 @@ func (cfg *SubscriptionConfig) toProto(name string) *pb.Subscription { if cfg.DeadLetterPolicy != nil { pbDeadLetter = cfg.DeadLetterPolicy.toProto() } + var pbRetryPolicy *pb.RetryPolicy + if cfg.RetryPolicy != nil { + pbRetryPolicy = cfg.RetryPolicy.toProto() + } return &pb.Subscription{ Name: name, Topic: cfg.Topic.name, @@ -253,7 +281,11 @@ func (cfg *SubscriptionConfig) toProto(name string) *pb.Subscription { MessageRetentionDuration: retentionDuration, Labels: cfg.Labels, ExpirationPolicy: expirationPolicyToProto(cfg.ExpirationPolicy), + EnableMessageOrdering: cfg.EnableMessageOrdering, DeadLetterPolicy: pbDeadLetter, + Filter: cfg.Filter, + RetryPolicy: pbRetryPolicy, + Detached: cfg.Detached, } } @@ -274,14 +306,19 @@ func protoToSubscriptionConfig(pbSub *pb.Subscription, c *Client) (SubscriptionC } } dlp := protoToDLP(pbSub.DeadLetterPolicy) + rp := protoToRetryPolicy(pbSub.RetryPolicy) subC := SubscriptionConfig{ - Topic: newTopic(c, pbSub.Topic), - AckDeadline: time.Second * time.Duration(pbSub.AckDeadlineSeconds), - RetainAckedMessages: pbSub.RetainAckedMessages, - RetentionDuration: rd, - Labels: pbSub.Labels, - ExpirationPolicy: expirationPolicy, - DeadLetterPolicy: dlp, + Topic: newTopic(c, pbSub.Topic), + AckDeadline: time.Second * time.Duration(pbSub.AckDeadlineSeconds), + RetainAckedMessages: pbSub.RetainAckedMessages, + RetentionDuration: rd, + Labels: pbSub.Labels, + ExpirationPolicy: expirationPolicy, + EnableMessageOrdering: pbSub.EnableMessageOrdering, + DeadLetterPolicy: dlp, + Filter: pbSub.Filter, + RetryPolicy: rp, + Detached: pbSub.Detached, } pc := protoToPushConfig(pbSub.PushConfig) if pc != nil { @@ -311,9 +348,6 @@ func protoToPushConfig(pbPc *pb.PushConfig) *PushConfig { // DeadLetterPolicy specifies the conditions for dead lettering messages in // a subscription. -// -// It is EXPERIMENTAL and a part of a closed alpha that may not be -// accessible to all users. type DeadLetterPolicy struct { DeadLetterTopic string MaxDeliveryAttempts int @@ -338,6 +372,87 @@ func protoToDLP(pbDLP *pb.DeadLetterPolicy) *DeadLetterPolicy { } } +// RetryPolicy specifies how Cloud Pub/Sub retries message delivery. +// +// Retry delay will be exponential based on provided minimum and maximum +// backoffs. https://en.wikipedia.org/wiki/Exponential_backoff. +// +// RetryPolicy will be triggered on NACKs or acknowledgement deadline exceeded +// events for a given message. +// +// Retry Policy is implemented on a best effort basis. At times, the delay +// between consecutive deliveries may not match the configuration. That is, +// delay can be more or less than configured backoff. +type RetryPolicy struct { + // MinimumBackoff is the minimum delay between consecutive deliveries of a + // given message. Value should be between 0 and 600 seconds. Defaults to 10 seconds. + MinimumBackoff optional.Duration + // MaximumBackoff is the maximum delay between consecutive deliveries of a + // given message. Value should be between 0 and 600 seconds. Defaults to 10 seconds. + MaximumBackoff optional.Duration +} + +func (rp *RetryPolicy) toProto() *pb.RetryPolicy { + if rp == nil { + return nil + } + // If RetryPolicy is the empty struct, take this as an instruction + // to remove RetryPolicy from the subscription. + if rp.MinimumBackoff == nil && rp.MaximumBackoff == nil { + return nil + } + + // Initialize minDur and maxDur to be negative, such that if the conversion from an + // optional fails, RetryPolicy won't be updated in the proto as it will remain nil. + var minDur time.Duration = -1 + var maxDur time.Duration = -1 + if rp.MinimumBackoff != nil { + minDur = optional.ToDuration(rp.MinimumBackoff) + } + if rp.MaximumBackoff != nil { + maxDur = optional.ToDuration(rp.MaximumBackoff) + } + + var minDurPB, maxDurPB *durpb.Duration + if minDur > 0 { + minDurPB = ptypes.DurationProto(minDur) + } + if maxDur > 0 { + maxDurPB = ptypes.DurationProto(maxDur) + } + + return &pb.RetryPolicy{ + MinimumBackoff: minDurPB, + MaximumBackoff: maxDurPB, + } +} + +func protoToRetryPolicy(rp *pb.RetryPolicy) *RetryPolicy { + if rp == nil { + return nil + } + var minBackoff, maxBackoff time.Duration + var err error + if rp.MinimumBackoff != nil { + minBackoff, err = ptypes.Duration(rp.MinimumBackoff) + if err != nil { + return nil + } + } + if rp.MaximumBackoff != nil { + maxBackoff, err = ptypes.Duration(rp.MaximumBackoff) + if err != nil { + return nil + } + } + + retryPolicy := &RetryPolicy{ + MinimumBackoff: minBackoff, + MaximumBackoff: maxBackoff, + } + return retryPolicy +} + // ReceiveSettings configure the Receive method. // A zero ReceiveSettings will result in values equivalent to DefaultReceiveSettings. type ReceiveSettings struct { @@ -374,9 +489,11 @@ type ReceiveSettings struct { // for unprocessed messages. MaxOutstandingBytes int - // NumGoroutines is the number of goroutines Receive will spawn to pull - // messages concurrently. If NumGoroutines is less than 1, it will be treated - // as if it were DefaultReceiveSettings.NumGoroutines. + // NumGoroutines is the number of goroutines that each datastructure along + // the Receive path will spawn. Adjusting this value adjusts concurrency + // along the receive path. + // + // NumGoroutines defaults to DefaultReceiveSettings.NumGoroutines. // // NumGoroutines does not limit the number of messages that can be processed // concurrently. Even with one goroutine, many messages might be processed at @@ -422,7 +539,7 @@ var DefaultReceiveSettings = ReceiveSettings{ MaxExtensionPeriod: 0, MaxOutstandingMessages: 1000, MaxOutstandingBytes: 1e9, // 1G - NumGoroutines: 1, + NumGoroutines: 10, } // Delete deletes the subscription. @@ -474,9 +591,6 @@ type SubscriptionConfigToUpdate struct { // If non-nil, DeadLetterPolicy is changed. To remove dead lettering from // a subscription, use the zero value for this struct. - // - // It is EXPERIMENTAL and a part of a closed alpha that may not be - // accessible to all users. DeadLetterPolicy *DeadLetterPolicy // If non-nil, the current set of labels is completely @@ -484,6 +598,11 @@ type SubscriptionConfigToUpdate struct { // This field has beta status. It is not subject to the stability guarantee // and may change. Labels map[string]string + + // If non-nil, RetryPolicy is changed. To remove an existing retry policy + // (to redeliver messages as soon as possible) use a pointer to the zero value + // for this struct. + RetryPolicy *RetryPolicy } // Update changes an existing subscription according to the fields set in cfg. @@ -536,6 +655,10 @@ func (s *Subscription) updateRequest(cfg *SubscriptionConfigToUpdate) *pb.Update psub.Labels = cfg.Labels paths = append(paths, "labels") } + if cfg.RetryPolicy != nil { + psub.RetryPolicy = cfg.RetryPolicy.toProto() + paths = append(paths, "retry_policy") + } return &pb.UpdateSubscriptionRequest{ Subscription: psub, UpdateMask: &fmpb.FieldMask{Paths: paths}, @@ -556,11 +679,11 @@ func (cfg *SubscriptionConfigToUpdate) validate() error { if cfg == nil || cfg.ExpirationPolicy == nil { return nil } - policy, min := optional.ToDuration(cfg.ExpirationPolicy), minExpirationPolicy - if policy == 0 || policy >= min { - return nil + expPolicy, min := optional.ToDuration(cfg.ExpirationPolicy), minExpirationPolicy + if expPolicy != 0 && expPolicy < min { + return fmt.Errorf("invalid expiration policy(%q) < minimum(%q)", expPolicy, min) } - return fmt.Errorf("invalid expiration policy(%q) < minimum(%q)", policy, min) + return nil } func expirationPolicyToProto(expirationPolicy optional.Duration) *pb.ExpirationPolicy { @@ -692,104 +815,131 @@ func (s *Subscription) Receive(ctx context.Context, f func(context.Context, *Mes } // TODO(jba): add tests that verify that ReceiveSettings are correctly processed. po := &pullOptions{ - maxExtension: maxExt, - maxPrefetch: trunc32(int64(maxCount)), - synchronous: s.ReceiveSettings.Synchronous, + maxExtension: maxExt, + maxPrefetch: trunc32(int64(maxCount)), + synchronous: s.ReceiveSettings.Synchronous, + maxOutstandingMessages: maxCount, + maxOutstandingBytes: maxBytes, } fc := newFlowController(maxCount, maxBytes) + sched := scheduler.NewReceiveScheduler(maxCount) + // Wait for all goroutines started by Receive to return, so instead of an // obscure goroutine leak we have an obvious blocked call to Receive. group, gctx := errgroup.WithContext(ctx) - for i := 0; i < numGoroutines; i++ { - group.Go(func() error { - return s.receive(gctx, po, fc, f) - }) + + type closeablePair struct { + wg *sync.WaitGroup + iter *messageIterator } - return group.Wait() -} -func (s *Subscription) receive(ctx context.Context, po *pullOptions, fc *flowController, f func(context.Context, *Message)) error { - // Cancel a sub-context when we return, to kick the context-aware callbacks - // and the goroutine below. - ctx2, cancel := context.WithCancel(ctx) - // The iterator does not use the context passed to Receive. If it did, canceling - // that context would immediately stop the iterator without waiting for unacked - // messages. - iter := newMessageIterator(s.c.subc, s.name, &s.ReceiveSettings.MaxExtensionPeriod, po) - - // We cannot use errgroup from Receive here. Receive might already be calling group.Wait, - // and group.Wait cannot be called concurrently with group.Go. We give each receive() its - // own WaitGroup instead. - // Since wg.Add is only called from the main goroutine, wg.Wait is guaranteed - // to be called after all Adds. - var wg sync.WaitGroup - wg.Add(1) - go func() { - <-ctx2.Done() - // Call stop when Receive's context is done. - // Stop will block until all outstanding messages have been acknowledged - // or there was a fatal service error. - iter.stop() - wg.Done() - }() - defer wg.Wait() - - defer cancel() - for { - var maxToPull int32 // maximum number of messages to pull - if po.synchronous { - if po.maxPrefetch < 0 { - // If there is no limit on the number of messages to pull, use a reasonable default. - maxToPull = 1000 - } else { - // Limit the number of messages in memory to MaxOutstandingMessages - // (here, po.maxPrefetch). For each message currently in memory, we have - // called fc.acquire but not fc.release: this is fc.count(). The next - // call to Pull should fetch no more than the difference between these - // values. - maxToPull = po.maxPrefetch - int32(fc.count()) - if maxToPull <= 0 { - // Wait for some callbacks to finish. - if err := gax.Sleep(ctx, synchronousWaitTime); err != nil { + var pairs []closeablePair + + // Cancel a sub-context which, when we finish a single receiver, will kick + // off the context-aware callbacks and the goroutine below (which stops + // all receivers, iterators, and the scheduler). + ctx2, cancel2 := context.WithCancel(gctx) + defer cancel2() + + for i := 0; i < numGoroutines; i++ { + // The iterator does not use the context passed to Receive. If it did, + // canceling that context would immediately stop the iterator without + // waiting for unacked messages. + iter := newMessageIterator(s.c.subc, s.name, &s.ReceiveSettings.MaxExtension, po) + + // We cannot use errgroup from Receive here. Receive might already be + // calling group.Wait, and group.Wait cannot be called concurrently with + // group.Go. We give each receive() its own WaitGroup instead. + // + // Since wg.Add is only called from the main goroutine, wg.Wait is + // guaranteed to be called after all Adds. + var wg sync.WaitGroup + wg.Add(1) + pairs = append(pairs, closeablePair{wg: &wg, iter: iter}) + + group.Go(func() error { + defer wg.Wait() + defer cancel2() + for { + var maxToPull int32 // maximum number of messages to pull + if po.synchronous { + if po.maxPrefetch < 0 { + // If there is no limit on the number of messages to + // pull, use a reasonable default. + maxToPull = 1000 + } else { + // Limit the number of messages in memory to MaxOutstandingMessages + // (here, po.maxPrefetch). For each message currently in memory, we have + // called fc.acquire but not fc.release: this is fc.count(). The next + // call to Pull should fetch no more than the difference between these + // values. + maxToPull = po.maxPrefetch - int32(fc.count()) + if maxToPull <= 0 { + // Wait for some callbacks to finish. + if err := gax.Sleep(ctx, synchronousWaitTime); err != nil { + // Return nil if the context is done, not err. + return nil + } + continue + } + } + } + msgs, err := iter.receive(maxToPull) + if err == io.EOF { + return nil + } + if err != nil { + return err + } + for i, msg := range msgs { + msg := msg + // TODO(jba): call acquire closer to when the message is allocated. + if err := fc.acquire(ctx, len(msg.Data)); err != nil { + // TODO(jba): test that these "orphaned" messages are nacked immediately when ctx is done. + for _, m := range msgs[i:] { + m.Nack() + } // Return nil if the context is done, not err. return nil } - continue - } - } - } - msgs, err := iter.receive(maxToPull) - if err == io.EOF { - return nil - } - if err != nil { - return err - } - for i, msg := range msgs { - msg := msg - // TODO(jba): call acquire closer to when the message is allocated. - if err := fc.acquire(ctx, len(msg.Data)); err != nil { - // TODO(jba): test that these "orphaned" messages are nacked immediately when ctx is done. - for _, m := range msgs[i:] { - m.Nack() + old := msg.doneFunc + msgLen := len(msg.Data) + msg.doneFunc = func(ackID string, ack bool, receiveTime time.Time) { + defer fc.release(msgLen) + old(ackID, ack, receiveTime) + } + wg.Add(1) + // TODO(deklerk): Can we have a generic handler at the + // constructor level? + if err := sched.Add(msg.OrderingKey, msg, func(msg interface{}) { + defer wg.Done() + f(ctx2, msg.(*Message)) + }); err != nil { + wg.Done() + return err + } } - // Return nil if the context is done, not err. - return nil - } - old := msg.doneFunc - msgLen := len(msg.Data) - msg.doneFunc = func(ackID string, ack bool, receiveTime time.Time) { - defer fc.release(msgLen) - old(ackID, ack, receiveTime) } - wg.Add(1) - go func() { - defer wg.Done() - f(ctx2, msg) - }() - } + }) } + + go func() { + <-ctx2.Done() + + // Wait for all iterators to stop. + for _, p := range pairs { + p.iter.stop() + p.wg.Done() + } + + // This _must_ happen after every iterator has stopped, or some + // iterator will still have undelivered messages but the scheduler will + // already be shut down. + sched.Shutdown() + }() + + return group.Wait() } type pullOptions struct { @@ -797,5 +947,7 @@ type pullOptions struct { maxPrefetch int32 // If true, use unary Pull instead of StreamingPull, and never pull more // than maxPrefetch messages. - synchronous bool + synchronous bool + maxOutstandingMessages int + maxOutstandingBytes int } diff --git a/vendor/cloud.google.com/go/pubsub/topic.go b/vendor/cloud.google.com/go/pubsub/topic.go index cf8fc5d..07e392e 100644 --- a/vendor/cloud.google.com/go/pubsub/topic.go +++ b/vendor/cloud.google.com/go/pubsub/topic.go @@ -25,6 +25,7 @@ import ( "time" "cloud.google.com/go/iam" + "cloud.google.com/go/pubsub/internal/scheduler" "github.com/golang/protobuf/proto" gax "github.com/googleapis/gax-go/v2" "go.opencensus.io/stats" @@ -62,9 +63,12 @@ type Topic struct { // first call to Publish. The default is DefaultPublishSettings. PublishSettings PublishSettings - mu sync.RWMutex - stopped bool - bundler *bundler.Bundler + mu sync.RWMutex + stopped bool + scheduler *scheduler.PublishScheduler + + // EnableMessageOrdering enables delivery of ordered keys. + EnableMessageOrdering bool } // PublishSettings control the bundling of published messages. @@ -80,7 +84,9 @@ type PublishSettings struct { // Publish a batch when its size in bytes reaches this value. ByteThreshold int - // The number of goroutines that invoke the Publish RPC concurrently. + // The number of goroutines used in each of the data structures that are + // involved along the the Publish path. Adjusting this value adjusts + // concurrency along the publish path. // // Defaults to a multiple of GOMAXPROCS. NumGoroutines int @@ -217,6 +223,24 @@ func protoToTopicConfig(pbt *pb.Topic) TopicConfig { } } +// DetachSubscriptionResult is the response for the DetachSubscription method. +// Reserved for future use. +type DetachSubscriptionResult struct{} + +// DetachSubscription detaches a subscription from its topic. All messages +// retained in the subscription are dropped. Subsequent `Pull` and `StreamingPull` +// requests will return FAILED_PRECONDITION. If the subscription is a push +// subscription, pushes to the endpoint will stop. +func (c *Client) DetachSubscription(ctx context.Context, sub string) (*DetachSubscriptionResult, error) { + _, err := c.pubc.DetachSubscription(ctx, &pb.DetachSubscriptionRequest{ + Subscription: sub, + }) + if err != nil { + return nil, err + } + return &DetachSubscriptionResult{}, nil +} + // MessageStoragePolicy constrains how messages published to the topic may be stored. It // is determined when the topic is created based on the policy configured at // the project level. @@ -386,6 +410,12 @@ var errTopicStopped = errors.New("pubsub: Stop has been called for this topic") // need to be stopped by calling t.Stop(). Once stopped, future calls to Publish // will immediately return a PublishResult with an error. func (t *Topic) Publish(ctx context.Context, msg *Message) *PublishResult { + r := &PublishResult{ready: make(chan struct{})} + if !t.EnableMessageOrdering && msg.OrderingKey != "" { + r.set("", errors.New("Topic.EnableMessageOrdering=false, but an OrderingKey was set in Message. Please remove the OrderingKey or turn on Topic.EnableMessageOrdering")) + return r + } + // Use a PublishRequest with only the Messages field to calculate the size // of an individual message. This accurately calculates the size of the // encoded proto message by accounting for the length of an individual @@ -394,12 +424,12 @@ func (t *Topic) Publish(ctx context.Context, msg *Message) *PublishResult { msg.size = proto.Size(&pb.PublishRequest{ Messages: []*pb.PubsubMessage{ { - Data: msg.Data, - Attributes: msg.Attributes, + Data: msg.Data, + Attributes: msg.Attributes, + OrderingKey: msg.OrderingKey, }, }, }) - r := &PublishResult{ready: make(chan struct{})} t.initBundler() t.mu.RLock() defer t.mu.RUnlock() @@ -411,8 +441,9 @@ func (t *Topic) Publish(ctx context.Context, msg *Message) *PublishResult { // TODO(jba) [from bcmills] consider using a shared channel per bundle // (requires Bundler API changes; would reduce allocations) - err := t.bundler.Add(&bundledMessage{msg, r}, msg.size) + err := t.scheduler.Add(msg.OrderingKey, &bundledMessage{msg, r}, msg.size) if err != nil { + t.scheduler.Pause(msg.OrderingKey) r.set("", err) } return r @@ -423,13 +454,13 @@ func (t *Topic) Publish(ctx context.Context, msg *Message) *PublishResult { // failed to be sent. func (t *Topic) Stop() { t.mu.Lock() - noop := t.stopped || t.bundler == nil + noop := t.stopped || t.scheduler == nil t.stopped = true t.mu.Unlock() if noop { return } - t.bundler.Flush() + t.scheduler.FlushAndStop() } // A PublishResult holds the result from a call to Publish. @@ -473,7 +504,7 @@ type bundledMessage struct { func (t *Topic) initBundler() { t.mu.RLock() - noop := t.stopped || t.bundler != nil + noop := t.stopped || t.scheduler != nil t.mu.RUnlock() if noop { return @@ -481,12 +512,21 @@ func (t *Topic) initBundler() { t.mu.Lock() defer t.mu.Unlock() // Must re-check, since we released the lock. - if t.stopped || t.bundler != nil { + if t.stopped || t.scheduler != nil { return } timeout := t.PublishSettings.Timeout - t.bundler = bundler.NewBundler(&bundledMessage{}, func(items interface{}) { + + workers := t.PublishSettings.NumGoroutines + // Unless overridden, allow many goroutines per CPU to call the Publish RPC + // concurrently. The default value was determined via extensive load + // testing (see the loadtest subdirectory). + if t.PublishSettings.NumGoroutines == 0 { + workers = 25 * runtime.GOMAXPROCS(0) + } + + t.scheduler = scheduler.NewPublishScheduler(workers, func(bundle interface{}) { // TODO(jba): use a context detached from the one passed to NewClient. ctx := context.TODO() if timeout != 0 { @@ -494,30 +534,22 @@ func (t *Topic) initBundler() { ctx, cancel = context.WithTimeout(ctx, timeout) defer cancel() } - t.publishMessageBundle(ctx, items.([]*bundledMessage)) + t.publishMessageBundle(ctx, bundle.([]*bundledMessage)) }) - t.bundler.DelayThreshold = t.PublishSettings.DelayThreshold - t.bundler.BundleCountThreshold = t.PublishSettings.CountThreshold - if t.bundler.BundleCountThreshold > MaxPublishRequestCount { - t.bundler.BundleCountThreshold = MaxPublishRequestCount + t.scheduler.DelayThreshold = t.PublishSettings.DelayThreshold + t.scheduler.BundleCountThreshold = t.PublishSettings.CountThreshold + if t.scheduler.BundleCountThreshold > MaxPublishRequestCount { + t.scheduler.BundleCountThreshold = MaxPublishRequestCount } - t.bundler.BundleByteThreshold = t.PublishSettings.ByteThreshold + t.scheduler.BundleByteThreshold = t.PublishSettings.ByteThreshold bufferedByteLimit := DefaultPublishSettings.BufferedByteLimit if t.PublishSettings.BufferedByteLimit > 0 { bufferedByteLimit = t.PublishSettings.BufferedByteLimit } - t.bundler.BufferedByteLimit = bufferedByteLimit + t.scheduler.BufferedByteLimit = bufferedByteLimit - // Set the bundler's max size per payload, accounting for topic name's overhead. - t.bundler.BundleByteLimit = MaxPublishRequestBytes - calcFieldSizeString(t.name) - // Unless overridden, allow many goroutines per CPU to call the Publish RPC concurrently. - // The default value was determined via extensive load testing (see the loadtest subdirectory). - if t.PublishSettings.NumGoroutines > 0 { - t.bundler.HandlerLimit = t.PublishSettings.NumGoroutines - } else { - t.bundler.HandlerLimit = 25 * runtime.GOMAXPROCS(0) - } + t.scheduler.BundleByteLimit = MaxPublishRequestBytes - calcFieldSizeString(t.name) } func (t *Topic) publishMessageBundle(ctx context.Context, bms []*bundledMessage) { @@ -526,20 +558,29 @@ func (t *Topic) publishMessageBundle(ctx context.Context, bms []*bundledMessage) log.Printf("pubsub: cannot create context with tag in publishMessageBundle: %v", err) } pbMsgs := make([]*pb.PubsubMessage, len(bms)) + var orderingKey string for i, bm := range bms { + orderingKey = bm.msg.OrderingKey pbMsgs[i] = &pb.PubsubMessage{ - Data: bm.msg.Data, - Attributes: bm.msg.Attributes, + Data: bm.msg.Data, + Attributes: bm.msg.Attributes, + OrderingKey: bm.msg.OrderingKey, } bm.msg = nil // release bm.msg for GC } + var res *pb.PublishResponse start := time.Now() - res, err := t.c.pubc.Publish(ctx, &pb.PublishRequest{ - Topic: t.name, - Messages: pbMsgs, - }, gax.WithGRPCOptions(grpc.MaxCallSendMsgSize(maxSendRecvBytes))) + if orderingKey != "" && t.scheduler.IsPaused(orderingKey) { + err = fmt.Errorf("pubsub: Publishing for ordering key, %s, paused due to previous error. Call topic.ResumePublish(orderingKey) before resuming publishing", orderingKey) + } else { + res, err = t.c.pubc.Publish(ctx, &pb.PublishRequest{ + Topic: t.name, + Messages: pbMsgs, + }, gax.WithGRPCOptions(grpc.MaxCallSendMsgSize(maxSendRecvBytes))) + } end := time.Now() if err != nil { + t.scheduler.Pause(orderingKey) // Update context with error tag for OpenCensus, // using same stats.Record() call as success case. ctx, _ = tag.New(ctx, tag.Upsert(keyStatus, "ERROR"), @@ -556,3 +597,18 @@ func (t *Topic) publishMessageBundle(ctx context.Context, bms []*bundledMessage) } } } + +// ResumePublish resumes accepting messages for the provided ordering key. +// Publishing using an ordering key might be paused if an error is +// encountered while publishing, to prevent messages from being published +// out of order. +func (t *Topic) ResumePublish(orderingKey string) { + t.mu.RLock() + noop := t.scheduler == nil + t.mu.RUnlock() + if noop { + return + } + + t.scheduler.Resume(orderingKey) +} diff --git a/vendor/cloud.google.com/go/pubsub/trace.go b/vendor/cloud.google.com/go/pubsub/trace.go index 4036a35..cb33172 100644 --- a/vendor/cloud.google.com/go/pubsub/trace.go +++ b/vendor/cloud.google.com/go/pubsub/trace.go @@ -19,20 +19,11 @@ import ( "log" "sync" - "go.opencensus.io/plugin/ocgrpc" "go.opencensus.io/stats" "go.opencensus.io/stats/view" "go.opencensus.io/tag" - "google.golang.org/api/option" - "google.golang.org/grpc" ) -func openCensusOptions() []option.ClientOption { - return []option.ClientOption{ - option.WithGRPCDialOption(grpc.WithStatsHandler(&ocgrpc.ClientHandler{})), - } -} - // The following keys are used to tag requests with a specific topic/subscription ID. var ( keyTopic = tag.MustNewKey("topic") diff --git a/vendor/cloud.google.com/go/secretmanager/apiv1beta1/doc.go b/vendor/cloud.google.com/go/secretmanager/apiv1beta1/doc.go new file mode 100644 index 0000000..ae13bd5 --- /dev/null +++ b/vendor/cloud.google.com/go/secretmanager/apiv1beta1/doc.go @@ -0,0 +1,117 @@ +// Copyright 2020 Google LLC +// +// 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 +// +// https://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. + +// Code generated by protoc-gen-go_gapic. DO NOT EDIT. + +// Package secretmanager is an auto-generated package for the +// Secret Manager API. +// +// Stores sensitive data such as API keys, passwords, and certificates. +// Provides convenience while improving security. +// +// Use of Context +// +// The ctx passed to NewClient is used for authentication requests and +// for creating the underlying connection, but is not used for subsequent calls. +// Individual methods on the client use the ctx given to them. +// +// To close the open connection, use the Close() method. +// +// For information about setting deadlines, reusing contexts, and more +// please visit pkg.go.dev/cloud.google.com/go. +package secretmanager // import "cloud.google.com/go/secretmanager/apiv1beta1" + +import ( + "context" + "os" + "runtime" + "strconv" + "strings" + "unicode" + + "google.golang.org/api/option" + "google.golang.org/grpc/metadata" +) + +// For more information on implementing a client constructor hook, see +// https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors. +type clientHookParams struct{} +type clientHook func(context.Context, clientHookParams) ([]option.ClientOption, error) + +const versionClient = "20201210" + +func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context { + out, _ := metadata.FromOutgoingContext(ctx) + out = out.Copy() + for _, md := range mds { + for k, v := range md { + out[k] = append(out[k], v...) + } + } + return metadata.NewOutgoingContext(ctx, out) +} + +func checkDisableDeadlines() (bool, error) { + raw, ok := os.LookupEnv("GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE") + if !ok { + return false, nil + } + + b, err := strconv.ParseBool(raw) + return b, err +} + +// DefaultAuthScopes reports the default set of authentication scopes to use with this package. +func DefaultAuthScopes() []string { + return []string{ + "https://www.googleapis.com/auth/cloud-platform", + } +} + +// versionGo returns the Go runtime version. The returned string +// has no whitespace, suitable for reporting in header. +func versionGo() string { + const develPrefix = "devel +" + + s := runtime.Version() + if strings.HasPrefix(s, develPrefix) { + s = s[len(develPrefix):] + if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 { + s = s[:p] + } + return s + } + + notSemverRune := func(r rune) bool { + return !strings.ContainsRune("0123456789.", r) + } + + if strings.HasPrefix(s, "go1") { + s = s[2:] + var prerelease string + if p := strings.IndexFunc(s, notSemverRune); p >= 0 { + s, prerelease = s[:p], s[p:] + } + if strings.HasSuffix(s, ".") { + s += "0" + } else if strings.Count(s, ".") < 2 { + s += ".0" + } + if prerelease != "" { + s += "-" + prerelease + } + return s + } + return "UNKNOWN" +} diff --git a/vendor/cloud.google.com/go/secretmanager/apiv1beta1/iam.go b/vendor/cloud.google.com/go/secretmanager/apiv1beta1/iam.go new file mode 100644 index 0000000..9d5fd4b --- /dev/null +++ b/vendor/cloud.google.com/go/secretmanager/apiv1beta1/iam.go @@ -0,0 +1,26 @@ +// Copyright 2019 Google LLC +// +// 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 +// +// https://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 secretmanager + +import ( + "cloud.google.com/go/iam" +) + +// IAM returns a handle to inspect and change permissions of the resource +// indicated by the given resource path. Name should be of the format +// `projects/my-project/secrets/my-secret`. +func (c *Client) IAM(name string) *iam.Handle { + return iam.InternalNewHandleGRPCClient(c.client, name) +} diff --git a/vendor/cloud.google.com/go/secretmanager/apiv1beta1/secret_manager_client.go b/vendor/cloud.google.com/go/secretmanager/apiv1beta1/secret_manager_client.go new file mode 100644 index 0000000..eff92b7 --- /dev/null +++ b/vendor/cloud.google.com/go/secretmanager/apiv1beta1/secret_manager_client.go @@ -0,0 +1,672 @@ +// Copyright 2020 Google LLC +// +// 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 +// +// https://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. + +// Code generated by protoc-gen-go_gapic. DO NOT EDIT. + +package secretmanager + +import ( + "context" + "fmt" + "math" + "net/url" + "time" + + "github.com/golang/protobuf/proto" + gax "github.com/googleapis/gax-go/v2" + "google.golang.org/api/iterator" + "google.golang.org/api/option" + "google.golang.org/api/option/internaloption" + gtransport "google.golang.org/api/transport/grpc" + secretmanagerpb "google.golang.org/genproto/googleapis/cloud/secretmanager/v1beta1" + iampb "google.golang.org/genproto/googleapis/iam/v1" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" +) + +var newClientHook clientHook + +// CallOptions contains the retry settings for each method of Client. +type CallOptions struct { + ListSecrets []gax.CallOption + CreateSecret []gax.CallOption + AddSecretVersion []gax.CallOption + GetSecret []gax.CallOption + UpdateSecret []gax.CallOption + DeleteSecret []gax.CallOption + ListSecretVersions []gax.CallOption + GetSecretVersion []gax.CallOption + AccessSecretVersion []gax.CallOption + DisableSecretVersion []gax.CallOption + EnableSecretVersion []gax.CallOption + DestroySecretVersion []gax.CallOption + SetIamPolicy []gax.CallOption + GetIamPolicy []gax.CallOption + TestIamPermissions []gax.CallOption +} + +func defaultClientOptions() []option.ClientOption { + return []option.ClientOption{ + internaloption.WithDefaultEndpoint("secretmanager.googleapis.com:443"), + internaloption.WithDefaultMTLSEndpoint("secretmanager.mtls.googleapis.com:443"), + internaloption.WithDefaultAudience("https://secretmanager.googleapis.com/"), + internaloption.WithDefaultScopes(DefaultAuthScopes()...), + option.WithGRPCDialOption(grpc.WithDisableServiceConfig()), + option.WithGRPCDialOption(grpc.WithDefaultCallOptions( + grpc.MaxCallRecvMsgSize(math.MaxInt32))), + } +} + +func defaultCallOptions() *CallOptions { + return &CallOptions{ + ListSecrets: []gax.CallOption{}, + CreateSecret: []gax.CallOption{}, + AddSecretVersion: []gax.CallOption{}, + GetSecret: []gax.CallOption{}, + UpdateSecret: []gax.CallOption{}, + DeleteSecret: []gax.CallOption{}, + ListSecretVersions: []gax.CallOption{}, + GetSecretVersion: []gax.CallOption{}, + AccessSecretVersion: []gax.CallOption{ + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.Unavailable, + codes.Unknown, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 1.30, + }) + }), + }, + DisableSecretVersion: []gax.CallOption{}, + EnableSecretVersion: []gax.CallOption{}, + DestroySecretVersion: []gax.CallOption{}, + SetIamPolicy: []gax.CallOption{}, + GetIamPolicy: []gax.CallOption{}, + TestIamPermissions: []gax.CallOption{}, + } +} + +// Client is a client for interacting with Secret Manager API. +// +// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls. +type Client struct { + // Connection pool of gRPC connections to the service. + connPool gtransport.ConnPool + + // flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE + disableDeadlines bool + + // The gRPC API client. + client secretmanagerpb.SecretManagerServiceClient + + // The call options for this service. + CallOptions *CallOptions + + // The x-goog-* metadata to be sent with each request. + xGoogMetadata metadata.MD +} + +// NewClient creates a new secret manager service client. +// +// Secret Manager Service +// +// Manages secrets and operations using those secrets. Implements a REST +// model with the following objects: +// +// Secret +// +// SecretVersion +func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { + clientOpts := defaultClientOptions() + + if newClientHook != nil { + hookOpts, err := newClientHook(ctx, clientHookParams{}) + if err != nil { + return nil, err + } + clientOpts = append(clientOpts, hookOpts...) + } + + disableDeadlines, err := checkDisableDeadlines() + if err != nil { + return nil, err + } + + connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) + if err != nil { + return nil, err + } + c := &Client{ + connPool: connPool, + disableDeadlines: disableDeadlines, + CallOptions: defaultCallOptions(), + + client: secretmanagerpb.NewSecretManagerServiceClient(connPool), + } + c.setGoogleClientInfo() + + return c, nil +} + +// Connection returns a connection to the API service. +// +// Deprecated. +func (c *Client) Connection() *grpc.ClientConn { + return c.connPool.Conn() +} + +// Close closes the connection to the API service. The user should invoke this when +// the client is no longer required. +func (c *Client) Close() error { + return c.connPool.Close() +} + +// setGoogleClientInfo sets the name and version of the application in +// the `x-goog-api-client` header passed on each request. Intended for +// use by Google-written clients. +func (c *Client) setGoogleClientInfo(keyval ...string) { + kv := append([]string{"gl-go", versionGo()}, keyval...) + kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version) + c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...)) +} + +// ListSecrets lists Secrets. +func (c *Client) ListSecrets(ctx context.Context, req *secretmanagerpb.ListSecretsRequest, opts ...gax.CallOption) *SecretIterator { + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.ListSecrets[0:len(c.CallOptions.ListSecrets):len(c.CallOptions.ListSecrets)], opts...) + it := &SecretIterator{} + req = proto.Clone(req).(*secretmanagerpb.ListSecretsRequest) + it.InternalFetch = func(pageSize int, pageToken string) ([]*secretmanagerpb.Secret, string, error) { + var resp *secretmanagerpb.ListSecretsResponse + req.PageToken = pageToken + if pageSize > math.MaxInt32 { + req.PageSize = math.MaxInt32 + } else { + req.PageSize = int32(pageSize) + } + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.ListSecrets(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, "", err + } + + it.Response = resp + return resp.GetSecrets(), resp.GetNextPageToken(), nil + } + fetch := func(pageSize int, pageToken string) (string, error) { + items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) + if err != nil { + return "", err + } + it.items = append(it.items, items...) + return nextPageToken, nil + } + it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) + it.pageInfo.MaxSize = int(req.GetPageSize()) + it.pageInfo.Token = req.GetPageToken() + return it +} + +// CreateSecret creates a new Secret containing no SecretVersions. +func (c *Client) CreateSecret(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.CreateSecret[0:len(c.CallOptions.CreateSecret):len(c.CallOptions.CreateSecret)], opts...) + var resp *secretmanagerpb.Secret + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.CreateSecret(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// AddSecretVersion creates a new SecretVersion containing secret data and attaches +// it to an existing Secret. +func (c *Client) AddSecretVersion(ctx context.Context, req *secretmanagerpb.AddSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.AddSecretVersion[0:len(c.CallOptions.AddSecretVersion):len(c.CallOptions.AddSecretVersion)], opts...) + var resp *secretmanagerpb.SecretVersion + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.AddSecretVersion(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// GetSecret gets metadata for a given Secret. +func (c *Client) GetSecret(ctx context.Context, req *secretmanagerpb.GetSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.GetSecret[0:len(c.CallOptions.GetSecret):len(c.CallOptions.GetSecret)], opts...) + var resp *secretmanagerpb.Secret + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.GetSecret(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// UpdateSecret updates metadata of an existing Secret. +func (c *Client) UpdateSecret(ctx context.Context, req *secretmanagerpb.UpdateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "secret.name", url.QueryEscape(req.GetSecret().GetName()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.UpdateSecret[0:len(c.CallOptions.UpdateSecret):len(c.CallOptions.UpdateSecret)], opts...) + var resp *secretmanagerpb.Secret + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.UpdateSecret(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// DeleteSecret deletes a Secret. +func (c *Client) DeleteSecret(ctx context.Context, req *secretmanagerpb.DeleteSecretRequest, opts ...gax.CallOption) error { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.DeleteSecret[0:len(c.CallOptions.DeleteSecret):len(c.CallOptions.DeleteSecret)], opts...) + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + _, err = c.client.DeleteSecret(ctx, req, settings.GRPC...) + return err + }, opts...) + return err +} + +// ListSecretVersions lists SecretVersions. This call does not return secret +// data. +func (c *Client) ListSecretVersions(ctx context.Context, req *secretmanagerpb.ListSecretVersionsRequest, opts ...gax.CallOption) *SecretVersionIterator { + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.ListSecretVersions[0:len(c.CallOptions.ListSecretVersions):len(c.CallOptions.ListSecretVersions)], opts...) + it := &SecretVersionIterator{} + req = proto.Clone(req).(*secretmanagerpb.ListSecretVersionsRequest) + it.InternalFetch = func(pageSize int, pageToken string) ([]*secretmanagerpb.SecretVersion, string, error) { + var resp *secretmanagerpb.ListSecretVersionsResponse + req.PageToken = pageToken + if pageSize > math.MaxInt32 { + req.PageSize = math.MaxInt32 + } else { + req.PageSize = int32(pageSize) + } + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.ListSecretVersions(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, "", err + } + + it.Response = resp + return resp.GetVersions(), resp.GetNextPageToken(), nil + } + fetch := func(pageSize int, pageToken string) (string, error) { + items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) + if err != nil { + return "", err + } + it.items = append(it.items, items...) + return nextPageToken, nil + } + it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) + it.pageInfo.MaxSize = int(req.GetPageSize()) + it.pageInfo.Token = req.GetPageToken() + return it +} + +// GetSecretVersion gets metadata for a SecretVersion. +// +// projects/*/secrets/*/versions/latest is an alias to the latest +// SecretVersion. +func (c *Client) GetSecretVersion(ctx context.Context, req *secretmanagerpb.GetSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.GetSecretVersion[0:len(c.CallOptions.GetSecretVersion):len(c.CallOptions.GetSecretVersion)], opts...) + var resp *secretmanagerpb.SecretVersion + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.GetSecretVersion(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// AccessSecretVersion accesses a SecretVersion. This call returns the secret data. +// +// projects/*/secrets/*/versions/latest is an alias to the latest +// SecretVersion. +func (c *Client) AccessSecretVersion(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.AccessSecretVersion[0:len(c.CallOptions.AccessSecretVersion):len(c.CallOptions.AccessSecretVersion)], opts...) + var resp *secretmanagerpb.AccessSecretVersionResponse + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.AccessSecretVersion(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// DisableSecretVersion disables a SecretVersion. +// +// Sets the state of the SecretVersion to +// DISABLED. +func (c *Client) DisableSecretVersion(ctx context.Context, req *secretmanagerpb.DisableSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.DisableSecretVersion[0:len(c.CallOptions.DisableSecretVersion):len(c.CallOptions.DisableSecretVersion)], opts...) + var resp *secretmanagerpb.SecretVersion + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.DisableSecretVersion(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// EnableSecretVersion enables a SecretVersion. +// +// Sets the state of the SecretVersion to +// ENABLED. +func (c *Client) EnableSecretVersion(ctx context.Context, req *secretmanagerpb.EnableSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.EnableSecretVersion[0:len(c.CallOptions.EnableSecretVersion):len(c.CallOptions.EnableSecretVersion)], opts...) + var resp *secretmanagerpb.SecretVersion + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.EnableSecretVersion(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// DestroySecretVersion destroys a SecretVersion. +// +// Sets the state of the SecretVersion to +// DESTROYED and irrevocably destroys the +// secret data. +func (c *Client) DestroySecretVersion(ctx context.Context, req *secretmanagerpb.DestroySecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.DestroySecretVersion[0:len(c.CallOptions.DestroySecretVersion):len(c.CallOptions.DestroySecretVersion)], opts...) + var resp *secretmanagerpb.SecretVersion + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.DestroySecretVersion(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// SetIamPolicy sets the access control policy on the specified secret. Replaces any +// existing policy. +// +// Permissions on SecretVersions are enforced according +// to the policy set on the associated Secret. +func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.SetIamPolicy[0:len(c.CallOptions.SetIamPolicy):len(c.CallOptions.SetIamPolicy)], opts...) + var resp *iampb.Policy + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.SetIamPolicy(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// GetIamPolicy gets the access control policy for a secret. +// Returns empty policy if the secret exists and does not have a policy set. +func (c *Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.GetIamPolicy[0:len(c.CallOptions.GetIamPolicy):len(c.CallOptions.GetIamPolicy)], opts...) + var resp *iampb.Policy + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.GetIamPolicy(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// TestIamPermissions returns permissions that a caller has for the specified secret. +// If the secret does not exist, this call returns an empty set of +// permissions, not a NOT_FOUND error. +// +// Note: This operation is designed to be used for building permission-aware +// UIs and command-line tools, not for authorization checking. This operation +// may “fail open” without warning. +func (c *Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) { + if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { + cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) + defer cancel() + ctx = cctx + } + md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource()))) + ctx = insertMetadata(ctx, c.xGoogMetadata, md) + opts = append(c.CallOptions.TestIamPermissions[0:len(c.CallOptions.TestIamPermissions):len(c.CallOptions.TestIamPermissions)], opts...) + var resp *iampb.TestIamPermissionsResponse + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.client.TestIamPermissions(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +// SecretIterator manages a stream of *secretmanagerpb.Secret. +type SecretIterator struct { + items []*secretmanagerpb.Secret + pageInfo *iterator.PageInfo + nextFunc func() error + + // Response is the raw response for the current page. + // It must be cast to the RPC response type. + // Calling Next() or InternalFetch() updates this value. + Response interface{} + + // InternalFetch is for use by the Google Cloud Libraries only. + // It is not part of the stable interface of this package. + // + // InternalFetch returns results from a single call to the underlying RPC. + // The number of results is no greater than pageSize. + // If there are no more results, nextPageToken is empty and err is nil. + InternalFetch func(pageSize int, pageToken string) (results []*secretmanagerpb.Secret, nextPageToken string, err error) +} + +// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. +func (it *SecretIterator) PageInfo() *iterator.PageInfo { + return it.pageInfo +} + +// Next returns the next result. Its second return value is iterator.Done if there are no more +// results. Once Next returns Done, all subsequent calls will return Done. +func (it *SecretIterator) Next() (*secretmanagerpb.Secret, error) { + var item *secretmanagerpb.Secret + if err := it.nextFunc(); err != nil { + return item, err + } + item = it.items[0] + it.items = it.items[1:] + return item, nil +} + +func (it *SecretIterator) bufLen() int { + return len(it.items) +} + +func (it *SecretIterator) takeBuf() interface{} { + b := it.items + it.items = nil + return b +} + +// SecretVersionIterator manages a stream of *secretmanagerpb.SecretVersion. +type SecretVersionIterator struct { + items []*secretmanagerpb.SecretVersion + pageInfo *iterator.PageInfo + nextFunc func() error + + // Response is the raw response for the current page. + // It must be cast to the RPC response type. + // Calling Next() or InternalFetch() updates this value. + Response interface{} + + // InternalFetch is for use by the Google Cloud Libraries only. + // It is not part of the stable interface of this package. + // + // InternalFetch returns results from a single call to the underlying RPC. + // The number of results is no greater than pageSize. + // If there are no more results, nextPageToken is empty and err is nil. + InternalFetch func(pageSize int, pageToken string) (results []*secretmanagerpb.SecretVersion, nextPageToken string, err error) +} + +// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. +func (it *SecretVersionIterator) PageInfo() *iterator.PageInfo { + return it.pageInfo +} + +// Next returns the next result. Its second return value is iterator.Done if there are no more +// results. Once Next returns Done, all subsequent calls will return Done. +func (it *SecretVersionIterator) Next() (*secretmanagerpb.SecretVersion, error) { + var item *secretmanagerpb.SecretVersion + if err := it.nextFunc(); err != nil { + return item, err + } + item = it.items[0] + it.items = it.items[1:] + return item, nil +} + +func (it *SecretVersionIterator) bufLen() int { + return len(it.items) +} + +func (it *SecretVersionIterator) takeBuf() interface{} { + b := it.items + it.items = nil + return b +} diff --git a/vendor/cloud.google.com/go/testing.md b/vendor/cloud.google.com/go/testing.md new file mode 100644 index 0000000..03867d5 --- /dev/null +++ b/vendor/cloud.google.com/go/testing.md @@ -0,0 +1,236 @@ +# Testing Code that depends on Go Client Libraries + +The Go client libraries generated as a part of `cloud.google.com/go` all take +the approach of returning concrete types instead of interfaces. That way, new +fields and methods can be added to the libraries without breaking users. This +document will go over some patterns that can be used to test code that depends +on the Go client libraries. + +## Testing gRPC services using fakes + +*Note*: You can see the full +[example code using a fake here](https://github.com/googleapis/google-cloud-go/tree/master/internal/examples/fake). + +The clients found in `cloud.google.com/go` are gRPC based, with a couple of +notable exceptions being the [`storage`](https://pkg.go.dev/cloud.google.com/go/storage) +and [`bigquery`](https://pkg.go.dev/cloud.google.com/go/bigquery) clients. +Interactions with gRPC services can be faked by serving up your own in-memory +server within your test. One benefit of using this approach is that you don’t +need to define an interface in your runtime code; you can keep using +concrete struct types. You instead define a fake server in your test code. For +example, take a look at the following function: + +```go +import ( + "context" + "fmt" + "log" + "os" + + translate "cloud.google.com/go/translate/apiv3" + "github.com/googleapis/gax-go/v2" + translatepb "google.golang.org/genproto/googleapis/cloud/translate/v3" +) + +func TranslateTextWithConcreteClient(client *translate.TranslationClient, text string, targetLang string) (string, error) { + ctx := context.Background() + log.Printf("Translating %q to %q", text, targetLang) + req := &translatepb.TranslateTextRequest{ + Parent: fmt.Sprintf("projects/%s/locations/global", os.Getenv("GOOGLE_CLOUD_PROJECT")), + TargetLanguageCode: "en-US", + Contents: []string{text}, + } + resp, err := client.TranslateText(ctx, req) + if err != nil { + return "", fmt.Errorf("unable to translate text: %v", err) + } + translations := resp.GetTranslations() + if len(translations) != 1 { + return "", fmt.Errorf("expected only one result, got %d", len(translations)) + } + return translations[0].TranslatedText, nil +} +``` + +Here is an example of what a fake server implementation would look like for +faking the interactions above: + +```go +import ( + "context" + + translatepb "google.golang.org/genproto/googleapis/cloud/translate/v3" +) + +type fakeTranslationServer struct { + translatepb.UnimplementedTranslationServiceServer +} + +func (f *fakeTranslationServer) TranslateText(ctx context.Context, req *translatepb.TranslateTextRequest) (*translatepb.TranslateTextResponse, error) { + resp := &translatepb.TranslateTextResponse{ + Translations: []*translatepb.Translation{ + &translatepb.Translation{ + TranslatedText: "Hello World", + }, + }, + } + return resp, nil +} +``` + +All of the generated protobuf code found in [google.golang.org/genproto](https://pkg.go.dev/google.golang.org/genproto) +contains a similar `package.UnimplmentedFooServer` type that is useful for +creating fakes. By embedding the unimplemented server in the +`fakeTranslationServer`, the fake will “inherit” all of the RPCs the server +exposes. Then, by providing our own `fakeTranslationServer.TranslateText` +method you can “override” the default unimplemented behavior of the one RPC that +you would like to be faked. + +The test itself does require a little bit of setup: start up a `net.Listener`, +register the server, and tell the client library to call the server: + +```go +import ( + "context" + "net" + "testing" + + translate "cloud.google.com/go/translate/apiv3" + "google.golang.org/api/option" + translatepb "google.golang.org/genproto/googleapis/cloud/translate/v3" + "google.golang.org/grpc" +) + +func TestTranslateTextWithConcreteClient(t *testing.T) { + ctx := context.Background() + + // Setup the fake server. + fakeTranslationServer := &fakeTranslationServer{} + l, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatal(err) + } + gsrv := grpc.NewServer() + translatepb.RegisterTranslationServiceServer(gsrv, fakeTranslationServer) + fakeServerAddr := l.Addr().String() + go func() { + if err := gsrv.Serve(l); err != nil { + panic(err) + } + }() + + // Create a client. + client, err := translate.NewTranslationClient(ctx, + option.WithEndpoint(fakeServerAddr), + option.WithoutAuthentication(), + option.WithGRPCDialOption(grpc.WithInsecure()), + ) + if err != nil { + t.Fatal(err) + } + + // Run the test. + text, err := TranslateTextWithConcreteClient(client, "Hola Mundo", "en-US") + if err != nil { + t.Fatal(err) + } + if text != "Hello World" { + t.Fatalf("got %q, want Hello World", text) + } +} +``` + +## Testing using mocks + +*Note*: You can see the full +[example code using a mock here](https://github.com/googleapis/google-cloud-go/tree/master/internal/examples/mock). + +When mocking code you need to work with interfaces. Let’s create an interface +for the `cloud.google.com/go/translate/apiv3` client used in the +`TranslateTextWithConcreteClient` function mentioned in the previous section. +The `translate.Client` has over a dozen methods but this code only uses one of +them. Here is an interface that satisfies the interactions of the +`translate.Client` in this function. + +```go +type TranslationClient interface { + TranslateText(ctx context.Context, req *translatepb.TranslateTextRequest, opts ...gax.CallOption) (*translatepb.TranslateTextResponse, error) +} +``` + +Now that we have an interface that satisfies the method being used we can +rewrite the function signature to take the interface instead of the concrete +type. + +```go +func TranslateTextWithInterfaceClient(client TranslationClient, text string, targetLang string) (string, error) { +// ... +} +``` + +This allows a real `translate.Client` to be passed to the method in production +and for a mock implementation to be passed in during testing. This pattern can +be applied to any Go code, not just `cloud.google.com/go`. This is because +interfaces in Go are implicitly satisfied. Structs in the client libraries can +implicitly implement interfaces defined in your codebase. Let’s take a look at +what it might look like to define a lightweight mock for the `TranslationClient` +interface. + +```go +import ( + "context" + "testing" + + "github.com/googleapis/gax-go/v2" + translatepb "google.golang.org/genproto/googleapis/cloud/translate/v3" +) + +type mockClient struct{} + +func (*mockClient) TranslateText(_ context.Context, req *translatepb.TranslateTextRequest, opts ...gax.CallOption) (*translatepb.TranslateTextResponse, error) { + resp := &translatepb.TranslateTextResponse{ + Translations: []*translatepb.Translation{ + &translatepb.Translation{ + TranslatedText: "Hello World", + }, + }, + } + return resp, nil +} + +func TestTranslateTextWithAbstractClient(t *testing.T) { + client := &mockClient{} + text, err := TranslateTextWithInterfaceClient(client, "Hola Mundo", "en-US") + if err != nil { + t.Fatal(err) + } + if text != "Hello World" { + t.Fatalf("got %q, want Hello World", text) + } +} +``` + +If you prefer to not write your own mocks there are mocking frameworks such as +[golang/mock](https://github.com/golang/mock) which can generate mocks for you +from an interface. As a word of caution though, try to not +[overuse mocks](https://testing.googleblog.com/2013/05/testing-on-toilet-dont-overuse-mocks.html). + +## Testing using emulators + +Some of the client libraries provided in `cloud.google.com/go` support running +against a service emulator. The concept is similar to that of using fakes, +mentioned above, but the server is managed for you. You just need to start it up +and instruct the client library to talk to the emulator by setting a service +specific emulator environment variable. Current services/environment-variables +are: + +- bigtable: `BIGTABLE_EMULATOR_HOST` +- datastore: `DATASTORE_EMULATOR_HOST` +- firestore: `FIRESTORE_EMULATOR_HOST` +- pubsub: `PUBSUB_EMULATOR_HOST` +- spanner: `SPANNER_EMULATOR_HOST` +- storage: `STORAGE_EMULATOR_HOST` + - Although the storage client supports an emulator environment variable there is no official emulator provided by gcloud. + +For more information on emulators please refer to the +[gcloud documentation](https://cloud.google.com/sdk/gcloud/reference/beta/emulators). diff --git a/vendor/cloud.google.com/go/tools.go b/vendor/cloud.google.com/go/tools.go index 5c91f8a..da5ca58 100644 --- a/vendor/cloud.google.com/go/tools.go +++ b/vendor/cloud.google.com/go/tools.go @@ -28,5 +28,4 @@ import ( _ "github.com/jstemmer/go-junit-report" _ "golang.org/x/lint/golint" _ "golang.org/x/tools/cmd/goimports" - _ "honnef.co/go/tools/cmd/staticcheck" ) diff --git a/vendor/github.com/BurntSushi/toml/.gitignore b/vendor/github.com/BurntSushi/toml/.gitignore deleted file mode 100644 index 0cd3800..0000000 --- a/vendor/github.com/BurntSushi/toml/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -TAGS -tags -.*.swp -tomlcheck/tomlcheck -toml.test diff --git a/vendor/github.com/BurntSushi/toml/.travis.yml b/vendor/github.com/BurntSushi/toml/.travis.yml deleted file mode 100644 index 8b8afc4..0000000 --- a/vendor/github.com/BurntSushi/toml/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: go -go: - - 1.1 - - 1.2 - - 1.3 - - 1.4 - - 1.5 - - 1.6 - - tip -install: - - go install ./... - - go get github.com/BurntSushi/toml-test -script: - - export PATH="$PATH:$HOME/gopath/bin" - - make test diff --git a/vendor/github.com/BurntSushi/toml/COMPATIBLE b/vendor/github.com/BurntSushi/toml/COMPATIBLE deleted file mode 100644 index 6efcfd0..0000000 --- a/vendor/github.com/BurntSushi/toml/COMPATIBLE +++ /dev/null @@ -1,3 +0,0 @@ -Compatible with TOML version -[v0.4.0](https://github.com/toml-lang/toml/blob/v0.4.0/versions/en/toml-v0.4.0.md) - diff --git a/vendor/github.com/BurntSushi/toml/Makefile b/vendor/github.com/BurntSushi/toml/Makefile deleted file mode 100644 index 3600848..0000000 --- a/vendor/github.com/BurntSushi/toml/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -install: - go install ./... - -test: install - go test -v - toml-test toml-test-decoder - toml-test -encoder toml-test-encoder - -fmt: - gofmt -w *.go */*.go - colcheck *.go */*.go - -tags: - find ./ -name '*.go' -print0 | xargs -0 gotags > TAGS - -push: - git push origin master - git push github master - diff --git a/vendor/github.com/BurntSushi/toml/README.md b/vendor/github.com/BurntSushi/toml/README.md deleted file mode 100644 index 7c1b37e..0000000 --- a/vendor/github.com/BurntSushi/toml/README.md +++ /dev/null @@ -1,218 +0,0 @@ -## TOML parser and encoder for Go with reflection - -TOML stands for Tom's Obvious, Minimal Language. This Go package provides a -reflection interface similar to Go's standard library `json` and `xml` -packages. This package also supports the `encoding.TextUnmarshaler` and -`encoding.TextMarshaler` interfaces so that you can define custom data -representations. (There is an example of this below.) - -Spec: https://github.com/toml-lang/toml - -Compatible with TOML version -[v0.4.0](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md) - -Documentation: https://godoc.org/github.com/BurntSushi/toml - -Installation: - -```bash -go get github.com/BurntSushi/toml -``` - -Try the toml validator: - -```bash -go get github.com/BurntSushi/toml/cmd/tomlv -tomlv some-toml-file.toml -``` - -[![Build Status](https://travis-ci.org/BurntSushi/toml.svg?branch=master)](https://travis-ci.org/BurntSushi/toml) [![GoDoc](https://godoc.org/github.com/BurntSushi/toml?status.svg)](https://godoc.org/github.com/BurntSushi/toml) - -### Testing - -This package passes all tests in -[toml-test](https://github.com/BurntSushi/toml-test) for both the decoder -and the encoder. - -### Examples - -This package works similarly to how the Go standard library handles `XML` -and `JSON`. Namely, data is loaded into Go values via reflection. - -For the simplest example, consider some TOML file as just a list of keys -and values: - -```toml -Age = 25 -Cats = [ "Cauchy", "Plato" ] -Pi = 3.14 -Perfection = [ 6, 28, 496, 8128 ] -DOB = 1987-07-05T05:45:00Z -``` - -Which could be defined in Go as: - -```go -type Config struct { - Age int - Cats []string - Pi float64 - Perfection []int - DOB time.Time // requires `import time` -} -``` - -And then decoded with: - -```go -var conf Config -if _, err := toml.Decode(tomlData, &conf); err != nil { - // handle error -} -``` - -You can also use struct tags if your struct field name doesn't map to a TOML -key value directly: - -```toml -some_key_NAME = "wat" -``` - -```go -type TOML struct { - ObscureKey string `toml:"some_key_NAME"` -} -``` - -### Using the `encoding.TextUnmarshaler` interface - -Here's an example that automatically parses duration strings into -`time.Duration` values: - -```toml -[[song]] -name = "Thunder Road" -duration = "4m49s" - -[[song]] -name = "Stairway to Heaven" -duration = "8m03s" -``` - -Which can be decoded with: - -```go -type song struct { - Name string - Duration duration -} -type songs struct { - Song []song -} -var favorites songs -if _, err := toml.Decode(blob, &favorites); err != nil { - log.Fatal(err) -} - -for _, s := range favorites.Song { - fmt.Printf("%s (%s)\n", s.Name, s.Duration) -} -``` - -And you'll also need a `duration` type that satisfies the -`encoding.TextUnmarshaler` interface: - -```go -type duration struct { - time.Duration -} - -func (d *duration) UnmarshalText(text []byte) error { - var err error - d.Duration, err = time.ParseDuration(string(text)) - return err -} -``` - -### More complex usage - -Here's an example of how to load the example from the official spec page: - -```toml -# This is a TOML document. Boom. - -title = "TOML Example" - -[owner] -name = "Tom Preston-Werner" -organization = "GitHub" -bio = "GitHub Cofounder & CEO\nLikes tater tots and beer." -dob = 1979-05-27T07:32:00Z # First class dates? Why not? - -[database] -server = "192.168.1.1" -ports = [ 8001, 8001, 8002 ] -connection_max = 5000 -enabled = true - -[servers] - - # You can indent as you please. Tabs or spaces. TOML don't care. - [servers.alpha] - ip = "10.0.0.1" - dc = "eqdc10" - - [servers.beta] - ip = "10.0.0.2" - dc = "eqdc10" - -[clients] -data = [ ["gamma", "delta"], [1, 2] ] # just an update to make sure parsers support it - -# Line breaks are OK when inside arrays -hosts = [ - "alpha", - "omega" -] -``` - -And the corresponding Go types are: - -```go -type tomlConfig struct { - Title string - Owner ownerInfo - DB database `toml:"database"` - Servers map[string]server - Clients clients -} - -type ownerInfo struct { - Name string - Org string `toml:"organization"` - Bio string - DOB time.Time -} - -type database struct { - Server string - Ports []int - ConnMax int `toml:"connection_max"` - Enabled bool -} - -type server struct { - IP string - DC string -} - -type clients struct { - Data [][]interface{} - Hosts []string -} -``` - -Note that a case insensitive match will be tried if an exact match can't be -found. - -A working example of the above can be found in `_examples/example.{go,toml}`. diff --git a/vendor/github.com/BurntSushi/toml/decode.go b/vendor/github.com/BurntSushi/toml/decode.go deleted file mode 100644 index b0fd51d..0000000 --- a/vendor/github.com/BurntSushi/toml/decode.go +++ /dev/null @@ -1,509 +0,0 @@ -package toml - -import ( - "fmt" - "io" - "io/ioutil" - "math" - "reflect" - "strings" - "time" -) - -func e(format string, args ...interface{}) error { - return fmt.Errorf("toml: "+format, args...) -} - -// Unmarshaler is the interface implemented by objects that can unmarshal a -// TOML description of themselves. -type Unmarshaler interface { - UnmarshalTOML(interface{}) error -} - -// Unmarshal decodes the contents of `p` in TOML format into a pointer `v`. -func Unmarshal(p []byte, v interface{}) error { - _, err := Decode(string(p), v) - return err -} - -// Primitive is a TOML value that hasn't been decoded into a Go value. -// When using the various `Decode*` functions, the type `Primitive` may -// be given to any value, and its decoding will be delayed. -// -// A `Primitive` value can be decoded using the `PrimitiveDecode` function. -// -// The underlying representation of a `Primitive` value is subject to change. -// Do not rely on it. -// -// N.B. Primitive values are still parsed, so using them will only avoid -// the overhead of reflection. They can be useful when you don't know the -// exact type of TOML data until run time. -type Primitive struct { - undecoded interface{} - context Key -} - -// DEPRECATED! -// -// Use MetaData.PrimitiveDecode instead. -func PrimitiveDecode(primValue Primitive, v interface{}) error { - md := MetaData{decoded: make(map[string]bool)} - return md.unify(primValue.undecoded, rvalue(v)) -} - -// PrimitiveDecode is just like the other `Decode*` functions, except it -// decodes a TOML value that has already been parsed. Valid primitive values -// can *only* be obtained from values filled by the decoder functions, -// including this method. (i.e., `v` may contain more `Primitive` -// values.) -// -// Meta data for primitive values is included in the meta data returned by -// the `Decode*` functions with one exception: keys returned by the Undecoded -// method will only reflect keys that were decoded. Namely, any keys hidden -// behind a Primitive will be considered undecoded. Executing this method will -// update the undecoded keys in the meta data. (See the example.) -func (md *MetaData) PrimitiveDecode(primValue Primitive, v interface{}) error { - md.context = primValue.context - defer func() { md.context = nil }() - return md.unify(primValue.undecoded, rvalue(v)) -} - -// Decode will decode the contents of `data` in TOML format into a pointer -// `v`. -// -// TOML hashes correspond to Go structs or maps. (Dealer's choice. They can be -// used interchangeably.) -// -// TOML arrays of tables correspond to either a slice of structs or a slice -// of maps. -// -// TOML datetimes correspond to Go `time.Time` values. -// -// All other TOML types (float, string, int, bool and array) correspond -// to the obvious Go types. -// -// An exception to the above rules is if a type implements the -// encoding.TextUnmarshaler interface. In this case, any primitive TOML value -// (floats, strings, integers, booleans and datetimes) will be converted to -// a byte string and given to the value's UnmarshalText method. See the -// Unmarshaler example for a demonstration with time duration strings. -// -// Key mapping -// -// TOML keys can map to either keys in a Go map or field names in a Go -// struct. The special `toml` struct tag may be used to map TOML keys to -// struct fields that don't match the key name exactly. (See the example.) -// A case insensitive match to struct names will be tried if an exact match -// can't be found. -// -// The mapping between TOML values and Go values is loose. That is, there -// may exist TOML values that cannot be placed into your representation, and -// there may be parts of your representation that do not correspond to -// TOML values. This loose mapping can be made stricter by using the IsDefined -// and/or Undecoded methods on the MetaData returned. -// -// This decoder will not handle cyclic types. If a cyclic type is passed, -// `Decode` will not terminate. -func Decode(data string, v interface{}) (MetaData, error) { - rv := reflect.ValueOf(v) - if rv.Kind() != reflect.Ptr { - return MetaData{}, e("Decode of non-pointer %s", reflect.TypeOf(v)) - } - if rv.IsNil() { - return MetaData{}, e("Decode of nil %s", reflect.TypeOf(v)) - } - p, err := parse(data) - if err != nil { - return MetaData{}, err - } - md := MetaData{ - p.mapping, p.types, p.ordered, - make(map[string]bool, len(p.ordered)), nil, - } - return md, md.unify(p.mapping, indirect(rv)) -} - -// DecodeFile is just like Decode, except it will automatically read the -// contents of the file at `fpath` and decode it for you. -func DecodeFile(fpath string, v interface{}) (MetaData, error) { - bs, err := ioutil.ReadFile(fpath) - if err != nil { - return MetaData{}, err - } - return Decode(string(bs), v) -} - -// DecodeReader is just like Decode, except it will consume all bytes -// from the reader and decode it for you. -func DecodeReader(r io.Reader, v interface{}) (MetaData, error) { - bs, err := ioutil.ReadAll(r) - if err != nil { - return MetaData{}, err - } - return Decode(string(bs), v) -} - -// unify performs a sort of type unification based on the structure of `rv`, -// which is the client representation. -// -// Any type mismatch produces an error. Finding a type that we don't know -// how to handle produces an unsupported type error. -func (md *MetaData) unify(data interface{}, rv reflect.Value) error { - - // Special case. Look for a `Primitive` value. - if rv.Type() == reflect.TypeOf((*Primitive)(nil)).Elem() { - // Save the undecoded data and the key context into the primitive - // value. - context := make(Key, len(md.context)) - copy(context, md.context) - rv.Set(reflect.ValueOf(Primitive{ - undecoded: data, - context: context, - })) - return nil - } - - // Special case. Unmarshaler Interface support. - if rv.CanAddr() { - if v, ok := rv.Addr().Interface().(Unmarshaler); ok { - return v.UnmarshalTOML(data) - } - } - - // Special case. Handle time.Time values specifically. - // TODO: Remove this code when we decide to drop support for Go 1.1. - // This isn't necessary in Go 1.2 because time.Time satisfies the encoding - // interfaces. - if rv.Type().AssignableTo(rvalue(time.Time{}).Type()) { - return md.unifyDatetime(data, rv) - } - - // Special case. Look for a value satisfying the TextUnmarshaler interface. - if v, ok := rv.Interface().(TextUnmarshaler); ok { - return md.unifyText(data, v) - } - // BUG(burntsushi) - // The behavior here is incorrect whenever a Go type satisfies the - // encoding.TextUnmarshaler interface but also corresponds to a TOML - // hash or array. In particular, the unmarshaler should only be applied - // to primitive TOML values. But at this point, it will be applied to - // all kinds of values and produce an incorrect error whenever those values - // are hashes or arrays (including arrays of tables). - - k := rv.Kind() - - // laziness - if k >= reflect.Int && k <= reflect.Uint64 { - return md.unifyInt(data, rv) - } - switch k { - case reflect.Ptr: - elem := reflect.New(rv.Type().Elem()) - err := md.unify(data, reflect.Indirect(elem)) - if err != nil { - return err - } - rv.Set(elem) - return nil - case reflect.Struct: - return md.unifyStruct(data, rv) - case reflect.Map: - return md.unifyMap(data, rv) - case reflect.Array: - return md.unifyArray(data, rv) - case reflect.Slice: - return md.unifySlice(data, rv) - case reflect.String: - return md.unifyString(data, rv) - case reflect.Bool: - return md.unifyBool(data, rv) - case reflect.Interface: - // we only support empty interfaces. - if rv.NumMethod() > 0 { - return e("unsupported type %s", rv.Type()) - } - return md.unifyAnything(data, rv) - case reflect.Float32: - fallthrough - case reflect.Float64: - return md.unifyFloat64(data, rv) - } - return e("unsupported type %s", rv.Kind()) -} - -func (md *MetaData) unifyStruct(mapping interface{}, rv reflect.Value) error { - tmap, ok := mapping.(map[string]interface{}) - if !ok { - if mapping == nil { - return nil - } - return e("type mismatch for %s: expected table but found %T", - rv.Type().String(), mapping) - } - - for key, datum := range tmap { - var f *field - fields := cachedTypeFields(rv.Type()) - for i := range fields { - ff := &fields[i] - if ff.name == key { - f = ff - break - } - if f == nil && strings.EqualFold(ff.name, key) { - f = ff - } - } - if f != nil { - subv := rv - for _, i := range f.index { - subv = indirect(subv.Field(i)) - } - if isUnifiable(subv) { - md.decoded[md.context.add(key).String()] = true - md.context = append(md.context, key) - if err := md.unify(datum, subv); err != nil { - return err - } - md.context = md.context[0 : len(md.context)-1] - } else if f.name != "" { - // Bad user! No soup for you! - return e("cannot write unexported field %s.%s", - rv.Type().String(), f.name) - } - } - } - return nil -} - -func (md *MetaData) unifyMap(mapping interface{}, rv reflect.Value) error { - tmap, ok := mapping.(map[string]interface{}) - if !ok { - if tmap == nil { - return nil - } - return badtype("map", mapping) - } - if rv.IsNil() { - rv.Set(reflect.MakeMap(rv.Type())) - } - for k, v := range tmap { - md.decoded[md.context.add(k).String()] = true - md.context = append(md.context, k) - - rvkey := indirect(reflect.New(rv.Type().Key())) - rvval := reflect.Indirect(reflect.New(rv.Type().Elem())) - if err := md.unify(v, rvval); err != nil { - return err - } - md.context = md.context[0 : len(md.context)-1] - - rvkey.SetString(k) - rv.SetMapIndex(rvkey, rvval) - } - return nil -} - -func (md *MetaData) unifyArray(data interface{}, rv reflect.Value) error { - datav := reflect.ValueOf(data) - if datav.Kind() != reflect.Slice { - if !datav.IsValid() { - return nil - } - return badtype("slice", data) - } - sliceLen := datav.Len() - if sliceLen != rv.Len() { - return e("expected array length %d; got TOML array of length %d", - rv.Len(), sliceLen) - } - return md.unifySliceArray(datav, rv) -} - -func (md *MetaData) unifySlice(data interface{}, rv reflect.Value) error { - datav := reflect.ValueOf(data) - if datav.Kind() != reflect.Slice { - if !datav.IsValid() { - return nil - } - return badtype("slice", data) - } - n := datav.Len() - if rv.IsNil() || rv.Cap() < n { - rv.Set(reflect.MakeSlice(rv.Type(), n, n)) - } - rv.SetLen(n) - return md.unifySliceArray(datav, rv) -} - -func (md *MetaData) unifySliceArray(data, rv reflect.Value) error { - sliceLen := data.Len() - for i := 0; i < sliceLen; i++ { - v := data.Index(i).Interface() - sliceval := indirect(rv.Index(i)) - if err := md.unify(v, sliceval); err != nil { - return err - } - } - return nil -} - -func (md *MetaData) unifyDatetime(data interface{}, rv reflect.Value) error { - if _, ok := data.(time.Time); ok { - rv.Set(reflect.ValueOf(data)) - return nil - } - return badtype("time.Time", data) -} - -func (md *MetaData) unifyString(data interface{}, rv reflect.Value) error { - if s, ok := data.(string); ok { - rv.SetString(s) - return nil - } - return badtype("string", data) -} - -func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) error { - if num, ok := data.(float64); ok { - switch rv.Kind() { - case reflect.Float32: - fallthrough - case reflect.Float64: - rv.SetFloat(num) - default: - panic("bug") - } - return nil - } - return badtype("float", data) -} - -func (md *MetaData) unifyInt(data interface{}, rv reflect.Value) error { - if num, ok := data.(int64); ok { - if rv.Kind() >= reflect.Int && rv.Kind() <= reflect.Int64 { - switch rv.Kind() { - case reflect.Int, reflect.Int64: - // No bounds checking necessary. - case reflect.Int8: - if num < math.MinInt8 || num > math.MaxInt8 { - return e("value %d is out of range for int8", num) - } - case reflect.Int16: - if num < math.MinInt16 || num > math.MaxInt16 { - return e("value %d is out of range for int16", num) - } - case reflect.Int32: - if num < math.MinInt32 || num > math.MaxInt32 { - return e("value %d is out of range for int32", num) - } - } - rv.SetInt(num) - } else if rv.Kind() >= reflect.Uint && rv.Kind() <= reflect.Uint64 { - unum := uint64(num) - switch rv.Kind() { - case reflect.Uint, reflect.Uint64: - // No bounds checking necessary. - case reflect.Uint8: - if num < 0 || unum > math.MaxUint8 { - return e("value %d is out of range for uint8", num) - } - case reflect.Uint16: - if num < 0 || unum > math.MaxUint16 { - return e("value %d is out of range for uint16", num) - } - case reflect.Uint32: - if num < 0 || unum > math.MaxUint32 { - return e("value %d is out of range for uint32", num) - } - } - rv.SetUint(unum) - } else { - panic("unreachable") - } - return nil - } - return badtype("integer", data) -} - -func (md *MetaData) unifyBool(data interface{}, rv reflect.Value) error { - if b, ok := data.(bool); ok { - rv.SetBool(b) - return nil - } - return badtype("boolean", data) -} - -func (md *MetaData) unifyAnything(data interface{}, rv reflect.Value) error { - rv.Set(reflect.ValueOf(data)) - return nil -} - -func (md *MetaData) unifyText(data interface{}, v TextUnmarshaler) error { - var s string - switch sdata := data.(type) { - case TextMarshaler: - text, err := sdata.MarshalText() - if err != nil { - return err - } - s = string(text) - case fmt.Stringer: - s = sdata.String() - case string: - s = sdata - case bool: - s = fmt.Sprintf("%v", sdata) - case int64: - s = fmt.Sprintf("%d", sdata) - case float64: - s = fmt.Sprintf("%f", sdata) - default: - return badtype("primitive (string-like)", data) - } - if err := v.UnmarshalText([]byte(s)); err != nil { - return err - } - return nil -} - -// rvalue returns a reflect.Value of `v`. All pointers are resolved. -func rvalue(v interface{}) reflect.Value { - return indirect(reflect.ValueOf(v)) -} - -// indirect returns the value pointed to by a pointer. -// Pointers are followed until the value is not a pointer. -// New values are allocated for each nil pointer. -// -// An exception to this rule is if the value satisfies an interface of -// interest to us (like encoding.TextUnmarshaler). -func indirect(v reflect.Value) reflect.Value { - if v.Kind() != reflect.Ptr { - if v.CanSet() { - pv := v.Addr() - if _, ok := pv.Interface().(TextUnmarshaler); ok { - return pv - } - } - return v - } - if v.IsNil() { - v.Set(reflect.New(v.Type().Elem())) - } - return indirect(reflect.Indirect(v)) -} - -func isUnifiable(rv reflect.Value) bool { - if rv.CanSet() { - return true - } - if _, ok := rv.Interface().(TextUnmarshaler); ok { - return true - } - return false -} - -func badtype(expected string, data interface{}) error { - return e("cannot load TOML value of type %T into a Go %s", data, expected) -} diff --git a/vendor/github.com/BurntSushi/toml/decode_meta.go b/vendor/github.com/BurntSushi/toml/decode_meta.go deleted file mode 100644 index b9914a6..0000000 --- a/vendor/github.com/BurntSushi/toml/decode_meta.go +++ /dev/null @@ -1,121 +0,0 @@ -package toml - -import "strings" - -// MetaData allows access to meta information about TOML data that may not -// be inferrable via reflection. In particular, whether a key has been defined -// and the TOML type of a key. -type MetaData struct { - mapping map[string]interface{} - types map[string]tomlType - keys []Key - decoded map[string]bool - context Key // Used only during decoding. -} - -// IsDefined returns true if the key given exists in the TOML data. The key -// should be specified hierarchially. e.g., -// -// // access the TOML key 'a.b.c' -// IsDefined("a", "b", "c") -// -// IsDefined will return false if an empty key given. Keys are case sensitive. -func (md *MetaData) IsDefined(key ...string) bool { - if len(key) == 0 { - return false - } - - var hash map[string]interface{} - var ok bool - var hashOrVal interface{} = md.mapping - for _, k := range key { - if hash, ok = hashOrVal.(map[string]interface{}); !ok { - return false - } - if hashOrVal, ok = hash[k]; !ok { - return false - } - } - return true -} - -// Type returns a string representation of the type of the key specified. -// -// Type will return the empty string if given an empty key or a key that -// does not exist. Keys are case sensitive. -func (md *MetaData) Type(key ...string) string { - fullkey := strings.Join(key, ".") - if typ, ok := md.types[fullkey]; ok { - return typ.typeString() - } - return "" -} - -// Key is the type of any TOML key, including key groups. Use (MetaData).Keys -// to get values of this type. -type Key []string - -func (k Key) String() string { - return strings.Join(k, ".") -} - -func (k Key) maybeQuotedAll() string { - var ss []string - for i := range k { - ss = append(ss, k.maybeQuoted(i)) - } - return strings.Join(ss, ".") -} - -func (k Key) maybeQuoted(i int) string { - quote := false - for _, c := range k[i] { - if !isBareKeyChar(c) { - quote = true - break - } - } - if quote { - return "\"" + strings.Replace(k[i], "\"", "\\\"", -1) + "\"" - } - return k[i] -} - -func (k Key) add(piece string) Key { - newKey := make(Key, len(k)+1) - copy(newKey, k) - newKey[len(k)] = piece - return newKey -} - -// Keys returns a slice of every key in the TOML data, including key groups. -// Each key is itself a slice, where the first element is the top of the -// hierarchy and the last is the most specific. -// -// The list will have the same order as the keys appeared in the TOML data. -// -// All keys returned are non-empty. -func (md *MetaData) Keys() []Key { - return md.keys -} - -// Undecoded returns all keys that have not been decoded in the order in which -// they appear in the original TOML document. -// -// This includes keys that haven't been decoded because of a Primitive value. -// Once the Primitive value is decoded, the keys will be considered decoded. -// -// Also note that decoding into an empty interface will result in no decoding, -// and so no keys will be considered decoded. -// -// In this sense, the Undecoded keys correspond to keys in the TOML document -// that do not have a concrete type in your representation. -func (md *MetaData) Undecoded() []Key { - undecoded := make([]Key, 0, len(md.keys)) - for _, key := range md.keys { - if !md.decoded[key.String()] { - undecoded = append(undecoded, key) - } - } - return undecoded -} diff --git a/vendor/github.com/BurntSushi/toml/doc.go b/vendor/github.com/BurntSushi/toml/doc.go deleted file mode 100644 index b371f39..0000000 --- a/vendor/github.com/BurntSushi/toml/doc.go +++ /dev/null @@ -1,27 +0,0 @@ -/* -Package toml provides facilities for decoding and encoding TOML configuration -files via reflection. There is also support for delaying decoding with -the Primitive type, and querying the set of keys in a TOML document with the -MetaData type. - -The specification implemented: https://github.com/toml-lang/toml - -The sub-command github.com/BurntSushi/toml/cmd/tomlv can be used to verify -whether a file is a valid TOML document. It can also be used to print the -type of each key in a TOML document. - -Testing - -There are two important types of tests used for this package. The first is -contained inside '*_test.go' files and uses the standard Go unit testing -framework. These tests are primarily devoted to holistically testing the -decoder and encoder. - -The second type of testing is used to verify the implementation's adherence -to the TOML specification. These tests have been factored into their own -project: https://github.com/BurntSushi/toml-test - -The reason the tests are in a separate project is so that they can be used by -any implementation of TOML. Namely, it is language agnostic. -*/ -package toml diff --git a/vendor/github.com/BurntSushi/toml/encode.go b/vendor/github.com/BurntSushi/toml/encode.go deleted file mode 100644 index d905c21..0000000 --- a/vendor/github.com/BurntSushi/toml/encode.go +++ /dev/null @@ -1,568 +0,0 @@ -package toml - -import ( - "bufio" - "errors" - "fmt" - "io" - "reflect" - "sort" - "strconv" - "strings" - "time" -) - -type tomlEncodeError struct{ error } - -var ( - errArrayMixedElementTypes = errors.New( - "toml: cannot encode array with mixed element types") - errArrayNilElement = errors.New( - "toml: cannot encode array with nil element") - errNonString = errors.New( - "toml: cannot encode a map with non-string key type") - errAnonNonStruct = errors.New( - "toml: cannot encode an anonymous field that is not a struct") - errArrayNoTable = errors.New( - "toml: TOML array element cannot contain a table") - errNoKey = errors.New( - "toml: top-level values must be Go maps or structs") - errAnything = errors.New("") // used in testing -) - -var quotedReplacer = strings.NewReplacer( - "\t", "\\t", - "\n", "\\n", - "\r", "\\r", - "\"", "\\\"", - "\\", "\\\\", -) - -// Encoder controls the encoding of Go values to a TOML document to some -// io.Writer. -// -// The indentation level can be controlled with the Indent field. -type Encoder struct { - // A single indentation level. By default it is two spaces. - Indent string - - // hasWritten is whether we have written any output to w yet. - hasWritten bool - w *bufio.Writer -} - -// NewEncoder returns a TOML encoder that encodes Go values to the io.Writer -// given. By default, a single indentation level is 2 spaces. -func NewEncoder(w io.Writer) *Encoder { - return &Encoder{ - w: bufio.NewWriter(w), - Indent: " ", - } -} - -// Encode writes a TOML representation of the Go value to the underlying -// io.Writer. If the value given cannot be encoded to a valid TOML document, -// then an error is returned. -// -// The mapping between Go values and TOML values should be precisely the same -// as for the Decode* functions. Similarly, the TextMarshaler interface is -// supported by encoding the resulting bytes as strings. (If you want to write -// arbitrary binary data then you will need to use something like base64 since -// TOML does not have any binary types.) -// -// When encoding TOML hashes (i.e., Go maps or structs), keys without any -// sub-hashes are encoded first. -// -// If a Go map is encoded, then its keys are sorted alphabetically for -// deterministic output. More control over this behavior may be provided if -// there is demand for it. -// -// Encoding Go values without a corresponding TOML representation---like map -// types with non-string keys---will cause an error to be returned. Similarly -// for mixed arrays/slices, arrays/slices with nil elements, embedded -// non-struct types and nested slices containing maps or structs. -// (e.g., [][]map[string]string is not allowed but []map[string]string is OK -// and so is []map[string][]string.) -func (enc *Encoder) Encode(v interface{}) error { - rv := eindirect(reflect.ValueOf(v)) - if err := enc.safeEncode(Key([]string{}), rv); err != nil { - return err - } - return enc.w.Flush() -} - -func (enc *Encoder) safeEncode(key Key, rv reflect.Value) (err error) { - defer func() { - if r := recover(); r != nil { - if terr, ok := r.(tomlEncodeError); ok { - err = terr.error - return - } - panic(r) - } - }() - enc.encode(key, rv) - return nil -} - -func (enc *Encoder) encode(key Key, rv reflect.Value) { - // Special case. Time needs to be in ISO8601 format. - // Special case. If we can marshal the type to text, then we used that. - // Basically, this prevents the encoder for handling these types as - // generic structs (or whatever the underlying type of a TextMarshaler is). - switch rv.Interface().(type) { - case time.Time, TextMarshaler: - enc.keyEqElement(key, rv) - return - } - - k := rv.Kind() - switch k { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, - reflect.Int64, - reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, - reflect.Uint64, - reflect.Float32, reflect.Float64, reflect.String, reflect.Bool: - enc.keyEqElement(key, rv) - case reflect.Array, reflect.Slice: - if typeEqual(tomlArrayHash, tomlTypeOfGo(rv)) { - enc.eArrayOfTables(key, rv) - } else { - enc.keyEqElement(key, rv) - } - case reflect.Interface: - if rv.IsNil() { - return - } - enc.encode(key, rv.Elem()) - case reflect.Map: - if rv.IsNil() { - return - } - enc.eTable(key, rv) - case reflect.Ptr: - if rv.IsNil() { - return - } - enc.encode(key, rv.Elem()) - case reflect.Struct: - enc.eTable(key, rv) - default: - panic(e("unsupported type for key '%s': %s", key, k)) - } -} - -// eElement encodes any value that can be an array element (primitives and -// arrays). -func (enc *Encoder) eElement(rv reflect.Value) { - switch v := rv.Interface().(type) { - case time.Time: - // Special case time.Time as a primitive. Has to come before - // TextMarshaler below because time.Time implements - // encoding.TextMarshaler, but we need to always use UTC. - enc.wf(v.UTC().Format("2006-01-02T15:04:05Z")) - return - case TextMarshaler: - // Special case. Use text marshaler if it's available for this value. - if s, err := v.MarshalText(); err != nil { - encPanic(err) - } else { - enc.writeQuoted(string(s)) - } - return - } - switch rv.Kind() { - case reflect.Bool: - enc.wf(strconv.FormatBool(rv.Bool())) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, - reflect.Int64: - enc.wf(strconv.FormatInt(rv.Int(), 10)) - case reflect.Uint, reflect.Uint8, reflect.Uint16, - reflect.Uint32, reflect.Uint64: - enc.wf(strconv.FormatUint(rv.Uint(), 10)) - case reflect.Float32: - enc.wf(floatAddDecimal(strconv.FormatFloat(rv.Float(), 'f', -1, 32))) - case reflect.Float64: - enc.wf(floatAddDecimal(strconv.FormatFloat(rv.Float(), 'f', -1, 64))) - case reflect.Array, reflect.Slice: - enc.eArrayOrSliceElement(rv) - case reflect.Interface: - enc.eElement(rv.Elem()) - case reflect.String: - enc.writeQuoted(rv.String()) - default: - panic(e("unexpected primitive type: %s", rv.Kind())) - } -} - -// By the TOML spec, all floats must have a decimal with at least one -// number on either side. -func floatAddDecimal(fstr string) string { - if !strings.Contains(fstr, ".") { - return fstr + ".0" - } - return fstr -} - -func (enc *Encoder) writeQuoted(s string) { - enc.wf("\"%s\"", quotedReplacer.Replace(s)) -} - -func (enc *Encoder) eArrayOrSliceElement(rv reflect.Value) { - length := rv.Len() - enc.wf("[") - for i := 0; i < length; i++ { - elem := rv.Index(i) - enc.eElement(elem) - if i != length-1 { - enc.wf(", ") - } - } - enc.wf("]") -} - -func (enc *Encoder) eArrayOfTables(key Key, rv reflect.Value) { - if len(key) == 0 { - encPanic(errNoKey) - } - for i := 0; i < rv.Len(); i++ { - trv := rv.Index(i) - if isNil(trv) { - continue - } - panicIfInvalidKey(key) - enc.newline() - enc.wf("%s[[%s]]", enc.indentStr(key), key.maybeQuotedAll()) - enc.newline() - enc.eMapOrStruct(key, trv) - } -} - -func (enc *Encoder) eTable(key Key, rv reflect.Value) { - panicIfInvalidKey(key) - if len(key) == 1 { - // Output an extra newline between top-level tables. - // (The newline isn't written if nothing else has been written though.) - enc.newline() - } - if len(key) > 0 { - enc.wf("%s[%s]", enc.indentStr(key), key.maybeQuotedAll()) - enc.newline() - } - enc.eMapOrStruct(key, rv) -} - -func (enc *Encoder) eMapOrStruct(key Key, rv reflect.Value) { - switch rv := eindirect(rv); rv.Kind() { - case reflect.Map: - enc.eMap(key, rv) - case reflect.Struct: - enc.eStruct(key, rv) - default: - panic("eTable: unhandled reflect.Value Kind: " + rv.Kind().String()) - } -} - -func (enc *Encoder) eMap(key Key, rv reflect.Value) { - rt := rv.Type() - if rt.Key().Kind() != reflect.String { - encPanic(errNonString) - } - - // Sort keys so that we have deterministic output. And write keys directly - // underneath this key first, before writing sub-structs or sub-maps. - var mapKeysDirect, mapKeysSub []string - for _, mapKey := range rv.MapKeys() { - k := mapKey.String() - if typeIsHash(tomlTypeOfGo(rv.MapIndex(mapKey))) { - mapKeysSub = append(mapKeysSub, k) - } else { - mapKeysDirect = append(mapKeysDirect, k) - } - } - - var writeMapKeys = func(mapKeys []string) { - sort.Strings(mapKeys) - for _, mapKey := range mapKeys { - mrv := rv.MapIndex(reflect.ValueOf(mapKey)) - if isNil(mrv) { - // Don't write anything for nil fields. - continue - } - enc.encode(key.add(mapKey), mrv) - } - } - writeMapKeys(mapKeysDirect) - writeMapKeys(mapKeysSub) -} - -func (enc *Encoder) eStruct(key Key, rv reflect.Value) { - // Write keys for fields directly under this key first, because if we write - // a field that creates a new table, then all keys under it will be in that - // table (not the one we're writing here). - rt := rv.Type() - var fieldsDirect, fieldsSub [][]int - var addFields func(rt reflect.Type, rv reflect.Value, start []int) - addFields = func(rt reflect.Type, rv reflect.Value, start []int) { - for i := 0; i < rt.NumField(); i++ { - f := rt.Field(i) - // skip unexported fields - if f.PkgPath != "" && !f.Anonymous { - continue - } - frv := rv.Field(i) - if f.Anonymous { - t := f.Type - switch t.Kind() { - case reflect.Struct: - // Treat anonymous struct fields with - // tag names as though they are not - // anonymous, like encoding/json does. - if getOptions(f.Tag).name == "" { - addFields(t, frv, f.Index) - continue - } - case reflect.Ptr: - if t.Elem().Kind() == reflect.Struct && - getOptions(f.Tag).name == "" { - if !frv.IsNil() { - addFields(t.Elem(), frv.Elem(), f.Index) - } - continue - } - // Fall through to the normal field encoding logic below - // for non-struct anonymous fields. - } - } - - if typeIsHash(tomlTypeOfGo(frv)) { - fieldsSub = append(fieldsSub, append(start, f.Index...)) - } else { - fieldsDirect = append(fieldsDirect, append(start, f.Index...)) - } - } - } - addFields(rt, rv, nil) - - var writeFields = func(fields [][]int) { - for _, fieldIndex := range fields { - sft := rt.FieldByIndex(fieldIndex) - sf := rv.FieldByIndex(fieldIndex) - if isNil(sf) { - // Don't write anything for nil fields. - continue - } - - opts := getOptions(sft.Tag) - if opts.skip { - continue - } - keyName := sft.Name - if opts.name != "" { - keyName = opts.name - } - if opts.omitempty && isEmpty(sf) { - continue - } - if opts.omitzero && isZero(sf) { - continue - } - - enc.encode(key.add(keyName), sf) - } - } - writeFields(fieldsDirect) - writeFields(fieldsSub) -} - -// tomlTypeName returns the TOML type name of the Go value's type. It is -// used to determine whether the types of array elements are mixed (which is -// forbidden). If the Go value is nil, then it is illegal for it to be an array -// element, and valueIsNil is returned as true. - -// Returns the TOML type of a Go value. The type may be `nil`, which means -// no concrete TOML type could be found. -func tomlTypeOfGo(rv reflect.Value) tomlType { - if isNil(rv) || !rv.IsValid() { - return nil - } - switch rv.Kind() { - case reflect.Bool: - return tomlBool - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, - reflect.Int64, - reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, - reflect.Uint64: - return tomlInteger - case reflect.Float32, reflect.Float64: - return tomlFloat - case reflect.Array, reflect.Slice: - if typeEqual(tomlHash, tomlArrayType(rv)) { - return tomlArrayHash - } - return tomlArray - case reflect.Ptr, reflect.Interface: - return tomlTypeOfGo(rv.Elem()) - case reflect.String: - return tomlString - case reflect.Map: - return tomlHash - case reflect.Struct: - switch rv.Interface().(type) { - case time.Time: - return tomlDatetime - case TextMarshaler: - return tomlString - default: - return tomlHash - } - default: - panic("unexpected reflect.Kind: " + rv.Kind().String()) - } -} - -// tomlArrayType returns the element type of a TOML array. The type returned -// may be nil if it cannot be determined (e.g., a nil slice or a zero length -// slize). This function may also panic if it finds a type that cannot be -// expressed in TOML (such as nil elements, heterogeneous arrays or directly -// nested arrays of tables). -func tomlArrayType(rv reflect.Value) tomlType { - if isNil(rv) || !rv.IsValid() || rv.Len() == 0 { - return nil - } - firstType := tomlTypeOfGo(rv.Index(0)) - if firstType == nil { - encPanic(errArrayNilElement) - } - - rvlen := rv.Len() - for i := 1; i < rvlen; i++ { - elem := rv.Index(i) - switch elemType := tomlTypeOfGo(elem); { - case elemType == nil: - encPanic(errArrayNilElement) - case !typeEqual(firstType, elemType): - encPanic(errArrayMixedElementTypes) - } - } - // If we have a nested array, then we must make sure that the nested - // array contains ONLY primitives. - // This checks arbitrarily nested arrays. - if typeEqual(firstType, tomlArray) || typeEqual(firstType, tomlArrayHash) { - nest := tomlArrayType(eindirect(rv.Index(0))) - if typeEqual(nest, tomlHash) || typeEqual(nest, tomlArrayHash) { - encPanic(errArrayNoTable) - } - } - return firstType -} - -type tagOptions struct { - skip bool // "-" - name string - omitempty bool - omitzero bool -} - -func getOptions(tag reflect.StructTag) tagOptions { - t := tag.Get("toml") - if t == "-" { - return tagOptions{skip: true} - } - var opts tagOptions - parts := strings.Split(t, ",") - opts.name = parts[0] - for _, s := range parts[1:] { - switch s { - case "omitempty": - opts.omitempty = true - case "omitzero": - opts.omitzero = true - } - } - return opts -} - -func isZero(rv reflect.Value) bool { - switch rv.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return rv.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return rv.Uint() == 0 - case reflect.Float32, reflect.Float64: - return rv.Float() == 0.0 - } - return false -} - -func isEmpty(rv reflect.Value) bool { - switch rv.Kind() { - case reflect.Array, reflect.Slice, reflect.Map, reflect.String: - return rv.Len() == 0 - case reflect.Bool: - return !rv.Bool() - } - return false -} - -func (enc *Encoder) newline() { - if enc.hasWritten { - enc.wf("\n") - } -} - -func (enc *Encoder) keyEqElement(key Key, val reflect.Value) { - if len(key) == 0 { - encPanic(errNoKey) - } - panicIfInvalidKey(key) - enc.wf("%s%s = ", enc.indentStr(key), key.maybeQuoted(len(key)-1)) - enc.eElement(val) - enc.newline() -} - -func (enc *Encoder) wf(format string, v ...interface{}) { - if _, err := fmt.Fprintf(enc.w, format, v...); err != nil { - encPanic(err) - } - enc.hasWritten = true -} - -func (enc *Encoder) indentStr(key Key) string { - return strings.Repeat(enc.Indent, len(key)-1) -} - -func encPanic(err error) { - panic(tomlEncodeError{err}) -} - -func eindirect(v reflect.Value) reflect.Value { - switch v.Kind() { - case reflect.Ptr, reflect.Interface: - return eindirect(v.Elem()) - default: - return v - } -} - -func isNil(rv reflect.Value) bool { - switch rv.Kind() { - case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: - return rv.IsNil() - default: - return false - } -} - -func panicIfInvalidKey(key Key) { - for _, k := range key { - if len(k) == 0 { - encPanic(e("Key '%s' is not a valid table name. Key names "+ - "cannot be empty.", key.maybeQuotedAll())) - } - } -} - -func isValidKeyName(s string) bool { - return len(s) != 0 -} diff --git a/vendor/github.com/BurntSushi/toml/encoding_types.go b/vendor/github.com/BurntSushi/toml/encoding_types.go deleted file mode 100644 index d36e1dd..0000000 --- a/vendor/github.com/BurntSushi/toml/encoding_types.go +++ /dev/null @@ -1,19 +0,0 @@ -// +build go1.2 - -package toml - -// In order to support Go 1.1, we define our own TextMarshaler and -// TextUnmarshaler types. For Go 1.2+, we just alias them with the -// standard library interfaces. - -import ( - "encoding" -) - -// TextMarshaler is a synonym for encoding.TextMarshaler. It is defined here -// so that Go 1.1 can be supported. -type TextMarshaler encoding.TextMarshaler - -// TextUnmarshaler is a synonym for encoding.TextUnmarshaler. It is defined -// here so that Go 1.1 can be supported. -type TextUnmarshaler encoding.TextUnmarshaler diff --git a/vendor/github.com/BurntSushi/toml/encoding_types_1.1.go b/vendor/github.com/BurntSushi/toml/encoding_types_1.1.go deleted file mode 100644 index e8d503d..0000000 --- a/vendor/github.com/BurntSushi/toml/encoding_types_1.1.go +++ /dev/null @@ -1,18 +0,0 @@ -// +build !go1.2 - -package toml - -// These interfaces were introduced in Go 1.2, so we add them manually when -// compiling for Go 1.1. - -// TextMarshaler is a synonym for encoding.TextMarshaler. It is defined here -// so that Go 1.1 can be supported. -type TextMarshaler interface { - MarshalText() (text []byte, err error) -} - -// TextUnmarshaler is a synonym for encoding.TextUnmarshaler. It is defined -// here so that Go 1.1 can be supported. -type TextUnmarshaler interface { - UnmarshalText(text []byte) error -} diff --git a/vendor/github.com/BurntSushi/toml/lex.go b/vendor/github.com/BurntSushi/toml/lex.go deleted file mode 100644 index e0a742a..0000000 --- a/vendor/github.com/BurntSushi/toml/lex.go +++ /dev/null @@ -1,953 +0,0 @@ -package toml - -import ( - "fmt" - "strings" - "unicode" - "unicode/utf8" -) - -type itemType int - -const ( - itemError itemType = iota - itemNIL // used in the parser to indicate no type - itemEOF - itemText - itemString - itemRawString - itemMultilineString - itemRawMultilineString - itemBool - itemInteger - itemFloat - itemDatetime - itemArray // the start of an array - itemArrayEnd - itemTableStart - itemTableEnd - itemArrayTableStart - itemArrayTableEnd - itemKeyStart - itemCommentStart - itemInlineTableStart - itemInlineTableEnd -) - -const ( - eof = 0 - comma = ',' - tableStart = '[' - tableEnd = ']' - arrayTableStart = '[' - arrayTableEnd = ']' - tableSep = '.' - keySep = '=' - arrayStart = '[' - arrayEnd = ']' - commentStart = '#' - stringStart = '"' - stringEnd = '"' - rawStringStart = '\'' - rawStringEnd = '\'' - inlineTableStart = '{' - inlineTableEnd = '}' -) - -type stateFn func(lx *lexer) stateFn - -type lexer struct { - input string - start int - pos int - line int - state stateFn - items chan item - - // Allow for backing up up to three runes. - // This is necessary because TOML contains 3-rune tokens (""" and '''). - prevWidths [3]int - nprev int // how many of prevWidths are in use - // If we emit an eof, we can still back up, but it is not OK to call - // next again. - atEOF bool - - // A stack of state functions used to maintain context. - // The idea is to reuse parts of the state machine in various places. - // For example, values can appear at the top level or within arbitrarily - // nested arrays. The last state on the stack is used after a value has - // been lexed. Similarly for comments. - stack []stateFn -} - -type item struct { - typ itemType - val string - line int -} - -func (lx *lexer) nextItem() item { - for { - select { - case item := <-lx.items: - return item - default: - lx.state = lx.state(lx) - } - } -} - -func lex(input string) *lexer { - lx := &lexer{ - input: input, - state: lexTop, - line: 1, - items: make(chan item, 10), - stack: make([]stateFn, 0, 10), - } - return lx -} - -func (lx *lexer) push(state stateFn) { - lx.stack = append(lx.stack, state) -} - -func (lx *lexer) pop() stateFn { - if len(lx.stack) == 0 { - return lx.errorf("BUG in lexer: no states to pop") - } - last := lx.stack[len(lx.stack)-1] - lx.stack = lx.stack[0 : len(lx.stack)-1] - return last -} - -func (lx *lexer) current() string { - return lx.input[lx.start:lx.pos] -} - -func (lx *lexer) emit(typ itemType) { - lx.items <- item{typ, lx.current(), lx.line} - lx.start = lx.pos -} - -func (lx *lexer) emitTrim(typ itemType) { - lx.items <- item{typ, strings.TrimSpace(lx.current()), lx.line} - lx.start = lx.pos -} - -func (lx *lexer) next() (r rune) { - if lx.atEOF { - panic("next called after EOF") - } - if lx.pos >= len(lx.input) { - lx.atEOF = true - return eof - } - - if lx.input[lx.pos] == '\n' { - lx.line++ - } - lx.prevWidths[2] = lx.prevWidths[1] - lx.prevWidths[1] = lx.prevWidths[0] - if lx.nprev < 3 { - lx.nprev++ - } - r, w := utf8.DecodeRuneInString(lx.input[lx.pos:]) - lx.prevWidths[0] = w - lx.pos += w - return r -} - -// ignore skips over the pending input before this point. -func (lx *lexer) ignore() { - lx.start = lx.pos -} - -// backup steps back one rune. Can be called only twice between calls to next. -func (lx *lexer) backup() { - if lx.atEOF { - lx.atEOF = false - return - } - if lx.nprev < 1 { - panic("backed up too far") - } - w := lx.prevWidths[0] - lx.prevWidths[0] = lx.prevWidths[1] - lx.prevWidths[1] = lx.prevWidths[2] - lx.nprev-- - lx.pos -= w - if lx.pos < len(lx.input) && lx.input[lx.pos] == '\n' { - lx.line-- - } -} - -// accept consumes the next rune if it's equal to `valid`. -func (lx *lexer) accept(valid rune) bool { - if lx.next() == valid { - return true - } - lx.backup() - return false -} - -// peek returns but does not consume the next rune in the input. -func (lx *lexer) peek() rune { - r := lx.next() - lx.backup() - return r -} - -// skip ignores all input that matches the given predicate. -func (lx *lexer) skip(pred func(rune) bool) { - for { - r := lx.next() - if pred(r) { - continue - } - lx.backup() - lx.ignore() - return - } -} - -// errorf stops all lexing by emitting an error and returning `nil`. -// Note that any value that is a character is escaped if it's a special -// character (newlines, tabs, etc.). -func (lx *lexer) errorf(format string, values ...interface{}) stateFn { - lx.items <- item{ - itemError, - fmt.Sprintf(format, values...), - lx.line, - } - return nil -} - -// lexTop consumes elements at the top level of TOML data. -func lexTop(lx *lexer) stateFn { - r := lx.next() - if isWhitespace(r) || isNL(r) { - return lexSkip(lx, lexTop) - } - switch r { - case commentStart: - lx.push(lexTop) - return lexCommentStart - case tableStart: - return lexTableStart - case eof: - if lx.pos > lx.start { - return lx.errorf("unexpected EOF") - } - lx.emit(itemEOF) - return nil - } - - // At this point, the only valid item can be a key, so we back up - // and let the key lexer do the rest. - lx.backup() - lx.push(lexTopEnd) - return lexKeyStart -} - -// lexTopEnd is entered whenever a top-level item has been consumed. (A value -// or a table.) It must see only whitespace, and will turn back to lexTop -// upon a newline. If it sees EOF, it will quit the lexer successfully. -func lexTopEnd(lx *lexer) stateFn { - r := lx.next() - switch { - case r == commentStart: - // a comment will read to a newline for us. - lx.push(lexTop) - return lexCommentStart - case isWhitespace(r): - return lexTopEnd - case isNL(r): - lx.ignore() - return lexTop - case r == eof: - lx.emit(itemEOF) - return nil - } - return lx.errorf("expected a top-level item to end with a newline, "+ - "comment, or EOF, but got %q instead", r) -} - -// lexTable lexes the beginning of a table. Namely, it makes sure that -// it starts with a character other than '.' and ']'. -// It assumes that '[' has already been consumed. -// It also handles the case that this is an item in an array of tables. -// e.g., '[[name]]'. -func lexTableStart(lx *lexer) stateFn { - if lx.peek() == arrayTableStart { - lx.next() - lx.emit(itemArrayTableStart) - lx.push(lexArrayTableEnd) - } else { - lx.emit(itemTableStart) - lx.push(lexTableEnd) - } - return lexTableNameStart -} - -func lexTableEnd(lx *lexer) stateFn { - lx.emit(itemTableEnd) - return lexTopEnd -} - -func lexArrayTableEnd(lx *lexer) stateFn { - if r := lx.next(); r != arrayTableEnd { - return lx.errorf("expected end of table array name delimiter %q, "+ - "but got %q instead", arrayTableEnd, r) - } - lx.emit(itemArrayTableEnd) - return lexTopEnd -} - -func lexTableNameStart(lx *lexer) stateFn { - lx.skip(isWhitespace) - switch r := lx.peek(); { - case r == tableEnd || r == eof: - return lx.errorf("unexpected end of table name " + - "(table names cannot be empty)") - case r == tableSep: - return lx.errorf("unexpected table separator " + - "(table names cannot be empty)") - case r == stringStart || r == rawStringStart: - lx.ignore() - lx.push(lexTableNameEnd) - return lexValue // reuse string lexing - default: - return lexBareTableName - } -} - -// lexBareTableName lexes the name of a table. It assumes that at least one -// valid character for the table has already been read. -func lexBareTableName(lx *lexer) stateFn { - r := lx.next() - if isBareKeyChar(r) { - return lexBareTableName - } - lx.backup() - lx.emit(itemText) - return lexTableNameEnd -} - -// lexTableNameEnd reads the end of a piece of a table name, optionally -// consuming whitespace. -func lexTableNameEnd(lx *lexer) stateFn { - lx.skip(isWhitespace) - switch r := lx.next(); { - case isWhitespace(r): - return lexTableNameEnd - case r == tableSep: - lx.ignore() - return lexTableNameStart - case r == tableEnd: - return lx.pop() - default: - return lx.errorf("expected '.' or ']' to end table name, "+ - "but got %q instead", r) - } -} - -// lexKeyStart consumes a key name up until the first non-whitespace character. -// lexKeyStart will ignore whitespace. -func lexKeyStart(lx *lexer) stateFn { - r := lx.peek() - switch { - case r == keySep: - return lx.errorf("unexpected key separator %q", keySep) - case isWhitespace(r) || isNL(r): - lx.next() - return lexSkip(lx, lexKeyStart) - case r == stringStart || r == rawStringStart: - lx.ignore() - lx.emit(itemKeyStart) - lx.push(lexKeyEnd) - return lexValue // reuse string lexing - default: - lx.ignore() - lx.emit(itemKeyStart) - return lexBareKey - } -} - -// lexBareKey consumes the text of a bare key. Assumes that the first character -// (which is not whitespace) has not yet been consumed. -func lexBareKey(lx *lexer) stateFn { - switch r := lx.next(); { - case isBareKeyChar(r): - return lexBareKey - case isWhitespace(r): - lx.backup() - lx.emit(itemText) - return lexKeyEnd - case r == keySep: - lx.backup() - lx.emit(itemText) - return lexKeyEnd - default: - return lx.errorf("bare keys cannot contain %q", r) - } -} - -// lexKeyEnd consumes the end of a key and trims whitespace (up to the key -// separator). -func lexKeyEnd(lx *lexer) stateFn { - switch r := lx.next(); { - case r == keySep: - return lexSkip(lx, lexValue) - case isWhitespace(r): - return lexSkip(lx, lexKeyEnd) - default: - return lx.errorf("expected key separator %q, but got %q instead", - keySep, r) - } -} - -// lexValue starts the consumption of a value anywhere a value is expected. -// lexValue will ignore whitespace. -// After a value is lexed, the last state on the next is popped and returned. -func lexValue(lx *lexer) stateFn { - // We allow whitespace to precede a value, but NOT newlines. - // In array syntax, the array states are responsible for ignoring newlines. - r := lx.next() - switch { - case isWhitespace(r): - return lexSkip(lx, lexValue) - case isDigit(r): - lx.backup() // avoid an extra state and use the same as above - return lexNumberOrDateStart - } - switch r { - case arrayStart: - lx.ignore() - lx.emit(itemArray) - return lexArrayValue - case inlineTableStart: - lx.ignore() - lx.emit(itemInlineTableStart) - return lexInlineTableValue - case stringStart: - if lx.accept(stringStart) { - if lx.accept(stringStart) { - lx.ignore() // Ignore """ - return lexMultilineString - } - lx.backup() - } - lx.ignore() // ignore the '"' - return lexString - case rawStringStart: - if lx.accept(rawStringStart) { - if lx.accept(rawStringStart) { - lx.ignore() // Ignore """ - return lexMultilineRawString - } - lx.backup() - } - lx.ignore() // ignore the "'" - return lexRawString - case '+', '-': - return lexNumberStart - case '.': // special error case, be kind to users - return lx.errorf("floats must start with a digit, not '.'") - } - if unicode.IsLetter(r) { - // Be permissive here; lexBool will give a nice error if the - // user wrote something like - // x = foo - // (i.e. not 'true' or 'false' but is something else word-like.) - lx.backup() - return lexBool - } - return lx.errorf("expected value but found %q instead", r) -} - -// lexArrayValue consumes one value in an array. It assumes that '[' or ',' -// have already been consumed. All whitespace and newlines are ignored. -func lexArrayValue(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r) || isNL(r): - return lexSkip(lx, lexArrayValue) - case r == commentStart: - lx.push(lexArrayValue) - return lexCommentStart - case r == comma: - return lx.errorf("unexpected comma") - case r == arrayEnd: - // NOTE(caleb): The spec isn't clear about whether you can have - // a trailing comma or not, so we'll allow it. - return lexArrayEnd - } - - lx.backup() - lx.push(lexArrayValueEnd) - return lexValue -} - -// lexArrayValueEnd consumes everything between the end of an array value and -// the next value (or the end of the array): it ignores whitespace and newlines -// and expects either a ',' or a ']'. -func lexArrayValueEnd(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r) || isNL(r): - return lexSkip(lx, lexArrayValueEnd) - case r == commentStart: - lx.push(lexArrayValueEnd) - return lexCommentStart - case r == comma: - lx.ignore() - return lexArrayValue // move on to the next value - case r == arrayEnd: - return lexArrayEnd - } - return lx.errorf( - "expected a comma or array terminator %q, but got %q instead", - arrayEnd, r, - ) -} - -// lexArrayEnd finishes the lexing of an array. -// It assumes that a ']' has just been consumed. -func lexArrayEnd(lx *lexer) stateFn { - lx.ignore() - lx.emit(itemArrayEnd) - return lx.pop() -} - -// lexInlineTableValue consumes one key/value pair in an inline table. -// It assumes that '{' or ',' have already been consumed. Whitespace is ignored. -func lexInlineTableValue(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r): - return lexSkip(lx, lexInlineTableValue) - case isNL(r): - return lx.errorf("newlines not allowed within inline tables") - case r == commentStart: - lx.push(lexInlineTableValue) - return lexCommentStart - case r == comma: - return lx.errorf("unexpected comma") - case r == inlineTableEnd: - return lexInlineTableEnd - } - lx.backup() - lx.push(lexInlineTableValueEnd) - return lexKeyStart -} - -// lexInlineTableValueEnd consumes everything between the end of an inline table -// key/value pair and the next pair (or the end of the table): -// it ignores whitespace and expects either a ',' or a '}'. -func lexInlineTableValueEnd(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r): - return lexSkip(lx, lexInlineTableValueEnd) - case isNL(r): - return lx.errorf("newlines not allowed within inline tables") - case r == commentStart: - lx.push(lexInlineTableValueEnd) - return lexCommentStart - case r == comma: - lx.ignore() - return lexInlineTableValue - case r == inlineTableEnd: - return lexInlineTableEnd - } - return lx.errorf("expected a comma or an inline table terminator %q, "+ - "but got %q instead", inlineTableEnd, r) -} - -// lexInlineTableEnd finishes the lexing of an inline table. -// It assumes that a '}' has just been consumed. -func lexInlineTableEnd(lx *lexer) stateFn { - lx.ignore() - lx.emit(itemInlineTableEnd) - return lx.pop() -} - -// lexString consumes the inner contents of a string. It assumes that the -// beginning '"' has already been consumed and ignored. -func lexString(lx *lexer) stateFn { - r := lx.next() - switch { - case r == eof: - return lx.errorf("unexpected EOF") - case isNL(r): - return lx.errorf("strings cannot contain newlines") - case r == '\\': - lx.push(lexString) - return lexStringEscape - case r == stringEnd: - lx.backup() - lx.emit(itemString) - lx.next() - lx.ignore() - return lx.pop() - } - return lexString -} - -// lexMultilineString consumes the inner contents of a string. It assumes that -// the beginning '"""' has already been consumed and ignored. -func lexMultilineString(lx *lexer) stateFn { - switch lx.next() { - case eof: - return lx.errorf("unexpected EOF") - case '\\': - return lexMultilineStringEscape - case stringEnd: - if lx.accept(stringEnd) { - if lx.accept(stringEnd) { - lx.backup() - lx.backup() - lx.backup() - lx.emit(itemMultilineString) - lx.next() - lx.next() - lx.next() - lx.ignore() - return lx.pop() - } - lx.backup() - } - } - return lexMultilineString -} - -// lexRawString consumes a raw string. Nothing can be escaped in such a string. -// It assumes that the beginning "'" has already been consumed and ignored. -func lexRawString(lx *lexer) stateFn { - r := lx.next() - switch { - case r == eof: - return lx.errorf("unexpected EOF") - case isNL(r): - return lx.errorf("strings cannot contain newlines") - case r == rawStringEnd: - lx.backup() - lx.emit(itemRawString) - lx.next() - lx.ignore() - return lx.pop() - } - return lexRawString -} - -// lexMultilineRawString consumes a raw string. Nothing can be escaped in such -// a string. It assumes that the beginning "'''" has already been consumed and -// ignored. -func lexMultilineRawString(lx *lexer) stateFn { - switch lx.next() { - case eof: - return lx.errorf("unexpected EOF") - case rawStringEnd: - if lx.accept(rawStringEnd) { - if lx.accept(rawStringEnd) { - lx.backup() - lx.backup() - lx.backup() - lx.emit(itemRawMultilineString) - lx.next() - lx.next() - lx.next() - lx.ignore() - return lx.pop() - } - lx.backup() - } - } - return lexMultilineRawString -} - -// lexMultilineStringEscape consumes an escaped character. It assumes that the -// preceding '\\' has already been consumed. -func lexMultilineStringEscape(lx *lexer) stateFn { - // Handle the special case first: - if isNL(lx.next()) { - return lexMultilineString - } - lx.backup() - lx.push(lexMultilineString) - return lexStringEscape(lx) -} - -func lexStringEscape(lx *lexer) stateFn { - r := lx.next() - switch r { - case 'b': - fallthrough - case 't': - fallthrough - case 'n': - fallthrough - case 'f': - fallthrough - case 'r': - fallthrough - case '"': - fallthrough - case '\\': - return lx.pop() - case 'u': - return lexShortUnicodeEscape - case 'U': - return lexLongUnicodeEscape - } - return lx.errorf("invalid escape character %q; only the following "+ - "escape characters are allowed: "+ - `\b, \t, \n, \f, \r, \", \\, \uXXXX, and \UXXXXXXXX`, r) -} - -func lexShortUnicodeEscape(lx *lexer) stateFn { - var r rune - for i := 0; i < 4; i++ { - r = lx.next() - if !isHexadecimal(r) { - return lx.errorf(`expected four hexadecimal digits after '\u', `+ - "but got %q instead", lx.current()) - } - } - return lx.pop() -} - -func lexLongUnicodeEscape(lx *lexer) stateFn { - var r rune - for i := 0; i < 8; i++ { - r = lx.next() - if !isHexadecimal(r) { - return lx.errorf(`expected eight hexadecimal digits after '\U', `+ - "but got %q instead", lx.current()) - } - } - return lx.pop() -} - -// lexNumberOrDateStart consumes either an integer, a float, or datetime. -func lexNumberOrDateStart(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexNumberOrDate - } - switch r { - case '_': - return lexNumber - case 'e', 'E': - return lexFloat - case '.': - return lx.errorf("floats must start with a digit, not '.'") - } - return lx.errorf("expected a digit but got %q", r) -} - -// lexNumberOrDate consumes either an integer, float or datetime. -func lexNumberOrDate(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexNumberOrDate - } - switch r { - case '-': - return lexDatetime - case '_': - return lexNumber - case '.', 'e', 'E': - return lexFloat - } - - lx.backup() - lx.emit(itemInteger) - return lx.pop() -} - -// lexDatetime consumes a Datetime, to a first approximation. -// The parser validates that it matches one of the accepted formats. -func lexDatetime(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexDatetime - } - switch r { - case '-', 'T', ':', '.', 'Z', '+': - return lexDatetime - } - - lx.backup() - lx.emit(itemDatetime) - return lx.pop() -} - -// lexNumberStart consumes either an integer or a float. It assumes that a sign -// has already been read, but that *no* digits have been consumed. -// lexNumberStart will move to the appropriate integer or float states. -func lexNumberStart(lx *lexer) stateFn { - // We MUST see a digit. Even floats have to start with a digit. - r := lx.next() - if !isDigit(r) { - if r == '.' { - return lx.errorf("floats must start with a digit, not '.'") - } - return lx.errorf("expected a digit but got %q", r) - } - return lexNumber -} - -// lexNumber consumes an integer or a float after seeing the first digit. -func lexNumber(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexNumber - } - switch r { - case '_': - return lexNumber - case '.', 'e', 'E': - return lexFloat - } - - lx.backup() - lx.emit(itemInteger) - return lx.pop() -} - -// lexFloat consumes the elements of a float. It allows any sequence of -// float-like characters, so floats emitted by the lexer are only a first -// approximation and must be validated by the parser. -func lexFloat(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexFloat - } - switch r { - case '_', '.', '-', '+', 'e', 'E': - return lexFloat - } - - lx.backup() - lx.emit(itemFloat) - return lx.pop() -} - -// lexBool consumes a bool string: 'true' or 'false. -func lexBool(lx *lexer) stateFn { - var rs []rune - for { - r := lx.next() - if !unicode.IsLetter(r) { - lx.backup() - break - } - rs = append(rs, r) - } - s := string(rs) - switch s { - case "true", "false": - lx.emit(itemBool) - return lx.pop() - } - return lx.errorf("expected value but found %q instead", s) -} - -// lexCommentStart begins the lexing of a comment. It will emit -// itemCommentStart and consume no characters, passing control to lexComment. -func lexCommentStart(lx *lexer) stateFn { - lx.ignore() - lx.emit(itemCommentStart) - return lexComment -} - -// lexComment lexes an entire comment. It assumes that '#' has been consumed. -// It will consume *up to* the first newline character, and pass control -// back to the last state on the stack. -func lexComment(lx *lexer) stateFn { - r := lx.peek() - if isNL(r) || r == eof { - lx.emit(itemText) - return lx.pop() - } - lx.next() - return lexComment -} - -// lexSkip ignores all slurped input and moves on to the next state. -func lexSkip(lx *lexer, nextState stateFn) stateFn { - return func(lx *lexer) stateFn { - lx.ignore() - return nextState - } -} - -// isWhitespace returns true if `r` is a whitespace character according -// to the spec. -func isWhitespace(r rune) bool { - return r == '\t' || r == ' ' -} - -func isNL(r rune) bool { - return r == '\n' || r == '\r' -} - -func isDigit(r rune) bool { - return r >= '0' && r <= '9' -} - -func isHexadecimal(r rune) bool { - return (r >= '0' && r <= '9') || - (r >= 'a' && r <= 'f') || - (r >= 'A' && r <= 'F') -} - -func isBareKeyChar(r rune) bool { - return (r >= 'A' && r <= 'Z') || - (r >= 'a' && r <= 'z') || - (r >= '0' && r <= '9') || - r == '_' || - r == '-' -} - -func (itype itemType) String() string { - switch itype { - case itemError: - return "Error" - case itemNIL: - return "NIL" - case itemEOF: - return "EOF" - case itemText: - return "Text" - case itemString, itemRawString, itemMultilineString, itemRawMultilineString: - return "String" - case itemBool: - return "Bool" - case itemInteger: - return "Integer" - case itemFloat: - return "Float" - case itemDatetime: - return "DateTime" - case itemTableStart: - return "TableStart" - case itemTableEnd: - return "TableEnd" - case itemKeyStart: - return "KeyStart" - case itemArray: - return "Array" - case itemArrayEnd: - return "ArrayEnd" - case itemCommentStart: - return "CommentStart" - } - panic(fmt.Sprintf("BUG: Unknown type '%d'.", int(itype))) -} - -func (item item) String() string { - return fmt.Sprintf("(%s, %s)", item.typ.String(), item.val) -} diff --git a/vendor/github.com/BurntSushi/toml/parse.go b/vendor/github.com/BurntSushi/toml/parse.go deleted file mode 100644 index 50869ef..0000000 --- a/vendor/github.com/BurntSushi/toml/parse.go +++ /dev/null @@ -1,592 +0,0 @@ -package toml - -import ( - "fmt" - "strconv" - "strings" - "time" - "unicode" - "unicode/utf8" -) - -type parser struct { - mapping map[string]interface{} - types map[string]tomlType - lx *lexer - - // A list of keys in the order that they appear in the TOML data. - ordered []Key - - // the full key for the current hash in scope - context Key - - // the base key name for everything except hashes - currentKey string - - // rough approximation of line number - approxLine int - - // A map of 'key.group.names' to whether they were created implicitly. - implicits map[string]bool -} - -type parseError string - -func (pe parseError) Error() string { - return string(pe) -} - -func parse(data string) (p *parser, err error) { - defer func() { - if r := recover(); r != nil { - var ok bool - if err, ok = r.(parseError); ok { - return - } - panic(r) - } - }() - - p = &parser{ - mapping: make(map[string]interface{}), - types: make(map[string]tomlType), - lx: lex(data), - ordered: make([]Key, 0), - implicits: make(map[string]bool), - } - for { - item := p.next() - if item.typ == itemEOF { - break - } - p.topLevel(item) - } - - return p, nil -} - -func (p *parser) panicf(format string, v ...interface{}) { - msg := fmt.Sprintf("Near line %d (last key parsed '%s'): %s", - p.approxLine, p.current(), fmt.Sprintf(format, v...)) - panic(parseError(msg)) -} - -func (p *parser) next() item { - it := p.lx.nextItem() - if it.typ == itemError { - p.panicf("%s", it.val) - } - return it -} - -func (p *parser) bug(format string, v ...interface{}) { - panic(fmt.Sprintf("BUG: "+format+"\n\n", v...)) -} - -func (p *parser) expect(typ itemType) item { - it := p.next() - p.assertEqual(typ, it.typ) - return it -} - -func (p *parser) assertEqual(expected, got itemType) { - if expected != got { - p.bug("Expected '%s' but got '%s'.", expected, got) - } -} - -func (p *parser) topLevel(item item) { - switch item.typ { - case itemCommentStart: - p.approxLine = item.line - p.expect(itemText) - case itemTableStart: - kg := p.next() - p.approxLine = kg.line - - var key Key - for ; kg.typ != itemTableEnd && kg.typ != itemEOF; kg = p.next() { - key = append(key, p.keyString(kg)) - } - p.assertEqual(itemTableEnd, kg.typ) - - p.establishContext(key, false) - p.setType("", tomlHash) - p.ordered = append(p.ordered, key) - case itemArrayTableStart: - kg := p.next() - p.approxLine = kg.line - - var key Key - for ; kg.typ != itemArrayTableEnd && kg.typ != itemEOF; kg = p.next() { - key = append(key, p.keyString(kg)) - } - p.assertEqual(itemArrayTableEnd, kg.typ) - - p.establishContext(key, true) - p.setType("", tomlArrayHash) - p.ordered = append(p.ordered, key) - case itemKeyStart: - kname := p.next() - p.approxLine = kname.line - p.currentKey = p.keyString(kname) - - val, typ := p.value(p.next()) - p.setValue(p.currentKey, val) - p.setType(p.currentKey, typ) - p.ordered = append(p.ordered, p.context.add(p.currentKey)) - p.currentKey = "" - default: - p.bug("Unexpected type at top level: %s", item.typ) - } -} - -// Gets a string for a key (or part of a key in a table name). -func (p *parser) keyString(it item) string { - switch it.typ { - case itemText: - return it.val - case itemString, itemMultilineString, - itemRawString, itemRawMultilineString: - s, _ := p.value(it) - return s.(string) - default: - p.bug("Unexpected key type: %s", it.typ) - panic("unreachable") - } -} - -// value translates an expected value from the lexer into a Go value wrapped -// as an empty interface. -func (p *parser) value(it item) (interface{}, tomlType) { - switch it.typ { - case itemString: - return p.replaceEscapes(it.val), p.typeOfPrimitive(it) - case itemMultilineString: - trimmed := stripFirstNewline(stripEscapedWhitespace(it.val)) - return p.replaceEscapes(trimmed), p.typeOfPrimitive(it) - case itemRawString: - return it.val, p.typeOfPrimitive(it) - case itemRawMultilineString: - return stripFirstNewline(it.val), p.typeOfPrimitive(it) - case itemBool: - switch it.val { - case "true": - return true, p.typeOfPrimitive(it) - case "false": - return false, p.typeOfPrimitive(it) - } - p.bug("Expected boolean value, but got '%s'.", it.val) - case itemInteger: - if !numUnderscoresOK(it.val) { - p.panicf("Invalid integer %q: underscores must be surrounded by digits", - it.val) - } - val := strings.Replace(it.val, "_", "", -1) - num, err := strconv.ParseInt(val, 10, 64) - if err != nil { - // Distinguish integer values. Normally, it'd be a bug if the lexer - // provides an invalid integer, but it's possible that the number is - // out of range of valid values (which the lexer cannot determine). - // So mark the former as a bug but the latter as a legitimate user - // error. - if e, ok := err.(*strconv.NumError); ok && - e.Err == strconv.ErrRange { - - p.panicf("Integer '%s' is out of the range of 64-bit "+ - "signed integers.", it.val) - } else { - p.bug("Expected integer value, but got '%s'.", it.val) - } - } - return num, p.typeOfPrimitive(it) - case itemFloat: - parts := strings.FieldsFunc(it.val, func(r rune) bool { - switch r { - case '.', 'e', 'E': - return true - } - return false - }) - for _, part := range parts { - if !numUnderscoresOK(part) { - p.panicf("Invalid float %q: underscores must be "+ - "surrounded by digits", it.val) - } - } - if !numPeriodsOK(it.val) { - // As a special case, numbers like '123.' or '1.e2', - // which are valid as far as Go/strconv are concerned, - // must be rejected because TOML says that a fractional - // part consists of '.' followed by 1+ digits. - p.panicf("Invalid float %q: '.' must be followed "+ - "by one or more digits", it.val) - } - val := strings.Replace(it.val, "_", "", -1) - num, err := strconv.ParseFloat(val, 64) - if err != nil { - if e, ok := err.(*strconv.NumError); ok && - e.Err == strconv.ErrRange { - - p.panicf("Float '%s' is out of the range of 64-bit "+ - "IEEE-754 floating-point numbers.", it.val) - } else { - p.panicf("Invalid float value: %q", it.val) - } - } - return num, p.typeOfPrimitive(it) - case itemDatetime: - var t time.Time - var ok bool - var err error - for _, format := range []string{ - "2006-01-02T15:04:05Z07:00", - "2006-01-02T15:04:05", - "2006-01-02", - } { - t, err = time.ParseInLocation(format, it.val, time.Local) - if err == nil { - ok = true - break - } - } - if !ok { - p.panicf("Invalid TOML Datetime: %q.", it.val) - } - return t, p.typeOfPrimitive(it) - case itemArray: - array := make([]interface{}, 0) - types := make([]tomlType, 0) - - for it = p.next(); it.typ != itemArrayEnd; it = p.next() { - if it.typ == itemCommentStart { - p.expect(itemText) - continue - } - - val, typ := p.value(it) - array = append(array, val) - types = append(types, typ) - } - return array, p.typeOfArray(types) - case itemInlineTableStart: - var ( - hash = make(map[string]interface{}) - outerContext = p.context - outerKey = p.currentKey - ) - - p.context = append(p.context, p.currentKey) - p.currentKey = "" - for it := p.next(); it.typ != itemInlineTableEnd; it = p.next() { - if it.typ != itemKeyStart { - p.bug("Expected key start but instead found %q, around line %d", - it.val, p.approxLine) - } - if it.typ == itemCommentStart { - p.expect(itemText) - continue - } - - // retrieve key - k := p.next() - p.approxLine = k.line - kname := p.keyString(k) - - // retrieve value - p.currentKey = kname - val, typ := p.value(p.next()) - // make sure we keep metadata up to date - p.setType(kname, typ) - p.ordered = append(p.ordered, p.context.add(p.currentKey)) - hash[kname] = val - } - p.context = outerContext - p.currentKey = outerKey - return hash, tomlHash - } - p.bug("Unexpected value type: %s", it.typ) - panic("unreachable") -} - -// numUnderscoresOK checks whether each underscore in s is surrounded by -// characters that are not underscores. -func numUnderscoresOK(s string) bool { - accept := false - for _, r := range s { - if r == '_' { - if !accept { - return false - } - accept = false - continue - } - accept = true - } - return accept -} - -// numPeriodsOK checks whether every period in s is followed by a digit. -func numPeriodsOK(s string) bool { - period := false - for _, r := range s { - if period && !isDigit(r) { - return false - } - period = r == '.' - } - return !period -} - -// establishContext sets the current context of the parser, -// where the context is either a hash or an array of hashes. Which one is -// set depends on the value of the `array` parameter. -// -// Establishing the context also makes sure that the key isn't a duplicate, and -// will create implicit hashes automatically. -func (p *parser) establishContext(key Key, array bool) { - var ok bool - - // Always start at the top level and drill down for our context. - hashContext := p.mapping - keyContext := make(Key, 0) - - // We only need implicit hashes for key[0:-1] - for _, k := range key[0 : len(key)-1] { - _, ok = hashContext[k] - keyContext = append(keyContext, k) - - // No key? Make an implicit hash and move on. - if !ok { - p.addImplicit(keyContext) - hashContext[k] = make(map[string]interface{}) - } - - // If the hash context is actually an array of tables, then set - // the hash context to the last element in that array. - // - // Otherwise, it better be a table, since this MUST be a key group (by - // virtue of it not being the last element in a key). - switch t := hashContext[k].(type) { - case []map[string]interface{}: - hashContext = t[len(t)-1] - case map[string]interface{}: - hashContext = t - default: - p.panicf("Key '%s' was already created as a hash.", keyContext) - } - } - - p.context = keyContext - if array { - // If this is the first element for this array, then allocate a new - // list of tables for it. - k := key[len(key)-1] - if _, ok := hashContext[k]; !ok { - hashContext[k] = make([]map[string]interface{}, 0, 5) - } - - // Add a new table. But make sure the key hasn't already been used - // for something else. - if hash, ok := hashContext[k].([]map[string]interface{}); ok { - hashContext[k] = append(hash, make(map[string]interface{})) - } else { - p.panicf("Key '%s' was already created and cannot be used as "+ - "an array.", keyContext) - } - } else { - p.setValue(key[len(key)-1], make(map[string]interface{})) - } - p.context = append(p.context, key[len(key)-1]) -} - -// setValue sets the given key to the given value in the current context. -// It will make sure that the key hasn't already been defined, account for -// implicit key groups. -func (p *parser) setValue(key string, value interface{}) { - var tmpHash interface{} - var ok bool - - hash := p.mapping - keyContext := make(Key, 0) - for _, k := range p.context { - keyContext = append(keyContext, k) - if tmpHash, ok = hash[k]; !ok { - p.bug("Context for key '%s' has not been established.", keyContext) - } - switch t := tmpHash.(type) { - case []map[string]interface{}: - // The context is a table of hashes. Pick the most recent table - // defined as the current hash. - hash = t[len(t)-1] - case map[string]interface{}: - hash = t - default: - p.bug("Expected hash to have type 'map[string]interface{}', but "+ - "it has '%T' instead.", tmpHash) - } - } - keyContext = append(keyContext, key) - - if _, ok := hash[key]; ok { - // Typically, if the given key has already been set, then we have - // to raise an error since duplicate keys are disallowed. However, - // it's possible that a key was previously defined implicitly. In this - // case, it is allowed to be redefined concretely. (See the - // `tests/valid/implicit-and-explicit-after.toml` test in `toml-test`.) - // - // But we have to make sure to stop marking it as an implicit. (So that - // another redefinition provokes an error.) - // - // Note that since it has already been defined (as a hash), we don't - // want to overwrite it. So our business is done. - if p.isImplicit(keyContext) { - p.removeImplicit(keyContext) - return - } - - // Otherwise, we have a concrete key trying to override a previous - // key, which is *always* wrong. - p.panicf("Key '%s' has already been defined.", keyContext) - } - hash[key] = value -} - -// setType sets the type of a particular value at a given key. -// It should be called immediately AFTER setValue. -// -// Note that if `key` is empty, then the type given will be applied to the -// current context (which is either a table or an array of tables). -func (p *parser) setType(key string, typ tomlType) { - keyContext := make(Key, 0, len(p.context)+1) - for _, k := range p.context { - keyContext = append(keyContext, k) - } - if len(key) > 0 { // allow type setting for hashes - keyContext = append(keyContext, key) - } - p.types[keyContext.String()] = typ -} - -// addImplicit sets the given Key as having been created implicitly. -func (p *parser) addImplicit(key Key) { - p.implicits[key.String()] = true -} - -// removeImplicit stops tagging the given key as having been implicitly -// created. -func (p *parser) removeImplicit(key Key) { - p.implicits[key.String()] = false -} - -// isImplicit returns true if the key group pointed to by the key was created -// implicitly. -func (p *parser) isImplicit(key Key) bool { - return p.implicits[key.String()] -} - -// current returns the full key name of the current context. -func (p *parser) current() string { - if len(p.currentKey) == 0 { - return p.context.String() - } - if len(p.context) == 0 { - return p.currentKey - } - return fmt.Sprintf("%s.%s", p.context, p.currentKey) -} - -func stripFirstNewline(s string) string { - if len(s) == 0 || s[0] != '\n' { - return s - } - return s[1:] -} - -func stripEscapedWhitespace(s string) string { - esc := strings.Split(s, "\\\n") - if len(esc) > 1 { - for i := 1; i < len(esc); i++ { - esc[i] = strings.TrimLeftFunc(esc[i], unicode.IsSpace) - } - } - return strings.Join(esc, "") -} - -func (p *parser) replaceEscapes(str string) string { - var replaced []rune - s := []byte(str) - r := 0 - for r < len(s) { - if s[r] != '\\' { - c, size := utf8.DecodeRune(s[r:]) - r += size - replaced = append(replaced, c) - continue - } - r += 1 - if r >= len(s) { - p.bug("Escape sequence at end of string.") - return "" - } - switch s[r] { - default: - p.bug("Expected valid escape code after \\, but got %q.", s[r]) - return "" - case 'b': - replaced = append(replaced, rune(0x0008)) - r += 1 - case 't': - replaced = append(replaced, rune(0x0009)) - r += 1 - case 'n': - replaced = append(replaced, rune(0x000A)) - r += 1 - case 'f': - replaced = append(replaced, rune(0x000C)) - r += 1 - case 'r': - replaced = append(replaced, rune(0x000D)) - r += 1 - case '"': - replaced = append(replaced, rune(0x0022)) - r += 1 - case '\\': - replaced = append(replaced, rune(0x005C)) - r += 1 - case 'u': - // At this point, we know we have a Unicode escape of the form - // `uXXXX` at [r, r+5). (Because the lexer guarantees this - // for us.) - escaped := p.asciiEscapeToUnicode(s[r+1 : r+5]) - replaced = append(replaced, escaped) - r += 5 - case 'U': - // At this point, we know we have a Unicode escape of the form - // `uXXXX` at [r, r+9). (Because the lexer guarantees this - // for us.) - escaped := p.asciiEscapeToUnicode(s[r+1 : r+9]) - replaced = append(replaced, escaped) - r += 9 - } - } - return string(replaced) -} - -func (p *parser) asciiEscapeToUnicode(bs []byte) rune { - s := string(bs) - hex, err := strconv.ParseUint(strings.ToLower(s), 16, 32) - if err != nil { - p.bug("Could not parse '%s' as a hexadecimal number, but the "+ - "lexer claims it's OK: %s", s, err) - } - if !utf8.ValidRune(rune(hex)) { - p.panicf("Escaped character '\\u%s' is not valid UTF-8.", s) - } - return rune(hex) -} - -func isStringType(ty itemType) bool { - return ty == itemString || ty == itemMultilineString || - ty == itemRawString || ty == itemRawMultilineString -} diff --git a/vendor/github.com/BurntSushi/toml/session.vim b/vendor/github.com/BurntSushi/toml/session.vim deleted file mode 100644 index 562164b..0000000 --- a/vendor/github.com/BurntSushi/toml/session.vim +++ /dev/null @@ -1 +0,0 @@ -au BufWritePost *.go silent!make tags > /dev/null 2>&1 diff --git a/vendor/github.com/BurntSushi/toml/type_check.go b/vendor/github.com/BurntSushi/toml/type_check.go deleted file mode 100644 index c73f8af..0000000 --- a/vendor/github.com/BurntSushi/toml/type_check.go +++ /dev/null @@ -1,91 +0,0 @@ -package toml - -// tomlType represents any Go type that corresponds to a TOML type. -// While the first draft of the TOML spec has a simplistic type system that -// probably doesn't need this level of sophistication, we seem to be militating -// toward adding real composite types. -type tomlType interface { - typeString() string -} - -// typeEqual accepts any two types and returns true if they are equal. -func typeEqual(t1, t2 tomlType) bool { - if t1 == nil || t2 == nil { - return false - } - return t1.typeString() == t2.typeString() -} - -func typeIsHash(t tomlType) bool { - return typeEqual(t, tomlHash) || typeEqual(t, tomlArrayHash) -} - -type tomlBaseType string - -func (btype tomlBaseType) typeString() string { - return string(btype) -} - -func (btype tomlBaseType) String() string { - return btype.typeString() -} - -var ( - tomlInteger tomlBaseType = "Integer" - tomlFloat tomlBaseType = "Float" - tomlDatetime tomlBaseType = "Datetime" - tomlString tomlBaseType = "String" - tomlBool tomlBaseType = "Bool" - tomlArray tomlBaseType = "Array" - tomlHash tomlBaseType = "Hash" - tomlArrayHash tomlBaseType = "ArrayHash" -) - -// typeOfPrimitive returns a tomlType of any primitive value in TOML. -// Primitive values are: Integer, Float, Datetime, String and Bool. -// -// Passing a lexer item other than the following will cause a BUG message -// to occur: itemString, itemBool, itemInteger, itemFloat, itemDatetime. -func (p *parser) typeOfPrimitive(lexItem item) tomlType { - switch lexItem.typ { - case itemInteger: - return tomlInteger - case itemFloat: - return tomlFloat - case itemDatetime: - return tomlDatetime - case itemString: - return tomlString - case itemMultilineString: - return tomlString - case itemRawString: - return tomlString - case itemRawMultilineString: - return tomlString - case itemBool: - return tomlBool - } - p.bug("Cannot infer primitive type of lex item '%s'.", lexItem) - panic("unreachable") -} - -// typeOfArray returns a tomlType for an array given a list of types of its -// values. -// -// In the current spec, if an array is homogeneous, then its type is always -// "Array". If the array is not homogeneous, an error is generated. -func (p *parser) typeOfArray(types []tomlType) tomlType { - // Empty arrays are cool. - if len(types) == 0 { - return tomlArray - } - - theType := types[0] - for _, t := range types[1:] { - if !typeEqual(theType, t) { - p.panicf("Array contains values of type '%s' and '%s', but "+ - "arrays must be homogeneous.", theType, t) - } - } - return tomlArray -} diff --git a/vendor/github.com/BurntSushi/toml/type_fields.go b/vendor/github.com/BurntSushi/toml/type_fields.go deleted file mode 100644 index 608997c..0000000 --- a/vendor/github.com/BurntSushi/toml/type_fields.go +++ /dev/null @@ -1,242 +0,0 @@ -package toml - -// Struct field handling is adapted from code in encoding/json: -// -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the Go distribution. - -import ( - "reflect" - "sort" - "sync" -) - -// A field represents a single field found in a struct. -type field struct { - name string // the name of the field (`toml` tag included) - tag bool // whether field has a `toml` tag - index []int // represents the depth of an anonymous field - typ reflect.Type // the type of the field -} - -// byName sorts field by name, breaking ties with depth, -// then breaking ties with "name came from toml tag", then -// breaking ties with index sequence. -type byName []field - -func (x byName) Len() int { return len(x) } - -func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x byName) Less(i, j int) bool { - if x[i].name != x[j].name { - return x[i].name < x[j].name - } - if len(x[i].index) != len(x[j].index) { - return len(x[i].index) < len(x[j].index) - } - if x[i].tag != x[j].tag { - return x[i].tag - } - return byIndex(x).Less(i, j) -} - -// byIndex sorts field by index sequence. -type byIndex []field - -func (x byIndex) Len() int { return len(x) } - -func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x byIndex) Less(i, j int) bool { - for k, xik := range x[i].index { - if k >= len(x[j].index) { - return false - } - if xik != x[j].index[k] { - return xik < x[j].index[k] - } - } - return len(x[i].index) < len(x[j].index) -} - -// typeFields returns a list of fields that TOML should recognize for the given -// type. The algorithm is breadth-first search over the set of structs to -// include - the top struct and then any reachable anonymous structs. -func typeFields(t reflect.Type) []field { - // Anonymous fields to explore at the current level and the next. - current := []field{} - next := []field{{typ: t}} - - // Count of queued names for current level and the next. - count := map[reflect.Type]int{} - nextCount := map[reflect.Type]int{} - - // Types already visited at an earlier level. - visited := map[reflect.Type]bool{} - - // Fields found. - var fields []field - - for len(next) > 0 { - current, next = next, current[:0] - count, nextCount = nextCount, map[reflect.Type]int{} - - for _, f := range current { - if visited[f.typ] { - continue - } - visited[f.typ] = true - - // Scan f.typ for fields to include. - for i := 0; i < f.typ.NumField(); i++ { - sf := f.typ.Field(i) - if sf.PkgPath != "" && !sf.Anonymous { // unexported - continue - } - opts := getOptions(sf.Tag) - if opts.skip { - continue - } - index := make([]int, len(f.index)+1) - copy(index, f.index) - index[len(f.index)] = i - - ft := sf.Type - if ft.Name() == "" && ft.Kind() == reflect.Ptr { - // Follow pointer. - ft = ft.Elem() - } - - // Record found field and index sequence. - if opts.name != "" || !sf.Anonymous || ft.Kind() != reflect.Struct { - tagged := opts.name != "" - name := opts.name - if name == "" { - name = sf.Name - } - fields = append(fields, field{name, tagged, index, ft}) - if count[f.typ] > 1 { - // If there were multiple instances, add a second, - // so that the annihilation code will see a duplicate. - // It only cares about the distinction between 1 or 2, - // so don't bother generating any more copies. - fields = append(fields, fields[len(fields)-1]) - } - continue - } - - // Record new anonymous struct to explore in next round. - nextCount[ft]++ - if nextCount[ft] == 1 { - f := field{name: ft.Name(), index: index, typ: ft} - next = append(next, f) - } - } - } - } - - sort.Sort(byName(fields)) - - // Delete all fields that are hidden by the Go rules for embedded fields, - // except that fields with TOML tags are promoted. - - // The fields are sorted in primary order of name, secondary order - // of field index length. Loop over names; for each name, delete - // hidden fields by choosing the one dominant field that survives. - out := fields[:0] - for advance, i := 0, 0; i < len(fields); i += advance { - // One iteration per name. - // Find the sequence of fields with the name of this first field. - fi := fields[i] - name := fi.name - for advance = 1; i+advance < len(fields); advance++ { - fj := fields[i+advance] - if fj.name != name { - break - } - } - if advance == 1 { // Only one field with this name - out = append(out, fi) - continue - } - dominant, ok := dominantField(fields[i : i+advance]) - if ok { - out = append(out, dominant) - } - } - - fields = out - sort.Sort(byIndex(fields)) - - return fields -} - -// dominantField looks through the fields, all of which are known to -// have the same name, to find the single field that dominates the -// others using Go's embedding rules, modified by the presence of -// TOML tags. If there are multiple top-level fields, the boolean -// will be false: This condition is an error in Go and we skip all -// the fields. -func dominantField(fields []field) (field, bool) { - // The fields are sorted in increasing index-length order. The winner - // must therefore be one with the shortest index length. Drop all - // longer entries, which is easy: just truncate the slice. - length := len(fields[0].index) - tagged := -1 // Index of first tagged field. - for i, f := range fields { - if len(f.index) > length { - fields = fields[:i] - break - } - if f.tag { - if tagged >= 0 { - // Multiple tagged fields at the same level: conflict. - // Return no field. - return field{}, false - } - tagged = i - } - } - if tagged >= 0 { - return fields[tagged], true - } - // All remaining fields have the same length. If there's more than one, - // we have a conflict (two fields named "X" at the same level) and we - // return no field. - if len(fields) > 1 { - return field{}, false - } - return fields[0], true -} - -var fieldCache struct { - sync.RWMutex - m map[reflect.Type][]field -} - -// cachedTypeFields is like typeFields but uses a cache to avoid repeated work. -func cachedTypeFields(t reflect.Type) []field { - fieldCache.RLock() - f := fieldCache.m[t] - fieldCache.RUnlock() - if f != nil { - return f - } - - // Compute fields without lock. - // Might duplicate effort but won't hold other computations back. - f = typeFields(t) - if f == nil { - f = []field{} - } - - fieldCache.Lock() - if fieldCache.m == nil { - fieldCache.m = map[reflect.Type][]field{} - } - fieldCache.m[t] = f - fieldCache.Unlock() - return f -} diff --git a/vendor/github.com/PuerkitoBio/goquery/README.md b/vendor/github.com/PuerkitoBio/goquery/README.md index 0bc221d..791fd0b 100644 --- a/vendor/github.com/PuerkitoBio/goquery/README.md +++ b/vendor/github.com/PuerkitoBio/goquery/README.md @@ -37,6 +37,7 @@ Please note that because of the net/html dependency, goquery requires Go1.1+. **Note that goquery's API is now stable, and will not break.** +* **2020-10-08 (v1.6.0)** : Parse html in context of the container node for all functions that deal with html strings (`AfterHtml`, `AppendHtml`, etc.). Thanks to [@thiemok][thiemok] and [@davidjwilkins][djw] for their work on this. * **2020-02-04 (v1.5.1)** : Update module dependencies. * **2018-11-15 (v1.5.0)** : Go module support (thanks @Zaba505). * **2018-06-07 (v1.4.1)** : Add `NewDocumentFromReader` examples. @@ -143,8 +144,9 @@ func main() { - [gnulnx/goperf](https://github.com/gnulnx/goperf), a website performance test tool that also fetches static assets. - [MontFerret/ferret](https://github.com/MontFerret/ferret), declarative web scraping. - [tacusci/berrycms](https://github.com/tacusci/berrycms), a modern simple to use CMS with easy to write plugins -- [Dataflow kit](https://github.com/slotix/dataflowkit), Web Scraping framework for Gophers. +- [Dataflow kit](https://github.com/slotix/dataflowkit), Web Scraping framework for Gophers. - [Geziyor](https://github.com/geziyor/geziyor), a fast web crawling & scraping framework for Go. Supports JS rendering. +- [Pagser](https://github.com/foolin/pagser), a simple, easy, extensible, configurable HTML parser to struct based on goquery and struct tags. ## Support @@ -181,3 +183,5 @@ The [BSD 3-Clause license][bsd], the same as the [Go language][golic]. Cascadia' [thatguystone]: https://github.com/thatguystone [piotr]: https://github.com/piotrkowalczuk [goq]: https://github.com/andrewstuart/goq +[thiemok]: https://github.com/thiemok +[djw]: https://github.com/davidjwilkins diff --git a/vendor/github.com/PuerkitoBio/goquery/manipulation.go b/vendor/github.com/PuerkitoBio/goquery/manipulation.go index 34eb757..2c31770 100644 --- a/vendor/github.com/PuerkitoBio/goquery/manipulation.go +++ b/vendor/github.com/PuerkitoBio/goquery/manipulation.go @@ -39,8 +39,15 @@ func (s *Selection) AfterSelection(sel *Selection) *Selection { // AfterHtml parses the html and inserts it after the set of matched elements. // // This follows the same rules as Selection.Append. -func (s *Selection) AfterHtml(html string) *Selection { - return s.AfterNodes(parseHtml(html)...) +func (s *Selection) AfterHtml(htmlStr string) *Selection { + return s.eachNodeHtml(htmlStr, true, func(node *html.Node, nodes []*html.Node) { + nextSibling := node.NextSibling + for _, n := range nodes { + if node.Parent != nil { + node.Parent.InsertBefore(n, nextSibling) + } + } + }) } // AfterNodes inserts the nodes after each element in the set of matched elements. @@ -85,8 +92,12 @@ func (s *Selection) AppendSelection(sel *Selection) *Selection { } // AppendHtml parses the html and appends it to the set of matched elements. -func (s *Selection) AppendHtml(html string) *Selection { - return s.AppendNodes(parseHtml(html)...) +func (s *Selection) AppendHtml(htmlStr string) *Selection { + return s.eachNodeHtml(htmlStr, false, func(node *html.Node, nodes []*html.Node) { + for _, n := range nodes { + node.AppendChild(n) + } + }) } // AppendNodes appends the specified nodes to each node in the set of matched elements. @@ -123,8 +134,14 @@ func (s *Selection) BeforeSelection(sel *Selection) *Selection { // BeforeHtml parses the html and inserts it before the set of matched elements. // // This follows the same rules as Selection.Append. -func (s *Selection) BeforeHtml(html string) *Selection { - return s.BeforeNodes(parseHtml(html)...) +func (s *Selection) BeforeHtml(htmlStr string) *Selection { + return s.eachNodeHtml(htmlStr, true, func(node *html.Node, nodes []*html.Node) { + for _, n := range nodes { + if node.Parent != nil { + node.Parent.InsertBefore(n, node) + } + } + }) } // BeforeNodes inserts the nodes before each element in the set of matched elements. @@ -184,8 +201,13 @@ func (s *Selection) PrependSelection(sel *Selection) *Selection { } // PrependHtml parses the html and prepends it to the set of matched elements. -func (s *Selection) PrependHtml(html string) *Selection { - return s.PrependNodes(parseHtml(html)...) +func (s *Selection) PrependHtml(htmlStr string) *Selection { + return s.eachNodeHtml(htmlStr, false, func(node *html.Node, nodes []*html.Node) { + firstChild := node.FirstChild + for _, n := range nodes { + node.InsertBefore(n, firstChild) + } + }) } // PrependNodes prepends the specified nodes to each node in the set of @@ -212,14 +234,19 @@ func (s *Selection) Remove() *Selection { return s } -// RemoveFiltered removes the set of matched elements by selector. -// It returns the Selection of removed nodes. +// RemoveFiltered removes from the current set of matched elements those that +// match the selector filter. It returns the Selection of removed nodes. +// +// For example if the selection s contains "

", "

" and "

" +// and s.RemoveFiltered("h2") is called, only the "

" node is removed +// (and returned), while "

" and "

" are kept in the document. func (s *Selection) RemoveFiltered(selector string) *Selection { return s.RemoveMatcher(compileMatcher(selector)) } -// RemoveMatcher removes the set of matched elements. -// It returns the Selection of removed nodes. +// RemoveMatcher removes from the current set of matched elements those that +// match the Matcher filter. It returns the Selection of removed nodes. +// See RemoveFiltered for additional information. func (s *Selection) RemoveMatcher(m Matcher) *Selection { return s.FilterMatcher(m).Remove() } @@ -256,8 +283,16 @@ func (s *Selection) ReplaceWithSelection(sel *Selection) *Selection { // It returns the removed elements. // // This follows the same rules as Selection.Append. -func (s *Selection) ReplaceWithHtml(html string) *Selection { - return s.ReplaceWithNodes(parseHtml(html)...) +func (s *Selection) ReplaceWithHtml(htmlStr string) *Selection { + s.eachNodeHtml(htmlStr, true, func(node *html.Node, nodes []*html.Node) { + nextSibling := node.NextSibling + for _, n := range nodes { + if node.Parent != nil { + node.Parent.InsertBefore(n, nextSibling) + } + } + }) + return s.Remove() } // ReplaceWithNodes replaces each element in the set of matched elements with @@ -272,8 +307,17 @@ func (s *Selection) ReplaceWithNodes(ns ...*html.Node) *Selection { // SetHtml sets the html content of each element in the selection to // specified html string. -func (s *Selection) SetHtml(html string) *Selection { - return setHtmlNodes(s, parseHtml(html)...) +func (s *Selection) SetHtml(htmlStr string) *Selection { + for _, context := range s.Nodes { + for c := context.FirstChild; c != nil; c = context.FirstChild { + context.RemoveChild(c) + } + } + return s.eachNodeHtml(htmlStr, false, func(node *html.Node, nodes []*html.Node) { + for _, n := range nodes { + node.AppendChild(n) + } + }) } // SetText sets the content of each element in the selection to specified content. @@ -329,8 +373,23 @@ func (s *Selection) WrapSelection(sel *Selection) *Selection { // most child of the given HTML. // // It returns the original set of elements. -func (s *Selection) WrapHtml(html string) *Selection { - return s.wrapNodes(parseHtml(html)...) +func (s *Selection) WrapHtml(htmlStr string) *Selection { + nodesMap := make(map[string][]*html.Node) + for _, context := range s.Nodes { + var parent *html.Node + if context.Parent != nil { + parent = context.Parent + } else { + parent = &html.Node{Type: html.ElementNode} + } + nodes, found := nodesMap[nodeName(parent)] + if !found { + nodes = parseHtmlWithContext(htmlStr, parent) + nodesMap[nodeName(parent)] = nodes + } + newSingleSelection(context, s.document).wrapAllNodes(cloneNodes(nodes)...) + } + return s } // WrapNode wraps each element in the set of matched elements inside the inner- @@ -382,8 +441,18 @@ func (s *Selection) WrapAllSelection(sel *Selection) *Selection { // document. // // It returns the original set of elements. -func (s *Selection) WrapAllHtml(html string) *Selection { - return s.wrapAllNodes(parseHtml(html)...) +func (s *Selection) WrapAllHtml(htmlStr string) *Selection { + var context *html.Node + var nodes []*html.Node + if len(s.Nodes) > 0 { + context = s.Nodes[0] + if context.Parent != nil { + nodes = parseHtmlWithContext(htmlStr, context) + } else { + nodes = parseHtml(htmlStr) + } + } + return s.wrapAllNodes(nodes...) } func (s *Selection) wrapAllNodes(ns ...*html.Node) *Selection { @@ -452,8 +521,17 @@ func (s *Selection) WrapInnerSelection(sel *Selection) *Selection { // cloned before being inserted into the document. // // It returns the original set of elements. -func (s *Selection) WrapInnerHtml(html string) *Selection { - return s.wrapInnerNodes(parseHtml(html)...) +func (s *Selection) WrapInnerHtml(htmlStr string) *Selection { + nodesMap := make(map[string][]*html.Node) + for _, context := range s.Nodes { + nodes, found := nodesMap[nodeName(context)] + if !found { + nodes = parseHtmlWithContext(htmlStr, context) + nodesMap[nodeName(context)] = nodes + } + newSingleSelection(context, s.document).wrapInnerNodes(cloneNodes(nodes)...) + } + return s } // WrapInnerNode wraps an HTML structure, matched by the given selector, around @@ -493,16 +571,14 @@ func parseHtml(h string) []*html.Node { return nodes } -func setHtmlNodes(s *Selection, ns ...*html.Node) *Selection { - for _, n := range s.Nodes { - for c := n.FirstChild; c != nil; c = n.FirstChild { - n.RemoveChild(c) - } - for _, c := range ns { - n.AppendChild(cloneNode(c)) - } +func parseHtmlWithContext(h string, context *html.Node) []*html.Node { + // Errors are only returned when the io.Reader returns any error besides + // EOF, but strings.Reader never will + nodes, err := html.ParseFragment(strings.NewReader(h), context) + if err != nil { + panic("goquery: failed to parse HTML: " + err.Error()) } - return s + return nodes } // Get the first child that is an ElementNode @@ -572,3 +648,29 @@ func (s *Selection) manipulateNodes(ns []*html.Node, reverse bool, return s } + +// eachNodeHtml parses the given html string and inserts the resulting nodes in the dom with the mergeFn. +// The parsed nodes are inserted for each element of the selection. +// isParent can be used to indicate that the elements of the selection should be treated as the parent for the parsed html. +// A cache is used to avoid parsing the html multiple times should the elements of the selection result in the same context. +func (s *Selection) eachNodeHtml(htmlStr string, isParent bool, mergeFn func(n *html.Node, nodes []*html.Node)) *Selection { + // cache to avoid parsing the html for the same context multiple times + nodeCache := make(map[string][]*html.Node) + var context *html.Node + for _, n := range s.Nodes { + if isParent { + context = n.Parent + } else { + context = n + } + if context != nil { + nodes, found := nodeCache[nodeName(context)] + if !found { + nodes = parseHtmlWithContext(htmlStr, context) + nodeCache[nodeName(context)] = nodes + } + mergeFn(n, cloneNodes(nodes)) + } + } + return s +} diff --git a/vendor/github.com/PuerkitoBio/goquery/utilities.go b/vendor/github.com/PuerkitoBio/goquery/utilities.go index b4c061a..3e11b1d 100644 --- a/vendor/github.com/PuerkitoBio/goquery/utilities.go +++ b/vendor/github.com/PuerkitoBio/goquery/utilities.go @@ -36,12 +36,22 @@ func NodeName(s *Selection) string { if s.Length() == 0 { return "" } - switch n := s.Get(0); n.Type { + return nodeName(s.Get(0)) +} + +// nodeName returns the node name of the given html node. +// See NodeName for additional details on behaviour. +func nodeName(node *html.Node) string { + if node == nil { + return "" + } + + switch node.Type { case html.ElementNode, html.DoctypeNode: - return n.Data + return node.Data default: - if n.Type >= 0 && int(n.Type) < len(nodeNames) { - return nodeNames[n.Type] + if node.Type >= 0 && int(node.Type) < len(nodeNames) { + return nodeNames[node.Type] } return "" } diff --git a/vendor/github.com/andybalholm/cascadia/go.mod b/vendor/github.com/andybalholm/cascadia/go.mod index e6febbb..51a330b 100644 --- a/vendor/github.com/andybalholm/cascadia/go.mod +++ b/vendor/github.com/andybalholm/cascadia/go.mod @@ -1,3 +1,5 @@ -module "github.com/andybalholm/cascadia" +module github.com/andybalholm/cascadia -require "golang.org/x/net" v0.0.0-20180218175443-cbe0f9307d01 +require golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01 + +go 1.13 diff --git a/vendor/github.com/andybalholm/cascadia/parser.go b/vendor/github.com/andybalholm/cascadia/parser.go index 4f8810e..c40a39f 100644 --- a/vendor/github.com/andybalholm/cascadia/parser.go +++ b/vendor/github.com/andybalholm/cascadia/parser.go @@ -13,6 +13,10 @@ import ( type parser struct { s string // the source text i int // the current position + + // if `false`, parsing a pseudo-element + // returns an error. + acceptPseudoElements bool } // parseEscape parses a backslash escape. @@ -29,7 +33,7 @@ func (p *parser) parseEscape() (result string, err error) { case hexDigit(c): // unicode escape (hex) var i int - for i = start; i < p.i+6 && i < len(p.s) && hexDigit(p.s[i]); i++ { + for i = start; i < start+6 && i < len(p.s) && hexDigit(p.s[i]); i++ { // empty } v, _ := strconv.ParseUint(p.s[start:i], 16, 21) @@ -422,17 +426,25 @@ var errExpectedParenthesis = errors.New("expected '(' but didn't find it") var errExpectedClosingParenthesis = errors.New("expected ')' but didn't find it") var errUnmatchedParenthesis = errors.New("unmatched '('") -// parsePseudoclassSelector parses a pseudoclass selector like :not(p) -func (p *parser) parsePseudoclassSelector() (out Sel, err error) { +// parsePseudoclassSelector parses a pseudoclass selector like :not(p) or a pseudo-element +// For backwards compatibility, both ':' and '::' prefix are allowed for pseudo-elements. +// https://drafts.csswg.org/selectors-3/#pseudo-elements +// Returning a nil `Sel` (and a nil `error`) means we found a pseudo-element. +func (p *parser) parsePseudoclassSelector() (out Sel, pseudoElement string, err error) { if p.i >= len(p.s) { - return nil, fmt.Errorf("expected pseudoclass selector (:pseudoclass), found EOF instead") + return nil, "", fmt.Errorf("expected pseudoclass selector (:pseudoclass), found EOF instead") } if p.s[p.i] != ':' { - return nil, fmt.Errorf("expected attribute selector (:pseudoclass), found '%c' instead", p.s[p.i]) + return nil, "", fmt.Errorf("expected attribute selector (:pseudoclass), found '%c' instead", p.s[p.i]) } p.i++ + var mustBePseudoElement bool + if p.i >= len(p.s) { + return nil, "", fmt.Errorf("got empty pseudoclass (or pseudoelement)") + } if p.s[p.i] == ':' { // we found a pseudo-element + mustBePseudoElement = true p.i++ } @@ -441,27 +453,33 @@ func (p *parser) parsePseudoclassSelector() (out Sel, err error) { return } name = toLowerASCII(name) + if mustBePseudoElement && (name != "after" && name != "backdrop" && name != "before" && + name != "cue" && name != "first-letter" && name != "first-line" && name != "grammar-error" && + name != "marker" && name != "placeholder" && name != "selection" && name != "spelling-error") { + return out, "", fmt.Errorf("unknown pseudoelement :%s", name) + } + switch name { case "not", "has", "haschild": if !p.consumeParenthesis() { - return out, errExpectedParenthesis + return out, "", errExpectedParenthesis } sel, parseErr := p.parseSelectorGroup() if parseErr != nil { - return out, parseErr + return out, "", parseErr } if !p.consumeClosingParenthesis() { - return out, errExpectedClosingParenthesis + return out, "", errExpectedClosingParenthesis } out = relativePseudoClassSelector{name: name, match: sel} case "contains", "containsown": if !p.consumeParenthesis() { - return out, errExpectedParenthesis + return out, "", errExpectedParenthesis } if p.i == len(p.s) { - return out, errUnmatchedParenthesis + return out, "", errUnmatchedParenthesis } var val string switch p.s[p.i] { @@ -471,46 +489,46 @@ func (p *parser) parsePseudoclassSelector() (out Sel, err error) { val, err = p.parseIdentifier() } if err != nil { - return out, err + return out, "", err } val = strings.ToLower(val) p.skipWhitespace() if p.i >= len(p.s) { - return out, errors.New("unexpected EOF in pseudo selector") + return out, "", errors.New("unexpected EOF in pseudo selector") } if !p.consumeClosingParenthesis() { - return out, errExpectedClosingParenthesis + return out, "", errExpectedClosingParenthesis } out = containsPseudoClassSelector{own: name == "containsown", value: val} case "matches", "matchesown": if !p.consumeParenthesis() { - return out, errExpectedParenthesis + return out, "", errExpectedParenthesis } rx, err := p.parseRegex() if err != nil { - return out, err + return out, "", err } if p.i >= len(p.s) { - return out, errors.New("unexpected EOF in pseudo selector") + return out, "", errors.New("unexpected EOF in pseudo selector") } if !p.consumeClosingParenthesis() { - return out, errExpectedClosingParenthesis + return out, "", errExpectedClosingParenthesis } out = regexpPseudoClassSelector{own: name == "matchesown", regexp: rx} case "nth-child", "nth-last-child", "nth-of-type", "nth-last-of-type": if !p.consumeParenthesis() { - return out, errExpectedParenthesis + return out, "", errExpectedParenthesis } a, b, err := p.parseNth() if err != nil { - return out, err + return out, "", err } if !p.consumeClosingParenthesis() { - return out, errExpectedClosingParenthesis + return out, "", errExpectedClosingParenthesis } last := name == "nth-last-child" || name == "nth-last-of-type" ofType := name == "nth-of-type" || name == "nth-last-of-type" @@ -535,9 +553,9 @@ func (p *parser) parsePseudoclassSelector() (out Sel, err error) { case "root": out = rootPseudoClassSelector{} case "after", "backdrop", "before", "cue", "first-letter", "first-line", "grammar-error", "marker", "placeholder", "selection", "spelling-error": - return out, errors.New("pseudo-elements are not yet supported") + return nil, name, nil default: - return out, fmt.Errorf("unknown pseudoclass or pseudoelement :%s", name) + return out, "", fmt.Errorf("unknown pseudoclass or pseudoelement :%s", name) } return } @@ -706,11 +724,13 @@ func (p *parser) parseSimpleSelectorSequence() (Sel, error) { selectors = append(selectors, r) } + var pseudoElement string loop: for p.i < len(p.s) { var ( - ns Sel - err error + ns Sel + newPseudoElement string + err error ) switch p.s[p.i] { case '#': @@ -720,20 +740,37 @@ loop: case '[': ns, err = p.parseAttributeSelector() case ':': - ns, err = p.parsePseudoclassSelector() + ns, newPseudoElement, err = p.parsePseudoclassSelector() default: break loop } if err != nil { return nil, err } + // From https://drafts.csswg.org/selectors-3/#pseudo-elements : + // "Only one pseudo-element may appear per selector, and if present + // it must appear after the sequence of simple selectors that + // represents the subjects of the selector."" + if ns == nil { // we found a pseudo-element + if pseudoElement != "" { + return nil, fmt.Errorf("only one pseudo-element is accepted per selector, got %s and %s", pseudoElement, newPseudoElement) + } + if !p.acceptPseudoElements { + return nil, fmt.Errorf("pseudo-element %s found, but pseudo-elements support is disabled", newPseudoElement) + } + pseudoElement = newPseudoElement + } else { + if pseudoElement != "" { + return nil, fmt.Errorf("pseudo-element %s must be at the end of selector", pseudoElement) + } + selectors = append(selectors, ns) + } - selectors = append(selectors, ns) } - if len(selectors) == 1 { // no need wrap the selectors in compoundSelector + if len(selectors) == 1 && pseudoElement == "" { // no need wrap the selectors in compoundSelector return selectors[0], nil } - return compoundSelector{selectors: selectors}, nil + return compoundSelector{selectors: selectors, pseudoElement: pseudoElement}, nil } // parseSelector parses a selector that may include combinators. diff --git a/vendor/github.com/andybalholm/cascadia/selector.go b/vendor/github.com/andybalholm/cascadia/selector.go index 18ce116..e2a6dc4 100644 --- a/vendor/github.com/andybalholm/cascadia/selector.go +++ b/vendor/github.com/andybalholm/cascadia/selector.go @@ -16,14 +16,19 @@ type Matcher interface { } // Sel is the interface for all the functionality provided by selectors. -// It is currently the same as Matcher, but other methods may be added in the -// future. type Sel interface { Matcher Specificity() Specificity + + // Returns a CSS input compiling to this selector. + String() string + + // Returns a pseudo-element, or an empty string. + PseudoElement() string } -// Parse parses a selector. +// Parse parses a selector. Use `ParseWithPseudoElement` +// if you need support for pseudo-elements. func Parse(sel string) (Sel, error) { p := &parser{s: sel} compiled, err := p.parseSelector() @@ -38,7 +43,25 @@ func Parse(sel string) (Sel, error) { return compiled, nil } +// ParseWithPseudoElement parses a single selector, +// with support for pseudo-element. +func ParseWithPseudoElement(sel string) (Sel, error) { + p := &parser{s: sel, acceptPseudoElements: true} + compiled, err := p.parseSelector() + if err != nil { + return nil, err + } + + if p.i < len(sel) { + return nil, fmt.Errorf("parsing %q: %d bytes left over", sel, len(sel)-p.i) + } + + return compiled, nil +} + // ParseGroup parses a selector, or a group of selectors separated by commas. +// Use `ParseGroupWithPseudoElements` +// if you need support for pseudo-elements. func ParseGroup(sel string) (SelectorGroup, error) { p := &parser{s: sel} compiled, err := p.parseSelectorGroup() @@ -53,6 +76,22 @@ func ParseGroup(sel string) (SelectorGroup, error) { return compiled, nil } +// ParseGroupWithPseudoElements parses a selector, or a group of selectors separated by commas. +// It supports pseudo-elements. +func ParseGroupWithPseudoElements(sel string) (SelectorGroup, error) { + p := &parser{s: sel, acceptPseudoElements: true} + compiled, err := p.parseSelectorGroup() + if err != nil { + return nil, err + } + + if p.i < len(sel) { + return nil, fmt.Errorf("parsing %q: %d bytes left over", sel, len(sel)-p.i) + } + + return compiled, nil +} + // A Selector is a function which tells whether a node matches or not. // // This type is maintained for compatibility; I recommend using the newer and @@ -182,6 +221,10 @@ func (c tagSelector) Specificity() Specificity { return Specificity{0, 0, 1} } +func (c tagSelector) PseudoElement() string { + return "" +} + type classSelector struct { class string } @@ -197,6 +240,10 @@ func (c classSelector) Specificity() Specificity { return Specificity{0, 1, 0} } +func (c classSelector) PseudoElement() string { + return "" +} + type idSelector struct { id string } @@ -212,6 +259,10 @@ func (c idSelector) Specificity() Specificity { return Specificity{1, 0, 0} } +func (c idSelector) PseudoElement() string { + return "" +} + type attrSelector struct { key, val, operation string regexp *regexp.Regexp @@ -352,6 +403,10 @@ func (c attrSelector) Specificity() Specificity { return Specificity{0, 1, 0} } +func (c attrSelector) PseudoElement() string { + return "" +} + // ---------------- Pseudo class selectors ---------------- // we use severals concrete types of pseudo-class selectors @@ -415,6 +470,10 @@ func (s relativePseudoClassSelector) Specificity() Specificity { return max } +func (c relativePseudoClassSelector) PseudoElement() string { + return "" +} + type containsPseudoClassSelector struct { own bool value string @@ -436,6 +495,10 @@ func (s containsPseudoClassSelector) Specificity() Specificity { return Specificity{0, 1, 0} } +func (c containsPseudoClassSelector) PseudoElement() string { + return "" +} + type regexpPseudoClassSelector struct { own bool regexp *regexp.Regexp @@ -488,6 +551,10 @@ func (s regexpPseudoClassSelector) Specificity() Specificity { return Specificity{0, 1, 0} } +func (c regexpPseudoClassSelector) PseudoElement() string { + return "" +} + type nthPseudoClassSelector struct { a, b int last, ofType bool @@ -623,6 +690,10 @@ func (s nthPseudoClassSelector) Specificity() Specificity { return Specificity{0, 1, 0} } +func (c nthPseudoClassSelector) PseudoElement() string { + return "" +} + type onlyChildPseudoClassSelector struct { ofType bool } @@ -661,6 +732,10 @@ func (s onlyChildPseudoClassSelector) Specificity() Specificity { return Specificity{0, 1, 0} } +func (c onlyChildPseudoClassSelector) PseudoElement() string { + return "" +} + type inputPseudoClassSelector struct{} // Matches input, select, textarea and button elements. @@ -672,6 +747,10 @@ func (s inputPseudoClassSelector) Specificity() Specificity { return Specificity{0, 1, 0} } +func (c inputPseudoClassSelector) PseudoElement() string { + return "" +} + type emptyElementPseudoClassSelector struct{} // Matches empty elements. @@ -694,6 +773,10 @@ func (s emptyElementPseudoClassSelector) Specificity() Specificity { return Specificity{0, 1, 0} } +func (c emptyElementPseudoClassSelector) PseudoElement() string { + return "" +} + type rootPseudoClassSelector struct{} // Match implements :root @@ -711,8 +794,13 @@ func (s rootPseudoClassSelector) Specificity() Specificity { return Specificity{0, 1, 0} } +func (c rootPseudoClassSelector) PseudoElement() string { + return "" +} + type compoundSelector struct { - selectors []Sel + selectors []Sel + pseudoElement string } // Matches elements if each sub-selectors matches. @@ -734,9 +822,17 @@ func (s compoundSelector) Specificity() Specificity { for _, sel := range s.selectors { out = out.Add(sel.Specificity()) } + if s.pseudoElement != "" { + // https://drafts.csswg.org/selectors-3/#specificity + out = out.Add(Specificity{0, 0, 1}) + } return out } +func (c compoundSelector) PseudoElement() string { + return c.pseudoElement +} + type combinedSelector struct { first Sel combinator byte @@ -818,6 +914,15 @@ func (s combinedSelector) Specificity() Specificity { return spec } +// on combinedSelector, a pseudo-element only makes sens on the last +// selector, although others increase specificity. +func (c combinedSelector) PseudoElement() string { + if c.second == nil { + return "" + } + return c.second.PseudoElement() +} + // A SelectorGroup is a list of selectors, which matches if any of the // individual selectors matches. type SelectorGroup []Sel diff --git a/vendor/github.com/andybalholm/cascadia/serialize.go b/vendor/github.com/andybalholm/cascadia/serialize.go new file mode 100644 index 0000000..f15b079 --- /dev/null +++ b/vendor/github.com/andybalholm/cascadia/serialize.go @@ -0,0 +1,120 @@ +package cascadia + +import ( + "fmt" + "strings" +) + +// implements the reverse operation Sel -> string + +func (c tagSelector) String() string { + return c.tag +} + +func (c idSelector) String() string { + return "#" + c.id +} + +func (c classSelector) String() string { + return "." + c.class +} + +func (c attrSelector) String() string { + val := c.val + if c.operation == "#=" { + val = c.regexp.String() + } else if c.operation != "" { + val = fmt.Sprintf(`"%s"`, val) + } + return fmt.Sprintf(`[%s%s%s]`, c.key, c.operation, val) +} + +func (c relativePseudoClassSelector) String() string { + return fmt.Sprintf(":%s(%s)", c.name, c.match.String()) +} +func (c containsPseudoClassSelector) String() string { + s := "contains" + if c.own { + s += "Own" + } + return fmt.Sprintf(`:%s("%s")`, s, c.value) +} +func (c regexpPseudoClassSelector) String() string { + s := "matches" + if c.own { + s += "Own" + } + return fmt.Sprintf(":%s(%s)", s, c.regexp.String()) +} +func (c nthPseudoClassSelector) String() string { + if c.a == 0 && c.b == 1 { // special cases + s := ":first-" + if c.last { + s = ":last-" + } + if c.ofType { + s += "of-type" + } else { + s += "child" + } + return s + } + var name string + switch [2]bool{c.last, c.ofType} { + case [2]bool{true, true}: + name = "nth-last-of-type" + case [2]bool{true, false}: + name = "nth-last-child" + case [2]bool{false, true}: + name = "nth-of-type" + case [2]bool{false, false}: + name = "nth-child" + } + return fmt.Sprintf(":%s(%dn+%d)", name, c.a, c.b) +} +func (c onlyChildPseudoClassSelector) String() string { + if c.ofType { + return ":only-of-type" + } + return ":only-child" +} +func (c inputPseudoClassSelector) String() string { + return ":input" +} +func (c emptyElementPseudoClassSelector) String() string { + return ":empty" +} +func (c rootPseudoClassSelector) String() string { + return ":root" +} + +func (c compoundSelector) String() string { + if len(c.selectors) == 0 && c.pseudoElement == "" { + return "*" + } + chunks := make([]string, len(c.selectors)) + for i, sel := range c.selectors { + chunks[i] = sel.String() + } + s := strings.Join(chunks, "") + if c.pseudoElement != "" { + s += "::" + c.pseudoElement + } + return s +} + +func (c combinedSelector) String() string { + start := c.first.String() + if c.second != nil { + start += fmt.Sprintf(" %s %s", string(c.combinator), c.second.String()) + } + return start +} + +func (c SelectorGroup) String() string { + ck := make([]string, len(c)) + for i, s := range c { + ck[i] = s.String() + } + return strings.Join(ck, ", ") +} diff --git a/vendor/github.com/araddon/dateparse/.travis.yml b/vendor/github.com/araddon/dateparse/.travis.yml index dbf5741..3b4b177 100644 --- a/vendor/github.com/araddon/dateparse/.travis.yml +++ b/vendor/github.com/araddon/dateparse/.travis.yml @@ -1,9 +1,7 @@ language: go go: - - 1.8.x - - 1.9.x - - 1.10.x + - 1.13.x before_install: - go get -t -v ./... diff --git a/vendor/github.com/araddon/dateparse/README.md b/vendor/github.com/araddon/dateparse/README.md index 80345d9..1e415f4 100644 --- a/vendor/github.com/araddon/dateparse/README.md +++ b/vendor/github.com/araddon/dateparse/README.md @@ -11,7 +11,7 @@ Parse many date strings without knowing format in advance. Uses a scanner to re **MM/DD/YYYY VS DD/MM/YYYY** Right now this uses mm/dd/yyyy WHEN ambiguous if this is not desired behavior, use `ParseStrict` which will fail on ambiguous date strings. -**Timezones** The location your server is configured effects the results! See example or https://play.golang.org/p/IDHRalIyXh and last paragraph here https://golang.org/pkg/time/#Parse. +**Timezones** The location your server is configured affects the results! See example or https://play.golang.org/p/IDHRalIyXh and last paragraph here https://golang.org/pkg/time/#Parse. ```go @@ -48,7 +48,7 @@ import ( "fmt" "time" - "github.com/apcera/termtables" + "github.com/scylladb/termtables" "github.com/araddon/dateparse" ) @@ -66,15 +66,21 @@ var examples = []string{ "Tue, 11 Jul 2017 16:28:13 +0200 (CEST)", "Mon, 02 Jan 2006 15:04:05 -0700", "Thu, 4 Jan 2018 17:53:36 +0000", + "Mon 30 Sep 2018 09:09:09 PM UTC", "Mon Aug 10 15:44:11 UTC+0100 2015", + "Thu, 4 Jan 2018 17:53:36 +0000", "Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)", + "September 17, 2012 10:09am", "September 17, 2012 at 10:09am PST-08", + "September 17, 2012, 10:10:09", "October 7, 1970", + "October 7th, 1970", "12 Feb 2006, 19:17", "12 Feb 2006 19:17", "7 oct 70", "7 oct 1970", "03 February 2013", + "1 July 2013", "2013-Feb-03", // mm/dd/yy "3/31/2014", @@ -102,6 +108,15 @@ var examples = []string{ "2014/4/02 03:00:51", "2012/03/19 10:11:59", "2012/03/19 10:11:59.3186369", + // yyyy:mm:dd + "2014:3:31", + "2014:03:31", + "2014:4:8 22:05", + "2014:04:08 22:05", + "2014:04:2 03:00:51", + "2014:4:02 03:00:51", + "2012:03:19 10:11:59", + "2012:03:19 10:11:59.3186369", // Chinese "2014年04月08日", // yyyy-mm-ddThh @@ -137,6 +152,7 @@ var examples = []string{ "03.31.2014", "08.21.71", "2014.03", + "2014.03.30", // yyyymmdd and similar "20140601", "20140722105203", @@ -194,16 +210,21 @@ func main() { | Mon, 02 Jan 2006 15:04:05 MST | 2006-01-02 15:04:05 +0000 MST | | Tue, 11 Jul 2017 16:28:13 +0200 (CEST) | 2017-07-11 16:28:13 +0200 +0200 | | Mon, 02 Jan 2006 15:04:05 -0700 | 2006-01-02 15:04:05 -0700 -0700 | -| Thu, 4 Jan 2018 17:53:36 +0000 | 2018-01-04 17:53:36 +0000 UTC | +| Mon 30 Sep 2018 09:09:09 PM UTC | 2018-09-30 21:09:09 +0000 UTC | | Mon Aug 10 15:44:11 UTC+0100 2015 | 2015-08-10 15:44:11 +0000 UTC | +| Thu, 4 Jan 2018 17:53:36 +0000 | 2018-01-04 17:53:36 +0000 UTC | | Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015-07-03 18:04:07 +0100 GMT | +| September 17, 2012 10:09am | 2012-09-17 10:09:00 +0000 UTC | | September 17, 2012 at 10:09am PST-08 | 2012-09-17 10:09:00 -0800 PST | +| September 17, 2012, 10:10:09 | 2012-09-17 10:10:09 +0000 UTC | | October 7, 1970 | 1970-10-07 00:00:00 +0000 UTC | +| October 7th, 1970 | 1970-10-07 00:00:00 +0000 UTC | | 12 Feb 2006, 19:17 | 2006-02-12 19:17:00 +0000 UTC | | 12 Feb 2006 19:17 | 2006-02-12 19:17:00 +0000 UTC | | 7 oct 70 | 1970-10-07 00:00:00 +0000 UTC | | 7 oct 1970 | 1970-10-07 00:00:00 +0000 UTC | | 03 February 2013 | 2013-02-03 00:00:00 +0000 UTC | +| 1 July 2013 | 2013-07-01 00:00:00 +0000 UTC | | 2013-Feb-03 | 2013-02-03 00:00:00 +0000 UTC | | 3/31/2014 | 2014-03-31 00:00:00 +0000 UTC | | 03/31/2014 | 2014-03-31 00:00:00 +0000 UTC | @@ -229,7 +250,7 @@ func main() { | 2014/4/02 03:00:51 | 2014-04-02 03:00:51 +0000 UTC | | 2012/03/19 10:11:59 | 2012-03-19 10:11:59 +0000 UTC | | 2012/03/19 10:11:59.3186369 | 2012-03-19 10:11:59.3186369 +0000 UTC | -| 2014年04月08日 | 2014-04-08 00:00:00 +0000 UTC | +| 2014年04月08日 | 2014-04-08 00:00:00 +0000 UTC | | 2006-01-02T15:04:05+0000 | 2006-01-02 15:04:05 +0000 UTC | | 2009-08-12T22:15:09-07:00 | 2009-08-12 22:15:09 -0700 -0700 | | 2009-08-12T22:15:09 | 2009-08-12 22:15:09 +0000 UTC | @@ -260,6 +281,7 @@ func main() { | 03.31.2014 | 2014-03-31 00:00:00 +0000 UTC | | 08.21.71 | 1971-08-21 00:00:00 +0000 UTC | | 2014.03 | 2014-03-01 00:00:00 +0000 UTC | +| 2014.03.30 | 2014-03-30 00:00:00 +0000 UTC | | 20140601 | 2014-06-01 00:00:00 +0000 UTC | | 20140722105203 | 2014-07-22 10:52:03 +0000 UTC | | 1332151919 | 2012-03-19 10:11:59 +0000 UTC | diff --git a/vendor/github.com/araddon/dateparse/go.mod b/vendor/github.com/araddon/dateparse/go.mod new file mode 100644 index 0000000..b99eec7 --- /dev/null +++ b/vendor/github.com/araddon/dateparse/go.mod @@ -0,0 +1,9 @@ +module github.com/araddon/dateparse + +go 1.12 + +require ( + github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4 + github.com/stretchr/testify v1.6.1 +) diff --git a/vendor/github.com/araddon/dateparse/go.sum b/vendor/github.com/araddon/dateparse/go.sum new file mode 100644 index 0000000..56be791 --- /dev/null +++ b/vendor/github.com/araddon/dateparse/go.sum @@ -0,0 +1,15 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +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/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4 h1:8qmTC5ByIXO3GP/IzBkxcZ/99VITvnIETDhdFz/om7A= +github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/araddon/dateparse/parseany.go b/vendor/github.com/araddon/dateparse/parseany.go index 5320620..61a021e 100644 --- a/vendor/github.com/araddon/dateparse/parseany.go +++ b/vendor/github.com/araddon/dateparse/parseany.go @@ -17,6 +17,23 @@ import ( // gou.SetColorOutput() // } +var days = []string{ + "mon", + "tue", + "wed", + "thu", + "fri", + "sat", + "sun", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday", +} + var months = []string{ "january", "february", @@ -36,28 +53,37 @@ type dateState uint8 type timeState uint8 const ( - dateStart dateState = iota + dateStart dateState = iota // 0 dateDigit + dateYearDash + dateYearDashAlphaDash + dateYearDashDash + dateYearDashDashWs // 5 + dateYearDashDashT dateDigitDash - dateDigitDashDash - dateDigitDashDashWs - dateDigitDashDashT - dateDigitDashDashAlpha - dateDigitDot + dateDigitDashAlpha + dateDigitDashAlphaDash + dateDigitDot // 10 dateDigitDotDot dateDigitSlash + dateDigitColon dateDigitChineseYear - dateDigitChineseYearWs + dateDigitChineseYearWs // 15 dateDigitWs dateDigitWsMoYear dateDigitWsMolong dateAlpha - dateAlphaWs + dateAlphaWs // 20 dateAlphaWsDigit - dateAlphaWsDigitComma - dateAlphaWsDigitCommaWs - dateAlphaWsDigitCommaWsYear - dateAlphaWsMonth + dateAlphaWsDigitMore + dateAlphaWsDigitMoreWs + dateAlphaWsDigitMoreWsYear + dateAlphaWsMonth // 25 + dateAlphaWsDigitYearmaybe + dateAlphaWsMonthMore + dateAlphaWsMonthSuffix + dateAlphaWsMore + dateAlphaWsAtTime // 30 dateAlphaWsAlpha dateAlphaWsAlphaYearmaybe dateAlphaPeriodWsDigit @@ -113,8 +139,8 @@ func unknownErr(datestr string) error { // ParseAny parse an unknown date format, detect the layout. // Normal parse. Equivalent Timezone rules as time.Parse(). // NOTE: please see readme on mmdd vs ddmm ambiguous dates. -func ParseAny(datestr string) (time.Time, error) { - p, err := parseTime(datestr, nil) +func ParseAny(datestr string, opts ...ParserOption) (time.Time, error) { + p, err := parseTime(datestr, nil, opts...) if err != nil { return time.Time{}, err } @@ -126,8 +152,8 @@ func ParseAny(datestr string) (time.Time, error) { // datestring, it uses the given location rules for any zone interpretation. // That is, MST means one thing when using America/Denver and something else // in other locations. -func ParseIn(datestr string, loc *time.Location) (time.Time, error) { - p, err := parseTime(datestr, loc) +func ParseIn(datestr string, loc *time.Location, opts ...ParserOption) (time.Time, error) { + p, err := parseTime(datestr, loc, opts...) if err != nil { return time.Time{}, err } @@ -149,8 +175,8 @@ func ParseIn(datestr string, loc *time.Location) (time.Time, error) { // // t, err := dateparse.ParseIn("3/1/2014", denverLoc) // -func ParseLocal(datestr string) (time.Time, error) { - p, err := parseTime(datestr, time.Local) +func ParseLocal(datestr string, opts ...ParserOption) (time.Time, error) { + p, err := parseTime(datestr, time.Local, opts...) if err != nil { return time.Time{}, err } @@ -159,8 +185,8 @@ func ParseLocal(datestr string) (time.Time, error) { // MustParse parse a date, and panic if it can't be parsed. Used for testing. // Not recommended for most use-cases. -func MustParse(datestr string) time.Time { - p, err := parseTime(datestr, nil) +func MustParse(datestr string, opts ...ParserOption) time.Time { + p, err := parseTime(datestr, nil, opts...) if err != nil { panic(err.Error()) } @@ -177,8 +203,8 @@ func MustParse(datestr string) time.Time { // layout, err := dateparse.ParseFormat("2013-02-01 00:00:00") // // layout = "2006-01-02 15:04:05" // -func ParseFormat(datestr string) (string, error) { - p, err := parseTime(datestr, nil) +func ParseFormat(datestr string, opts ...ParserOption) (string, error) { + p, err := parseTime(datestr, nil, opts...) if err != nil { return "", err } @@ -191,8 +217,8 @@ func ParseFormat(datestr string) (string, error) { // ParseStrict parse an unknown date format. IF the date is ambigous // mm/dd vs dd/mm then return an error. These return errors: 3.3.2014 , 8/8/71 etc -func ParseStrict(datestr string) (time.Time, error) { - p, err := parseTime(datestr, nil) +func ParseStrict(datestr string, opts ...ParserOption) (time.Time, error) { + p, err := parseTime(datestr, nil, opts...) if err != nil { return time.Time{}, err } @@ -202,170 +228,31 @@ func ParseStrict(datestr string) (time.Time, error) { return p.parse() } -type parser struct { - loc *time.Location - preferMonthFirst bool - ambiguousMD bool - stateDate dateState - stateTime timeState - format []byte - datestr string - skip int - extra int - part1Len int - yeari int - yearlen int - moi int - molen int - dayi int - daylen int - houri int - hourlen int - mini int - minlen int - seci int - seclen int - msi int - mslen int - offseti int - offsetlen int - tzi int - tzlen int - t *time.Time -} - -func newParser(dateStr string, loc *time.Location) *parser { - p := parser{ - stateDate: dateStart, - stateTime: timeIgnore, - datestr: dateStr, - loc: loc, - preferMonthFirst: true, - } - p.format = []byte(dateStr) - return &p -} -func (p *parser) set(start int, val string) { - if start < 0 { - return - } - if len(p.format) < start+len(val) { - return - } - for i, r := range val { - p.format[start+i] = byte(r) - } -} -func (p *parser) setMonth() { - if p.molen == 2 { - p.set(p.moi, "01") - } else if p.molen == 1 { - p.set(p.moi, "1") - } -} - -func (p *parser) setDay() { - if p.daylen == 2 { - p.set(p.dayi, "02") - } else if p.daylen == 1 { - p.set(p.dayi, "2") - } -} -func (p *parser) setYear() { - if p.yearlen == 2 { - p.set(p.yeari, "06") - } else if p.yearlen == 4 { - p.set(p.yeari, "2006") - } -} -func (p *parser) coalesceDate(end int) { - if p.yeari > 0 { - if p.yearlen == 0 { - p.yearlen = end - p.yeari - } - p.setYear() - } - if p.moi > 0 && p.molen == 0 { - p.molen = end - p.moi - p.setMonth() - } - if p.dayi > 0 && p.daylen == 0 { - p.daylen = end - p.dayi - p.setDay() - } -} -func (p *parser) ts() string { - return fmt.Sprintf("h:(%d:%d) m:(%d:%d) s:(%d:%d)", p.houri, p.hourlen, p.mini, p.minlen, p.seci, p.seclen) -} -func (p *parser) ds() string { - return fmt.Sprintf("%s d:(%d:%d) m:(%d:%d) y:(%d:%d)", p.datestr, p.dayi, p.daylen, p.moi, p.molen, p.yeari, p.yearlen) -} -func (p *parser) coalesceTime(end int) { - // 03:04:05 - // 15:04:05 - // 3:04:05 - // 3:4:5 - // 15:04:05.00 - if p.houri > 0 { - if p.hourlen == 2 { - p.set(p.houri, "15") - } else if p.hourlen == 1 { - p.set(p.houri, "3") - } - } - if p.mini > 0 { - if p.minlen == 0 { - p.minlen = end - p.mini - } - if p.minlen == 2 { - p.set(p.mini, "04") - } else { - p.set(p.mini, "4") - } - } - if p.seci > 0 { - if p.seclen == 0 { - p.seclen = end - p.seci - } - if p.seclen == 2 { - p.set(p.seci, "05") - } else { - p.set(p.seci, "5") - } - } - - if p.msi > 0 { - for i := 0; i < p.mslen; i++ { - p.format[p.msi+i] = '0' - } - } -} +func parseTime(datestr string, loc *time.Location, opts ...ParserOption) (p *parser, err error) { + + p = newParser(datestr, loc, opts...) + if p.retryAmbiguousDateWithSwap { + // month out of range signifies that a day/month swap is the correct solution to an ambiguous date + // this is because it means that a day is being interpreted as a month and overflowing the valid value for that + // by retrying in this case, we can fix a common situation with no assumptions + defer func() { + if p.ambiguousMD { + // if it errors out with the following error, swap before we + // get out of this function to reduce scope it needs to be applied on + _, err := p.parse() + if err != nil && strings.Contains(err.Error(), "month out of range") { + // create the option to reverse the preference + preferMonthFirst := PreferMonthFirst(!p.preferMonthFirst) + // turn off the retry to avoid endless recursion + retryAmbiguousDateWithSwap := RetryAmbiguousDateWithSwap(false) + modifiedOpts := append(opts, preferMonthFirst, retryAmbiguousDateWithSwap) + p, err = parseTime(datestr, time.Local, modifiedOpts...) + } + } -func (p *parser) trimExtra() { - if p.extra > 0 && len(p.format) > p.extra { - p.format = p.format[0:p.extra] - p.datestr = p.datestr[0:p.extra] + }() } -} -func (p *parser) parse() (time.Time, error) { - if p.t != nil { - return *p.t, nil - } - if p.skip > 0 && len(p.format) > p.skip { - p.format = p.format[p.skip:] - p.datestr = p.datestr[p.skip:] - } - //gou.Debugf("parse %q AS %s", p.datestr, string(p.format)) - if p.loc == nil { - return time.Parse(string(p.format), p.datestr) - } - return time.ParseInLocation(string(p.format), p.datestr, p.loc) -} - -func parseTime(datestr string, loc *time.Location) (*parser, error) { - - p := newParser(datestr, loc) i := 0 // General strategy is to read rune by rune through the date looking for @@ -395,20 +282,47 @@ iterRunes: switch r { case '-', '\u2212': // 2006-01-02 - // 2006-01-02T15:04:05Z07:00 - // 13-Feb-03 // 2013-Feb-03 - p.stateDate = dateDigitDash - p.yeari = 0 - p.yearlen = i - p.moi = i + 1 + // 13-Feb-03 + // 29-Jun-2016 if i == 4 { + p.stateDate = dateYearDash + p.yeari = 0 + p.yearlen = i + p.moi = i + 1 p.set(0, "2006") + } else { + p.stateDate = dateDigitDash } case '/': // 03/31/2005 // 2014/02/24 p.stateDate = dateDigitSlash + if i == 4 { + p.yearlen = i + p.moi = i + 1 + p.setYear() + } else { + p.ambiguousMD = true + if p.preferMonthFirst { + if p.molen == 0 { + p.molen = i + p.setMonth() + p.dayi = i + 1 + } + } else { + if p.daylen == 0 { + p.daylen = i + p.setDay() + p.moi = i + 1 + } + } + } + + case ':': + // 03/31/2005 + // 2014/02/24 + p.stateDate = dateDigitColon if i == 4 { p.yearlen = i p.moi = i + 1 @@ -458,83 +372,110 @@ iterRunes: case ',': return nil, unknownErr(datestr) default: - //if unicode.IsDigit(r) { continue } p.part1Len = i - case dateDigitDash: - // 2006-01 - // 2006-01-02 - // dateDigitDashDashT + case dateYearDash: + // dateYearDashDashT // 2006-01-02T15:04:05Z07:00 - // 2017-06-25T17:46:57.45706582-07:00 - // 2006-01-02T15:04:05.999999999Z07:00 - // 2006-01-02T15:04:05+0000 - // dateDigitDashDashWs - // 2012-08-03 18:31:59.257000000 - // 2014-04-26 17:24:37.3186369 - // 2017-01-27 00:07:31.945167 - // 2016-03-14 00:00:00.000 - // 2014-05-11 08:20:13,787 - // 2017-07-19 03:21:51+00:00 + // dateYearDashDashWs // 2013-04-01 22:43:22 - // 2014-04-26 05:24:37 PM - // dateDigitDashDashAlpha - // 2013-Feb-03 - // 13-Feb-03 + // dateYearDashAlphaDash + // 2013-Feb-03 switch r { case '-': p.molen = i - p.moi p.dayi = i + 1 - p.stateDate = dateDigitDashDash + p.stateDate = dateYearDashDash p.setMonth() default: - if unicode.IsDigit(r) { - //continue - } else if unicode.IsLetter(r) { - p.stateDate = dateDigitDashDashAlpha + if unicode.IsLetter(r) { + p.stateDate = dateYearDashAlphaDash } } - case dateDigitDashDash: - // 2006-01-02 - // dateDigitDashDashT + + case dateYearDashDash: + // dateYearDashDashT // 2006-01-02T15:04:05Z07:00 - // 2017-06-25T17:46:57.45706582-07:00 - // 2006-01-02T15:04:05.999999999Z07:00 - // 2006-01-02T15:04:05+0000 - // dateDigitDashDashWs - // 2012-08-03 18:31:59.257000000 - // 2014-04-26 17:24:37.3186369 - // 2017-01-27 00:07:31.945167 - // 2016-03-14 00:00:00.000 - // 2014-05-11 08:20:13,787 - // 2017-07-19 03:21:51+00:00 + // dateYearDashDashWs // 2013-04-01 22:43:22 - // 2014-04-26 05:24:37 PM switch r { case ' ': p.daylen = i - p.dayi - p.stateDate = dateDigitDashDashWs + p.stateDate = dateYearDashDashWs p.stateTime = timeStart p.setDay() break iterRunes case 'T': p.daylen = i - p.dayi - p.stateDate = dateDigitDashDashT + p.stateDate = dateYearDashDashT p.stateTime = timeStart p.setDay() break iterRunes } - case dateDigitDashDashAlpha: + case dateYearDashAlphaDash: // 2013-Feb-03 - // 13-Feb-03 switch r { case '-': p.molen = i - p.moi p.set(p.moi, "Jan") p.dayi = i + 1 } + case dateDigitDash: + // 13-Feb-03 + // 29-Jun-2016 + if unicode.IsLetter(r) { + p.stateDate = dateDigitDashAlpha + p.moi = i + } else { + return nil, unknownErr(datestr) + } + case dateDigitDashAlpha: + // 13-Feb-03 + // 28-Feb-03 + // 29-Jun-2016 + switch r { + case '-': + p.molen = i - p.moi + p.set(p.moi, "Jan") + p.yeari = i + 1 + p.stateDate = dateDigitDashAlphaDash + } + + case dateDigitDashAlphaDash: + // 13-Feb-03 ambiguous + // 28-Feb-03 ambiguous + // 29-Jun-2016 + switch r { + case ' ': + // we need to find if this was 4 digits, aka year + // or 2 digits which makes it ambiguous year/day + length := i - (p.moi + p.molen + 1) + if length == 4 { + p.yearlen = 4 + p.set(p.yeari, "2006") + // We now also know that part1 was the day + p.dayi = 0 + p.daylen = p.part1Len + p.setDay() + } else if length == 2 { + // We have no idea if this is + // yy-mon-dd OR dd-mon-yy + // + // We are going to ASSUME (bad, bad) that it is dd-mon-yy which is a horible assumption + p.ambiguousMD = true + p.yearlen = 2 + p.set(p.yeari, "06") + // We now also know that part1 was the day + p.dayi = 0 + p.daylen = p.part1Len + p.setDay() + } + p.stateTime = timeStart + break iterRunes + } + case dateDigitSlash: // 2014/07/10 06:55:38.156283 // 03/19/2012 10:11:59 @@ -571,6 +512,51 @@ iterRunes: p.setDay() p.yeari = i + 1 } + } else { + if p.molen == 0 { + p.molen = i - p.moi + p.setMonth() + p.yeari = i + 1 + } + } + } + + case dateDigitColon: + // 2014:07:10 06:55:38.156283 + // 03:19:2012 10:11:59 + // 04:2:2014 03:00:37 + // 3:1:2012 10:11:59 + // 4:8:2014 22:05 + // 3:1:2014 + // 10:13:2014 + // 01:02:2006 + // 1:2:06 + + switch r { + case ' ': + p.stateTime = timeStart + if p.yearlen == 0 { + p.yearlen = i - p.yeari + p.setYear() + } else if p.daylen == 0 { + p.daylen = i - p.dayi + p.setDay() + } + break iterRunes + case ':': + if p.yearlen > 0 { + // 2014:07:10 06:55:38.156283 + if p.molen == 0 { + p.molen = i - p.moi + p.setMonth() + p.dayi = i + 1 + } + } else if p.preferMonthFirst { + if p.daylen == 0 { + p.daylen = i - p.dayi + p.setDay() + p.yeari = i + 1 + } } } @@ -591,13 +577,18 @@ iterRunes: p.daylen = p.part1Len p.setDay() p.stateTime = timeStart - if i <= len("12 Feb") { + if i > p.daylen+len(" Sep") { // November etc + // If len greather than space + 3 it must be full month + p.stateDate = dateDigitWsMolong + } else { + // If len=3, the might be Feb or May? Ie ambigous abbreviated but + // we can parse may with either. BUT, that means the + // format may not be correct? + // mo := strings.ToLower(datestr[p.daylen+1 : i]) p.moi = p.daylen + 1 - p.molen = 3 + p.molen = i - p.moi p.set(p.moi, "Jan") p.stateDate = dateDigitWsMoYear - } else { - p.stateDate = dateDigitWsMolong } } @@ -632,14 +623,26 @@ iterRunes: break } case dateDigitDot: + // This is the 2nd period // 3.31.2014 // 08.21.71 // 2014.05 + // 2018.09.30 if r == '.' { - p.daylen = i - p.dayi - p.yeari = i + 1 - p.setDay() - p.stateDate = dateDigitDotDot + if p.moi == 0 { + // 3.31.2014 + p.daylen = i - p.dayi + p.yeari = i + 1 + p.setDay() + p.stateDate = dateDigitDotDot + } else { + // 2018.09.30 + //p.molen = 2 + p.molen = i - p.moi + p.dayi = i + 1 + p.setMonth() + p.stateDate = dateDigitDotDot + } } case dateDigitDotDot: // iterate all the way through @@ -655,8 +658,10 @@ iterRunes: // oct 1, 1970 // dateAlphaWsMonth // April 8, 2009 - // dateAlphaWsMonthTime - // January 02, 2006 at 3:04pm MST-07 + // dateAlphaWsMore + // dateAlphaWsAtTime + // January 02, 2006 at 3:04pm MST-07 + // // dateAlphaPeriodWsDigit // oct. 1, 1970 // dateWeekdayComma @@ -672,32 +677,47 @@ iterRunes: // Mon, 02-Jan-06 15:04:05 MST switch { case r == ' ': + // X + // April 8, 2009 if i > 3 { - prefix := strings.ToLower(datestr[0:i]) - for _, month := range months { - if prefix == month { - // len(" 31, 2018") = 9 - if len(datestr[i:]) < 10 { - // April 8, 2009 - p.dayi = i + 1 - p.stateDate = dateAlphaWsMonth - break - } + // Check to see if the alpha is name of month? or Day? + month := strings.ToLower(datestr[0:i]) + if isMonthFull(month) { + p.fullMonth = month + // len(" 31, 2018") = 9 + if len(datestr[i:]) < 10 { + // April 8, 2009 + p.stateDate = dateAlphaWsMonth + } else { + p.stateDate = dateAlphaWsMore } + p.dayi = i + 1 + break } - if p.stateDate != dateAlphaWsMonth { - // September 17, 2012 at 5:00pm UTC-05 - // This one doesn't follow standard parse methodologies. the "January" - // is difficult to use the format string replace method because of its variable-length (march, june) - // so we just use this format here. If we see more similar to this we will do something else. - p.format = []byte("January 02, 2006 at 3:04pm MST-07") - return p, nil - } + } else { + // This is possibly ambiguous? May will parse as either though. + // So, it could return in-correct format. + // dateAlphaWs + // May 05, 2005, 05:05:05 + // May 05 2005, 05:05:05 + // Jul 05, 2005, 05:05:05 + // May 8 17:57:51 2009 + // May 8 17:57:51 2009 + // skip & return to dateStart + // Tue 05 May 2020, 05:05:05 + // Mon Jan 2 15:04:05 2006 + + maybeDay := strings.ToLower(datestr[0:i]) + if isDay(maybeDay) { + // using skip throws off indices used by other code; saner to restart + return parseTime(datestr[i+1:], loc) + } p.stateDate = dateAlphaWs } case r == ',': + // Mon, 02 Jan 2006 // p.moi = 0 // p.molen = i if i == 3 { @@ -721,7 +741,7 @@ iterRunes: } else if i == 4 { // gross datestr = datestr[0:i-1] + datestr[i:] - return parseTime(datestr, loc) + return parseTime(datestr, loc, opts...) } else { return nil, unknownErr(datestr) } @@ -734,10 +754,14 @@ iterRunes: // Mon Jan 02 15:04:05 -0700 2006 // Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) // Mon Aug 10 15:44:11 UTC+0100 2015 - // dateAlphaWsDigit - // May 8, 2009 5:57:51 PM - // oct 1, 1970 - // oct 7, '70 + // dateAlphaWsDigit + // May 8, 2009 5:57:51 PM + // May 8 2009 5:57:51 PM + // May 8 17:57:51 2009 + // May 8 17:57:51 2009 + // May 08 17:57:51 2009 + // oct 1, 1970 + // oct 7, '70 switch { case unicode.IsLetter(r): p.set(0, "Mon") @@ -751,86 +775,185 @@ iterRunes: case dateAlphaWsDigit: // May 8, 2009 5:57:51 PM + // May 8 2009 5:57:51 PM // oct 1, 1970 // oct 7, '70 // oct. 7, 1970 - //gou.Debugf("%d %s dateAlphaWsDigit %s %s", i, string(r), p.ds(), p.ts()) + // May 8 17:57:51 2009 + // May 8 17:57:51 2009 + // May 08 17:57:51 2009 if r == ',' { p.daylen = i - p.dayi p.setDay() - p.stateDate = dateAlphaWsDigitComma + p.stateDate = dateAlphaWsDigitMore + } else if r == ' ' { + p.daylen = i - p.dayi + p.setDay() + p.yeari = i + 1 + p.stateDate = dateAlphaWsDigitYearmaybe + p.stateTime = timeStart + } else if unicode.IsLetter(r) { + p.stateDate = dateAlphaWsMonthSuffix + i-- + } + case dateAlphaWsDigitYearmaybe: + // x + // May 8 2009 5:57:51 PM + // May 8 17:57:51 2009 + // May 8 17:57:51 2009 + // May 08 17:57:51 2009 + // Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) + if r == ':' { + // Guessed wrong; was not a year + i = i - 3 + p.stateDate = dateAlphaWsDigit + p.yeari = 0 + break iterRunes + } else if r == ' ' { + // must be year format, not 15:04 + p.yearlen = i - p.yeari + p.setYear() + break iterRunes } - case dateAlphaWsDigitComma: + case dateAlphaWsDigitMore: // x // May 8, 2009 5:57:51 PM + // May 05, 2005, 05:05:05 + // May 05 2005, 05:05:05 // oct 1, 1970 // oct 7, '70 if r == ' ' { - p.stateDate = dateAlphaWsDigitCommaWs p.yeari = i + 1 + p.stateDate = dateAlphaWsDigitMoreWs } - case dateAlphaWsDigitCommaWs: + case dateAlphaWsDigitMoreWs: // x // May 8, 2009 5:57:51 PM + // May 05, 2005, 05:05:05 // oct 1, 1970 // oct 7, '70 switch r { case '\'': p.yeari = i + 1 - case ' ': - p.stateDate = dateAlphaWsDigitCommaWsYear + case ' ', ',': + // x + // May 8, 2009 5:57:51 PM + // x + // May 8, 2009, 5:57:51 PM + p.stateDate = dateAlphaWsDigitMoreWsYear p.yearlen = i - p.yeari p.setYear() p.stateTime = timeStart break iterRunes } - case dateAlphaWsAlpha: - // Mon Jan _2 15:04:05 2006 - // Mon Jan 02 15:04:05 -0700 2006 - // Mon Jan _2 15:04:05 MST 2006 - // Mon Aug 10 15:44:11 UTC+0100 2015 - // Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) - if r == ' ' { - if p.dayi > 0 { - + case dateAlphaWsMonth: + // April 8, 2009 + // April 8 2009 + switch r { + case ' ', ',': + // x + // June 8, 2009 + // x + // June 8 2009 + if p.daylen == 0 { p.daylen = i - p.dayi p.setDay() - p.yeari = i + 1 - p.stateDate = dateAlphaWsAlphaYearmaybe - p.stateTime = timeStart } - } else if unicode.IsDigit(r) { - if p.dayi == 0 { - p.dayi = i + case 's', 'S', 'r', 'R', 't', 'T', 'n', 'N': + // st, rd, nd, st + i-- + p.stateDate = dateAlphaWsMonthSuffix + default: + if p.daylen > 0 && p.yeari == 0 { + p.yeari = i } } - - case dateAlphaWsAlphaYearmaybe: - // x - // Mon Jan _2 15:04:05 2006 - // Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) - if r == ':' { - i = i - 3 - p.stateDate = dateAlphaWsAlpha - p.yeari = 0 + case dateAlphaWsMonthMore: + // X + // January 02, 2006, 15:04:05 + // January 02 2006, 15:04:05 + // January 02, 2006 15:04:05 + // January 02 2006 15:04:05 + switch r { + case ',': + p.yearlen = i - p.yeari + p.setYear() + p.stateTime = timeStart + i++ break iterRunes - } else if r == ' ' { - // must be year format, not 15:04 + case ' ': p.yearlen = i - p.yeari p.setYear() + p.stateTime = timeStart break iterRunes } - - case dateAlphaWsMonth: - // April 8, 2009 - if r == ',' { - if i-p.dayi == 2 { - p.format = []byte("January 02, 2006") - return p, nil + case dateAlphaWsMonthSuffix: + // x + // April 8th, 2009 + // April 8th 2009 + switch r { + case 't', 'T': + if p.nextIs(i, 'h') || p.nextIs(i, 'H') { + if len(datestr) > i+2 { + return parseTime(fmt.Sprintf("%s%s", p.datestr[0:i], p.datestr[i+2:]), loc, opts...) + } + } + case 'n', 'N': + if p.nextIs(i, 'd') || p.nextIs(i, 'D') { + if len(datestr) > i+2 { + return parseTime(fmt.Sprintf("%s%s", p.datestr[0:i], p.datestr[i+2:]), loc, opts...) + } + } + case 's', 'S': + if p.nextIs(i, 't') || p.nextIs(i, 'T') { + if len(datestr) > i+2 { + return parseTime(fmt.Sprintf("%s%s", p.datestr[0:i], p.datestr[i+2:]), loc, opts...) + } + } + case 'r', 'R': + if p.nextIs(i, 'd') || p.nextIs(i, 'D') { + if len(datestr) > i+2 { + return parseTime(fmt.Sprintf("%s%s", p.datestr[0:i], p.datestr[i+2:]), loc, opts...) + } } - p.format = []byte("January 2, 2006") - return p, nil + } + case dateAlphaWsMore: + // January 02, 2006, 15:04:05 + // January 02 2006, 15:04:05 + // January 2nd, 2006, 15:04:05 + // January 2nd 2006, 15:04:05 + // September 17, 2012 at 5:00pm UTC-05 + switch { + case r == ',': + // x + // January 02, 2006, 15:04:05 + if p.nextIs(i, ' ') { + p.daylen = i - p.dayi + p.setDay() + p.yeari = i + 2 + p.stateDate = dateAlphaWsMonthMore + i++ + } + + case r == ' ': + // x + // January 02 2006, 15:04:05 + p.daylen = i - p.dayi + p.setDay() + p.yeari = i + 1 + p.stateDate = dateAlphaWsMonthMore + case unicode.IsDigit(r): + // XX + // January 02, 2006, 15:04:05 + continue + case unicode.IsLetter(r): + // X + // January 2nd, 2006, 15:04:05 + p.daylen = i - p.dayi + p.setDay() + p.stateDate = dateAlphaWsMonthSuffix + i-- } case dateAlphaPeriodWsDigit: @@ -859,7 +982,6 @@ iterRunes: p.daylen = i - p.dayi p.setDay() } else if p.yeari == 0 { - p.yeari = i + 1 p.molen = i - p.moi p.set(p.moi, "Jan") @@ -928,6 +1050,7 @@ iterRunes: // timeWs // 05:24:37 PM // 06:20:00 UTC + // 06:20:00 UTC-05 // 00:12:00 +0000 UTC // 22:18:00 +0000 UTC m=+0.000000001 // 15:04:05 -0700 @@ -965,7 +1088,7 @@ iterRunes: // 2014-05-11 08:20:13,787 ds := []byte(p.datestr) ds[i] = '.' - return parseTime(string(ds), loc) + return parseTime(string(ds), loc, opts...) case '-', '+': // 03:21:51+00:00 p.stateTime = timeOffset @@ -987,6 +1110,40 @@ iterRunes: } else { p.seclen = i - p.seci } + // (Z)ulu time + p.loc = time.UTC + case 'a', 'A': + if p.nextIs(i, 't') || p.nextIs(i, 'T') { + // x + // September 17, 2012 at 5:00pm UTC-05 + i++ // skip t + if p.nextIs(i, ' ') { + // x + // September 17, 2012 at 5:00pm UTC-05 + i++ // skip ' + p.houri = 0 // reset hour + } + } else { + switch { + case r == 'a' && p.nextIs(i, 'm'): + p.coalesceTime(i) + p.set(i, "am") + case r == 'A' && p.nextIs(i, 'M'): + p.coalesceTime(i) + p.set(i, "PM") + } + } + + case 'p', 'P': + // Could be AM/PM + switch { + case r == 'p' && p.nextIs(i, 'm'): + p.coalesceTime(i) + p.set(i, "pm") + case r == 'P' && p.nextIs(i, 'M'): + p.coalesceTime(i) + p.set(i, "PM") + } case ' ': p.coalesceTime(i) p.stateTime = timeWs @@ -998,7 +1155,6 @@ iterRunes: p.seci = i + 1 p.minlen = i - p.mini } - } case timeOffset: // 19:55:00+0100 @@ -1011,6 +1167,7 @@ iterRunes: case timeWs: // timeWsAlpha // 06:20:00 UTC + // 06:20:00 UTC-05 // 15:44:11 UTC+0100 2015 // 18:04:07 GMT+0100 (GMT Daylight Time) // 17:57:51 MST 2009 @@ -1039,6 +1196,7 @@ iterRunes: default: if unicode.IsLetter(r) { // 06:20:00 UTC + // 06:20:00 UTC-05 // 15:44:11 UTC+0100 2015 // 17:57:51 MST 2009 p.tzi = i @@ -1052,6 +1210,7 @@ iterRunes: } case timeWsAlpha: // 06:20:00 UTC + // 06:20:00 UTC-05 // timeWsAlphaWs // 17:57:51 MST 2009 // timeWsAlphaZoneOffset @@ -1085,6 +1244,7 @@ iterRunes: // 17:57:51 MST 2009 case timeWsAlphaZoneOffset: + // 06:20:00 UTC-05 // timeWsAlphaZoneOffset // timeWsAlphaZoneOffsetWs // timeWsAlphaZoneOffsetWsExtra @@ -1094,7 +1254,9 @@ iterRunes: switch r { case ' ': p.set(p.offseti, "-0700") - p.yeari = i + 1 + if p.yeari == 0 { + p.yeari = i + 1 + } p.stateTime = timeWsAlphaZoneOffsetWs } case timeWsAlphaZoneOffsetWs: @@ -1381,6 +1543,14 @@ iterRunes: p.setYear() case timeWsAlphaZoneOffsetWsExtra: p.trimExtra() + case timeWsAlphaZoneOffset: + // 06:20:00 UTC-05 + if i-p.offseti < 4 { + p.set(p.offseti, "-07") + } else { + p.set(p.offseti, "-0700") + } + case timePeriod: p.mslen = i - p.msi case timeOffset: @@ -1457,7 +1627,7 @@ iterRunes: p.format = []byte("2006") return p, nil } else if len(datestr) < 4 { - return nil, fmt.Errorf("unrecognized format, to short %v", datestr) + return nil, fmt.Errorf("unrecognized format, too short %v", datestr) } if !t.IsZero() { if loc == nil { @@ -1469,30 +1639,57 @@ iterRunes: return p, nil } - case dateDigitDash: + case dateYearDash: // 2006-01 return p, nil - case dateDigitDashDash: + case dateYearDashDash: // 2006-01-02 // 2006-1-02 // 2006-1-2 // 2006-01-2 return p, nil - case dateDigitDashDashAlpha: + case dateYearDashAlphaDash: // 2013-Feb-03 // 2013-Feb-3 p.daylen = i - p.dayi p.setDay() return p, nil - case dateDigitDashDashWs: // starts digit then dash 02- then whitespace 1 << 2 << 5 + 3 - // 2013-04-01 22:43:22 - // 2013-04-01 22:43 + case dateYearDashDashWs: + // 2013-04-01 return p, nil - case dateDigitDashDashT: + case dateYearDashDashT: + return p, nil + + case dateDigitDashAlphaDash: + // 13-Feb-03 ambiguous + // 28-Feb-03 ambiguous + // 29-Jun-2016 + length := len(datestr) - (p.moi + p.molen + 1) + if length == 4 { + p.yearlen = 4 + p.set(p.yeari, "2006") + // We now also know that part1 was the day + p.dayi = 0 + p.daylen = p.part1Len + p.setDay() + } else if length == 2 { + // We have no idea if this is + // yy-mon-dd OR dd-mon-yy + // + // We are going to ASSUME (bad, bad) that it is dd-mon-yy which is a horible assumption + p.ambiguousMD = true + p.yearlen = 2 + p.set(p.yeari, "06") + // We now also know that part1 was the day + p.dayi = 0 + p.daylen = p.part1Len + p.setDay() + } + return p, nil case dateDigitDot: @@ -1507,8 +1704,7 @@ iterRunes: // 3.2.1981 // 3.2.81 // 08.21.71 - p.setYear() - p.yearlen = i - p.yeari + // 2018.09.30 return p, nil case dateDigitWsMoYear: @@ -1516,9 +1712,7 @@ iterRunes: // 2 Jan 18 // 2 Jan 2018 23:59 // 02 Jan 2018 23:59 - // 02 Jan 2018 23:59:45 // 12 Feb 2006, 19:17 - // 12 Feb 2006, 19:17:22 return p, nil case dateDigitWsMolong: @@ -1531,20 +1725,32 @@ iterRunes: p.format = []byte("2 January 2006") return p, nil // parse("2 January 2006", datestr, loc) - case dateAlphaWsDigitCommaWs: + case dateAlphaWsMonth: + p.yearlen = i - p.yeari + p.setYear() + return p, nil + + case dateAlphaWsMonthMore: + return p, nil + + case dateAlphaWsDigitMoreWs: // oct 1, 1970 p.yearlen = i - p.yeari p.setYear() return p, nil - case dateAlphaWsDigitCommaWsYear: + case dateAlphaWsDigitMoreWsYear: // May 8, 2009 5:57:51 PM + // Jun 7, 2005, 05:57:51 return p, nil case dateAlphaWsAlpha: return p, nil - case dateAlphaWsAlphaYearmaybe: + case dateAlphaWsDigit: + return p, nil + + case dateAlphaWsDigitYearmaybe: return p, nil case dateDigitSlash: @@ -1554,6 +1760,13 @@ iterRunes: // 2014/10/13 return p, nil + case dateDigitColon: + // 3:1:2014 + // 10:13:2014 + // 01:02:2006 + // 2014:10:13 + return p, nil + case dateDigitChineseYear: // dateDigitChineseYear // 2014年04月08日 @@ -1579,3 +1792,235 @@ iterRunes: return nil, unknownErr(datestr) } + +type parser struct { + loc *time.Location + preferMonthFirst bool + retryAmbiguousDateWithSwap bool + ambiguousMD bool + stateDate dateState + stateTime timeState + format []byte + datestr string + fullMonth string + skip int + extra int + part1Len int + yeari int + yearlen int + moi int + molen int + dayi int + daylen int + houri int + hourlen int + mini int + minlen int + seci int + seclen int + msi int + mslen int + offseti int + offsetlen int + tzi int + tzlen int + t *time.Time +} + +// ParserOption defines a function signature implemented by options +// Options defined like this accept the parser and operate on the data within +type ParserOption func(*parser) error + +// PreferMonthFirst is an option that allows preferMonthFirst to be changed from its default +func PreferMonthFirst(preferMonthFirst bool) ParserOption { + return func(p *parser) error { + p.preferMonthFirst = preferMonthFirst + return nil + } +} + +// RetryAmbiguousDateWithSwap is an option that allows retryAmbiguousDateWithSwap to be changed from its default +func RetryAmbiguousDateWithSwap(retryAmbiguousDateWithSwap bool) ParserOption { + return func(p *parser) error { + p.retryAmbiguousDateWithSwap = retryAmbiguousDateWithSwap + return nil + } +} + +func newParser(dateStr string, loc *time.Location, opts ...ParserOption) *parser { + p := &parser{ + stateDate: dateStart, + stateTime: timeIgnore, + datestr: dateStr, + loc: loc, + preferMonthFirst: true, + retryAmbiguousDateWithSwap: false, + } + p.format = []byte(dateStr) + + // allow the options to mutate the parser fields from their defaults + for _, option := range opts { + option(p) + } + return p +} + +func (p *parser) nextIs(i int, b byte) bool { + if len(p.datestr) > i+1 && p.datestr[i+1] == b { + return true + } + return false +} + +func (p *parser) set(start int, val string) { + if start < 0 { + return + } + if len(p.format) < start+len(val) { + return + } + for i, r := range val { + p.format[start+i] = byte(r) + } +} +func (p *parser) setMonth() { + if p.molen == 2 { + p.set(p.moi, "01") + } else if p.molen == 1 { + p.set(p.moi, "1") + } +} + +func (p *parser) setDay() { + if p.daylen == 2 { + p.set(p.dayi, "02") + } else if p.daylen == 1 { + p.set(p.dayi, "2") + } +} +func (p *parser) setYear() { + if p.yearlen == 2 { + p.set(p.yeari, "06") + } else if p.yearlen == 4 { + p.set(p.yeari, "2006") + } +} +func (p *parser) coalesceDate(end int) { + if p.yeari > 0 { + if p.yearlen == 0 { + p.yearlen = end - p.yeari + } + p.setYear() + } + if p.moi > 0 && p.molen == 0 { + p.molen = end - p.moi + p.setMonth() + } + if p.dayi > 0 && p.daylen == 0 { + p.daylen = end - p.dayi + p.setDay() + } +} +func (p *parser) ts() string { + return fmt.Sprintf("h:(%d:%d) m:(%d:%d) s:(%d:%d)", p.houri, p.hourlen, p.mini, p.minlen, p.seci, p.seclen) +} +func (p *parser) ds() string { + return fmt.Sprintf("%s d:(%d:%d) m:(%d:%d) y:(%d:%d)", p.datestr, p.dayi, p.daylen, p.moi, p.molen, p.yeari, p.yearlen) +} +func (p *parser) coalesceTime(end int) { + // 03:04:05 + // 15:04:05 + // 3:04:05 + // 3:4:5 + // 15:04:05.00 + if p.houri > 0 { + if p.hourlen == 2 { + p.set(p.houri, "15") + } else if p.hourlen == 1 { + p.set(p.houri, "3") + } + } + if p.mini > 0 { + if p.minlen == 0 { + p.minlen = end - p.mini + } + if p.minlen == 2 { + p.set(p.mini, "04") + } else { + p.set(p.mini, "4") + } + } + if p.seci > 0 { + if p.seclen == 0 { + p.seclen = end - p.seci + } + if p.seclen == 2 { + p.set(p.seci, "05") + } else { + p.set(p.seci, "5") + } + } + + if p.msi > 0 { + for i := 0; i < p.mslen; i++ { + p.format[p.msi+i] = '0' + } + } +} +func (p *parser) setFullMonth(month string) { + if p.moi == 0 { + p.format = []byte(fmt.Sprintf("%s%s", "January", p.format[len(month):])) + } +} + +func (p *parser) trimExtra() { + if p.extra > 0 && len(p.format) > p.extra { + p.format = p.format[0:p.extra] + p.datestr = p.datestr[0:p.extra] + } +} + +// func (p *parser) remove(i, length int) { +// if len(p.format) > i+length { +// //append(a[:i], a[j:]...) +// p.format = append(p.format[0:i], p.format[i+length:]...) +// } +// if len(p.datestr) > i+length { +// //append(a[:i], a[j:]...) +// p.datestr = fmt.Sprintf("%s%s", p.datestr[0:i], p.datestr[i+length:]) +// } +// } + +func (p *parser) parse() (time.Time, error) { + if p.t != nil { + return *p.t, nil + } + if len(p.fullMonth) > 0 { + p.setFullMonth(p.fullMonth) + } + if p.skip > 0 && len(p.format) > p.skip { + p.format = p.format[p.skip:] + p.datestr = p.datestr[p.skip:] + } + //gou.Debugf("parse %q AS %q", p.datestr, string(p.format)) + if p.loc == nil { + return time.Parse(string(p.format), p.datestr) + } + return time.ParseInLocation(string(p.format), p.datestr, p.loc) +} +func isDay(alpha string) bool { + for _, day := range days { + if alpha == day { + return true + } + } + return false +} +func isMonthFull(alpha string) bool { + for _, month := range months { + if alpha == month { + return true + } + } + return false +} diff --git a/vendor/github.com/davecgh/go-spew/LICENSE b/vendor/github.com/davecgh/go-spew/LICENSE new file mode 100644 index 0000000..bc52e96 --- /dev/null +++ b/vendor/github.com/davecgh/go-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/vendor/github.com/davecgh/go-spew/spew/bypass.go b/vendor/github.com/davecgh/go-spew/spew/bypass.go new file mode 100644 index 0000000..7929947 --- /dev/null +++ b/vendor/github.com/davecgh/go-spew/spew/bypass.go @@ -0,0 +1,145 @@ +// Copyright (c) 2015-2016 Dave Collins +// +// Permission to use, copy, modify, and 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. + +// NOTE: Due to the following build constraints, this file will only be compiled +// when the code is not running on Google App Engine, compiled by GopherJS, and +// "-tags safe" is not added to the go build command line. The "disableunsafe" +// tag is deprecated and thus should not be used. +// Go versions prior to 1.4 are disabled because they use a different layout +// for interfaces which make the implementation of unsafeReflectValue more complex. +// +build !js,!appengine,!safe,!disableunsafe,go1.4 + +package spew + +import ( + "reflect" + "unsafe" +) + +const ( + // UnsafeDisabled is a build-time constant which specifies whether or + // not access to the unsafe package is available. + UnsafeDisabled = false + + // ptrSize is the size of a pointer on the current arch. + ptrSize = unsafe.Sizeof((*byte)(nil)) +) + +type flag uintptr + +var ( + // flagRO indicates whether the value field of a reflect.Value + // is read-only. + flagRO flag + + // flagAddr indicates whether the address of the reflect.Value's + // value may be taken. + flagAddr flag +) + +// flagKindMask holds the bits that make up the kind +// part of the flags field. In all the supported versions, +// it is in the lower 5 bits. +const flagKindMask = flag(0x1f) + +// Different versions of Go have used different +// bit layouts for the flags type. This table +// records the known combinations. +var okFlags = []struct { + ro, addr flag +}{{ + // From Go 1.4 to 1.5 + ro: 1 << 5, + addr: 1 << 7, +}, { + // Up to Go tip. + ro: 1<<5 | 1<<6, + addr: 1 << 8, +}} + +var flagValOffset = func() uintptr { + field, ok := reflect.TypeOf(reflect.Value{}).FieldByName("flag") + if !ok { + panic("reflect.Value has no flag field") + } + return field.Offset +}() + +// flagField returns a pointer to the flag field of a reflect.Value. +func flagField(v *reflect.Value) *flag { + return (*flag)(unsafe.Pointer(uintptr(unsafe.Pointer(v)) + flagValOffset)) +} + +// unsafeReflectValue converts the passed reflect.Value into a one that bypasses +// the typical safety restrictions preventing access to unaddressable and +// unexported data. It works by digging the raw pointer to the underlying +// value out of the protected value and generating a new unprotected (unsafe) +// reflect.Value to it. +// +// This allows us to check for implementations of the Stringer and error +// interfaces to be used for pretty printing ordinarily unaddressable and +// inaccessible values such as unexported struct fields. +func unsafeReflectValue(v reflect.Value) reflect.Value { + if !v.IsValid() || (v.CanInterface() && v.CanAddr()) { + return v + } + flagFieldPtr := flagField(&v) + *flagFieldPtr &^= flagRO + *flagFieldPtr |= flagAddr + return v +} + +// Sanity checks against future reflect package changes +// to the type or semantics of the Value.flag field. +func init() { + field, ok := reflect.TypeOf(reflect.Value{}).FieldByName("flag") + if !ok { + panic("reflect.Value has no flag field") + } + if field.Type.Kind() != reflect.TypeOf(flag(0)).Kind() { + panic("reflect.Value flag field has changed kind") + } + type t0 int + var t struct { + A t0 + // t0 will have flagEmbedRO set. + t0 + // a will have flagStickyRO set + a t0 + } + vA := reflect.ValueOf(t).FieldByName("A") + va := reflect.ValueOf(t).FieldByName("a") + vt0 := reflect.ValueOf(t).FieldByName("t0") + + // Infer flagRO from the difference between the flags + // for the (otherwise identical) fields in t. + flagPublic := *flagField(&vA) + flagWithRO := *flagField(&va) | *flagField(&vt0) + flagRO = flagPublic ^ flagWithRO + + // Infer flagAddr from the difference between a value + // taken from a pointer and not. + vPtrA := reflect.ValueOf(&t).Elem().FieldByName("A") + flagNoPtr := *flagField(&vA) + flagPtr := *flagField(&vPtrA) + flagAddr = flagNoPtr ^ flagPtr + + // Check that the inferred flags tally with one of the known versions. + for _, f := range okFlags { + if flagRO == f.ro && flagAddr == f.addr { + return + } + } + panic("reflect.Value read-only flag has changed semantics") +} diff --git a/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go b/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go new file mode 100644 index 0000000..205c28d --- /dev/null +++ b/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go @@ -0,0 +1,38 @@ +// Copyright (c) 2015-2016 Dave Collins +// +// Permission to use, copy, modify, and 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. + +// NOTE: Due to the following build constraints, this file will only be compiled +// when the code is running on Google App Engine, compiled by GopherJS, or +// "-tags safe" is added to the go build command line. The "disableunsafe" +// tag is deprecated and thus should not be used. +// +build js appengine safe disableunsafe !go1.4 + +package spew + +import "reflect" + +const ( + // UnsafeDisabled is a build-time constant which specifies whether or + // not access to the unsafe package is available. + UnsafeDisabled = true +) + +// unsafeReflectValue typically converts the passed reflect.Value into a one +// that bypasses the typical safety restrictions preventing access to +// unaddressable and unexported data. However, doing this relies on access to +// the unsafe package. This is a stub version which simply returns the passed +// reflect.Value when the unsafe package is not available. +func unsafeReflectValue(v reflect.Value) reflect.Value { + return v +} diff --git a/vendor/github.com/davecgh/go-spew/spew/common.go b/vendor/github.com/davecgh/go-spew/spew/common.go new file mode 100644 index 0000000..1be8ce9 --- /dev/null +++ b/vendor/github.com/davecgh/go-spew/spew/common.go @@ -0,0 +1,341 @@ +/* + * Copyright (c) 2013-2016 Dave Collins + * + * Permission to use, copy, modify, and 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. + */ + +package spew + +import ( + "bytes" + "fmt" + "io" + "reflect" + "sort" + "strconv" +) + +// Some constants in the form of bytes to avoid string overhead. This mirrors +// the technique used in the fmt package. +var ( + panicBytes = []byte("(PANIC=") + plusBytes = []byte("+") + iBytes = []byte("i") + trueBytes = []byte("true") + falseBytes = []byte("false") + interfaceBytes = []byte("(interface {})") + commaNewlineBytes = []byte(",\n") + newlineBytes = []byte("\n") + openBraceBytes = []byte("{") + openBraceNewlineBytes = []byte("{\n") + closeBraceBytes = []byte("}") + asteriskBytes = []byte("*") + colonBytes = []byte(":") + colonSpaceBytes = []byte(": ") + openParenBytes = []byte("(") + closeParenBytes = []byte(")") + spaceBytes = []byte(" ") + pointerChainBytes = []byte("->") + nilAngleBytes = []byte("") + maxNewlineBytes = []byte("\n") + maxShortBytes = []byte("") + circularBytes = []byte("") + circularShortBytes = []byte("") + invalidAngleBytes = []byte("") + openBracketBytes = []byte("[") + closeBracketBytes = []byte("]") + percentBytes = []byte("%") + precisionBytes = []byte(".") + openAngleBytes = []byte("<") + closeAngleBytes = []byte(">") + openMapBytes = []byte("map[") + closeMapBytes = []byte("]") + lenEqualsBytes = []byte("len=") + capEqualsBytes = []byte("cap=") +) + +// hexDigits is used to map a decimal value to a hex digit. +var hexDigits = "0123456789abcdef" + +// catchPanic handles any panics that might occur during the handleMethods +// calls. +func catchPanic(w io.Writer, v reflect.Value) { + if err := recover(); err != nil { + w.Write(panicBytes) + fmt.Fprintf(w, "%v", err) + w.Write(closeParenBytes) + } +} + +// handleMethods attempts to call the Error and String methods on the underlying +// type the passed reflect.Value represents and outputes the result to Writer w. +// +// It handles panics in any called methods by catching and displaying the error +// as the formatted value. +func handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool) { + // We need an interface to check if the type implements the error or + // Stringer interface. However, the reflect package won't give us an + // interface on certain things like unexported struct fields in order + // to enforce visibility rules. We use unsafe, when it's available, + // to bypass these restrictions since this package does not mutate the + // values. + if !v.CanInterface() { + if UnsafeDisabled { + return false + } + + v = unsafeReflectValue(v) + } + + // Choose whether or not to do error and Stringer interface lookups against + // the base type or a pointer to the base type depending on settings. + // Technically calling one of these methods with a pointer receiver can + // mutate the value, however, types which choose to satisify an error or + // Stringer interface with a pointer receiver should not be mutating their + // state inside these interface methods. + if !cs.DisablePointerMethods && !UnsafeDisabled && !v.CanAddr() { + v = unsafeReflectValue(v) + } + if v.CanAddr() { + v = v.Addr() + } + + // Is it an error or Stringer? + switch iface := v.Interface().(type) { + case error: + defer catchPanic(w, v) + if cs.ContinueOnMethod { + w.Write(openParenBytes) + w.Write([]byte(iface.Error())) + w.Write(closeParenBytes) + w.Write(spaceBytes) + return false + } + + w.Write([]byte(iface.Error())) + return true + + case fmt.Stringer: + defer catchPanic(w, v) + if cs.ContinueOnMethod { + w.Write(openParenBytes) + w.Write([]byte(iface.String())) + w.Write(closeParenBytes) + w.Write(spaceBytes) + return false + } + w.Write([]byte(iface.String())) + return true + } + return false +} + +// printBool outputs a boolean value as true or false to Writer w. +func printBool(w io.Writer, val bool) { + if val { + w.Write(trueBytes) + } else { + w.Write(falseBytes) + } +} + +// printInt outputs a signed integer value to Writer w. +func printInt(w io.Writer, val int64, base int) { + w.Write([]byte(strconv.FormatInt(val, base))) +} + +// printUint outputs an unsigned integer value to Writer w. +func printUint(w io.Writer, val uint64, base int) { + w.Write([]byte(strconv.FormatUint(val, base))) +} + +// printFloat outputs a floating point value using the specified precision, +// which is expected to be 32 or 64bit, to Writer w. +func printFloat(w io.Writer, val float64, precision int) { + w.Write([]byte(strconv.FormatFloat(val, 'g', -1, precision))) +} + +// printComplex outputs a complex value using the specified float precision +// for the real and imaginary parts to Writer w. +func printComplex(w io.Writer, c complex128, floatPrecision int) { + r := real(c) + w.Write(openParenBytes) + w.Write([]byte(strconv.FormatFloat(r, 'g', -1, floatPrecision))) + i := imag(c) + if i >= 0 { + w.Write(plusBytes) + } + w.Write([]byte(strconv.FormatFloat(i, 'g', -1, floatPrecision))) + w.Write(iBytes) + w.Write(closeParenBytes) +} + +// printHexPtr outputs a uintptr formatted as hexadecimal with a leading '0x' +// prefix to Writer w. +func printHexPtr(w io.Writer, p uintptr) { + // Null pointer. + num := uint64(p) + if num == 0 { + w.Write(nilAngleBytes) + return + } + + // Max uint64 is 16 bytes in hex + 2 bytes for '0x' prefix + buf := make([]byte, 18) + + // It's simpler to construct the hex string right to left. + base := uint64(16) + i := len(buf) - 1 + for num >= base { + buf[i] = hexDigits[num%base] + num /= base + i-- + } + buf[i] = hexDigits[num] + + // Add '0x' prefix. + i-- + buf[i] = 'x' + i-- + buf[i] = '0' + + // Strip unused leading bytes. + buf = buf[i:] + w.Write(buf) +} + +// valuesSorter implements sort.Interface to allow a slice of reflect.Value +// elements to be sorted. +type valuesSorter struct { + values []reflect.Value + strings []string // either nil or same len and values + cs *ConfigState +} + +// newValuesSorter initializes a valuesSorter instance, which holds a set of +// surrogate keys on which the data should be sorted. It uses flags in +// ConfigState to decide if and how to populate those surrogate keys. +func newValuesSorter(values []reflect.Value, cs *ConfigState) sort.Interface { + vs := &valuesSorter{values: values, cs: cs} + if canSortSimply(vs.values[0].Kind()) { + return vs + } + if !cs.DisableMethods { + vs.strings = make([]string, len(values)) + for i := range vs.values { + b := bytes.Buffer{} + if !handleMethods(cs, &b, vs.values[i]) { + vs.strings = nil + break + } + vs.strings[i] = b.String() + } + } + if vs.strings == nil && cs.SpewKeys { + vs.strings = make([]string, len(values)) + for i := range vs.values { + vs.strings[i] = Sprintf("%#v", vs.values[i].Interface()) + } + } + return vs +} + +// canSortSimply tests whether a reflect.Kind is a primitive that can be sorted +// directly, or whether it should be considered for sorting by surrogate keys +// (if the ConfigState allows it). +func canSortSimply(kind reflect.Kind) bool { + // This switch parallels valueSortLess, except for the default case. + switch kind { + case reflect.Bool: + return true + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + return true + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + return true + case reflect.Float32, reflect.Float64: + return true + case reflect.String: + return true + case reflect.Uintptr: + return true + case reflect.Array: + return true + } + return false +} + +// Len returns the number of values in the slice. It is part of the +// sort.Interface implementation. +func (s *valuesSorter) Len() int { + return len(s.values) +} + +// Swap swaps the values at the passed indices. It is part of the +// sort.Interface implementation. +func (s *valuesSorter) Swap(i, j int) { + s.values[i], s.values[j] = s.values[j], s.values[i] + if s.strings != nil { + s.strings[i], s.strings[j] = s.strings[j], s.strings[i] + } +} + +// valueSortLess returns whether the first value should sort before the second +// value. It is used by valueSorter.Less as part of the sort.Interface +// implementation. +func valueSortLess(a, b reflect.Value) bool { + switch a.Kind() { + case reflect.Bool: + return !a.Bool() && b.Bool() + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + return a.Int() < b.Int() + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + return a.Uint() < b.Uint() + case reflect.Float32, reflect.Float64: + return a.Float() < b.Float() + case reflect.String: + return a.String() < b.String() + case reflect.Uintptr: + return a.Uint() < b.Uint() + case reflect.Array: + // Compare the contents of both arrays. + l := a.Len() + for i := 0; i < l; i++ { + av := a.Index(i) + bv := b.Index(i) + if av.Interface() == bv.Interface() { + continue + } + return valueSortLess(av, bv) + } + } + return a.String() < b.String() +} + +// Less returns whether the value at index i should sort before the +// value at index j. It is part of the sort.Interface implementation. +func (s *valuesSorter) Less(i, j int) bool { + if s.strings == nil { + return valueSortLess(s.values[i], s.values[j]) + } + return s.strings[i] < s.strings[j] +} + +// sortValues is a sort function that handles both native types and any type that +// can be converted to error or Stringer. Other inputs are sorted according to +// their Value.String() value to ensure display stability. +func sortValues(values []reflect.Value, cs *ConfigState) { + if len(values) == 0 { + return + } + sort.Sort(newValuesSorter(values, cs)) +} diff --git a/vendor/github.com/davecgh/go-spew/spew/config.go b/vendor/github.com/davecgh/go-spew/spew/config.go new file mode 100644 index 0000000..2e3d22f --- /dev/null +++ b/vendor/github.com/davecgh/go-spew/spew/config.go @@ -0,0 +1,306 @@ +/* + * Copyright (c) 2013-2016 Dave Collins + * + * Permission to use, copy, modify, and 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. + */ + +package spew + +import ( + "bytes" + "fmt" + "io" + "os" +) + +// ConfigState houses the configuration options used by spew to format and +// display values. There is a global instance, Config, that is used to control +// all top-level Formatter and Dump functionality. Each ConfigState instance +// provides methods equivalent to the top-level functions. +// +// The zero value for ConfigState provides no indentation. You would typically +// want to set it to a space or a tab. +// +// Alternatively, you can use NewDefaultConfig to get a ConfigState instance +// with default settings. See the documentation of NewDefaultConfig for default +// values. +type ConfigState struct { + // Indent specifies the string to use for each indentation level. The + // global config instance that all top-level functions use set this to a + // single space by default. If you would like more indentation, you might + // set this to a tab with "\t" or perhaps two spaces with " ". + Indent string + + // MaxDepth controls the maximum number of levels to descend into nested + // data structures. The default, 0, means there is no limit. + // + // NOTE: Circular data structures are properly detected, so it is not + // necessary to set this value unless you specifically want to limit deeply + // nested data structures. + MaxDepth int + + // DisableMethods specifies whether or not error and Stringer interfaces are + // invoked for types that implement them. + DisableMethods bool + + // DisablePointerMethods specifies whether or not to check for and invoke + // error and Stringer interfaces on types which only accept a pointer + // receiver when the current type is not a pointer. + // + // NOTE: This might be an unsafe action since calling one of these methods + // with a pointer receiver could technically mutate the value, however, + // in practice, types which choose to satisify an error or Stringer + // interface with a pointer receiver should not be mutating their state + // inside these interface methods. As a result, this option relies on + // access to the unsafe package, so it will not have any effect when + // running in environments without access to the unsafe package such as + // Google App Engine or with the "safe" build tag specified. + DisablePointerMethods bool + + // DisablePointerAddresses specifies whether to disable the printing of + // pointer addresses. This is useful when diffing data structures in tests. + DisablePointerAddresses bool + + // DisableCapacities specifies whether to disable the printing of capacities + // for arrays, slices, maps and channels. This is useful when diffing + // data structures in tests. + DisableCapacities bool + + // ContinueOnMethod specifies whether or not recursion should continue once + // a custom error or Stringer interface is invoked. The default, false, + // means it will print the results of invoking the custom error or Stringer + // interface and return immediately instead of continuing to recurse into + // the internals of the data type. + // + // NOTE: This flag does not have any effect if method invocation is disabled + // via the DisableMethods or DisablePointerMethods options. + ContinueOnMethod bool + + // SortKeys specifies map keys should be sorted before being printed. Use + // this to have a more deterministic, diffable output. Note that only + // native types (bool, int, uint, floats, uintptr and string) and types + // that support the error or Stringer interfaces (if methods are + // enabled) are supported, with other types sorted according to the + // reflect.Value.String() output which guarantees display stability. + SortKeys bool + + // SpewKeys specifies that, as a last resort attempt, map keys should + // be spewed to strings and sorted by those strings. This is only + // considered if SortKeys is true. + SpewKeys bool +} + +// Config is the active configuration of the top-level functions. +// The configuration can be changed by modifying the contents of spew.Config. +var Config = ConfigState{Indent: " "} + +// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the formatted string as a value that satisfies error. See NewFormatter +// for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Errorf(format, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Errorf(format string, a ...interface{}) (err error) { + return fmt.Errorf(format, c.convertArgs(a)...) +} + +// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprint(w, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Fprint(w io.Writer, a ...interface{}) (n int, err error) { + return fmt.Fprint(w, c.convertArgs(a)...) +} + +// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprintf(w, format, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { + return fmt.Fprintf(w, format, c.convertArgs(a)...) +} + +// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it +// passed with a Formatter interface returned by c.NewFormatter. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprintln(w, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { + return fmt.Fprintln(w, c.convertArgs(a)...) +} + +// Print is a wrapper for fmt.Print that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Print(c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Print(a ...interface{}) (n int, err error) { + return fmt.Print(c.convertArgs(a)...) +} + +// Printf is a wrapper for fmt.Printf that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Printf(format, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Printf(format string, a ...interface{}) (n int, err error) { + return fmt.Printf(format, c.convertArgs(a)...) +} + +// Println is a wrapper for fmt.Println that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Println(c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Println(a ...interface{}) (n int, err error) { + return fmt.Println(c.convertArgs(a)...) +} + +// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprint(c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Sprint(a ...interface{}) string { + return fmt.Sprint(c.convertArgs(a)...) +} + +// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprintf(format, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Sprintf(format string, a ...interface{}) string { + return fmt.Sprintf(format, c.convertArgs(a)...) +} + +// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it +// were passed with a Formatter interface returned by c.NewFormatter. It +// returns the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprintln(c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Sprintln(a ...interface{}) string { + return fmt.Sprintln(c.convertArgs(a)...) +} + +/* +NewFormatter returns a custom formatter that satisfies the fmt.Formatter +interface. As a result, it integrates cleanly with standard fmt package +printing functions. The formatter is useful for inline printing of smaller data +types similar to the standard %v format specifier. + +The custom formatter only responds to the %v (most compact), %+v (adds pointer +addresses), %#v (adds types), and %#+v (adds types and pointer addresses) verb +combinations. Any other verbs such as %x and %q will be sent to the the +standard fmt package for formatting. In addition, the custom formatter ignores +the width and precision arguments (however they will still work on the format +specifiers not handled by the custom formatter). + +Typically this function shouldn't be called directly. It is much easier to make +use of the custom formatter by calling one of the convenience functions such as +c.Printf, c.Println, or c.Printf. +*/ +func (c *ConfigState) NewFormatter(v interface{}) fmt.Formatter { + return newFormatter(c, v) +} + +// Fdump formats and displays the passed arguments to io.Writer w. It formats +// exactly the same as Dump. +func (c *ConfigState) Fdump(w io.Writer, a ...interface{}) { + fdump(c, w, a...) +} + +/* +Dump displays the passed parameters to standard out with newlines, customizable +indentation, and additional debug information such as complete types and all +pointer addresses used to indirect to the final value. It provides the +following features over the built-in printing facilities provided by the fmt +package: + + * Pointers are dereferenced and followed + * Circular data structures are detected and handled properly + * Custom Stringer/error interfaces are optionally invoked, including + on unexported types + * Custom types which only implement the Stringer/error interfaces via + a pointer receiver are optionally invoked when passing non-pointer + variables + * Byte arrays and slices are dumped like the hexdump -C command which + includes offsets, byte values in hex, and ASCII output + +The configuration options are controlled by modifying the public members +of c. See ConfigState for options documentation. + +See Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to +get the formatted result as a string. +*/ +func (c *ConfigState) Dump(a ...interface{}) { + fdump(c, os.Stdout, a...) +} + +// Sdump returns a string with the passed arguments formatted exactly the same +// as Dump. +func (c *ConfigState) Sdump(a ...interface{}) string { + var buf bytes.Buffer + fdump(c, &buf, a...) + return buf.String() +} + +// convertArgs accepts a slice of arguments and returns a slice of the same +// length with each argument converted to a spew Formatter interface using +// the ConfigState associated with s. +func (c *ConfigState) convertArgs(args []interface{}) (formatters []interface{}) { + formatters = make([]interface{}, len(args)) + for index, arg := range args { + formatters[index] = newFormatter(c, arg) + } + return formatters +} + +// NewDefaultConfig returns a ConfigState with the following default settings. +// +// Indent: " " +// MaxDepth: 0 +// DisableMethods: false +// DisablePointerMethods: false +// ContinueOnMethod: false +// SortKeys: false +func NewDefaultConfig() *ConfigState { + return &ConfigState{Indent: " "} +} diff --git a/vendor/github.com/davecgh/go-spew/spew/doc.go b/vendor/github.com/davecgh/go-spew/spew/doc.go new file mode 100644 index 0000000..aacaac6 --- /dev/null +++ b/vendor/github.com/davecgh/go-spew/spew/doc.go @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2013-2016 Dave Collins + * + * Permission to use, copy, modify, and 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. + */ + +/* +Package spew implements a deep pretty printer for Go data structures to aid in +debugging. + +A quick overview of the additional features spew provides over the built-in +printing facilities for Go data types are as follows: + + * Pointers are dereferenced and followed + * Circular data structures are detected and handled properly + * Custom Stringer/error interfaces are optionally invoked, including + on unexported types + * Custom types which only implement the Stringer/error interfaces via + a pointer receiver are optionally invoked when passing non-pointer + variables + * Byte arrays and slices are dumped like the hexdump -C command which + includes offsets, byte values in hex, and ASCII output (only when using + Dump style) + +There are two different approaches spew allows for dumping Go data structures: + + * Dump style which prints with newlines, customizable indentation, + and additional debug information such as types and all pointer addresses + used to indirect to the final value + * A custom Formatter interface that integrates cleanly with the standard fmt + package and replaces %v, %+v, %#v, and %#+v to provide inline printing + similar to the default %v while providing the additional functionality + outlined above and passing unsupported format verbs such as %x and %q + along to fmt + +Quick Start + +This section demonstrates how to quickly get started with spew. See the +sections below for further details on formatting and configuration options. + +To dump a variable with full newlines, indentation, type, and pointer +information use Dump, Fdump, or Sdump: + spew.Dump(myVar1, myVar2, ...) + spew.Fdump(someWriter, myVar1, myVar2, ...) + str := spew.Sdump(myVar1, myVar2, ...) + +Alternatively, if you would prefer to use format strings with a compacted inline +printing style, use the convenience wrappers Printf, Fprintf, etc with +%v (most compact), %+v (adds pointer addresses), %#v (adds types), or +%#+v (adds types and pointer addresses): + spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2) + spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) + spew.Fprintf(someWriter, "myVar1: %v -- myVar2: %+v", myVar1, myVar2) + spew.Fprintf(someWriter, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) + +Configuration Options + +Configuration of spew is handled by fields in the ConfigState type. For +convenience, all of the top-level functions use a global state available +via the spew.Config global. + +It is also possible to create a ConfigState instance that provides methods +equivalent to the top-level functions. This allows concurrent configuration +options. See the ConfigState documentation for more details. + +The following configuration options are available: + * Indent + String to use for each indentation level for Dump functions. + It is a single space by default. A popular alternative is "\t". + + * MaxDepth + Maximum number of levels to descend into nested data structures. + There is no limit by default. + + * DisableMethods + Disables invocation of error and Stringer interface methods. + Method invocation is enabled by default. + + * DisablePointerMethods + Disables invocation of error and Stringer interface methods on types + which only accept pointer receivers from non-pointer variables. + Pointer method invocation is enabled by default. + + * DisablePointerAddresses + DisablePointerAddresses specifies whether to disable the printing of + pointer addresses. This is useful when diffing data structures in tests. + + * DisableCapacities + DisableCapacities specifies whether to disable the printing of + capacities for arrays, slices, maps and channels. This is useful when + diffing data structures in tests. + + * ContinueOnMethod + Enables recursion into types after invoking error and Stringer interface + methods. Recursion after method invocation is disabled by default. + + * SortKeys + Specifies map keys should be sorted before being printed. Use + this to have a more deterministic, diffable output. Note that + only native types (bool, int, uint, floats, uintptr and string) + and types which implement error or Stringer interfaces are + supported with other types sorted according to the + reflect.Value.String() output which guarantees display + stability. Natural map order is used by default. + + * SpewKeys + Specifies that, as a last resort attempt, map keys should be + spewed to strings and sorted by those strings. This is only + considered if SortKeys is true. + +Dump Usage + +Simply call spew.Dump with a list of variables you want to dump: + + spew.Dump(myVar1, myVar2, ...) + +You may also call spew.Fdump if you would prefer to output to an arbitrary +io.Writer. For example, to dump to standard error: + + spew.Fdump(os.Stderr, myVar1, myVar2, ...) + +A third option is to call spew.Sdump to get the formatted output as a string: + + str := spew.Sdump(myVar1, myVar2, ...) + +Sample Dump Output + +See the Dump example for details on the setup of the types and variables being +shown here. + + (main.Foo) { + unexportedField: (*main.Bar)(0xf84002e210)({ + flag: (main.Flag) flagTwo, + data: (uintptr) + }), + ExportedField: (map[interface {}]interface {}) (len=1) { + (string) (len=3) "one": (bool) true + } + } + +Byte (and uint8) arrays and slices are displayed uniquely like the hexdump -C +command as shown. + ([]uint8) (len=32 cap=32) { + 00000000 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 |............... | + 00000010 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 |!"#$%&'()*+,-./0| + 00000020 31 32 |12| + } + +Custom Formatter + +Spew provides a custom formatter that implements the fmt.Formatter interface +so that it integrates cleanly with standard fmt package printing functions. The +formatter is useful for inline printing of smaller data types similar to the +standard %v format specifier. + +The custom formatter only responds to the %v (most compact), %+v (adds pointer +addresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb +combinations. Any other verbs such as %x and %q will be sent to the the +standard fmt package for formatting. In addition, the custom formatter ignores +the width and precision arguments (however they will still work on the format +specifiers not handled by the custom formatter). + +Custom Formatter Usage + +The simplest way to make use of the spew custom formatter is to call one of the +convenience functions such as spew.Printf, spew.Println, or spew.Printf. The +functions have syntax you are most likely already familiar with: + + spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2) + spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) + spew.Println(myVar, myVar2) + spew.Fprintf(os.Stderr, "myVar1: %v -- myVar2: %+v", myVar1, myVar2) + spew.Fprintf(os.Stderr, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) + +See the Index for the full list convenience functions. + +Sample Formatter Output + +Double pointer to a uint8: + %v: <**>5 + %+v: <**>(0xf8400420d0->0xf8400420c8)5 + %#v: (**uint8)5 + %#+v: (**uint8)(0xf8400420d0->0xf8400420c8)5 + +Pointer to circular struct with a uint8 field and a pointer to itself: + %v: <*>{1 <*>} + %+v: <*>(0xf84003e260){ui8:1 c:<*>(0xf84003e260)} + %#v: (*main.circular){ui8:(uint8)1 c:(*main.circular)} + %#+v: (*main.circular)(0xf84003e260){ui8:(uint8)1 c:(*main.circular)(0xf84003e260)} + +See the Printf example for details on the setup of variables being shown +here. + +Errors + +Since it is possible for custom Stringer/error interfaces to panic, spew +detects them and handles them internally by printing the panic information +inline with the output. Since spew is intended to provide deep pretty printing +capabilities on structures, it intentionally does not return any errors. +*/ +package spew diff --git a/vendor/github.com/davecgh/go-spew/spew/dump.go b/vendor/github.com/davecgh/go-spew/spew/dump.go new file mode 100644 index 0000000..f78d89f --- /dev/null +++ b/vendor/github.com/davecgh/go-spew/spew/dump.go @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2013-2016 Dave Collins + * + * Permission to use, copy, modify, and 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. + */ + +package spew + +import ( + "bytes" + "encoding/hex" + "fmt" + "io" + "os" + "reflect" + "regexp" + "strconv" + "strings" +) + +var ( + // uint8Type is a reflect.Type representing a uint8. It is used to + // convert cgo types to uint8 slices for hexdumping. + uint8Type = reflect.TypeOf(uint8(0)) + + // cCharRE is a regular expression that matches a cgo char. + // It is used to detect character arrays to hexdump them. + cCharRE = regexp.MustCompile(`^.*\._Ctype_char$`) + + // cUnsignedCharRE is a regular expression that matches a cgo unsigned + // char. It is used to detect unsigned character arrays to hexdump + // them. + cUnsignedCharRE = regexp.MustCompile(`^.*\._Ctype_unsignedchar$`) + + // cUint8tCharRE is a regular expression that matches a cgo uint8_t. + // It is used to detect uint8_t arrays to hexdump them. + cUint8tCharRE = regexp.MustCompile(`^.*\._Ctype_uint8_t$`) +) + +// dumpState contains information about the state of a dump operation. +type dumpState struct { + w io.Writer + depth int + pointers map[uintptr]int + ignoreNextType bool + ignoreNextIndent bool + cs *ConfigState +} + +// indent performs indentation according to the depth level and cs.Indent +// option. +func (d *dumpState) indent() { + if d.ignoreNextIndent { + d.ignoreNextIndent = false + return + } + d.w.Write(bytes.Repeat([]byte(d.cs.Indent), d.depth)) +} + +// unpackValue returns values inside of non-nil interfaces when possible. +// This is useful for data types like structs, arrays, slices, and maps which +// can contain varying types packed inside an interface. +func (d *dumpState) unpackValue(v reflect.Value) reflect.Value { + if v.Kind() == reflect.Interface && !v.IsNil() { + v = v.Elem() + } + return v +} + +// dumpPtr handles formatting of pointers by indirecting them as necessary. +func (d *dumpState) dumpPtr(v reflect.Value) { + // Remove pointers at or below the current depth from map used to detect + // circular refs. + for k, depth := range d.pointers { + if depth >= d.depth { + delete(d.pointers, k) + } + } + + // Keep list of all dereferenced pointers to show later. + pointerChain := make([]uintptr, 0) + + // Figure out how many levels of indirection there are by dereferencing + // pointers and unpacking interfaces down the chain while detecting circular + // references. + nilFound := false + cycleFound := false + indirects := 0 + ve := v + for ve.Kind() == reflect.Ptr { + if ve.IsNil() { + nilFound = true + break + } + indirects++ + addr := ve.Pointer() + pointerChain = append(pointerChain, addr) + if pd, ok := d.pointers[addr]; ok && pd < d.depth { + cycleFound = true + indirects-- + break + } + d.pointers[addr] = d.depth + + ve = ve.Elem() + if ve.Kind() == reflect.Interface { + if ve.IsNil() { + nilFound = true + break + } + ve = ve.Elem() + } + } + + // Display type information. + d.w.Write(openParenBytes) + d.w.Write(bytes.Repeat(asteriskBytes, indirects)) + d.w.Write([]byte(ve.Type().String())) + d.w.Write(closeParenBytes) + + // Display pointer information. + if !d.cs.DisablePointerAddresses && len(pointerChain) > 0 { + d.w.Write(openParenBytes) + for i, addr := range pointerChain { + if i > 0 { + d.w.Write(pointerChainBytes) + } + printHexPtr(d.w, addr) + } + d.w.Write(closeParenBytes) + } + + // Display dereferenced value. + d.w.Write(openParenBytes) + switch { + case nilFound: + d.w.Write(nilAngleBytes) + + case cycleFound: + d.w.Write(circularBytes) + + default: + d.ignoreNextType = true + d.dump(ve) + } + d.w.Write(closeParenBytes) +} + +// dumpSlice handles formatting of arrays and slices. Byte (uint8 under +// reflection) arrays and slices are dumped in hexdump -C fashion. +func (d *dumpState) dumpSlice(v reflect.Value) { + // Determine whether this type should be hex dumped or not. Also, + // for types which should be hexdumped, try to use the underlying data + // first, then fall back to trying to convert them to a uint8 slice. + var buf []uint8 + doConvert := false + doHexDump := false + numEntries := v.Len() + if numEntries > 0 { + vt := v.Index(0).Type() + vts := vt.String() + switch { + // C types that need to be converted. + case cCharRE.MatchString(vts): + fallthrough + case cUnsignedCharRE.MatchString(vts): + fallthrough + case cUint8tCharRE.MatchString(vts): + doConvert = true + + // Try to use existing uint8 slices and fall back to converting + // and copying if that fails. + case vt.Kind() == reflect.Uint8: + // We need an addressable interface to convert the type + // to a byte slice. However, the reflect package won't + // give us an interface on certain things like + // unexported struct fields in order to enforce + // visibility rules. We use unsafe, when available, to + // bypass these restrictions since this package does not + // mutate the values. + vs := v + if !vs.CanInterface() || !vs.CanAddr() { + vs = unsafeReflectValue(vs) + } + if !UnsafeDisabled { + vs = vs.Slice(0, numEntries) + + // Use the existing uint8 slice if it can be + // type asserted. + iface := vs.Interface() + if slice, ok := iface.([]uint8); ok { + buf = slice + doHexDump = true + break + } + } + + // The underlying data needs to be converted if it can't + // be type asserted to a uint8 slice. + doConvert = true + } + + // Copy and convert the underlying type if needed. + if doConvert && vt.ConvertibleTo(uint8Type) { + // Convert and copy each element into a uint8 byte + // slice. + buf = make([]uint8, numEntries) + for i := 0; i < numEntries; i++ { + vv := v.Index(i) + buf[i] = uint8(vv.Convert(uint8Type).Uint()) + } + doHexDump = true + } + } + + // Hexdump the entire slice as needed. + if doHexDump { + indent := strings.Repeat(d.cs.Indent, d.depth) + str := indent + hex.Dump(buf) + str = strings.Replace(str, "\n", "\n"+indent, -1) + str = strings.TrimRight(str, d.cs.Indent) + d.w.Write([]byte(str)) + return + } + + // Recursively call dump for each item. + for i := 0; i < numEntries; i++ { + d.dump(d.unpackValue(v.Index(i))) + if i < (numEntries - 1) { + d.w.Write(commaNewlineBytes) + } else { + d.w.Write(newlineBytes) + } + } +} + +// dump is the main workhorse for dumping a value. It uses the passed reflect +// value to figure out what kind of object we are dealing with and formats it +// appropriately. It is a recursive function, however circular data structures +// are detected and handled properly. +func (d *dumpState) dump(v reflect.Value) { + // Handle invalid reflect values immediately. + kind := v.Kind() + if kind == reflect.Invalid { + d.w.Write(invalidAngleBytes) + return + } + + // Handle pointers specially. + if kind == reflect.Ptr { + d.indent() + d.dumpPtr(v) + return + } + + // Print type information unless already handled elsewhere. + if !d.ignoreNextType { + d.indent() + d.w.Write(openParenBytes) + d.w.Write([]byte(v.Type().String())) + d.w.Write(closeParenBytes) + d.w.Write(spaceBytes) + } + d.ignoreNextType = false + + // Display length and capacity if the built-in len and cap functions + // work with the value's kind and the len/cap itself is non-zero. + valueLen, valueCap := 0, 0 + switch v.Kind() { + case reflect.Array, reflect.Slice, reflect.Chan: + valueLen, valueCap = v.Len(), v.Cap() + case reflect.Map, reflect.String: + valueLen = v.Len() + } + if valueLen != 0 || !d.cs.DisableCapacities && valueCap != 0 { + d.w.Write(openParenBytes) + if valueLen != 0 { + d.w.Write(lenEqualsBytes) + printInt(d.w, int64(valueLen), 10) + } + if !d.cs.DisableCapacities && valueCap != 0 { + if valueLen != 0 { + d.w.Write(spaceBytes) + } + d.w.Write(capEqualsBytes) + printInt(d.w, int64(valueCap), 10) + } + d.w.Write(closeParenBytes) + d.w.Write(spaceBytes) + } + + // Call Stringer/error interfaces if they exist and the handle methods flag + // is enabled + if !d.cs.DisableMethods { + if (kind != reflect.Invalid) && (kind != reflect.Interface) { + if handled := handleMethods(d.cs, d.w, v); handled { + return + } + } + } + + switch kind { + case reflect.Invalid: + // Do nothing. We should never get here since invalid has already + // been handled above. + + case reflect.Bool: + printBool(d.w, v.Bool()) + + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + printInt(d.w, v.Int(), 10) + + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + printUint(d.w, v.Uint(), 10) + + case reflect.Float32: + printFloat(d.w, v.Float(), 32) + + case reflect.Float64: + printFloat(d.w, v.Float(), 64) + + case reflect.Complex64: + printComplex(d.w, v.Complex(), 32) + + case reflect.Complex128: + printComplex(d.w, v.Complex(), 64) + + case reflect.Slice: + if v.IsNil() { + d.w.Write(nilAngleBytes) + break + } + fallthrough + + case reflect.Array: + d.w.Write(openBraceNewlineBytes) + d.depth++ + if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { + d.indent() + d.w.Write(maxNewlineBytes) + } else { + d.dumpSlice(v) + } + d.depth-- + d.indent() + d.w.Write(closeBraceBytes) + + case reflect.String: + d.w.Write([]byte(strconv.Quote(v.String()))) + + case reflect.Interface: + // The only time we should get here is for nil interfaces due to + // unpackValue calls. + if v.IsNil() { + d.w.Write(nilAngleBytes) + } + + case reflect.Ptr: + // Do nothing. We should never get here since pointers have already + // been handled above. + + case reflect.Map: + // nil maps should be indicated as different than empty maps + if v.IsNil() { + d.w.Write(nilAngleBytes) + break + } + + d.w.Write(openBraceNewlineBytes) + d.depth++ + if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { + d.indent() + d.w.Write(maxNewlineBytes) + } else { + numEntries := v.Len() + keys := v.MapKeys() + if d.cs.SortKeys { + sortValues(keys, d.cs) + } + for i, key := range keys { + d.dump(d.unpackValue(key)) + d.w.Write(colonSpaceBytes) + d.ignoreNextIndent = true + d.dump(d.unpackValue(v.MapIndex(key))) + if i < (numEntries - 1) { + d.w.Write(commaNewlineBytes) + } else { + d.w.Write(newlineBytes) + } + } + } + d.depth-- + d.indent() + d.w.Write(closeBraceBytes) + + case reflect.Struct: + d.w.Write(openBraceNewlineBytes) + d.depth++ + if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { + d.indent() + d.w.Write(maxNewlineBytes) + } else { + vt := v.Type() + numFields := v.NumField() + for i := 0; i < numFields; i++ { + d.indent() + vtf := vt.Field(i) + d.w.Write([]byte(vtf.Name)) + d.w.Write(colonSpaceBytes) + d.ignoreNextIndent = true + d.dump(d.unpackValue(v.Field(i))) + if i < (numFields - 1) { + d.w.Write(commaNewlineBytes) + } else { + d.w.Write(newlineBytes) + } + } + } + d.depth-- + d.indent() + d.w.Write(closeBraceBytes) + + case reflect.Uintptr: + printHexPtr(d.w, uintptr(v.Uint())) + + case reflect.UnsafePointer, reflect.Chan, reflect.Func: + printHexPtr(d.w, v.Pointer()) + + // There were not any other types at the time this code was written, but + // fall back to letting the default fmt package handle it in case any new + // types are added. + default: + if v.CanInterface() { + fmt.Fprintf(d.w, "%v", v.Interface()) + } else { + fmt.Fprintf(d.w, "%v", v.String()) + } + } +} + +// fdump is a helper function to consolidate the logic from the various public +// methods which take varying writers and config states. +func fdump(cs *ConfigState, w io.Writer, a ...interface{}) { + for _, arg := range a { + if arg == nil { + w.Write(interfaceBytes) + w.Write(spaceBytes) + w.Write(nilAngleBytes) + w.Write(newlineBytes) + continue + } + + d := dumpState{w: w, cs: cs} + d.pointers = make(map[uintptr]int) + d.dump(reflect.ValueOf(arg)) + d.w.Write(newlineBytes) + } +} + +// Fdump formats and displays the passed arguments to io.Writer w. It formats +// exactly the same as Dump. +func Fdump(w io.Writer, a ...interface{}) { + fdump(&Config, w, a...) +} + +// Sdump returns a string with the passed arguments formatted exactly the same +// as Dump. +func Sdump(a ...interface{}) string { + var buf bytes.Buffer + fdump(&Config, &buf, a...) + return buf.String() +} + +/* +Dump displays the passed parameters to standard out with newlines, customizable +indentation, and additional debug information such as complete types and all +pointer addresses used to indirect to the final value. It provides the +following features over the built-in printing facilities provided by the fmt +package: + + * Pointers are dereferenced and followed + * Circular data structures are detected and handled properly + * Custom Stringer/error interfaces are optionally invoked, including + on unexported types + * Custom types which only implement the Stringer/error interfaces via + a pointer receiver are optionally invoked when passing non-pointer + variables + * Byte arrays and slices are dumped like the hexdump -C command which + includes offsets, byte values in hex, and ASCII output + +The configuration options are controlled by an exported package global, +spew.Config. See ConfigState for options documentation. + +See Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to +get the formatted result as a string. +*/ +func Dump(a ...interface{}) { + fdump(&Config, os.Stdout, a...) +} diff --git a/vendor/github.com/davecgh/go-spew/spew/format.go b/vendor/github.com/davecgh/go-spew/spew/format.go new file mode 100644 index 0000000..b04edb7 --- /dev/null +++ b/vendor/github.com/davecgh/go-spew/spew/format.go @@ -0,0 +1,419 @@ +/* + * Copyright (c) 2013-2016 Dave Collins + * + * Permission to use, copy, modify, and 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. + */ + +package spew + +import ( + "bytes" + "fmt" + "reflect" + "strconv" + "strings" +) + +// supportedFlags is a list of all the character flags supported by fmt package. +const supportedFlags = "0-+# " + +// formatState implements the fmt.Formatter interface and contains information +// about the state of a formatting operation. The NewFormatter function can +// be used to get a new Formatter which can be used directly as arguments +// in standard fmt package printing calls. +type formatState struct { + value interface{} + fs fmt.State + depth int + pointers map[uintptr]int + ignoreNextType bool + cs *ConfigState +} + +// buildDefaultFormat recreates the original format string without precision +// and width information to pass in to fmt.Sprintf in the case of an +// unrecognized type. Unless new types are added to the language, this +// function won't ever be called. +func (f *formatState) buildDefaultFormat() (format string) { + buf := bytes.NewBuffer(percentBytes) + + for _, flag := range supportedFlags { + if f.fs.Flag(int(flag)) { + buf.WriteRune(flag) + } + } + + buf.WriteRune('v') + + format = buf.String() + return format +} + +// constructOrigFormat recreates the original format string including precision +// and width information to pass along to the standard fmt package. This allows +// automatic deferral of all format strings this package doesn't support. +func (f *formatState) constructOrigFormat(verb rune) (format string) { + buf := bytes.NewBuffer(percentBytes) + + for _, flag := range supportedFlags { + if f.fs.Flag(int(flag)) { + buf.WriteRune(flag) + } + } + + if width, ok := f.fs.Width(); ok { + buf.WriteString(strconv.Itoa(width)) + } + + if precision, ok := f.fs.Precision(); ok { + buf.Write(precisionBytes) + buf.WriteString(strconv.Itoa(precision)) + } + + buf.WriteRune(verb) + + format = buf.String() + return format +} + +// unpackValue returns values inside of non-nil interfaces when possible and +// ensures that types for values which have been unpacked from an interface +// are displayed when the show types flag is also set. +// This is useful for data types like structs, arrays, slices, and maps which +// can contain varying types packed inside an interface. +func (f *formatState) unpackValue(v reflect.Value) reflect.Value { + if v.Kind() == reflect.Interface { + f.ignoreNextType = false + if !v.IsNil() { + v = v.Elem() + } + } + return v +} + +// formatPtr handles formatting of pointers by indirecting them as necessary. +func (f *formatState) formatPtr(v reflect.Value) { + // Display nil if top level pointer is nil. + showTypes := f.fs.Flag('#') + if v.IsNil() && (!showTypes || f.ignoreNextType) { + f.fs.Write(nilAngleBytes) + return + } + + // Remove pointers at or below the current depth from map used to detect + // circular refs. + for k, depth := range f.pointers { + if depth >= f.depth { + delete(f.pointers, k) + } + } + + // Keep list of all dereferenced pointers to possibly show later. + pointerChain := make([]uintptr, 0) + + // Figure out how many levels of indirection there are by derferencing + // pointers and unpacking interfaces down the chain while detecting circular + // references. + nilFound := false + cycleFound := false + indirects := 0 + ve := v + for ve.Kind() == reflect.Ptr { + if ve.IsNil() { + nilFound = true + break + } + indirects++ + addr := ve.Pointer() + pointerChain = append(pointerChain, addr) + if pd, ok := f.pointers[addr]; ok && pd < f.depth { + cycleFound = true + indirects-- + break + } + f.pointers[addr] = f.depth + + ve = ve.Elem() + if ve.Kind() == reflect.Interface { + if ve.IsNil() { + nilFound = true + break + } + ve = ve.Elem() + } + } + + // Display type or indirection level depending on flags. + if showTypes && !f.ignoreNextType { + f.fs.Write(openParenBytes) + f.fs.Write(bytes.Repeat(asteriskBytes, indirects)) + f.fs.Write([]byte(ve.Type().String())) + f.fs.Write(closeParenBytes) + } else { + if nilFound || cycleFound { + indirects += strings.Count(ve.Type().String(), "*") + } + f.fs.Write(openAngleBytes) + f.fs.Write([]byte(strings.Repeat("*", indirects))) + f.fs.Write(closeAngleBytes) + } + + // Display pointer information depending on flags. + if f.fs.Flag('+') && (len(pointerChain) > 0) { + f.fs.Write(openParenBytes) + for i, addr := range pointerChain { + if i > 0 { + f.fs.Write(pointerChainBytes) + } + printHexPtr(f.fs, addr) + } + f.fs.Write(closeParenBytes) + } + + // Display dereferenced value. + switch { + case nilFound: + f.fs.Write(nilAngleBytes) + + case cycleFound: + f.fs.Write(circularShortBytes) + + default: + f.ignoreNextType = true + f.format(ve) + } +} + +// format is the main workhorse for providing the Formatter interface. It +// uses the passed reflect value to figure out what kind of object we are +// dealing with and formats it appropriately. It is a recursive function, +// however circular data structures are detected and handled properly. +func (f *formatState) format(v reflect.Value) { + // Handle invalid reflect values immediately. + kind := v.Kind() + if kind == reflect.Invalid { + f.fs.Write(invalidAngleBytes) + return + } + + // Handle pointers specially. + if kind == reflect.Ptr { + f.formatPtr(v) + return + } + + // Print type information unless already handled elsewhere. + if !f.ignoreNextType && f.fs.Flag('#') { + f.fs.Write(openParenBytes) + f.fs.Write([]byte(v.Type().String())) + f.fs.Write(closeParenBytes) + } + f.ignoreNextType = false + + // Call Stringer/error interfaces if they exist and the handle methods + // flag is enabled. + if !f.cs.DisableMethods { + if (kind != reflect.Invalid) && (kind != reflect.Interface) { + if handled := handleMethods(f.cs, f.fs, v); handled { + return + } + } + } + + switch kind { + case reflect.Invalid: + // Do nothing. We should never get here since invalid has already + // been handled above. + + case reflect.Bool: + printBool(f.fs, v.Bool()) + + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + printInt(f.fs, v.Int(), 10) + + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + printUint(f.fs, v.Uint(), 10) + + case reflect.Float32: + printFloat(f.fs, v.Float(), 32) + + case reflect.Float64: + printFloat(f.fs, v.Float(), 64) + + case reflect.Complex64: + printComplex(f.fs, v.Complex(), 32) + + case reflect.Complex128: + printComplex(f.fs, v.Complex(), 64) + + case reflect.Slice: + if v.IsNil() { + f.fs.Write(nilAngleBytes) + break + } + fallthrough + + case reflect.Array: + f.fs.Write(openBracketBytes) + f.depth++ + if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { + f.fs.Write(maxShortBytes) + } else { + numEntries := v.Len() + for i := 0; i < numEntries; i++ { + if i > 0 { + f.fs.Write(spaceBytes) + } + f.ignoreNextType = true + f.format(f.unpackValue(v.Index(i))) + } + } + f.depth-- + f.fs.Write(closeBracketBytes) + + case reflect.String: + f.fs.Write([]byte(v.String())) + + case reflect.Interface: + // The only time we should get here is for nil interfaces due to + // unpackValue calls. + if v.IsNil() { + f.fs.Write(nilAngleBytes) + } + + case reflect.Ptr: + // Do nothing. We should never get here since pointers have already + // been handled above. + + case reflect.Map: + // nil maps should be indicated as different than empty maps + if v.IsNil() { + f.fs.Write(nilAngleBytes) + break + } + + f.fs.Write(openMapBytes) + f.depth++ + if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { + f.fs.Write(maxShortBytes) + } else { + keys := v.MapKeys() + if f.cs.SortKeys { + sortValues(keys, f.cs) + } + for i, key := range keys { + if i > 0 { + f.fs.Write(spaceBytes) + } + f.ignoreNextType = true + f.format(f.unpackValue(key)) + f.fs.Write(colonBytes) + f.ignoreNextType = true + f.format(f.unpackValue(v.MapIndex(key))) + } + } + f.depth-- + f.fs.Write(closeMapBytes) + + case reflect.Struct: + numFields := v.NumField() + f.fs.Write(openBraceBytes) + f.depth++ + if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { + f.fs.Write(maxShortBytes) + } else { + vt := v.Type() + for i := 0; i < numFields; i++ { + if i > 0 { + f.fs.Write(spaceBytes) + } + vtf := vt.Field(i) + if f.fs.Flag('+') || f.fs.Flag('#') { + f.fs.Write([]byte(vtf.Name)) + f.fs.Write(colonBytes) + } + f.format(f.unpackValue(v.Field(i))) + } + } + f.depth-- + f.fs.Write(closeBraceBytes) + + case reflect.Uintptr: + printHexPtr(f.fs, uintptr(v.Uint())) + + case reflect.UnsafePointer, reflect.Chan, reflect.Func: + printHexPtr(f.fs, v.Pointer()) + + // There were not any other types at the time this code was written, but + // fall back to letting the default fmt package handle it if any get added. + default: + format := f.buildDefaultFormat() + if v.CanInterface() { + fmt.Fprintf(f.fs, format, v.Interface()) + } else { + fmt.Fprintf(f.fs, format, v.String()) + } + } +} + +// Format satisfies the fmt.Formatter interface. See NewFormatter for usage +// details. +func (f *formatState) Format(fs fmt.State, verb rune) { + f.fs = fs + + // Use standard formatting for verbs that are not v. + if verb != 'v' { + format := f.constructOrigFormat(verb) + fmt.Fprintf(fs, format, f.value) + return + } + + if f.value == nil { + if fs.Flag('#') { + fs.Write(interfaceBytes) + } + fs.Write(nilAngleBytes) + return + } + + f.format(reflect.ValueOf(f.value)) +} + +// newFormatter is a helper function to consolidate the logic from the various +// public methods which take varying config states. +func newFormatter(cs *ConfigState, v interface{}) fmt.Formatter { + fs := &formatState{value: v, cs: cs} + fs.pointers = make(map[uintptr]int) + return fs +} + +/* +NewFormatter returns a custom formatter that satisfies the fmt.Formatter +interface. As a result, it integrates cleanly with standard fmt package +printing functions. The formatter is useful for inline printing of smaller data +types similar to the standard %v format specifier. + +The custom formatter only responds to the %v (most compact), %+v (adds pointer +addresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb +combinations. Any other verbs such as %x and %q will be sent to the the +standard fmt package for formatting. In addition, the custom formatter ignores +the width and precision arguments (however they will still work on the format +specifiers not handled by the custom formatter). + +Typically this function shouldn't be called directly. It is much easier to make +use of the custom formatter by calling one of the convenience functions such as +Printf, Println, or Fprintf. +*/ +func NewFormatter(v interface{}) fmt.Formatter { + return newFormatter(&Config, v) +} diff --git a/vendor/github.com/davecgh/go-spew/spew/spew.go b/vendor/github.com/davecgh/go-spew/spew/spew.go new file mode 100644 index 0000000..32c0e33 --- /dev/null +++ b/vendor/github.com/davecgh/go-spew/spew/spew.go @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2013-2016 Dave Collins + * + * Permission to use, copy, modify, and 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. + */ + +package spew + +import ( + "fmt" + "io" +) + +// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the formatted string as a value that satisfies error. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Errorf(format, spew.NewFormatter(a), spew.NewFormatter(b)) +func Errorf(format string, a ...interface{}) (err error) { + return fmt.Errorf(format, convertArgs(a)...) +} + +// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprint(w, spew.NewFormatter(a), spew.NewFormatter(b)) +func Fprint(w io.Writer, a ...interface{}) (n int, err error) { + return fmt.Fprint(w, convertArgs(a)...) +} + +// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprintf(w, format, spew.NewFormatter(a), spew.NewFormatter(b)) +func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { + return fmt.Fprintf(w, format, convertArgs(a)...) +} + +// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it +// passed with a default Formatter interface returned by NewFormatter. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprintln(w, spew.NewFormatter(a), spew.NewFormatter(b)) +func Fprintln(w io.Writer, a ...interface{}) (n int, err error) { + return fmt.Fprintln(w, convertArgs(a)...) +} + +// Print is a wrapper for fmt.Print that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Print(spew.NewFormatter(a), spew.NewFormatter(b)) +func Print(a ...interface{}) (n int, err error) { + return fmt.Print(convertArgs(a)...) +} + +// Printf is a wrapper for fmt.Printf that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Printf(format, spew.NewFormatter(a), spew.NewFormatter(b)) +func Printf(format string, a ...interface{}) (n int, err error) { + return fmt.Printf(format, convertArgs(a)...) +} + +// Println is a wrapper for fmt.Println that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Println(spew.NewFormatter(a), spew.NewFormatter(b)) +func Println(a ...interface{}) (n int, err error) { + return fmt.Println(convertArgs(a)...) +} + +// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprint(spew.NewFormatter(a), spew.NewFormatter(b)) +func Sprint(a ...interface{}) string { + return fmt.Sprint(convertArgs(a)...) +} + +// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprintf(format, spew.NewFormatter(a), spew.NewFormatter(b)) +func Sprintf(format string, a ...interface{}) string { + return fmt.Sprintf(format, convertArgs(a)...) +} + +// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it +// were passed with a default Formatter interface returned by NewFormatter. It +// returns the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprintln(spew.NewFormatter(a), spew.NewFormatter(b)) +func Sprintln(a ...interface{}) string { + return fmt.Sprintln(convertArgs(a)...) +} + +// convertArgs accepts a slice of arguments and returns a slice of the same +// length with each argument converted to a default spew Formatter interface. +func convertArgs(args []interface{}) (formatters []interface{}) { + formatters = make([]interface{}, len(args)) + for index, arg := range args { + formatters[index] = NewFormatter(arg) + } + return formatters +} diff --git a/vendor/github.com/esimov/dithergo/README.md b/vendor/github.com/esimov/dithergo/README.md index 5e44c45..2120d27 100644 --- a/vendor/github.com/esimov/dithergo/README.md +++ b/vendor/github.com/esimov/dithergo/README.md @@ -12,7 +12,7 @@ We can represent this with the following diagram: (1/48) -where `X` represent the current pixel processed. The fraction at the bottom represents the divisor for the error. Above is the the `Floyd-Steinberg` dithering algorithm, which is transposed in Go like this: +where `X` represent the current pixel processed. The fraction at the bottom represents the divisor for the error. Above is the the `Floyd-Steinberg` dithering algorithm transposable into the following Go code: ```go ditherers = []dither.Dither{ diff --git a/vendor/github.com/felixge/fgprof/LICENSE.txt b/vendor/github.com/felixge/fgprof/LICENSE.txt new file mode 100644 index 0000000..3e42491 --- /dev/null +++ b/vendor/github.com/felixge/fgprof/LICENSE.txt @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright © 2020 Felix Geisendörfer + +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/vendor/github.com/felixge/fgprof/README.md b/vendor/github.com/felixge/fgprof/README.md new file mode 100644 index 0000000..fe0c0a2 --- /dev/null +++ b/vendor/github.com/felixge/fgprof/README.md @@ -0,0 +1,214 @@ +[![go.dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go)](https://pkg.go.dev/github.com/felixge/fgprof) +![GitHub Workflow Status](https://img.shields.io/github/workflow/status/felixge/fgprof/Go) +![GitHub](https://img.shields.io/github/license/felixge/fgprof) + +# :rocket: fgprof - The Full Go Profiler + +fgprof is a sampling [Go](https://golang.org/) profiler that allows you to analyze On-CPU as well as [Off-CPU](http://www.brendangregg.com/offcpuanalysis.html) (e.g. I/O) time together. + +Go's builtin sampling CPU profiler can only show On-CPU time, but it's better than fgprof at that. Go also includes tracing profilers that can analyze I/O, but they can't be combined with the CPU profiler. + +fgprof is designed for analyzing applications with mixed I/O and CPU workloads. + +## Quick Start + +If this is the first time you hear about fgprof, you should start by reading +about [The Problem](#the-problem) & [How it Works](#how-it-works). + +There is no need to choose between fgprof and the builtin profiler. Here is how to add both to your application: + +```go +package main + +import( + _ "net/http/pprof" + "github.com/felixge/fgprof" +) + +func main() { + http.DefaultServeMux.Handle("/debug/fgprof", fgprof.Handler()) + go func() { + log.Println(http.ListenAndServe(":6060", nil)) + }() + + // +} +``` + +fgprof is compatible with the `go tool pprof` visualizer, so taking and analyzing a 3s profile is as simple as: + +``` +go tool pprof --http=:6061 http://localhost:6060/debug/fgprof?seconds=3 +``` + +![](./assets/fgprof_pprof.png) + +Additionally fgprof supports the plain text format used by Brendan Gregg's [FlameGraph](http://www.brendangregg.com/flamegraphs.html) utility: + +``` +git clone https://github.com/brendangregg/FlameGraph +cd FlameGraph +curl -s 'localhost:6060/debug/fgprof?seconds=3&format=folded' > fgprof.folded +./flamegraph.pl fgprof.folded > fgprof.svg +``` + +![](./assets/fgprof_gregg.png) + +Which tool you prefer is up to you, but one thing I like about Gregg's tool is that you can filter the plaintext files using grep which can be very useful when analyzing large programs. + +If you don't have a program to profile right now, you can `go run ./example` which should allow you to reproduce the graphs you see above. If you've never seen such graphs before, and are unsure how to read them, head over to Brendan Gregg's [Flame Graph](http://www.brendangregg.com/flamegraphs.html) page. + +## The Problem + +Let's say you've been tasked to optimize a simple program that has a loop calling out to three functions: + +```go +func main() { + for { + // Http request to a web service that might be slow. + slowNetworkRequest() + // Some heavy CPU computation. + cpuIntensiveTask() + // Poorly named function that you don't understand yet. + weirdFunction() + } +} +``` + +One way to decide which of these three functions you should focus your attention on would be to wrap each function call like this: + +```go +start := time.Start() +slowNetworkRequest() +fmt.Printf("slowNetworkRequest: %s\n", time.Since(start)) +// ... +``` + +However, this can be very tedious for large programs. You'll also have to figure out how to average the numbers in case they fluctuate. And once you've done that, you'll have to repeat the process for the functions called by the function you decide to focus on. + +### /debug/pprof/profile + +So, this seems like a perfect use case for a profiler. Let's try the `/debug/pprof/profile` endpoint of the builtin `net/http/pprof` pkg to analyze our program for 10s: + +```go +import _ "net/http/pprof" + +func main() { + go func() { + log.Println(http.ListenAndServe(":6060", nil)) + }() + + // +} +``` + +``` +go tool pprof -http=:6061 http://localhost:6060/debug/pprof/profile?seconds=10 +``` + +That was easy! Looks like we're spending all our time in `cpuIntensiveTask()`, so let's focus on that? + +![](./assets/pprof_cpu.png) + +But before we get carried away, let's quickly double check this assumption by manually timing our function calls with `time.Since()` as described above: + +``` +slowNetworkRequest: 66.815041ms +cpuIntensiveTask: 30.000672ms +weirdFunction: 10.64764ms +slowNetworkRequest: 67.194516ms +cpuIntensiveTask: 30.000912ms +weirdFunction: 10.105371ms +// ... +``` + +Oh no, the builtin CPU profiler is misleading us! How is that possible? Well, it turns out the builtin profiler only shows On-CPU time. Time spent waiting on I/O is completely hidden from us. + +### /debug/pprof/trace + +Let's try something else. The `/debug/pprof/trace` endpoint includes a "synchronization blocking profile", maybe that's what we need? + +``` +curl -so pprof.trace http://localhost:6060/debug/pprof/trace?seconds=10 +go tool trace --pprof=sync pprof.trace > sync.pprof +go tool pprof --http=:6061 sync.pprof +``` + +Oh no, we're being mislead again. This profiler thinks all our time is spent on `slowNetworkRequest()`. It's completely missing `cpuIntensiveTask()`. And what about `weirdFunction()`? It seems like no builtin profiler can see it? + +![](./assets/pprof_trace.png) + +### /debug/fgprof + +So what can we do? Let's try fgprof, which is designed to analyze mixed I/O and CPU workloads like the one we're dealing with here. We can easily add it alongside the builtin profilers. + +```go +import( + _ "net/http/pprof" + "github.com/felixge/fgprof" +) + +func main() { + http.DefaultServeMux.Handle("/debug/fgprof", fgprof.Handler()) + go func() { + log.Println(http.ListenAndServe(":6060", nil)) + }() + + // +} +``` + + + +``` +go tool pprof --http=:6061 http://localhost:6060/debug/fgprof?seconds=10 +``` + +Finally, a profile that shows all three of our functions and how much time we're spending on them. It also turns out our `weirdFunction()` was simply calling `time.Sleep()`, how weird indeed! + +![](./assets/fgprof_pprof.png) + +## How it Works + +### fgprof + +fgprof is implemented as a background goroutine that wakes up 99 times per second and calls `runtime.GoroutineProfile`. This returns a list of all goroutines regardless of their current On/Off CPU scheduling status and their call stacks. + +This data is used to maintain an in-memory stack counter which can be converted to the pprof or folded output format. The meat of the implementation is super simple and < 100 lines of code, you should [check it out](./fgprof.go). + +Generally speaking, fgprof should not have a big impact on the performance of your program. However `runtime.GoroutineProfile` calls `stopTheWorld()` and could be slow if you have a lot of goroutines. For now the advise is to test the impact of the profiler on a development environment before running it against production instances. In the future this README will try to provide a more detailed analysis of the performance impact. + +### Go's builtin CPU Profiler + +The builtin Go CPU profiler uses the [setitimer(2)](https://linux.die.net/man/2/setitimer) system call to ask the operating system to be sent a `SIGPROF` signal 100 times a second. Each signal stops the Go process and gets delivered to a random thread's `sigtrampgo()` function. This function then proceeds to call `sigprof()` or `sigprofNonGo()` to record the thread's current stack. + +Since Go uses non-blocking I/O, Goroutines that wait on I/O are parked and not running on any threads. Therefore they end up being largely invisible to Go's builtin CPU profiler. + +## The Future of Go Profiling + +There is a great proposal for [hardware performance counters for CPU profiling](https://go.googlesource.com/proposal/+/refs/changes/08/219508/2/design/36821-perf-counter-pprof.md#5-empirical-evidence-on-the-accuracy-and-precision-of-pmu-profiles) in Go. The proposal is aimed at making the builtin CPU Profiler even more accurate, especially under highly parallel workloads on many CPUs. It also includes a very in-depth analysis of the current profiler. Based on the design, I think the proposed profiler would also be blind to I/O workloads, but still seems appealing for CPU based workloads. + +As far as fgprof itself is concerned, I might implement streaming output, leaving the final aggregation to other tools. This would open the door to even more advanced analysis, perhaps by integrating with tools such as [flamescope](https://github.com/Netflix/flamescope). + +Additionally I'm also open to the idea of contributing fgprof to the Go project itself. I've [floated the idea](https://groups.google.com/g/golang-dev/c/LCJyvL90xv8) on the golang-dev mailing list, so let's see what happens. + + +## Known Issues + +There is no perfect approach to profiling, and fgprof is no exception. Below is a list of known issues that will hopefully not be of practical concern for most users, but are important to highlight. + +- fgprof can't catch goroutines while they are running in loops without function calls, only when they get asynchronously preempted. This can lead to reporting inaccuracies. Use the builtin CPU profiler if this is a problem for you. +- fgprof may not work in Go 1.13 if another goroutine is in a loop without function calls the whole time. Async preemption in Go 1.14 should mostly fix this issue. +- Internal C functions are not showing up in the stack traces, e.g. `runtime.nanotime` which is called by `time.Since` in the example program. +- The current implementation is relying on the Go scheduler to schedule the internal goroutine at a fixed sample rate. Scheduler delays, especially biased ones, might cause inaccuracies. + +## Credits + +The following articles helped me to learn more about how profilers in general, and the Go profiler in particular work. + +- [How do Ruby & Python profilers work?](https://jvns.ca/blog/2017/12/17/how-do-ruby---python-profilers-work-/) by Julia Evans +- [Profiling Go programs with pprof](https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/) by Julia Evans + +## License + +fgprof is licensed under the MIT License. diff --git a/vendor/github.com/felixge/fgprof/fgprof.go b/vendor/github.com/felixge/fgprof/fgprof.go new file mode 100644 index 0000000..dba1616 --- /dev/null +++ b/vendor/github.com/felixge/fgprof/fgprof.go @@ -0,0 +1,97 @@ +// fgprof is a sampling Go profiler that allows you to analyze On-CPU as well +// as [Off-CPU](http://www.brendangregg.com/offcpuanalysis.html) (e.g. I/O) +// time together. +package fgprof + +import ( + "io" + "runtime" + "strings" + "time" +) + +// Start begins profiling the goroutines of the program and returns a function +// that needs to be invoked by the caller to stop the profiling and write the +// results to w using the given format. +func Start(w io.Writer, format Format) func() error { + // Go's CPU profiler uses 100hz, but 99hz might be less likely to result in + // accidental synchronization with the program we're profiling. + const hz = 99 + ticker := time.NewTicker(time.Second / hz) + stopCh := make(chan struct{}) + + stackCounts := stackCounter{} + go func() { + defer ticker.Stop() + + for { + select { + case <-ticker.C: + stackCounts.Update() + case <-stopCh: + return + } + } + }() + + return func() error { + stopCh <- struct{}{} + return writeFormat(w, stackCounts, format, hz) + } +} + +type stackCounter map[string]int + +func (s stackCounter) Update() { + // Determine the runtime.Frame of this func so we can hide it from our + // profiling output. + rpc := make([]uintptr, 1) + n := runtime.Callers(1, rpc) + if n < 1 { + panic("could not determine selfFrame") + } + selfFrame, _ := runtime.CallersFrames(rpc).Next() + + // COPYRIGHT: The code for populating `p` below is copied from + // writeRuntimeProfile in src/runtime/pprof/pprof.go. + // + // Find out how many records there are (GoroutineProfile(nil)), + // allocate that many records, and get the data. + // There's a race—more records might be added between + // the two calls—so allocate a few extra records for safety + // and also try again if we're very unlucky. + // The loop should only execute one iteration in the common case. + var p []runtime.StackRecord + n, ok := runtime.GoroutineProfile(nil) + for { + // Allocate room for a slightly bigger profile, + // in case a few more entries have been added + // since the call to ThreadProfile. + p = make([]runtime.StackRecord, n+10) + n, ok = runtime.GoroutineProfile(p) + if ok { + p = p[0:n] + break + } + // Profile grew; try again. + } + +outer: + for _, pp := range p { + frames := runtime.CallersFrames(pp.Stack()) + + var stack []string + for { + frame, more := frames.Next() + if !more { + break + } else if frame.Entry == selfFrame.Entry { + continue outer + } + + stack = append([]string{frame.Function}, stack...) + } + key := strings.Join(stack, ";") + s[key]++ + } +} diff --git a/vendor/github.com/felixge/fgprof/format.go b/vendor/github.com/felixge/fgprof/format.go new file mode 100644 index 0000000..1a351e3 --- /dev/null +++ b/vendor/github.com/felixge/fgprof/format.go @@ -0,0 +1,102 @@ +package fgprof + +import ( + "fmt" + "io" + "sort" + "strings" + + "github.com/google/pprof/profile" +) + +type Format string + +const ( + // FormatFolded is used by Brendan Gregg's FlameGraph utility, see + // https://github.com/brendangregg/FlameGraph#2-fold-stacks. + FormatFolded Format = "folded" + // FormatPprof is used by Google's pprof utility, see + // https://github.com/google/pprof/blob/master/proto/README.md. + FormatPprof Format = "pprof" +) + +func writeFormat(w io.Writer, s stackCounter, f Format, hz int) error { + switch f { + case FormatFolded: + return writeFolded(w, s) + case FormatPprof: + return toPprof(s, hz).Write(w) + default: + return fmt.Errorf("unknown format: %q", f) + } +} + +func writeFolded(w io.Writer, s stackCounter) error { + for _, stack := range sortedKeys(s) { + count := s[stack] + if _, err := fmt.Fprintf(w, "%s %d\n", stack, count); err != nil { + return err + } + } + return nil +} + +func toPprof(s stackCounter, hz int) *profile.Profile { + functionID := uint64(1) + locationID := uint64(1) + line := int64(1) + + p := &profile.Profile{} + m := &profile.Mapping{ID: 1, HasFunctions: true} + p.Mapping = []*profile.Mapping{m} + p.SampleType = []*profile.ValueType{ + { + Type: "samples", + Unit: "count", + }, + { + Type: "time", + Unit: "nanoseconds", + }, + } + + for stack, count := range s { + sample := &profile.Sample{ + Value: []int64{ + int64(count), + int64(1000 * 1000 * 1000 / hz * count), + }, + } + for _, fnName := range strings.Split(stack, ";") { + function := &profile.Function{ + ID: functionID, + Name: fnName, + } + p.Function = append(p.Function, function) + + location := &profile.Location{ + ID: locationID, + Mapping: m, + Line: []profile.Line{{Function: function}}, + } + p.Location = append(p.Location, location) + sample.Location = append([]*profile.Location{location}, sample.Location...) + + line++ + + locationID++ + functionID++ + } + p.Sample = append(p.Sample, sample) + } + return p +} + +func sortedKeys(s stackCounter) []string { + var keys []string + for stack := range s { + keys = append(keys, stack) + } + sort.Strings(keys) + return keys +} diff --git a/vendor/github.com/felixge/fgprof/go.mod b/vendor/github.com/felixge/fgprof/go.mod new file mode 100644 index 0000000..b2ce6fd --- /dev/null +++ b/vendor/github.com/felixge/fgprof/go.mod @@ -0,0 +1,5 @@ +module github.com/felixge/fgprof + +go 1.14 + +require github.com/google/pprof v0.0.0-20200615235658-03e1cf38a040 diff --git a/vendor/github.com/felixge/fgprof/go.sum b/vendor/github.com/felixge/fgprof/go.sum new file mode 100644 index 0000000..07ac570 --- /dev/null +++ b/vendor/github.com/felixge/fgprof/go.sum @@ -0,0 +1,7 @@ +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +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/google/pprof v0.0.0-20200615235658-03e1cf38a040 h1:i7RUpu0EybzQyQvPT7J3MmODs4+gPcHsD/pqW0uIYVo= +github.com/google/pprof v0.0.0-20200615235658-03e1cf38a040/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/vendor/github.com/felixge/fgprof/handler.go b/vendor/github.com/felixge/fgprof/handler.go new file mode 100644 index 0000000..a25cdc6 --- /dev/null +++ b/vendor/github.com/felixge/fgprof/handler.go @@ -0,0 +1,32 @@ +package fgprof + +import ( + "fmt" + "net/http" + "time" +) + +// Handler returns an http handler that takes an optional "seconds" query +// argument that defaults to "30" and produces a profile over this duration. +// The optional "format" parameter controls if the output is written in +// Google's "pprof" format (default) or Brendan Gregg's "folded" stack format. +func Handler() http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var seconds int + if s := r.URL.Query().Get("seconds"); s == "" { + seconds = 30 + } else if _, err := fmt.Sscanf(s, "%d", &seconds); err != nil || seconds <= 0 { + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(w, "bad seconds: %d: %s\n", seconds, err) + } + + format := Format(r.URL.Query().Get("format")) + if format == "" { + format = FormatPprof + } + + stop := Start(w, format) + defer stop() + time.Sleep(time.Duration(seconds) * time.Second) + }) +} diff --git a/vendor/github.com/felixge/fgprof/pprof.go b/vendor/github.com/felixge/fgprof/pprof.go new file mode 100644 index 0000000..f0908e8 --- /dev/null +++ b/vendor/github.com/felixge/fgprof/pprof.go @@ -0,0 +1,56 @@ +package fgprof + +import ( + "strings" + + "github.com/google/pprof/profile" +) + +func toProfile(s stackCounter, hz int) *profile.Profile { + functionID := uint64(1) + locationID := uint64(1) + + p := &profile.Profile{} + m := &profile.Mapping{ID: 1, HasFunctions: true} + p.Mapping = []*profile.Mapping{m} + p.SampleType = []*profile.ValueType{ + { + Type: "samples", + Unit: "count", + }, + { + Type: "time", + Unit: "nanoseconds", + }, + } + + for _, stack := range sortedKeys(s) { + count := s[stack] + sample := &profile.Sample{ + Value: []int64{ + int64(count), + int64(1000 * 1000 * 1000 / hz * count), + }, + } + for _, fnName := range strings.Split(stack, ";") { + function := &profile.Function{ + ID: functionID, + Name: fnName, + } + p.Function = append(p.Function, function) + + location := &profile.Location{ + ID: locationID, + Mapping: m, + Line: []profile.Line{{Function: function}}, + } + p.Location = append(p.Location, location) + sample.Location = append(sample.Location, location) + + locationID++ + functionID++ + } + p.Sample = append(p.Sample, sample) + } + return p +} diff --git a/vendor/github.com/golang/protobuf/proto/buffer.go b/vendor/github.com/golang/protobuf/proto/buffer.go index 62df7e3..e810e6f 100644 --- a/vendor/github.com/golang/protobuf/proto/buffer.go +++ b/vendor/github.com/golang/protobuf/proto/buffer.go @@ -33,8 +33,8 @@ func SizeVarint(v uint64) int { return protowire.SizeVarint(v) } -// DecodeVarint parses a varint encoded integer from b, returning the -// integer value and the length of the varint. +// DecodeVarint parses a varint encoded integer from b, +// returning the integer value and the length of the varint. // It returns (0, 0) if there is a parse error. func DecodeVarint(b []byte) (uint64, int) { v, n := protowire.ConsumeVarint(b) @@ -112,9 +112,9 @@ func (b *Buffer) Marshal(m Message) error { return err } -// Unmarshal parses the wire-format message in the buffer and places the decoded results in m. -// -// Unlike proto.Unmarshal, this does not reset the message before starting to unmarshal. +// Unmarshal parses the wire-format message in the buffer and +// places the decoded results in m. +// It does not reset m before unmarshaling. func (b *Buffer) Unmarshal(m Message) error { err := UnmarshalMerge(b.Unread(), m) b.idx = len(b.buf) @@ -260,7 +260,7 @@ func (b *Buffer) DecodeStringBytes() (string, error) { } // DecodeMessage consumes a length-prefixed message from the buffer. -// It does not reset m. +// It does not reset m before unmarshaling. func (b *Buffer) DecodeMessage(m Message) error { v, err := b.DecodeRawBytes(false) if err != nil { @@ -272,7 +272,7 @@ func (b *Buffer) DecodeMessage(m Message) error { // DecodeGroup consumes a message group from the buffer. // It assumes that the start group marker has already been consumed and // consumes all bytes until (and including the end group marker). -// It does not reset m. +// It does not reset m before unmarshaling. func (b *Buffer) DecodeGroup(m Message) error { v, n, err := consumeGroup(b.buf[b.idx:]) if err != nil { diff --git a/vendor/github.com/golang/protobuf/proto/deprecated.go b/vendor/github.com/golang/protobuf/proto/deprecated.go index a205482..e8db57e 100644 --- a/vendor/github.com/golang/protobuf/proto/deprecated.go +++ b/vendor/github.com/golang/protobuf/proto/deprecated.go @@ -9,6 +9,8 @@ import ( "errors" "fmt" "strconv" + + protoV2 "google.golang.org/protobuf/proto" ) var ( @@ -82,11 +84,30 @@ func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, return val, nil } -// Deprecated: Do not use. +// Deprecated: Do not use; this type existed for intenal-use only. type InternalMessageInfo struct{} -func (*InternalMessageInfo) DiscardUnknown(Message) { panic("not implemented") } -func (*InternalMessageInfo) Marshal([]byte, Message, bool) ([]byte, error) { panic("not implemented") } -func (*InternalMessageInfo) Merge(Message, Message) { panic("not implemented") } -func (*InternalMessageInfo) Size(Message) int { panic("not implemented") } -func (*InternalMessageInfo) Unmarshal(Message, []byte) error { panic("not implemented") } +// Deprecated: Do not use; this method existed for intenal-use only. +func (*InternalMessageInfo) DiscardUnknown(m Message) { + DiscardUnknown(m) +} + +// Deprecated: Do not use; this method existed for intenal-use only. +func (*InternalMessageInfo) Marshal(b []byte, m Message, deterministic bool) ([]byte, error) { + return protoV2.MarshalOptions{Deterministic: deterministic}.MarshalAppend(b, MessageV2(m)) +} + +// Deprecated: Do not use; this method existed for intenal-use only. +func (*InternalMessageInfo) Merge(dst, src Message) { + protoV2.Merge(MessageV2(dst), MessageV2(src)) +} + +// Deprecated: Do not use; this method existed for intenal-use only. +func (*InternalMessageInfo) Size(m Message) int { + return protoV2.Size(MessageV2(m)) +} + +// Deprecated: Do not use; this method existed for intenal-use only. +func (*InternalMessageInfo) Unmarshal(m Message, b []byte) error { + return protoV2.UnmarshalOptions{Merge: true}.Unmarshal(b, MessageV2(m)) +} diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go index 5ed131c..42fc120 100644 --- a/vendor/github.com/golang/protobuf/proto/extensions.go +++ b/vendor/github.com/golang/protobuf/proto/extensions.go @@ -68,7 +68,7 @@ func HasExtension(m Message, xt *ExtensionDesc) (has bool) { return has } -// ClearExtension removes the the exntesion field from m +// ClearExtension removes the extension field from m // either as an explicitly populated field or as an unknown field. func ClearExtension(m Message, xt *ExtensionDesc) { mr := MessageReflect(m) @@ -108,7 +108,7 @@ func ClearAllExtensions(m Message) { clearUnknown(mr, mr.Descriptor().ExtensionRanges()) } -// GetExtension retrieves a proto2 extended field from pb. +// GetExtension retrieves a proto2 extended field from m. // // If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil), // then GetExtension parses the encoded field and returns a Go value of the specified type. diff --git a/vendor/github.com/golang/protobuf/proto/registry.go b/vendor/github.com/golang/protobuf/proto/registry.go index abab110..1e7ff64 100644 --- a/vendor/github.com/golang/protobuf/proto/registry.go +++ b/vendor/github.com/golang/protobuf/proto/registry.go @@ -29,7 +29,7 @@ var fileCache sync.Map // map[filePath]fileDescGZIP // RegisterFile is called from generated code to register the compressed // FileDescriptorProto with the file path for a proto source file. // -// Deprecated: Use protoregistry.GlobalFiles.Register instead. +// Deprecated: Use protoregistry.GlobalFiles.RegisterFile instead. func RegisterFile(s filePath, d fileDescGZIP) { // Decompress the descriptor. zr, err := gzip.NewReader(bytes.NewReader(d)) @@ -53,7 +53,7 @@ func RegisterFile(s filePath, d fileDescGZIP) { // FileDescriptor returns the compressed FileDescriptorProto given the file path // for a proto source file. It returns nil if not found. // -// Deprecated: Use protoregistry.GlobalFiles.RangeFilesByPath instead. +// Deprecated: Use protoregistry.GlobalFiles.FindFileByPath instead. func FileDescriptor(s filePath) fileDescGZIP { if v, ok := fileCache.Load(s); ok { return v.(fileDescGZIP) @@ -98,7 +98,7 @@ var numFilesCache sync.Map // map[protoreflect.FullName]int // RegisterEnum is called from the generated code to register the mapping of // enum value names to enum numbers for the enum identified by s. // -// Deprecated: Use protoregistry.GlobalTypes.Register instead. +// Deprecated: Use protoregistry.GlobalTypes.RegisterEnum instead. func RegisterEnum(s enumName, _ enumsByNumber, m enumsByName) { if _, ok := enumCache.Load(s); ok { panic("proto: duplicate enum registered: " + s) @@ -181,7 +181,7 @@ var messageTypeCache sync.Map // map[messageName]reflect.Type // RegisterType is called from generated code to register the message Go type // for a message of the given name. // -// Deprecated: Use protoregistry.GlobalTypes.Register instead. +// Deprecated: Use protoregistry.GlobalTypes.RegisterMessage instead. func RegisterType(m Message, s messageName) { mt := protoimpl.X.LegacyMessageTypeOf(m, protoreflect.FullName(s)) if err := protoregistry.GlobalTypes.RegisterMessage(mt); err != nil { @@ -280,7 +280,7 @@ func MessageName(m Message) messageName { // RegisterExtension is called from the generated code to register // the extension descriptor. // -// Deprecated: Use protoregistry.GlobalTypes.Register instead. +// Deprecated: Use protoregistry.GlobalTypes.RegisterExtension instead. func RegisterExtension(d *ExtensionDesc) { if err := protoregistry.GlobalTypes.RegisterExtension(d); err != nil { panic(err) diff --git a/vendor/github.com/golang/protobuf/proto/text_decode.go b/vendor/github.com/golang/protobuf/proto/text_decode.go index 4a59310..47eb3e4 100644 --- a/vendor/github.com/golang/protobuf/proto/text_decode.go +++ b/vendor/github.com/golang/protobuf/proto/text_decode.go @@ -765,7 +765,7 @@ func unescape(s string) (ch string, tail string, err error) { if i > utf8.MaxRune { return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) } - return string(i), s, nil + return string(rune(i)), s, nil } return "", "", fmt.Errorf(`unknown escape \%c`, r) } diff --git a/vendor/github.com/golang/protobuf/proto/text_encode.go b/vendor/github.com/golang/protobuf/proto/text_encode.go index 7ac02e6..a31134e 100644 --- a/vendor/github.com/golang/protobuf/proto/text_encode.go +++ b/vendor/github.com/golang/protobuf/proto/text_encode.go @@ -94,16 +94,16 @@ var ( ) // MarshalText writes the proto text format of m to w. -func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } +func MarshalText(w io.Writer, m Message) error { return defaultTextMarshaler.Marshal(w, m) } // MarshalTextString returns a proto text formatted string of m. -func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } +func MarshalTextString(m Message) string { return defaultTextMarshaler.Text(m) } // CompactText writes the compact proto text format of m to w. -func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } +func CompactText(w io.Writer, m Message) error { return compactTextMarshaler.Marshal(w, m) } // CompactTextString returns a compact proto text formatted string of m. -func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } +func CompactTextString(m Message) string { return compactTextMarshaler.Text(m) } var ( newline = []byte("\n") diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go deleted file mode 100644 index 63dc057..0000000 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go +++ /dev/null @@ -1,200 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto - -package descriptor - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - reflect "reflect" -) - -// Symbols defined in public import of google/protobuf/descriptor.proto. - -type FieldDescriptorProto_Type = descriptorpb.FieldDescriptorProto_Type - -const FieldDescriptorProto_TYPE_DOUBLE = descriptorpb.FieldDescriptorProto_TYPE_DOUBLE -const FieldDescriptorProto_TYPE_FLOAT = descriptorpb.FieldDescriptorProto_TYPE_FLOAT -const FieldDescriptorProto_TYPE_INT64 = descriptorpb.FieldDescriptorProto_TYPE_INT64 -const FieldDescriptorProto_TYPE_UINT64 = descriptorpb.FieldDescriptorProto_TYPE_UINT64 -const FieldDescriptorProto_TYPE_INT32 = descriptorpb.FieldDescriptorProto_TYPE_INT32 -const FieldDescriptorProto_TYPE_FIXED64 = descriptorpb.FieldDescriptorProto_TYPE_FIXED64 -const FieldDescriptorProto_TYPE_FIXED32 = descriptorpb.FieldDescriptorProto_TYPE_FIXED32 -const FieldDescriptorProto_TYPE_BOOL = descriptorpb.FieldDescriptorProto_TYPE_BOOL -const FieldDescriptorProto_TYPE_STRING = descriptorpb.FieldDescriptorProto_TYPE_STRING -const FieldDescriptorProto_TYPE_GROUP = descriptorpb.FieldDescriptorProto_TYPE_GROUP -const FieldDescriptorProto_TYPE_MESSAGE = descriptorpb.FieldDescriptorProto_TYPE_MESSAGE -const FieldDescriptorProto_TYPE_BYTES = descriptorpb.FieldDescriptorProto_TYPE_BYTES -const FieldDescriptorProto_TYPE_UINT32 = descriptorpb.FieldDescriptorProto_TYPE_UINT32 -const FieldDescriptorProto_TYPE_ENUM = descriptorpb.FieldDescriptorProto_TYPE_ENUM -const FieldDescriptorProto_TYPE_SFIXED32 = descriptorpb.FieldDescriptorProto_TYPE_SFIXED32 -const FieldDescriptorProto_TYPE_SFIXED64 = descriptorpb.FieldDescriptorProto_TYPE_SFIXED64 -const FieldDescriptorProto_TYPE_SINT32 = descriptorpb.FieldDescriptorProto_TYPE_SINT32 -const FieldDescriptorProto_TYPE_SINT64 = descriptorpb.FieldDescriptorProto_TYPE_SINT64 - -var FieldDescriptorProto_Type_name = descriptorpb.FieldDescriptorProto_Type_name -var FieldDescriptorProto_Type_value = descriptorpb.FieldDescriptorProto_Type_value - -type FieldDescriptorProto_Label = descriptorpb.FieldDescriptorProto_Label - -const FieldDescriptorProto_LABEL_OPTIONAL = descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL -const FieldDescriptorProto_LABEL_REQUIRED = descriptorpb.FieldDescriptorProto_LABEL_REQUIRED -const FieldDescriptorProto_LABEL_REPEATED = descriptorpb.FieldDescriptorProto_LABEL_REPEATED - -var FieldDescriptorProto_Label_name = descriptorpb.FieldDescriptorProto_Label_name -var FieldDescriptorProto_Label_value = descriptorpb.FieldDescriptorProto_Label_value - -type FileOptions_OptimizeMode = descriptorpb.FileOptions_OptimizeMode - -const FileOptions_SPEED = descriptorpb.FileOptions_SPEED -const FileOptions_CODE_SIZE = descriptorpb.FileOptions_CODE_SIZE -const FileOptions_LITE_RUNTIME = descriptorpb.FileOptions_LITE_RUNTIME - -var FileOptions_OptimizeMode_name = descriptorpb.FileOptions_OptimizeMode_name -var FileOptions_OptimizeMode_value = descriptorpb.FileOptions_OptimizeMode_value - -type FieldOptions_CType = descriptorpb.FieldOptions_CType - -const FieldOptions_STRING = descriptorpb.FieldOptions_STRING -const FieldOptions_CORD = descriptorpb.FieldOptions_CORD -const FieldOptions_STRING_PIECE = descriptorpb.FieldOptions_STRING_PIECE - -var FieldOptions_CType_name = descriptorpb.FieldOptions_CType_name -var FieldOptions_CType_value = descriptorpb.FieldOptions_CType_value - -type FieldOptions_JSType = descriptorpb.FieldOptions_JSType - -const FieldOptions_JS_NORMAL = descriptorpb.FieldOptions_JS_NORMAL -const FieldOptions_JS_STRING = descriptorpb.FieldOptions_JS_STRING -const FieldOptions_JS_NUMBER = descriptorpb.FieldOptions_JS_NUMBER - -var FieldOptions_JSType_name = descriptorpb.FieldOptions_JSType_name -var FieldOptions_JSType_value = descriptorpb.FieldOptions_JSType_value - -type MethodOptions_IdempotencyLevel = descriptorpb.MethodOptions_IdempotencyLevel - -const MethodOptions_IDEMPOTENCY_UNKNOWN = descriptorpb.MethodOptions_IDEMPOTENCY_UNKNOWN -const MethodOptions_NO_SIDE_EFFECTS = descriptorpb.MethodOptions_NO_SIDE_EFFECTS -const MethodOptions_IDEMPOTENT = descriptorpb.MethodOptions_IDEMPOTENT - -var MethodOptions_IdempotencyLevel_name = descriptorpb.MethodOptions_IdempotencyLevel_name -var MethodOptions_IdempotencyLevel_value = descriptorpb.MethodOptions_IdempotencyLevel_value - -type FileDescriptorSet = descriptorpb.FileDescriptorSet -type FileDescriptorProto = descriptorpb.FileDescriptorProto -type DescriptorProto = descriptorpb.DescriptorProto -type ExtensionRangeOptions = descriptorpb.ExtensionRangeOptions -type FieldDescriptorProto = descriptorpb.FieldDescriptorProto -type OneofDescriptorProto = descriptorpb.OneofDescriptorProto -type EnumDescriptorProto = descriptorpb.EnumDescriptorProto -type EnumValueDescriptorProto = descriptorpb.EnumValueDescriptorProto -type ServiceDescriptorProto = descriptorpb.ServiceDescriptorProto -type MethodDescriptorProto = descriptorpb.MethodDescriptorProto - -const Default_MethodDescriptorProto_ClientStreaming = descriptorpb.Default_MethodDescriptorProto_ClientStreaming -const Default_MethodDescriptorProto_ServerStreaming = descriptorpb.Default_MethodDescriptorProto_ServerStreaming - -type FileOptions = descriptorpb.FileOptions - -const Default_FileOptions_JavaMultipleFiles = descriptorpb.Default_FileOptions_JavaMultipleFiles -const Default_FileOptions_JavaStringCheckUtf8 = descriptorpb.Default_FileOptions_JavaStringCheckUtf8 -const Default_FileOptions_OptimizeFor = descriptorpb.Default_FileOptions_OptimizeFor -const Default_FileOptions_CcGenericServices = descriptorpb.Default_FileOptions_CcGenericServices -const Default_FileOptions_JavaGenericServices = descriptorpb.Default_FileOptions_JavaGenericServices -const Default_FileOptions_PyGenericServices = descriptorpb.Default_FileOptions_PyGenericServices -const Default_FileOptions_PhpGenericServices = descriptorpb.Default_FileOptions_PhpGenericServices -const Default_FileOptions_Deprecated = descriptorpb.Default_FileOptions_Deprecated -const Default_FileOptions_CcEnableArenas = descriptorpb.Default_FileOptions_CcEnableArenas - -type MessageOptions = descriptorpb.MessageOptions - -const Default_MessageOptions_MessageSetWireFormat = descriptorpb.Default_MessageOptions_MessageSetWireFormat -const Default_MessageOptions_NoStandardDescriptorAccessor = descriptorpb.Default_MessageOptions_NoStandardDescriptorAccessor -const Default_MessageOptions_Deprecated = descriptorpb.Default_MessageOptions_Deprecated - -type FieldOptions = descriptorpb.FieldOptions - -const Default_FieldOptions_Ctype = descriptorpb.Default_FieldOptions_Ctype -const Default_FieldOptions_Jstype = descriptorpb.Default_FieldOptions_Jstype -const Default_FieldOptions_Lazy = descriptorpb.Default_FieldOptions_Lazy -const Default_FieldOptions_Deprecated = descriptorpb.Default_FieldOptions_Deprecated -const Default_FieldOptions_Weak = descriptorpb.Default_FieldOptions_Weak - -type OneofOptions = descriptorpb.OneofOptions -type EnumOptions = descriptorpb.EnumOptions - -const Default_EnumOptions_Deprecated = descriptorpb.Default_EnumOptions_Deprecated - -type EnumValueOptions = descriptorpb.EnumValueOptions - -const Default_EnumValueOptions_Deprecated = descriptorpb.Default_EnumValueOptions_Deprecated - -type ServiceOptions = descriptorpb.ServiceOptions - -const Default_ServiceOptions_Deprecated = descriptorpb.Default_ServiceOptions_Deprecated - -type MethodOptions = descriptorpb.MethodOptions - -const Default_MethodOptions_Deprecated = descriptorpb.Default_MethodOptions_Deprecated -const Default_MethodOptions_IdempotencyLevel = descriptorpb.Default_MethodOptions_IdempotencyLevel - -type UninterpretedOption = descriptorpb.UninterpretedOption -type SourceCodeInfo = descriptorpb.SourceCodeInfo -type GeneratedCodeInfo = descriptorpb.GeneratedCodeInfo -type DescriptorProto_ExtensionRange = descriptorpb.DescriptorProto_ExtensionRange -type DescriptorProto_ReservedRange = descriptorpb.DescriptorProto_ReservedRange -type EnumDescriptorProto_EnumReservedRange = descriptorpb.EnumDescriptorProto_EnumReservedRange -type UninterpretedOption_NamePart = descriptorpb.UninterpretedOption_NamePart -type SourceCodeInfo_Location = descriptorpb.SourceCodeInfo_Location -type GeneratedCodeInfo_Annotation = descriptorpb.GeneratedCodeInfo_Annotation - -var File_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto protoreflect.FileDescriptor - -var file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_rawDesc = []byte{ - 0x0a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, - 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, - 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x3b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x00, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x32, -} - -var file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_goTypes = []interface{}{} -var file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_init() } -func file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_init() { - if File_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_goTypes, - DependencyIndexes: file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_depIdxs, - }.Build() - File_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto = out.File - file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_rawDesc = nil - file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_goTypes = nil - file_github_com_golang_protobuf_protoc_gen_go_descriptor_descriptor_proto_depIdxs = nil -} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/main.go b/vendor/github.com/golang/protobuf/protoc-gen-go/main.go index 7515a18..d45b719 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/main.go +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/main.go @@ -68,6 +68,7 @@ func main() { gengogrpc.GenerateFileContent(gen, f, g) } } + gen.SupportedFeatures = gengo.SupportedFeatures return nil }) } diff --git a/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go b/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go deleted file mode 100644 index 16686a6..0000000 --- a/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go +++ /dev/null @@ -1,62 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: github.com/golang/protobuf/ptypes/empty/empty.proto - -package empty - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - reflect "reflect" -) - -// Symbols defined in public import of google/protobuf/empty.proto. - -type Empty = emptypb.Empty - -var File_github_com_golang_protobuf_ptypes_empty_empty_proto protoreflect.FileDescriptor - -var file_github_com_golang_protobuf_ptypes_empty_empty_proto_rawDesc = []byte{ - 0x0a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, - 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x3b, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x50, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_github_com_golang_protobuf_ptypes_empty_empty_proto_goTypes = []interface{}{} -var file_github_com_golang_protobuf_ptypes_empty_empty_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_github_com_golang_protobuf_ptypes_empty_empty_proto_init() } -func file_github_com_golang_protobuf_ptypes_empty_empty_proto_init() { - if File_github_com_golang_protobuf_ptypes_empty_empty_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_golang_protobuf_ptypes_empty_empty_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_github_com_golang_protobuf_ptypes_empty_empty_proto_goTypes, - DependencyIndexes: file_github_com_golang_protobuf_ptypes_empty_empty_proto_depIdxs, - }.Build() - File_github_com_golang_protobuf_ptypes_empty_empty_proto = out.File - file_github_com_golang_protobuf_ptypes_empty_empty_proto_rawDesc = nil - file_github_com_golang_protobuf_ptypes_empty_empty_proto_goTypes = nil - file_github_com_golang_protobuf_ptypes_empty_empty_proto_depIdxs = nil -} diff --git a/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go b/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go deleted file mode 100644 index 8d82abe..0000000 --- a/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go +++ /dev/null @@ -1,78 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: github.com/golang/protobuf/ptypes/struct/struct.proto - -package structpb - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - structpb "google.golang.org/protobuf/types/known/structpb" - reflect "reflect" -) - -// Symbols defined in public import of google/protobuf/struct.proto. - -type NullValue = structpb.NullValue - -const NullValue_NULL_VALUE = structpb.NullValue_NULL_VALUE - -var NullValue_name = structpb.NullValue_name -var NullValue_value = structpb.NullValue_value - -type Struct = structpb.Struct -type Value = structpb.Value -type Value_NullValue = structpb.Value_NullValue -type Value_NumberValue = structpb.Value_NumberValue -type Value_StringValue = structpb.Value_StringValue -type Value_BoolValue = structpb.Value_BoolValue -type Value_StructValue = structpb.Value_StructValue -type Value_ListValue = structpb.Value_ListValue -type ListValue = structpb.ListValue - -var File_github_com_golang_protobuf_ptypes_struct_struct_proto protoreflect.FileDescriptor - -var file_github_com_golang_protobuf_ptypes_struct_struct_proto_rawDesc = []byte{ - 0x0a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, - 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x3b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x70, 0x62, 0x50, 0x00, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} - -var file_github_com_golang_protobuf_ptypes_struct_struct_proto_goTypes = []interface{}{} -var file_github_com_golang_protobuf_ptypes_struct_struct_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_github_com_golang_protobuf_ptypes_struct_struct_proto_init() } -func file_github_com_golang_protobuf_ptypes_struct_struct_proto_init() { - if File_github_com_golang_protobuf_ptypes_struct_struct_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_golang_protobuf_ptypes_struct_struct_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_github_com_golang_protobuf_ptypes_struct_struct_proto_goTypes, - DependencyIndexes: file_github_com_golang_protobuf_ptypes_struct_struct_proto_depIdxs, - }.Build() - File_github_com_golang_protobuf_ptypes_struct_struct_proto = out.File - file_github_com_golang_protobuf_ptypes_struct_struct_proto_rawDesc = nil - file_github_com_golang_protobuf_ptypes_struct_struct_proto_goTypes = nil - file_github_com_golang_protobuf_ptypes_struct_struct_proto_depIdxs = nil -} diff --git a/vendor/github.com/google/go-cmp/cmp/compare.go b/vendor/github.com/google/go-cmp/cmp/compare.go index c9a63ce..86d0903 100644 --- a/vendor/github.com/google/go-cmp/cmp/compare.go +++ b/vendor/github.com/google/go-cmp/cmp/compare.go @@ -1,11 +1,15 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // Package cmp determines equality of values. // // This package is intended to be a more powerful and safer alternative to // reflect.DeepEqual for comparing whether two values are semantically equal. +// It is intended to only be used in tests, as performance is not a goal and +// it may panic if it cannot compare the values. Its propensity towards +// panicking means that its unsuitable for production environments where a +// spurious panic may be fatal. // // The primary features of cmp are: // @@ -86,6 +90,52 @@ import ( // If there is a cycle, then the pointed at values are considered equal // only if both addresses were previously visited in the same path step. func Equal(x, y interface{}, opts ...Option) bool { + s := newState(opts) + s.compareAny(rootStep(x, y)) + return s.result.Equal() +} + +// Diff returns a human-readable report of the differences between two values: +// y - x. It returns an empty string if and only if Equal returns true for the +// same input values and options. +// +// The output is displayed as a literal in pseudo-Go syntax. +// At the start of each line, a "-" prefix indicates an element removed from x, +// a "+" prefix to indicates an element added from y, and the lack of a prefix +// indicates an element common to both x and y. If possible, the output +// uses fmt.Stringer.String or error.Error methods to produce more humanly +// readable outputs. In such cases, the string is prefixed with either an +// 's' or 'e' character, respectively, to indicate that the method was called. +// +// Do not depend on this output being stable. If you need the ability to +// programmatically interpret the difference, consider using a custom Reporter. +func Diff(x, y interface{}, opts ...Option) string { + s := newState(opts) + + // Optimization: If there are no other reporters, we can optimize for the + // common case where the result is equal (and thus no reported difference). + // This avoids the expensive construction of a difference tree. + if len(s.reporters) == 0 { + s.compareAny(rootStep(x, y)) + if s.result.Equal() { + return "" + } + s.result = diff.Result{} // Reset results + } + + r := new(defaultReporter) + s.reporters = append(s.reporters, reporter{r}) + s.compareAny(rootStep(x, y)) + d := r.String() + if (d == "") != s.result.Equal() { + panic("inconsistent difference and equality results") + } + return d +} + +// rootStep constructs the first path step. If x and y have differing types, +// then they are stored within an empty interface type. +func rootStep(x, y interface{}) PathStep { vx := reflect.ValueOf(x) vy := reflect.ValueOf(y) @@ -108,33 +158,7 @@ func Equal(x, y interface{}, opts ...Option) bool { t = vx.Type() } - s := newState(opts) - s.compareAny(&pathStep{t, vx, vy}) - return s.result.Equal() -} - -// Diff returns a human-readable report of the differences between two values. -// It returns an empty string if and only if Equal returns true for the same -// input values and options. -// -// The output is displayed as a literal in pseudo-Go syntax. -// At the start of each line, a "-" prefix indicates an element removed from x, -// a "+" prefix to indicates an element added to y, and the lack of a prefix -// indicates an element common to both x and y. If possible, the output -// uses fmt.Stringer.String or error.Error methods to produce more humanly -// readable outputs. In such cases, the string is prefixed with either an -// 's' or 'e' character, respectively, to indicate that the method was called. -// -// Do not depend on this output being stable. If you need the ability to -// programmatically interpret the difference, consider using a custom Reporter. -func Diff(x, y interface{}, opts ...Option) string { - r := new(defaultReporter) - eq := Equal(x, y, Options(opts), Reporter(r)) - d := r.String() - if (d == "") != eq { - panic("inconsistent difference and equality results") - } - return d + return &pathStep{t, vx, vy} } type state struct { @@ -352,7 +376,7 @@ func detectRaces(c chan<- reflect.Value, f reflect.Value, vs ...reflect.Value) { // assuming that T is assignable to R. // Otherwise, it returns the input value as is. func sanitizeValue(v reflect.Value, t reflect.Type) reflect.Value { - // TODO(dsnet): Workaround for reflect bug (https://golang.org/issue/22143). + // TODO(≥go1.10): Workaround for reflect bug (https://golang.org/issue/22143). if !flags.AtLeastGo110 { if v.Kind() == reflect.Interface && v.IsNil() && v.Type() != t { return reflect.New(t).Elem() @@ -362,6 +386,7 @@ func sanitizeValue(v reflect.Value, t reflect.Type) reflect.Value { } func (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) { + var addr bool var vax, vay reflect.Value // Addressable versions of vx and vy var mayForce, mayForceInit bool @@ -383,6 +408,7 @@ func (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) { // For retrieveUnexportedField to work, the parent struct must // be addressable. Create a new copy of the values if // necessary to make them addressable. + addr = vx.CanAddr() || vy.CanAddr() vax = makeAddressable(vx) vay = makeAddressable(vy) } @@ -393,6 +419,7 @@ func (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) { mayForceInit = true } step.mayForce = mayForce + step.paddr = addr step.pvx = vax step.pvy = vay step.field = t.Field(i) diff --git a/vendor/github.com/google/go-cmp/cmp/export_panic.go b/vendor/github.com/google/go-cmp/cmp/export_panic.go index dd03235..5ff0b42 100644 --- a/vendor/github.com/google/go-cmp/cmp/export_panic.go +++ b/vendor/github.com/google/go-cmp/cmp/export_panic.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // +build purego @@ -10,6 +10,6 @@ import "reflect" const supportExporters = false -func retrieveUnexportedField(reflect.Value, reflect.StructField) reflect.Value { +func retrieveUnexportedField(reflect.Value, reflect.StructField, bool) reflect.Value { panic("no support for forcibly accessing unexported fields") } diff --git a/vendor/github.com/google/go-cmp/cmp/export_unsafe.go b/vendor/github.com/google/go-cmp/cmp/export_unsafe.go index 57020e2..21eb548 100644 --- a/vendor/github.com/google/go-cmp/cmp/export_unsafe.go +++ b/vendor/github.com/google/go-cmp/cmp/export_unsafe.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // +build !purego @@ -17,9 +17,19 @@ const supportExporters = true // a struct such that the value has read-write permissions. // // The parent struct, v, must be addressable, while f must be a StructField -// describing the field to retrieve. -func retrieveUnexportedField(v reflect.Value, f reflect.StructField) reflect.Value { - // See https://github.com/google/go-cmp/issues/167 for discussion of the - // following expression. - return reflect.NewAt(f.Type, unsafe.Pointer(uintptr(unsafe.Pointer(v.UnsafeAddr()))+f.Offset)).Elem() +// describing the field to retrieve. If addr is false, +// then the returned value will be shallowed copied to be non-addressable. +func retrieveUnexportedField(v reflect.Value, f reflect.StructField, addr bool) reflect.Value { + ve := reflect.NewAt(f.Type, unsafe.Pointer(uintptr(unsafe.Pointer(v.UnsafeAddr()))+f.Offset)).Elem() + if !addr { + // A field is addressable if and only if the struct is addressable. + // If the original parent value was not addressable, shallow copy the + // value to make it non-addressable to avoid leaking an implementation + // detail of how forcibly exporting a field works. + if ve.Kind() == reflect.Interface && ve.IsNil() { + return reflect.Zero(f.Type) + } + return reflect.ValueOf(ve.Interface()).Convert(f.Type) + } + return ve } diff --git a/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go b/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go index fe98dcc..1daaaac 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // +build !cmp_debug diff --git a/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go b/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go index 597b6ae..4b91dbc 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // +build cmp_debug diff --git a/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go b/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go index 3d2e426..bc196b1 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // Package diff implements an algorithm for producing edit-scripts. // The edit-script is a sequence of operations needed to transform one list @@ -12,6 +12,13 @@ // is more important than obtaining a minimal Levenshtein distance. package diff +import ( + "math/rand" + "time" + + "github.com/google/go-cmp/cmp/internal/flags" +) + // EditType represents a single operation within an edit-script. type EditType uint8 @@ -112,6 +119,8 @@ func (r Result) Similar() bool { return r.NumSame+1 >= r.NumDiff } +var randBool = rand.New(rand.NewSource(time.Now().Unix())).Intn(2) == 0 + // Difference reports whether two lists of lengths nx and ny are equal // given the definition of equality provided as f. // @@ -177,6 +186,11 @@ func Difference(nx, ny int, f EqualFunc) (es EditScript) { // approximately the square-root of the search budget. searchBudget := 4 * (nx + ny) // O(n) + // Running the tests with the "cmp_debug" build tag prints a visualization + // of the algorithm running in real-time. This is educational for + // understanding how the algorithm works. See debug_enable.go. + f = debug.Begin(nx, ny, f, &fwdPath.es, &revPath.es) + // The algorithm below is a greedy, meet-in-the-middle algorithm for // computing sub-optimal edit-scripts between two lists. // @@ -194,20 +208,26 @@ func Difference(nx, ny int, f EqualFunc) (es EditScript) { // frontier towards the opposite corner. // • This algorithm terminates when either the X coordinates or the // Y coordinates of the forward and reverse frontier points ever intersect. - // + // This algorithm is correct even if searching only in the forward direction // or in the reverse direction. We do both because it is commonly observed // that two lists commonly differ because elements were added to the front // or end of the other list. // - // Running the tests with the "cmp_debug" build tag prints a visualization - // of the algorithm running in real-time. This is educational for - // understanding how the algorithm works. See debug_enable.go. - f = debug.Begin(nx, ny, f, &fwdPath.es, &revPath.es) - for { + // Non-deterministically start with either the forward or reverse direction + // to introduce some deliberate instability so that we have the flexibility + // to change this algorithm in the future. + if flags.Deterministic || randBool { + goto forwardSearch + } else { + goto reverseSearch + } + +forwardSearch: + { // Forward search from the beginning. if fwdFrontier.X >= revFrontier.X || fwdFrontier.Y >= revFrontier.Y || searchBudget == 0 { - break + goto finishSearch } for stop1, stop2, i := false, false, 0; !(stop1 && stop2) && searchBudget > 0; i++ { // Search in a diagonal pattern for a match. @@ -242,10 +262,14 @@ func Difference(nx, ny int, f EqualFunc) (es EditScript) { } else { fwdFrontier.Y++ } + goto reverseSearch + } +reverseSearch: + { // Reverse search from the end. if fwdFrontier.X >= revFrontier.X || fwdFrontier.Y >= revFrontier.Y || searchBudget == 0 { - break + goto finishSearch } for stop1, stop2, i := false, false, 0; !(stop1 && stop2) && searchBudget > 0; i++ { // Search in a diagonal pattern for a match. @@ -280,8 +304,10 @@ func Difference(nx, ny int, f EqualFunc) (es EditScript) { } else { revFrontier.Y-- } + goto forwardSearch } +finishSearch: // Join the forward and reverse paths and then append the reverse path. fwdPath.connect(revPath.point, f) for i := len(revPath.es) - 1; i >= 0; i-- { diff --git a/vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go b/vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go index a9e7fc0..d8e459c 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go @@ -1,6 +1,6 @@ // Copyright 2019, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package flags diff --git a/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_legacy.go b/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_legacy.go index 01aed0a..82d1d7f 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_legacy.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_legacy.go @@ -1,6 +1,6 @@ // Copyright 2019, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // +build !go1.10 diff --git a/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_recent.go b/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_recent.go index c0b667f..8646f05 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_recent.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_recent.go @@ -1,6 +1,6 @@ // Copyright 2019, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // +build go1.10 diff --git a/vendor/github.com/google/go-cmp/cmp/internal/function/func.go b/vendor/github.com/google/go-cmp/cmp/internal/function/func.go index ace1dbe..d127d43 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/function/func.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/function/func.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // Package function provides functionality for identifying function types. package function diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/name.go b/vendor/github.com/google/go-cmp/cmp/internal/value/name.go new file mode 100644 index 0000000..b6c12ce --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/internal/value/name.go @@ -0,0 +1,157 @@ +// Copyright 2020, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package value + +import ( + "reflect" + "strconv" +) + +// TypeString is nearly identical to reflect.Type.String, +// but has an additional option to specify that full type names be used. +func TypeString(t reflect.Type, qualified bool) string { + return string(appendTypeName(nil, t, qualified, false)) +} + +func appendTypeName(b []byte, t reflect.Type, qualified, elideFunc bool) []byte { + // BUG: Go reflection provides no way to disambiguate two named types + // of the same name and within the same package, + // but declared within the namespace of different functions. + + // Named type. + if t.Name() != "" { + if qualified && t.PkgPath() != "" { + b = append(b, '"') + b = append(b, t.PkgPath()...) + b = append(b, '"') + b = append(b, '.') + b = append(b, t.Name()...) + } else { + b = append(b, t.String()...) + } + return b + } + + // Unnamed type. + switch k := t.Kind(); k { + case reflect.Bool, reflect.String, reflect.UnsafePointer, + reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, + reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128: + b = append(b, k.String()...) + case reflect.Chan: + if t.ChanDir() == reflect.RecvDir { + b = append(b, "<-"...) + } + b = append(b, "chan"...) + if t.ChanDir() == reflect.SendDir { + b = append(b, "<-"...) + } + b = append(b, ' ') + b = appendTypeName(b, t.Elem(), qualified, false) + case reflect.Func: + if !elideFunc { + b = append(b, "func"...) + } + b = append(b, '(') + for i := 0; i < t.NumIn(); i++ { + if i > 0 { + b = append(b, ", "...) + } + if i == t.NumIn()-1 && t.IsVariadic() { + b = append(b, "..."...) + b = appendTypeName(b, t.In(i).Elem(), qualified, false) + } else { + b = appendTypeName(b, t.In(i), qualified, false) + } + } + b = append(b, ')') + switch t.NumOut() { + case 0: + // Do nothing + case 1: + b = append(b, ' ') + b = appendTypeName(b, t.Out(0), qualified, false) + default: + b = append(b, " ("...) + for i := 0; i < t.NumOut(); i++ { + if i > 0 { + b = append(b, ", "...) + } + b = appendTypeName(b, t.Out(i), qualified, false) + } + b = append(b, ')') + } + case reflect.Struct: + b = append(b, "struct{ "...) + for i := 0; i < t.NumField(); i++ { + if i > 0 { + b = append(b, "; "...) + } + sf := t.Field(i) + if !sf.Anonymous { + if qualified && sf.PkgPath != "" { + b = append(b, '"') + b = append(b, sf.PkgPath...) + b = append(b, '"') + b = append(b, '.') + } + b = append(b, sf.Name...) + b = append(b, ' ') + } + b = appendTypeName(b, sf.Type, qualified, false) + if sf.Tag != "" { + b = append(b, ' ') + b = strconv.AppendQuote(b, string(sf.Tag)) + } + } + if b[len(b)-1] == ' ' { + b = b[:len(b)-1] + } else { + b = append(b, ' ') + } + b = append(b, '}') + case reflect.Slice, reflect.Array: + b = append(b, '[') + if k == reflect.Array { + b = strconv.AppendUint(b, uint64(t.Len()), 10) + } + b = append(b, ']') + b = appendTypeName(b, t.Elem(), qualified, false) + case reflect.Map: + b = append(b, "map["...) + b = appendTypeName(b, t.Key(), qualified, false) + b = append(b, ']') + b = appendTypeName(b, t.Elem(), qualified, false) + case reflect.Ptr: + b = append(b, '*') + b = appendTypeName(b, t.Elem(), qualified, false) + case reflect.Interface: + b = append(b, "interface{ "...) + for i := 0; i < t.NumMethod(); i++ { + if i > 0 { + b = append(b, "; "...) + } + m := t.Method(i) + if qualified && m.PkgPath != "" { + b = append(b, '"') + b = append(b, m.PkgPath...) + b = append(b, '"') + b = append(b, '.') + } + b = append(b, m.Name...) + b = appendTypeName(b, m.Type, qualified, true) + } + if b[len(b)-1] == ' ' { + b = b[:len(b)-1] + } else { + b = append(b, ' ') + } + b = append(b, '}') + default: + panic("invalid kind: " + k.String()) + } + return b +} diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go index 0a01c47..44f4a5a 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go @@ -1,6 +1,6 @@ // Copyright 2018, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // +build purego @@ -21,3 +21,13 @@ func PointerOf(v reflect.Value) Pointer { // assumes that the GC implementation does not use a moving collector. return Pointer{v.Pointer(), v.Type()} } + +// IsNil reports whether the pointer is nil. +func (p Pointer) IsNil() bool { + return p.p == 0 +} + +// Uintptr returns the pointer as a uintptr. +func (p Pointer) Uintptr() uintptr { + return p.p +} diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go index da134ae..a605953 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go @@ -1,6 +1,6 @@ // Copyright 2018, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. // +build !purego @@ -24,3 +24,13 @@ func PointerOf(v reflect.Value) Pointer { // which is necessary if the GC ever uses a moving collector. return Pointer{unsafe.Pointer(v.Pointer()), v.Type()} } + +// IsNil reports whether the pointer is nil. +func (p Pointer) IsNil() bool { + return p.p == nil +} + +// Uintptr returns the pointer as a uintptr. +func (p Pointer) Uintptr() uintptr { + return uintptr(p.p) +} diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/sort.go b/vendor/github.com/google/go-cmp/cmp/internal/value/sort.go index 24fbae6..98533b0 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/value/sort.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/value/sort.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package value diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/zero.go b/vendor/github.com/google/go-cmp/cmp/internal/value/zero.go index 06a8ffd..9147a29 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/value/zero.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/value/zero.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package value diff --git a/vendor/github.com/google/go-cmp/cmp/options.go b/vendor/github.com/google/go-cmp/cmp/options.go index abbd2a6..e57b9eb 100644 --- a/vendor/github.com/google/go-cmp/cmp/options.go +++ b/vendor/github.com/google/go-cmp/cmp/options.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package cmp @@ -225,11 +225,14 @@ func (validator) apply(s *state, vx, vy reflect.Value) { // Unable to Interface implies unexported field without visibility access. if !vx.CanInterface() || !vy.CanInterface() { - const help = "consider using a custom Comparer; if you control the implementation of type, you can also consider using an Exporter, AllowUnexported, or cmpopts.IgnoreUnexported" + help := "consider using a custom Comparer; if you control the implementation of type, you can also consider using an Exporter, AllowUnexported, or cmpopts.IgnoreUnexported" var name string if t := s.curPath.Index(-2).Type(); t.Name() != "" { // Named type with unexported fields. name = fmt.Sprintf("%q.%v", t.PkgPath(), t.Name()) // e.g., "path/to/package".MyType + if _, ok := reflect.New(t).Interface().(error); ok { + help = "consider using cmpopts.EquateErrors to compare error values" + } } else { // Unnamed type with unexported fields. Derive PkgPath from field. var pkgPath string diff --git a/vendor/github.com/google/go-cmp/cmp/path.go b/vendor/github.com/google/go-cmp/cmp/path.go index 509d6b8..3d45c1a 100644 --- a/vendor/github.com/google/go-cmp/cmp/path.go +++ b/vendor/github.com/google/go-cmp/cmp/path.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package cmp @@ -177,7 +177,8 @@ type structField struct { // pvx, pvy, and field are only valid if unexported is true. unexported bool mayForce bool // Forcibly allow visibility - pvx, pvy reflect.Value // Parent values + paddr bool // Was parent addressable? + pvx, pvy reflect.Value // Parent values (always addressible) field reflect.StructField // Field information } @@ -189,8 +190,8 @@ func (sf StructField) Values() (vx, vy reflect.Value) { // Forcibly obtain read-write access to an unexported struct field. if sf.mayForce { - vx = retrieveUnexportedField(sf.pvx, sf.field) - vy = retrieveUnexportedField(sf.pvy, sf.field) + vx = retrieveUnexportedField(sf.pvx, sf.field, sf.paddr) + vy = retrieveUnexportedField(sf.pvy, sf.field, sf.paddr) return vx, vy // CanInterface reports true } return sf.vx, sf.vy // CanInterface reports false diff --git a/vendor/github.com/google/go-cmp/cmp/report.go b/vendor/github.com/google/go-cmp/cmp/report.go index 6ddf299..f43cd12 100644 --- a/vendor/github.com/google/go-cmp/cmp/report.go +++ b/vendor/github.com/google/go-cmp/cmp/report.go @@ -1,6 +1,6 @@ // Copyright 2017, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package cmp @@ -41,7 +41,10 @@ func (r *defaultReporter) String() string { if r.root.NumDiff == 0 { return "" } - return formatOptions{}.FormatDiff(r.root).String() + ptrs := new(pointerReferences) + text := formatOptions{}.FormatDiff(r.root, ptrs) + resolveReferences(text) + return text.String() } func assert(ok bool) { diff --git a/vendor/github.com/google/go-cmp/cmp/report_compare.go b/vendor/github.com/google/go-cmp/cmp/report_compare.go index 17a05ee..a6c070c 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_compare.go +++ b/vendor/github.com/google/go-cmp/cmp/report_compare.go @@ -1,6 +1,6 @@ // Copyright 2019, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package cmp @@ -11,14 +11,6 @@ import ( "github.com/google/go-cmp/cmp/internal/value" ) -// TODO: Enforce limits? -// * Enforce maximum number of records to print per node? -// * Enforce maximum size in bytes allowed? -// * As a heuristic, use less verbosity for equal nodes than unequal nodes. -// TODO: Enforce unique outputs? -// * Avoid Stringer methods if it results in same output? -// * Print pointer address if outputs still equal? - // numContextRecords is the number of surrounding equal records to print. const numContextRecords = 2 @@ -71,24 +63,66 @@ func (opts formatOptions) WithTypeMode(t typeMode) formatOptions { opts.TypeMode = t return opts } +func (opts formatOptions) WithVerbosity(level int) formatOptions { + opts.VerbosityLevel = level + opts.LimitVerbosity = true + return opts +} +func (opts formatOptions) verbosity() uint { + switch { + case opts.VerbosityLevel < 0: + return 0 + case opts.VerbosityLevel > 16: + return 16 // some reasonable maximum to avoid shift overflow + default: + return uint(opts.VerbosityLevel) + } +} + +const maxVerbosityPreset = 3 + +// verbosityPreset modifies the verbosity settings given an index +// between 0 and maxVerbosityPreset, inclusive. +func verbosityPreset(opts formatOptions, i int) formatOptions { + opts.VerbosityLevel = int(opts.verbosity()) + 2*i + if i > 0 { + opts.AvoidStringer = true + } + if i >= maxVerbosityPreset { + opts.PrintAddresses = true + opts.QualifiedNames = true + } + return opts +} // FormatDiff converts a valueNode tree into a textNode tree, where the later // is a textual representation of the differences detected in the former. -func (opts formatOptions) FormatDiff(v *valueNode) textNode { +func (opts formatOptions) FormatDiff(v *valueNode, ptrs *pointerReferences) (out textNode) { + if opts.DiffMode == diffIdentical { + opts = opts.WithVerbosity(1) + } else { + opts = opts.WithVerbosity(3) + } + // Check whether we have specialized formatting for this node. // This is not necessary, but helpful for producing more readable outputs. if opts.CanFormatDiffSlice(v) { return opts.FormatDiffSlice(v) } + var parentKind reflect.Kind + if v.parent != nil && v.parent.TransformerName == "" { + parentKind = v.parent.Type.Kind() + } + // For leaf nodes, format the value based on the reflect.Values alone. if v.MaxDepth == 0 { switch opts.DiffMode { case diffUnknown, diffIdentical: // Format Equal. if v.NumDiff == 0 { - outx := opts.FormatValue(v.ValueX, visitedPointers{}) - outy := opts.FormatValue(v.ValueY, visitedPointers{}) + outx := opts.FormatValue(v.ValueX, parentKind, ptrs) + outy := opts.FormatValue(v.ValueY, parentKind, ptrs) if v.NumIgnored > 0 && v.NumSame == 0 { return textEllipsis } else if outx.Len() < outy.Len() { @@ -101,8 +135,13 @@ func (opts formatOptions) FormatDiff(v *valueNode) textNode { // Format unequal. assert(opts.DiffMode == diffUnknown) var list textList - outx := opts.WithTypeMode(elideType).FormatValue(v.ValueX, visitedPointers{}) - outy := opts.WithTypeMode(elideType).FormatValue(v.ValueY, visitedPointers{}) + outx := opts.WithTypeMode(elideType).FormatValue(v.ValueX, parentKind, ptrs) + outy := opts.WithTypeMode(elideType).FormatValue(v.ValueY, parentKind, ptrs) + for i := 0; i <= maxVerbosityPreset && outx != nil && outy != nil && outx.Equal(outy); i++ { + opts2 := verbosityPreset(opts, i).WithTypeMode(elideType) + outx = opts2.FormatValue(v.ValueX, parentKind, ptrs) + outy = opts2.FormatValue(v.ValueY, parentKind, ptrs) + } if outx != nil { list = append(list, textRecord{Diff: '-', Value: outx}) } @@ -111,34 +150,57 @@ func (opts formatOptions) FormatDiff(v *valueNode) textNode { } return opts.WithTypeMode(emitType).FormatType(v.Type, list) case diffRemoved: - return opts.FormatValue(v.ValueX, visitedPointers{}) + return opts.FormatValue(v.ValueX, parentKind, ptrs) case diffInserted: - return opts.FormatValue(v.ValueY, visitedPointers{}) + return opts.FormatValue(v.ValueY, parentKind, ptrs) default: panic("invalid diff mode") } } + // Register slice element to support cycle detection. + if parentKind == reflect.Slice { + ptrRefs := ptrs.PushPair(v.ValueX, v.ValueY, opts.DiffMode, true) + defer ptrs.Pop() + defer func() { out = wrapTrunkReferences(ptrRefs, out) }() + } + // Descend into the child value node. if v.TransformerName != "" { - out := opts.WithTypeMode(emitType).FormatDiff(v.Value) - out = textWrap{"Inverse(" + v.TransformerName + ", ", out, ")"} + out := opts.WithTypeMode(emitType).FormatDiff(v.Value, ptrs) + out = &textWrap{Prefix: "Inverse(" + v.TransformerName + ", ", Value: out, Suffix: ")"} return opts.FormatType(v.Type, out) } else { switch k := v.Type.Kind(); k { - case reflect.Struct, reflect.Array, reflect.Slice, reflect.Map: - return opts.FormatType(v.Type, opts.formatDiffList(v.Records, k)) + case reflect.Struct, reflect.Array, reflect.Slice: + out = opts.formatDiffList(v.Records, k, ptrs) + out = opts.FormatType(v.Type, out) + case reflect.Map: + // Register map to support cycle detection. + ptrRefs := ptrs.PushPair(v.ValueX, v.ValueY, opts.DiffMode, false) + defer ptrs.Pop() + + out = opts.formatDiffList(v.Records, k, ptrs) + out = wrapTrunkReferences(ptrRefs, out) + out = opts.FormatType(v.Type, out) case reflect.Ptr: - return textWrap{"&", opts.FormatDiff(v.Value), ""} + // Register pointer to support cycle detection. + ptrRefs := ptrs.PushPair(v.ValueX, v.ValueY, opts.DiffMode, false) + defer ptrs.Pop() + + out = opts.FormatDiff(v.Value, ptrs) + out = wrapTrunkReferences(ptrRefs, out) + out = &textWrap{Prefix: "&", Value: out} case reflect.Interface: - return opts.WithTypeMode(emitType).FormatDiff(v.Value) + out = opts.WithTypeMode(emitType).FormatDiff(v.Value, ptrs) default: panic(fmt.Sprintf("%v cannot have children", k)) } + return out } } -func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) textNode { +func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind, ptrs *pointerReferences) textNode { // Derive record name based on the data structure kind. var name string var formatKey func(reflect.Value) string @@ -154,7 +216,17 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te case reflect.Map: name = "entry" opts = opts.WithTypeMode(elideType) - formatKey = formatMapKey + formatKey = func(v reflect.Value) string { return formatMapKey(v, false, ptrs) } + } + + maxLen := -1 + if opts.LimitVerbosity { + if opts.DiffMode == diffIdentical { + maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc... + } else { + maxLen = (1 << opts.verbosity()) << 1 // 2, 4, 8, 16, 32, 64, etc... + } + opts.VerbosityLevel-- } // Handle unification. @@ -163,6 +235,11 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te var list textList var deferredEllipsis bool // Add final "..." to indicate records were dropped for _, r := range recs { + if len(list) == maxLen { + deferredEllipsis = true + break + } + // Elide struct fields that are zero value. if k == reflect.Struct { var isZero bool @@ -186,23 +263,31 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te } continue } - if out := opts.FormatDiff(r.Value); out != nil { + if out := opts.FormatDiff(r.Value, ptrs); out != nil { list = append(list, textRecord{Key: formatKey(r.Key), Value: out}) } } if deferredEllipsis { list.AppendEllipsis(diffStats{}) } - return textWrap{"{", list, "}"} + return &textWrap{Prefix: "{", Value: list, Suffix: "}"} case diffUnknown: default: panic("invalid diff mode") } // Handle differencing. + var numDiffs int var list textList + var keys []reflect.Value // invariant: len(list) == len(keys) groups := coalesceAdjacentRecords(name, recs) + maxGroup := diffStats{Name: name} for i, ds := range groups { + if maxLen >= 0 && numDiffs >= maxLen { + maxGroup = maxGroup.Append(ds) + continue + } + // Handle equal records. if ds.NumDiff() == 0 { // Compute the number of leading and trailing records to print. @@ -226,16 +311,21 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te // Format the equal values. for _, r := range recs[:numLo] { - out := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value) + out := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value, ptrs) list = append(list, textRecord{Key: formatKey(r.Key), Value: out}) + keys = append(keys, r.Key) } if numEqual > numLo+numHi { ds.NumIdentical -= numLo + numHi list.AppendEllipsis(ds) + for len(keys) < len(list) { + keys = append(keys, reflect.Value{}) + } } for _, r := range recs[numEqual-numHi : numEqual] { - out := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value) + out := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value, ptrs) list = append(list, textRecord{Key: formatKey(r.Key), Value: out}) + keys = append(keys, r.Key) } recs = recs[numEqual:] continue @@ -247,24 +337,70 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te case opts.CanFormatDiffSlice(r.Value): out := opts.FormatDiffSlice(r.Value) list = append(list, textRecord{Key: formatKey(r.Key), Value: out}) + keys = append(keys, r.Key) case r.Value.NumChildren == r.Value.MaxDepth: - outx := opts.WithDiffMode(diffRemoved).FormatDiff(r.Value) - outy := opts.WithDiffMode(diffInserted).FormatDiff(r.Value) + outx := opts.WithDiffMode(diffRemoved).FormatDiff(r.Value, ptrs) + outy := opts.WithDiffMode(diffInserted).FormatDiff(r.Value, ptrs) + for i := 0; i <= maxVerbosityPreset && outx != nil && outy != nil && outx.Equal(outy); i++ { + opts2 := verbosityPreset(opts, i) + outx = opts2.WithDiffMode(diffRemoved).FormatDiff(r.Value, ptrs) + outy = opts2.WithDiffMode(diffInserted).FormatDiff(r.Value, ptrs) + } if outx != nil { list = append(list, textRecord{Diff: diffRemoved, Key: formatKey(r.Key), Value: outx}) + keys = append(keys, r.Key) } if outy != nil { list = append(list, textRecord{Diff: diffInserted, Key: formatKey(r.Key), Value: outy}) + keys = append(keys, r.Key) } default: - out := opts.FormatDiff(r.Value) + out := opts.FormatDiff(r.Value, ptrs) list = append(list, textRecord{Key: formatKey(r.Key), Value: out}) + keys = append(keys, r.Key) } } recs = recs[ds.NumDiff():] + numDiffs += ds.NumDiff() + } + if maxGroup.IsZero() { + assert(len(recs) == 0) + } else { + list.AppendEllipsis(maxGroup) + for len(keys) < len(list) { + keys = append(keys, reflect.Value{}) + } } - assert(len(recs) == 0) - return textWrap{"{", list, "}"} + assert(len(list) == len(keys)) + + // For maps, the default formatting logic uses fmt.Stringer which may + // produce ambiguous output. Avoid calling String to disambiguate. + if k == reflect.Map { + var ambiguous bool + seenKeys := map[string]reflect.Value{} + for i, currKey := range keys { + if currKey.IsValid() { + strKey := list[i].Key + prevKey, seen := seenKeys[strKey] + if seen && prevKey.CanInterface() && currKey.CanInterface() { + ambiguous = prevKey.Interface() != currKey.Interface() + if ambiguous { + break + } + } + seenKeys[strKey] = currKey + } + } + if ambiguous { + for i, k := range keys { + if k.IsValid() { + list[i].Key = formatMapKey(k, true, ptrs) + } + } + } + } + + return &textWrap{Prefix: "{", Value: list, Suffix: "}"} } // coalesceAdjacentRecords coalesces the list of records into groups of diff --git a/vendor/github.com/google/go-cmp/cmp/report_references.go b/vendor/github.com/google/go-cmp/cmp/report_references.go new file mode 100644 index 0000000..be31b33 --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/report_references.go @@ -0,0 +1,264 @@ +// Copyright 2020, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cmp + +import ( + "fmt" + "reflect" + "strings" + + "github.com/google/go-cmp/cmp/internal/flags" + "github.com/google/go-cmp/cmp/internal/value" +) + +const ( + pointerDelimPrefix = "⟪" + pointerDelimSuffix = "⟫" +) + +// formatPointer prints the address of the pointer. +func formatPointer(p value.Pointer, withDelims bool) string { + v := p.Uintptr() + if flags.Deterministic { + v = 0xdeadf00f // Only used for stable testing purposes + } + if withDelims { + return pointerDelimPrefix + formatHex(uint64(v)) + pointerDelimSuffix + } + return formatHex(uint64(v)) +} + +// pointerReferences is a stack of pointers visited so far. +type pointerReferences [][2]value.Pointer + +func (ps *pointerReferences) PushPair(vx, vy reflect.Value, d diffMode, deref bool) (pp [2]value.Pointer) { + if deref && vx.IsValid() { + vx = vx.Addr() + } + if deref && vy.IsValid() { + vy = vy.Addr() + } + switch d { + case diffUnknown, diffIdentical: + pp = [2]value.Pointer{value.PointerOf(vx), value.PointerOf(vy)} + case diffRemoved: + pp = [2]value.Pointer{value.PointerOf(vx), value.Pointer{}} + case diffInserted: + pp = [2]value.Pointer{value.Pointer{}, value.PointerOf(vy)} + } + *ps = append(*ps, pp) + return pp +} + +func (ps *pointerReferences) Push(v reflect.Value) (p value.Pointer, seen bool) { + p = value.PointerOf(v) + for _, pp := range *ps { + if p == pp[0] || p == pp[1] { + return p, true + } + } + *ps = append(*ps, [2]value.Pointer{p, p}) + return p, false +} + +func (ps *pointerReferences) Pop() { + *ps = (*ps)[:len(*ps)-1] +} + +// trunkReferences is metadata for a textNode indicating that the sub-tree +// represents the value for either pointer in a pair of references. +type trunkReferences struct{ pp [2]value.Pointer } + +// trunkReference is metadata for a textNode indicating that the sub-tree +// represents the value for the given pointer reference. +type trunkReference struct{ p value.Pointer } + +// leafReference is metadata for a textNode indicating that the value is +// truncated as it refers to another part of the tree (i.e., a trunk). +type leafReference struct{ p value.Pointer } + +func wrapTrunkReferences(pp [2]value.Pointer, s textNode) textNode { + switch { + case pp[0].IsNil(): + return &textWrap{Value: s, Metadata: trunkReference{pp[1]}} + case pp[1].IsNil(): + return &textWrap{Value: s, Metadata: trunkReference{pp[0]}} + case pp[0] == pp[1]: + return &textWrap{Value: s, Metadata: trunkReference{pp[0]}} + default: + return &textWrap{Value: s, Metadata: trunkReferences{pp}} + } +} +func wrapTrunkReference(p value.Pointer, printAddress bool, s textNode) textNode { + var prefix string + if printAddress { + prefix = formatPointer(p, true) + } + return &textWrap{Prefix: prefix, Value: s, Metadata: trunkReference{p}} +} +func makeLeafReference(p value.Pointer, printAddress bool) textNode { + out := &textWrap{Prefix: "(", Value: textEllipsis, Suffix: ")"} + var prefix string + if printAddress { + prefix = formatPointer(p, true) + } + return &textWrap{Prefix: prefix, Value: out, Metadata: leafReference{p}} +} + +// resolveReferences walks the textNode tree searching for any leaf reference +// metadata and resolves each against the corresponding trunk references. +// Since pointer addresses in memory are not particularly readable to the user, +// it replaces each pointer value with an arbitrary and unique reference ID. +func resolveReferences(s textNode) { + var walkNodes func(textNode, func(textNode)) + walkNodes = func(s textNode, f func(textNode)) { + f(s) + switch s := s.(type) { + case *textWrap: + walkNodes(s.Value, f) + case textList: + for _, r := range s { + walkNodes(r.Value, f) + } + } + } + + // Collect all trunks and leaves with reference metadata. + var trunks, leaves []*textWrap + walkNodes(s, func(s textNode) { + if s, ok := s.(*textWrap); ok { + switch s.Metadata.(type) { + case leafReference: + leaves = append(leaves, s) + case trunkReference, trunkReferences: + trunks = append(trunks, s) + } + } + }) + + // No leaf references to resolve. + if len(leaves) == 0 { + return + } + + // Collect the set of all leaf references to resolve. + leafPtrs := make(map[value.Pointer]bool) + for _, leaf := range leaves { + leafPtrs[leaf.Metadata.(leafReference).p] = true + } + + // Collect the set of trunk pointers that are always paired together. + // This allows us to assign a single ID to both pointers for brevity. + // If a pointer in a pair ever occurs by itself or as a different pair, + // then the pair is broken. + pairedTrunkPtrs := make(map[value.Pointer]value.Pointer) + unpair := func(p value.Pointer) { + if !pairedTrunkPtrs[p].IsNil() { + pairedTrunkPtrs[pairedTrunkPtrs[p]] = value.Pointer{} // invalidate other half + } + pairedTrunkPtrs[p] = value.Pointer{} // invalidate this half + } + for _, trunk := range trunks { + switch p := trunk.Metadata.(type) { + case trunkReference: + unpair(p.p) // standalone pointer cannot be part of a pair + case trunkReferences: + p0, ok0 := pairedTrunkPtrs[p.pp[0]] + p1, ok1 := pairedTrunkPtrs[p.pp[1]] + switch { + case !ok0 && !ok1: + // Register the newly seen pair. + pairedTrunkPtrs[p.pp[0]] = p.pp[1] + pairedTrunkPtrs[p.pp[1]] = p.pp[0] + case ok0 && ok1 && p0 == p.pp[1] && p1 == p.pp[0]: + // Exact pair already seen; do nothing. + default: + // Pair conflicts with some other pair; break all pairs. + unpair(p.pp[0]) + unpair(p.pp[1]) + } + } + } + + // Correlate each pointer referenced by leaves to a unique identifier, + // and print the IDs for each trunk that matches those pointers. + var nextID uint + ptrIDs := make(map[value.Pointer]uint) + newID := func() uint { + id := nextID + nextID++ + return id + } + for _, trunk := range trunks { + switch p := trunk.Metadata.(type) { + case trunkReference: + if print := leafPtrs[p.p]; print { + id, ok := ptrIDs[p.p] + if !ok { + id = newID() + ptrIDs[p.p] = id + } + trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id)) + } + case trunkReferences: + print0 := leafPtrs[p.pp[0]] + print1 := leafPtrs[p.pp[1]] + if print0 || print1 { + id0, ok0 := ptrIDs[p.pp[0]] + id1, ok1 := ptrIDs[p.pp[1]] + isPair := pairedTrunkPtrs[p.pp[0]] == p.pp[1] && pairedTrunkPtrs[p.pp[1]] == p.pp[0] + if isPair { + var id uint + assert(ok0 == ok1) // must be seen together or not at all + if ok0 { + assert(id0 == id1) // must have the same ID + id = id0 + } else { + id = newID() + ptrIDs[p.pp[0]] = id + ptrIDs[p.pp[1]] = id + } + trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id)) + } else { + if print0 && !ok0 { + id0 = newID() + ptrIDs[p.pp[0]] = id0 + } + if print1 && !ok1 { + id1 = newID() + ptrIDs[p.pp[1]] = id1 + } + switch { + case print0 && print1: + trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id0)+","+formatReference(id1)) + case print0: + trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id0)) + case print1: + trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id1)) + } + } + } + } + } + + // Update all leaf references with the unique identifier. + for _, leaf := range leaves { + if id, ok := ptrIDs[leaf.Metadata.(leafReference).p]; ok { + leaf.Prefix = updateReferencePrefix(leaf.Prefix, formatReference(id)) + } + } +} + +func formatReference(id uint) string { + return fmt.Sprintf("ref#%d", id) +} + +func updateReferencePrefix(prefix, ref string) string { + if prefix == "" { + return pointerDelimPrefix + ref + pointerDelimSuffix + } + suffix := strings.TrimPrefix(prefix, pointerDelimPrefix) + return pointerDelimPrefix + ref + ": " + suffix +} diff --git a/vendor/github.com/google/go-cmp/cmp/report_reflect.go b/vendor/github.com/google/go-cmp/cmp/report_reflect.go index 2761b62..33f0357 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_reflect.go +++ b/vendor/github.com/google/go-cmp/cmp/report_reflect.go @@ -1,17 +1,18 @@ // Copyright 2019, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package cmp import ( + "bytes" "fmt" "reflect" "strconv" "strings" "unicode" + "unicode/utf8" - "github.com/google/go-cmp/cmp/internal/flags" "github.com/google/go-cmp/cmp/internal/value" ) @@ -20,14 +21,22 @@ type formatValueOptions struct { // methods like error.Error or fmt.Stringer.String. AvoidStringer bool - // ShallowPointers controls whether to avoid descending into pointers. - // Useful when printing map keys, where pointer comparison is performed - // on the pointer address rather than the pointed-at value. - ShallowPointers bool - // PrintAddresses controls whether to print the address of all pointers, // slice elements, and maps. PrintAddresses bool + + // QualifiedNames controls whether FormatType uses the fully qualified name + // (including the full package path as opposed to just the package name). + QualifiedNames bool + + // VerbosityLevel controls the amount of output to produce. + // A higher value produces more output. A value of zero or lower produces + // no output (represented using an ellipsis). + // If LimitVerbosity is false, then the level is treated as infinite. + VerbosityLevel int + + // LimitVerbosity specifies that formatting should respect VerbosityLevel. + LimitVerbosity bool } // FormatType prints the type as if it were wrapping s. @@ -44,12 +53,15 @@ func (opts formatOptions) FormatType(t reflect.Type, s textNode) textNode { default: return s } + if opts.DiffMode == diffIdentical { + return s // elide type for identical nodes + } case elideType: return s } // Determine the type label, applying special handling for unnamed types. - typeName := t.String() + typeName := value.TypeString(t, opts.QualifiedNames) if t.Name() == "" { // According to Go grammar, certain type literals contain symbols that // do not strongly bind to the next lexicographical token (e.g., *T). @@ -57,39 +69,77 @@ func (opts formatOptions) FormatType(t reflect.Type, s textNode) textNode { case reflect.Chan, reflect.Func, reflect.Ptr: typeName = "(" + typeName + ")" } - typeName = strings.Replace(typeName, "struct {", "struct{", -1) - typeName = strings.Replace(typeName, "interface {", "interface{", -1) } + return &textWrap{Prefix: typeName, Value: wrapParens(s)} +} + +// wrapParens wraps s with a set of parenthesis, but avoids it if the +// wrapped node itself is already surrounded by a pair of parenthesis or braces. +// It handles unwrapping one level of pointer-reference nodes. +func wrapParens(s textNode) textNode { + var refNode *textWrap + if s2, ok := s.(*textWrap); ok { + // Unwrap a single pointer reference node. + switch s2.Metadata.(type) { + case leafReference, trunkReference, trunkReferences: + refNode = s2 + if s3, ok := refNode.Value.(*textWrap); ok { + s2 = s3 + } + } - // Avoid wrap the value in parenthesis if unnecessary. - if s, ok := s.(textWrap); ok { - hasParens := strings.HasPrefix(s.Prefix, "(") && strings.HasSuffix(s.Suffix, ")") - hasBraces := strings.HasPrefix(s.Prefix, "{") && strings.HasSuffix(s.Suffix, "}") + // Already has delimiters that make parenthesis unnecessary. + hasParens := strings.HasPrefix(s2.Prefix, "(") && strings.HasSuffix(s2.Suffix, ")") + hasBraces := strings.HasPrefix(s2.Prefix, "{") && strings.HasSuffix(s2.Suffix, "}") if hasParens || hasBraces { - return textWrap{typeName, s, ""} + return s } } - return textWrap{typeName + "(", s, ")"} + if refNode != nil { + refNode.Value = &textWrap{Prefix: "(", Value: refNode.Value, Suffix: ")"} + return s + } + return &textWrap{Prefix: "(", Value: s, Suffix: ")"} } // FormatValue prints the reflect.Value, taking extra care to avoid descending -// into pointers already in m. As pointers are visited, m is also updated. -func (opts formatOptions) FormatValue(v reflect.Value, m visitedPointers) (out textNode) { +// into pointers already in ptrs. As pointers are visited, ptrs is also updated. +func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, ptrs *pointerReferences) (out textNode) { if !v.IsValid() { return nil } t := v.Type() + // Check slice element for cycles. + if parentKind == reflect.Slice { + ptrRef, visited := ptrs.Push(v.Addr()) + if visited { + return makeLeafReference(ptrRef, false) + } + defer ptrs.Pop() + defer func() { out = wrapTrunkReference(ptrRef, false, out) }() + } + // Check whether there is an Error or String method to call. if !opts.AvoidStringer && v.CanInterface() { // Avoid calling Error or String methods on nil receivers since many // implementations crash when doing so. if (t.Kind() != reflect.Ptr && t.Kind() != reflect.Interface) || !v.IsNil() { - switch v := v.Interface().(type) { - case error: - return textLine("e" + formatString(v.Error())) - case fmt.Stringer: - return textLine("s" + formatString(v.String())) + var prefix, strVal string + func() { + // Swallow and ignore any panics from String or Error. + defer func() { recover() }() + switch v := v.Interface().(type) { + case error: + strVal = v.Error() + prefix = "e" + case fmt.Stringer: + strVal = v.String() + prefix = "s" + } + }() + if prefix != "" { + return opts.formatString(prefix, strVal) } } } @@ -102,94 +152,140 @@ func (opts formatOptions) FormatValue(v reflect.Value, m visitedPointers) (out t } }() - var ptr string switch t.Kind() { case reflect.Bool: return textLine(fmt.Sprint(v.Bool())) case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return textLine(fmt.Sprint(v.Int())) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - // Unnamed uints are usually bytes or words, so use hexadecimal. - if t.PkgPath() == "" || t.Kind() == reflect.Uintptr { + case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return textLine(fmt.Sprint(v.Uint())) + case reflect.Uint8: + if parentKind == reflect.Slice || parentKind == reflect.Array { return textLine(formatHex(v.Uint())) } return textLine(fmt.Sprint(v.Uint())) + case reflect.Uintptr: + return textLine(formatHex(v.Uint())) case reflect.Float32, reflect.Float64: return textLine(fmt.Sprint(v.Float())) case reflect.Complex64, reflect.Complex128: return textLine(fmt.Sprint(v.Complex())) case reflect.String: - return textLine(formatString(v.String())) + return opts.formatString("", v.String()) case reflect.UnsafePointer, reflect.Chan, reflect.Func: - return textLine(formatPointer(v)) + return textLine(formatPointer(value.PointerOf(v), true)) case reflect.Struct: var list textList + v := makeAddressable(v) // needed for retrieveUnexportedField + maxLen := v.NumField() + if opts.LimitVerbosity { + maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc... + opts.VerbosityLevel-- + } for i := 0; i < v.NumField(); i++ { vv := v.Field(i) if value.IsZero(vv) { continue // Elide fields with zero values } - s := opts.WithTypeMode(autoType).FormatValue(vv, m) - list = append(list, textRecord{Key: t.Field(i).Name, Value: s}) + if len(list) == maxLen { + list.AppendEllipsis(diffStats{}) + break + } + sf := t.Field(i) + if supportExporters && !isExported(sf.Name) { + vv = retrieveUnexportedField(v, sf, true) + } + s := opts.WithTypeMode(autoType).FormatValue(vv, t.Kind(), ptrs) + list = append(list, textRecord{Key: sf.Name, Value: s}) } - return textWrap{"{", list, "}"} + return &textWrap{Prefix: "{", Value: list, Suffix: "}"} case reflect.Slice: if v.IsNil() { return textNil } - if opts.PrintAddresses { - ptr = formatPointer(v) + + // Check whether this is a []byte of text data. + if t.Elem() == reflect.TypeOf(byte(0)) { + b := v.Bytes() + isPrintSpace := func(r rune) bool { return unicode.IsPrint(r) && unicode.IsSpace(r) } + if len(b) > 0 && utf8.Valid(b) && len(bytes.TrimFunc(b, isPrintSpace)) == 0 { + out = opts.formatString("", string(b)) + return opts.WithTypeMode(emitType).FormatType(t, out) + } } + fallthrough case reflect.Array: + maxLen := v.Len() + if opts.LimitVerbosity { + maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc... + opts.VerbosityLevel-- + } var list textList for i := 0; i < v.Len(); i++ { - vi := v.Index(i) - if vi.CanAddr() { // Check for cyclic elements - p := vi.Addr() - if m.Visit(p) { - var out textNode - out = textLine(formatPointer(p)) - out = opts.WithTypeMode(emitType).FormatType(p.Type(), out) - out = textWrap{"*", out, ""} - list = append(list, textRecord{Value: out}) - continue - } + if len(list) == maxLen { + list.AppendEllipsis(diffStats{}) + break } - s := opts.WithTypeMode(elideType).FormatValue(vi, m) + s := opts.WithTypeMode(elideType).FormatValue(v.Index(i), t.Kind(), ptrs) list = append(list, textRecord{Value: s}) } - return textWrap{ptr + "{", list, "}"} + + out = &textWrap{Prefix: "{", Value: list, Suffix: "}"} + if t.Kind() == reflect.Slice && opts.PrintAddresses { + header := fmt.Sprintf("ptr:%v, len:%d, cap:%d", formatPointer(value.PointerOf(v), false), v.Len(), v.Cap()) + out = &textWrap{Prefix: pointerDelimPrefix + header + pointerDelimSuffix, Value: out} + } + return out case reflect.Map: if v.IsNil() { return textNil } - if m.Visit(v) { - return textLine(formatPointer(v)) + + // Check pointer for cycles. + ptrRef, visited := ptrs.Push(v) + if visited { + return makeLeafReference(ptrRef, opts.PrintAddresses) } + defer ptrs.Pop() + maxLen := v.Len() + if opts.LimitVerbosity { + maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc... + opts.VerbosityLevel-- + } var list textList for _, k := range value.SortKeys(v.MapKeys()) { - sk := formatMapKey(k) - sv := opts.WithTypeMode(elideType).FormatValue(v.MapIndex(k), m) + if len(list) == maxLen { + list.AppendEllipsis(diffStats{}) + break + } + sk := formatMapKey(k, false, ptrs) + sv := opts.WithTypeMode(elideType).FormatValue(v.MapIndex(k), t.Kind(), ptrs) list = append(list, textRecord{Key: sk, Value: sv}) } - if opts.PrintAddresses { - ptr = formatPointer(v) - } - return textWrap{ptr + "{", list, "}"} + + out = &textWrap{Prefix: "{", Value: list, Suffix: "}"} + out = wrapTrunkReference(ptrRef, opts.PrintAddresses, out) + return out case reflect.Ptr: if v.IsNil() { return textNil } - if m.Visit(v) || opts.ShallowPointers { - return textLine(formatPointer(v)) - } - if opts.PrintAddresses { - ptr = formatPointer(v) + + // Check pointer for cycles. + ptrRef, visited := ptrs.Push(v) + if visited { + out = makeLeafReference(ptrRef, opts.PrintAddresses) + return &textWrap{Prefix: "&", Value: out} } + defer ptrs.Pop() + skipType = true // Let the underlying value print the type instead - return textWrap{"&" + ptr, opts.FormatValue(v.Elem(), m), ""} + out = opts.FormatValue(v.Elem(), t.Kind(), ptrs) + out = wrapTrunkReference(ptrRef, opts.PrintAddresses, out) + out = &textWrap{Prefix: "&", Value: out} + return out case reflect.Interface: if v.IsNil() { return textNil @@ -197,19 +293,67 @@ func (opts formatOptions) FormatValue(v reflect.Value, m visitedPointers) (out t // Interfaces accept different concrete types, // so configure the underlying value to explicitly print the type. skipType = true // Print the concrete type instead - return opts.WithTypeMode(emitType).FormatValue(v.Elem(), m) + return opts.WithTypeMode(emitType).FormatValue(v.Elem(), t.Kind(), ptrs) default: panic(fmt.Sprintf("%v kind not handled", v.Kind())) } } +func (opts formatOptions) formatString(prefix, s string) textNode { + maxLen := len(s) + maxLines := strings.Count(s, "\n") + 1 + if opts.LimitVerbosity { + maxLen = (1 << opts.verbosity()) << 5 // 32, 64, 128, 256, etc... + maxLines = (1 << opts.verbosity()) << 2 // 4, 8, 16, 32, 64, etc... + } + + // For multiline strings, use the triple-quote syntax, + // but only use it when printing removed or inserted nodes since + // we only want the extra verbosity for those cases. + lines := strings.Split(strings.TrimSuffix(s, "\n"), "\n") + isTripleQuoted := len(lines) >= 4 && (opts.DiffMode == '-' || opts.DiffMode == '+') + for i := 0; i < len(lines) && isTripleQuoted; i++ { + lines[i] = strings.TrimPrefix(strings.TrimSuffix(lines[i], "\r"), "\r") // trim leading/trailing carriage returns for legacy Windows endline support + isPrintable := func(r rune) bool { + return unicode.IsPrint(r) || r == '\t' // specially treat tab as printable + } + line := lines[i] + isTripleQuoted = !strings.HasPrefix(strings.TrimPrefix(line, prefix), `"""`) && !strings.HasPrefix(line, "...") && strings.TrimFunc(line, isPrintable) == "" && len(line) <= maxLen + } + if isTripleQuoted { + var list textList + list = append(list, textRecord{Diff: opts.DiffMode, Value: textLine(prefix + `"""`), ElideComma: true}) + for i, line := range lines { + if numElided := len(lines) - i; i == maxLines-1 && numElided > 1 { + comment := commentString(fmt.Sprintf("%d elided lines", numElided)) + list = append(list, textRecord{Diff: opts.DiffMode, Value: textEllipsis, ElideComma: true, Comment: comment}) + break + } + list = append(list, textRecord{Diff: opts.DiffMode, Value: textLine(line), ElideComma: true}) + } + list = append(list, textRecord{Diff: opts.DiffMode, Value: textLine(prefix + `"""`), ElideComma: true}) + return &textWrap{Prefix: "(", Value: list, Suffix: ")"} + } + + // Format the string as a single-line quoted string. + if len(s) > maxLen+len(textEllipsis) { + return textLine(prefix + formatString(s[:maxLen]) + string(textEllipsis)) + } + return textLine(prefix + formatString(s)) +} + // formatMapKey formats v as if it were a map key. // The result is guaranteed to be a single line. -func formatMapKey(v reflect.Value) string { +func formatMapKey(v reflect.Value, disambiguate bool, ptrs *pointerReferences) string { var opts formatOptions + opts.DiffMode = diffIdentical opts.TypeMode = elideType - opts.ShallowPointers = true - s := opts.FormatValue(v, visitedPointers{}).String() + opts.PrintAddresses = disambiguate + opts.AvoidStringer = disambiguate + opts.QualifiedNames = disambiguate + opts.VerbosityLevel = maxVerbosityPreset + opts.LimitVerbosity = true + s := opts.FormatValue(v, reflect.Map, ptrs).String() return strings.TrimSpace(s) } @@ -227,7 +371,7 @@ func formatString(s string) string { rawInvalid := func(r rune) bool { return r == '`' || r == '\n' || !(unicode.IsPrint(r) || r == '\t') } - if strings.IndexFunc(s, rawInvalid) < 0 { + if utf8.ValidString(s) && strings.IndexFunc(s, rawInvalid) < 0 { return "`" + s + "`" } return qs @@ -256,23 +400,3 @@ func formatHex(u uint64) string { } return fmt.Sprintf(f, u) } - -// formatPointer prints the address of the pointer. -func formatPointer(v reflect.Value) string { - p := v.Pointer() - if flags.Deterministic { - p = 0xdeadf00f // Only used for stable testing purposes - } - return fmt.Sprintf("⟪0x%x⟫", p) -} - -type visitedPointers map[value.Pointer]struct{} - -// Visit inserts pointer v into the visited map and reports whether it had -// already been visited before. -func (m visitedPointers) Visit(v reflect.Value) bool { - p := value.PointerOf(v) - _, visited := m[p] - m[p] = struct{}{} - return visited -} diff --git a/vendor/github.com/google/go-cmp/cmp/report_slices.go b/vendor/github.com/google/go-cmp/cmp/report_slices.go index eafcf2e..da04caf 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_slices.go +++ b/vendor/github.com/google/go-cmp/cmp/report_slices.go @@ -1,6 +1,6 @@ // Copyright 2019, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package cmp @@ -8,6 +8,7 @@ import ( "bytes" "fmt" "reflect" + "strconv" "strings" "unicode" "unicode/utf8" @@ -23,11 +24,25 @@ func (opts formatOptions) CanFormatDiffSlice(v *valueNode) bool { return false // Must be formatting in diff mode case v.NumDiff == 0: return false // No differences detected - case v.NumIgnored+v.NumCompared+v.NumTransformed > 0: - // TODO: Handle the case where someone uses bytes.Equal on a large slice. - return false // Some custom option was used to determined equality case !v.ValueX.IsValid() || !v.ValueY.IsValid(): return false // Both values must be valid + case v.Type.Kind() == reflect.Slice && (v.ValueX.Len() == 0 || v.ValueY.Len() == 0): + return false // Both slice values have to be non-empty + case v.NumIgnored > 0: + return false // Some ignore option was used + case v.NumTransformed > 0: + return false // Some transform option was used + case v.NumCompared > 1: + return false // More than one comparison was used + case v.NumCompared == 1 && v.Type.Name() != "": + // The need for cmp to check applicability of options on every element + // in a slice is a significant performance detriment for large []byte. + // The workaround is to specify Comparer(bytes.Equal), + // which enables cmp to compare []byte more efficiently. + // If they differ, we still want to provide batched diffing. + // The logic disallows named types since they tend to have their own + // String method, with nicer formatting than what this provides. + return false } switch t := v.Type; t.Kind() { @@ -82,7 +97,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { } if isText || isBinary { var numLines, lastLineIdx, maxLineLen int - isBinary = false + isBinary = !utf8.ValidString(sx) || !utf8.ValidString(sy) for i, r := range sx + sy { if !(unicode.IsPrint(r) || unicode.IsSpace(r)) || r == utf8.RuneError { isBinary = true @@ -97,7 +112,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { } } isText = !isBinary - isLinedText = isText && numLines >= 4 && maxLineLen <= 256 + isLinedText = isText && numLines >= 4 && maxLineLen <= 1024 } // Format the string into printable records. @@ -117,6 +132,83 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { }, ) delim = "\n" + + // If possible, use a custom triple-quote (""") syntax for printing + // differences in a string literal. This format is more readable, + // but has edge-cases where differences are visually indistinguishable. + // This format is avoided under the following conditions: + // • A line starts with `"""` + // • A line starts with "..." + // • A line contains non-printable characters + // • Adjacent different lines differ only by whitespace + // + // For example: + // """ + // ... // 3 identical lines + // foo + // bar + // - baz + // + BAZ + // """ + isTripleQuoted := true + prevRemoveLines := map[string]bool{} + prevInsertLines := map[string]bool{} + var list2 textList + list2 = append(list2, textRecord{Value: textLine(`"""`), ElideComma: true}) + for _, r := range list { + if !r.Value.Equal(textEllipsis) { + line, _ := strconv.Unquote(string(r.Value.(textLine))) + line = strings.TrimPrefix(strings.TrimSuffix(line, "\r"), "\r") // trim leading/trailing carriage returns for legacy Windows endline support + normLine := strings.Map(func(r rune) rune { + if unicode.IsSpace(r) { + return -1 // drop whitespace to avoid visually indistinguishable output + } + return r + }, line) + isPrintable := func(r rune) bool { + return unicode.IsPrint(r) || r == '\t' // specially treat tab as printable + } + isTripleQuoted = !strings.HasPrefix(line, `"""`) && !strings.HasPrefix(line, "...") && strings.TrimFunc(line, isPrintable) == "" + switch r.Diff { + case diffRemoved: + isTripleQuoted = isTripleQuoted && !prevInsertLines[normLine] + prevRemoveLines[normLine] = true + case diffInserted: + isTripleQuoted = isTripleQuoted && !prevRemoveLines[normLine] + prevInsertLines[normLine] = true + } + if !isTripleQuoted { + break + } + r.Value = textLine(line) + r.ElideComma = true + } + if !(r.Diff == diffRemoved || r.Diff == diffInserted) { // start a new non-adjacent difference group + prevRemoveLines = map[string]bool{} + prevInsertLines = map[string]bool{} + } + list2 = append(list2, r) + } + if r := list2[len(list2)-1]; r.Diff == diffIdentical && len(r.Value.(textLine)) == 0 { + list2 = list2[:len(list2)-1] // elide single empty line at the end + } + list2 = append(list2, textRecord{Value: textLine(`"""`), ElideComma: true}) + if isTripleQuoted { + var out textNode = &textWrap{Prefix: "(", Value: list2, Suffix: ")"} + switch t.Kind() { + case reflect.String: + if t != reflect.TypeOf(string("")) { + out = opts.FormatType(t, out) + } + case reflect.Slice: + // Always emit type for slices since the triple-quote syntax + // looks like a string (not a slice). + opts = opts.WithTypeMode(emitType) + out = opts.FormatType(t, out) + } + return out + } + // If the text appears to be single-lined text, // then perform differencing in approximately fixed-sized chunks. // The output is printed as quoted strings. @@ -129,6 +221,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { }, ) delim = "" + // If the text appears to be binary data, // then perform differencing in approximately fixed-sized chunks. // The output is inspired by hexdump. @@ -145,6 +238,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { return textRecord{Diff: d, Value: textLine(s), Comment: comment} }, ) + // For all other slices of primitive types, // then perform differencing in approximately fixed-sized chunks. // The size of each chunk depends on the width of the element kind. @@ -172,7 +266,9 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { switch t.Elem().Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: ss = append(ss, fmt.Sprint(v.Index(i).Int())) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64: + ss = append(ss, fmt.Sprint(v.Index(i).Uint())) + case reflect.Uint8, reflect.Uintptr: ss = append(ss, formatHex(v.Index(i).Uint())) case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128: ss = append(ss, fmt.Sprint(v.Index(i).Interface())) @@ -185,7 +281,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { } // Wrap the output with appropriate type information. - var out textNode = textWrap{"{", list, "}"} + var out textNode = &textWrap{Prefix: "{", Value: list, Suffix: "}"} if !isText { // The "{...}" byte-sequence literal is not valid Go syntax for strings. // Emit the type for extra clarity (e.g. "string{...}"). @@ -196,12 +292,12 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { } switch t.Kind() { case reflect.String: - out = textWrap{"strings.Join(", out, fmt.Sprintf(", %q)", delim)} + out = &textWrap{Prefix: "strings.Join(", Value: out, Suffix: fmt.Sprintf(", %q)", delim)} if t != reflect.TypeOf(string("")) { out = opts.FormatType(t, out) } case reflect.Slice: - out = textWrap{"bytes.Join(", out, fmt.Sprintf(", %q)", delim)} + out = &textWrap{Prefix: "bytes.Join(", Value: out, Suffix: fmt.Sprintf(", %q)", delim)} if t != reflect.TypeOf([]byte(nil)) { out = opts.FormatType(t, out) } @@ -242,9 +338,22 @@ func (opts formatOptions) formatDiffSlice( return n0 - v.Len() } + var numDiffs int + maxLen := -1 + if opts.LimitVerbosity { + maxLen = (1 << opts.verbosity()) << 2 // 4, 8, 16, 32, 64, etc... + opts.VerbosityLevel-- + } + groups := coalesceAdjacentEdits(name, es) groups = coalesceInterveningIdentical(groups, chunkSize/4) + maxGroup := diffStats{Name: name} for i, ds := range groups { + if maxLen >= 0 && numDiffs >= maxLen { + maxGroup = maxGroup.Append(ds) + continue + } + // Print equal. if ds.NumDiff() == 0 { // Compute the number of leading and trailing equal bytes to print. @@ -273,12 +382,18 @@ func (opts formatOptions) formatDiffSlice( } // Print unequal. + len0 := len(list) nx := appendChunks(vx.Slice(0, ds.NumIdentical+ds.NumRemoved+ds.NumModified), diffRemoved) vx = vx.Slice(nx, vx.Len()) ny := appendChunks(vy.Slice(0, ds.NumIdentical+ds.NumInserted+ds.NumModified), diffInserted) vy = vy.Slice(ny, vy.Len()) + numDiffs += len(list) - len0 + } + if maxGroup.IsZero() { + assert(vx.Len() == 0 && vy.Len() == 0) + } else { + list.AppendEllipsis(maxGroup) } - assert(vx.Len() == 0 && vy.Len() == 0) return list } diff --git a/vendor/github.com/google/go-cmp/cmp/report_text.go b/vendor/github.com/google/go-cmp/cmp/report_text.go index 8b8fcab..0fd46d7 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_text.go +++ b/vendor/github.com/google/go-cmp/cmp/report_text.go @@ -1,6 +1,6 @@ // Copyright 2019, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package cmp @@ -10,12 +10,15 @@ import ( "math/rand" "strings" "time" + "unicode/utf8" "github.com/google/go-cmp/cmp/internal/flags" ) var randBool = rand.New(rand.NewSource(time.Now().Unix())).Intn(2) == 0 +const maxColumnLength = 80 + type indentMode int func (n indentMode) appendIndent(b []byte, d diffMode) []byte { @@ -91,21 +94,22 @@ type textNode interface { // textWrap is a wrapper that concatenates a prefix and/or a suffix // to the underlying node. type textWrap struct { - Prefix string // e.g., "bytes.Buffer{" - Value textNode // textWrap | textList | textLine - Suffix string // e.g., "}" + Prefix string // e.g., "bytes.Buffer{" + Value textNode // textWrap | textList | textLine + Suffix string // e.g., "}" + Metadata interface{} // arbitrary metadata; has no effect on formatting } -func (s textWrap) Len() int { +func (s *textWrap) Len() int { return len(s.Prefix) + s.Value.Len() + len(s.Suffix) } -func (s1 textWrap) Equal(s2 textNode) bool { - if s2, ok := s2.(textWrap); ok { +func (s1 *textWrap) Equal(s2 textNode) bool { + if s2, ok := s2.(*textWrap); ok { return s1.Prefix == s2.Prefix && s1.Value.Equal(s2.Value) && s1.Suffix == s2.Suffix } return false } -func (s textWrap) String() string { +func (s *textWrap) String() string { var d diffMode var n indentMode _, s2 := s.formatCompactTo(nil, d) @@ -114,7 +118,7 @@ func (s textWrap) String() string { b = append(b, '\n') // Trailing newline return string(b) } -func (s textWrap) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) { +func (s *textWrap) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) { n0 := len(b) // Original buffer length b = append(b, s.Prefix...) b, s.Value = s.Value.formatCompactTo(b, d) @@ -124,7 +128,7 @@ func (s textWrap) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) { } return b, s } -func (s textWrap) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte { +func (s *textWrap) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte { b = append(b, s.Prefix...) b = s.Value.formatExpandedTo(b, d, n) b = append(b, s.Suffix...) @@ -136,22 +140,23 @@ func (s textWrap) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte { // of the textList.formatCompactTo method. type textList []textRecord type textRecord struct { - Diff diffMode // e.g., 0 or '-' or '+' - Key string // e.g., "MyField" - Value textNode // textWrap | textLine - Comment fmt.Stringer // e.g., "6 identical fields" + Diff diffMode // e.g., 0 or '-' or '+' + Key string // e.g., "MyField" + Value textNode // textWrap | textLine + ElideComma bool // avoid trailing comma + Comment fmt.Stringer // e.g., "6 identical fields" } // AppendEllipsis appends a new ellipsis node to the list if none already // exists at the end. If cs is non-zero it coalesces the statistics with the // previous diffStats. func (s *textList) AppendEllipsis(ds diffStats) { - hasStats := ds != diffStats{} + hasStats := !ds.IsZero() if len(*s) == 0 || !(*s)[len(*s)-1].Value.Equal(textEllipsis) { if hasStats { - *s = append(*s, textRecord{Value: textEllipsis, Comment: ds}) + *s = append(*s, textRecord{Value: textEllipsis, ElideComma: true, Comment: ds}) } else { - *s = append(*s, textRecord{Value: textEllipsis}) + *s = append(*s, textRecord{Value: textEllipsis, ElideComma: true}) } return } @@ -191,7 +196,7 @@ func (s1 textList) Equal(s2 textNode) bool { } func (s textList) String() string { - return textWrap{"{", s, "}"}.String() + return (&textWrap{Prefix: "{", Value: s, Suffix: "}"}).String() } func (s textList) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) { @@ -221,7 +226,7 @@ func (s textList) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) { } // Force multi-lined output when printing a removed/inserted node that // is sufficiently long. - if (d == diffInserted || d == diffRemoved) && len(b[n0:]) > 80 { + if (d == diffInserted || d == diffRemoved) && len(b[n0:]) > maxColumnLength { multiLine = true } if !multiLine { @@ -236,16 +241,50 @@ func (s textList) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte { _, isLine := r.Value.(textLine) return r.Key == "" || !isLine }, - func(r textRecord) int { return len(r.Key) }, + func(r textRecord) int { return utf8.RuneCountInString(r.Key) }, ) alignValueLens := s.alignLens( func(r textRecord) bool { _, isLine := r.Value.(textLine) return !isLine || r.Value.Equal(textEllipsis) || r.Comment == nil }, - func(r textRecord) int { return len(r.Value.(textLine)) }, + func(r textRecord) int { return utf8.RuneCount(r.Value.(textLine)) }, ) + // Format lists of simple lists in a batched form. + // If the list is sequence of only textLine values, + // then batch multiple values on a single line. + var isSimple bool + for _, r := range s { + _, isLine := r.Value.(textLine) + isSimple = r.Diff == 0 && r.Key == "" && isLine && r.Comment == nil + if !isSimple { + break + } + } + if isSimple { + n++ + var batch []byte + emitBatch := func() { + if len(batch) > 0 { + b = n.appendIndent(append(b, '\n'), d) + b = append(b, bytes.TrimRight(batch, " ")...) + batch = batch[:0] + } + } + for _, r := range s { + line := r.Value.(textLine) + if len(batch)+len(line)+len(", ") > maxColumnLength { + emitBatch() + } + batch = append(batch, line...) + batch = append(batch, ", "...) + } + emitBatch() + n-- + return n.appendIndent(append(b, '\n'), d) + } + // Format the list as a multi-lined output. n++ for i, r := range s { @@ -256,7 +295,7 @@ func (s textList) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte { b = alignKeyLens[i].appendChar(b, ' ') b = r.Value.formatExpandedTo(b, d|r.Diff, n) - if !r.Value.Equal(textEllipsis) { + if !r.ElideComma { b = append(b, ',') } b = alignValueLens[i].appendChar(b, ' ') @@ -332,6 +371,11 @@ type diffStats struct { NumModified int } +func (s diffStats) IsZero() bool { + s.Name = "" + return s == diffStats{} +} + func (s diffStats) NumDiff() int { return s.NumRemoved + s.NumInserted + s.NumModified } diff --git a/vendor/github.com/google/go-cmp/cmp/report_value.go b/vendor/github.com/google/go-cmp/cmp/report_value.go index 83031a7..668d470 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_value.go +++ b/vendor/github.com/google/go-cmp/cmp/report_value.go @@ -1,6 +1,6 @@ // Copyright 2019, The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE.md file. +// license that can be found in the LICENSE file. package cmp diff --git a/vendor/github.com/google/pprof/AUTHORS b/vendor/github.com/google/pprof/AUTHORS new file mode 100644 index 0000000..fd736cb --- /dev/null +++ b/vendor/github.com/google/pprof/AUTHORS @@ -0,0 +1,7 @@ +# This is the official list of pprof authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. +# Names should be added to this file as: +# Name or Organization +# The email address is not required for organizations. +Google Inc. \ No newline at end of file diff --git a/vendor/github.com/google/pprof/CONTRIBUTORS b/vendor/github.com/google/pprof/CONTRIBUTORS new file mode 100644 index 0000000..8c8c37d --- /dev/null +++ b/vendor/github.com/google/pprof/CONTRIBUTORS @@ -0,0 +1,16 @@ +# People who have agreed to one of the CLAs and can contribute patches. +# The AUTHORS file lists the copyright holders; this file +# lists people. For example, Google employees are listed here +# but not in AUTHORS, because Google holds the copyright. +# +# https://developers.google.com/open-source/cla/individual +# https://developers.google.com/open-source/cla/corporate +# +# Names should be added to this file as: +# Name +Raul Silvera +Tipp Moseley +Hyoun Kyu Cho +Martin Spier +Taco de Wolff +Andrew Hunter diff --git a/vendor/github.com/google/pprof/LICENSE b/vendor/github.com/google/pprof/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/vendor/github.com/google/pprof/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/vendor/github.com/google/pprof/profile/encode.go b/vendor/github.com/google/pprof/profile/encode.go new file mode 100644 index 0000000..1e84c72 --- /dev/null +++ b/vendor/github.com/google/pprof/profile/encode.go @@ -0,0 +1,567 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package profile + +import ( + "errors" + "sort" +) + +func (p *Profile) decoder() []decoder { + return profileDecoder +} + +// preEncode populates the unexported fields to be used by encode +// (with suffix X) from the corresponding exported fields. The +// exported fields are cleared up to facilitate testing. +func (p *Profile) preEncode() { + strings := make(map[string]int) + addString(strings, "") + + for _, st := range p.SampleType { + st.typeX = addString(strings, st.Type) + st.unitX = addString(strings, st.Unit) + } + + for _, s := range p.Sample { + s.labelX = nil + var keys []string + for k := range s.Label { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + vs := s.Label[k] + for _, v := range vs { + s.labelX = append(s.labelX, + label{ + keyX: addString(strings, k), + strX: addString(strings, v), + }, + ) + } + } + var numKeys []string + for k := range s.NumLabel { + numKeys = append(numKeys, k) + } + sort.Strings(numKeys) + for _, k := range numKeys { + keyX := addString(strings, k) + vs := s.NumLabel[k] + units := s.NumUnit[k] + for i, v := range vs { + var unitX int64 + if len(units) != 0 { + unitX = addString(strings, units[i]) + } + s.labelX = append(s.labelX, + label{ + keyX: keyX, + numX: v, + unitX: unitX, + }, + ) + } + } + s.locationIDX = make([]uint64, len(s.Location)) + for i, loc := range s.Location { + s.locationIDX[i] = loc.ID + } + } + + for _, m := range p.Mapping { + m.fileX = addString(strings, m.File) + m.buildIDX = addString(strings, m.BuildID) + } + + for _, l := range p.Location { + for i, ln := range l.Line { + if ln.Function != nil { + l.Line[i].functionIDX = ln.Function.ID + } else { + l.Line[i].functionIDX = 0 + } + } + if l.Mapping != nil { + l.mappingIDX = l.Mapping.ID + } else { + l.mappingIDX = 0 + } + } + for _, f := range p.Function { + f.nameX = addString(strings, f.Name) + f.systemNameX = addString(strings, f.SystemName) + f.filenameX = addString(strings, f.Filename) + } + + p.dropFramesX = addString(strings, p.DropFrames) + p.keepFramesX = addString(strings, p.KeepFrames) + + if pt := p.PeriodType; pt != nil { + pt.typeX = addString(strings, pt.Type) + pt.unitX = addString(strings, pt.Unit) + } + + p.commentX = nil + for _, c := range p.Comments { + p.commentX = append(p.commentX, addString(strings, c)) + } + + p.defaultSampleTypeX = addString(strings, p.DefaultSampleType) + + p.stringTable = make([]string, len(strings)) + for s, i := range strings { + p.stringTable[i] = s + } +} + +func (p *Profile) encode(b *buffer) { + for _, x := range p.SampleType { + encodeMessage(b, 1, x) + } + for _, x := range p.Sample { + encodeMessage(b, 2, x) + } + for _, x := range p.Mapping { + encodeMessage(b, 3, x) + } + for _, x := range p.Location { + encodeMessage(b, 4, x) + } + for _, x := range p.Function { + encodeMessage(b, 5, x) + } + encodeStrings(b, 6, p.stringTable) + encodeInt64Opt(b, 7, p.dropFramesX) + encodeInt64Opt(b, 8, p.keepFramesX) + encodeInt64Opt(b, 9, p.TimeNanos) + encodeInt64Opt(b, 10, p.DurationNanos) + if pt := p.PeriodType; pt != nil && (pt.typeX != 0 || pt.unitX != 0) { + encodeMessage(b, 11, p.PeriodType) + } + encodeInt64Opt(b, 12, p.Period) + encodeInt64s(b, 13, p.commentX) + encodeInt64(b, 14, p.defaultSampleTypeX) +} + +var profileDecoder = []decoder{ + nil, // 0 + // repeated ValueType sample_type = 1 + func(b *buffer, m message) error { + x := new(ValueType) + pp := m.(*Profile) + pp.SampleType = append(pp.SampleType, x) + return decodeMessage(b, x) + }, + // repeated Sample sample = 2 + func(b *buffer, m message) error { + x := new(Sample) + pp := m.(*Profile) + pp.Sample = append(pp.Sample, x) + return decodeMessage(b, x) + }, + // repeated Mapping mapping = 3 + func(b *buffer, m message) error { + x := new(Mapping) + pp := m.(*Profile) + pp.Mapping = append(pp.Mapping, x) + return decodeMessage(b, x) + }, + // repeated Location location = 4 + func(b *buffer, m message) error { + x := new(Location) + x.Line = make([]Line, 0, 8) // Pre-allocate Line buffer + pp := m.(*Profile) + pp.Location = append(pp.Location, x) + err := decodeMessage(b, x) + var tmp []Line + x.Line = append(tmp, x.Line...) // Shrink to allocated size + return err + }, + // repeated Function function = 5 + func(b *buffer, m message) error { + x := new(Function) + pp := m.(*Profile) + pp.Function = append(pp.Function, x) + return decodeMessage(b, x) + }, + // repeated string string_table = 6 + func(b *buffer, m message) error { + err := decodeStrings(b, &m.(*Profile).stringTable) + if err != nil { + return err + } + if m.(*Profile).stringTable[0] != "" { + return errors.New("string_table[0] must be ''") + } + return nil + }, + // int64 drop_frames = 7 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).dropFramesX) }, + // int64 keep_frames = 8 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).keepFramesX) }, + // int64 time_nanos = 9 + func(b *buffer, m message) error { + if m.(*Profile).TimeNanos != 0 { + return errConcatProfile + } + return decodeInt64(b, &m.(*Profile).TimeNanos) + }, + // int64 duration_nanos = 10 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).DurationNanos) }, + // ValueType period_type = 11 + func(b *buffer, m message) error { + x := new(ValueType) + pp := m.(*Profile) + pp.PeriodType = x + return decodeMessage(b, x) + }, + // int64 period = 12 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).Period) }, + // repeated int64 comment = 13 + func(b *buffer, m message) error { return decodeInt64s(b, &m.(*Profile).commentX) }, + // int64 defaultSampleType = 14 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).defaultSampleTypeX) }, +} + +// postDecode takes the unexported fields populated by decode (with +// suffix X) and populates the corresponding exported fields. +// The unexported fields are cleared up to facilitate testing. +func (p *Profile) postDecode() error { + var err error + mappings := make(map[uint64]*Mapping, len(p.Mapping)) + mappingIds := make([]*Mapping, len(p.Mapping)+1) + for _, m := range p.Mapping { + m.File, err = getString(p.stringTable, &m.fileX, err) + m.BuildID, err = getString(p.stringTable, &m.buildIDX, err) + if m.ID < uint64(len(mappingIds)) { + mappingIds[m.ID] = m + } else { + mappings[m.ID] = m + } + } + + functions := make(map[uint64]*Function, len(p.Function)) + functionIds := make([]*Function, len(p.Function)+1) + for _, f := range p.Function { + f.Name, err = getString(p.stringTable, &f.nameX, err) + f.SystemName, err = getString(p.stringTable, &f.systemNameX, err) + f.Filename, err = getString(p.stringTable, &f.filenameX, err) + if f.ID < uint64(len(functionIds)) { + functionIds[f.ID] = f + } else { + functions[f.ID] = f + } + } + + locations := make(map[uint64]*Location, len(p.Location)) + locationIds := make([]*Location, len(p.Location)+1) + for _, l := range p.Location { + if id := l.mappingIDX; id < uint64(len(mappingIds)) { + l.Mapping = mappingIds[id] + } else { + l.Mapping = mappings[id] + } + l.mappingIDX = 0 + for i, ln := range l.Line { + if id := ln.functionIDX; id != 0 { + l.Line[i].functionIDX = 0 + if id < uint64(len(functionIds)) { + l.Line[i].Function = functionIds[id] + } else { + l.Line[i].Function = functions[id] + } + } + } + if l.ID < uint64(len(locationIds)) { + locationIds[l.ID] = l + } else { + locations[l.ID] = l + } + } + + for _, st := range p.SampleType { + st.Type, err = getString(p.stringTable, &st.typeX, err) + st.Unit, err = getString(p.stringTable, &st.unitX, err) + } + + for _, s := range p.Sample { + labels := make(map[string][]string, len(s.labelX)) + numLabels := make(map[string][]int64, len(s.labelX)) + numUnits := make(map[string][]string, len(s.labelX)) + for _, l := range s.labelX { + var key, value string + key, err = getString(p.stringTable, &l.keyX, err) + if l.strX != 0 { + value, err = getString(p.stringTable, &l.strX, err) + labels[key] = append(labels[key], value) + } else if l.numX != 0 { + numValues := numLabels[key] + units := numUnits[key] + if l.unitX != 0 { + var unit string + unit, err = getString(p.stringTable, &l.unitX, err) + units = padStringArray(units, len(numValues)) + numUnits[key] = append(units, unit) + } + numLabels[key] = append(numLabels[key], l.numX) + } + } + if len(labels) > 0 { + s.Label = labels + } + if len(numLabels) > 0 { + s.NumLabel = numLabels + for key, units := range numUnits { + if len(units) > 0 { + numUnits[key] = padStringArray(units, len(numLabels[key])) + } + } + s.NumUnit = numUnits + } + s.Location = make([]*Location, len(s.locationIDX)) + for i, lid := range s.locationIDX { + if lid < uint64(len(locationIds)) { + s.Location[i] = locationIds[lid] + } else { + s.Location[i] = locations[lid] + } + } + s.locationIDX = nil + } + + p.DropFrames, err = getString(p.stringTable, &p.dropFramesX, err) + p.KeepFrames, err = getString(p.stringTable, &p.keepFramesX, err) + + if pt := p.PeriodType; pt == nil { + p.PeriodType = &ValueType{} + } + + if pt := p.PeriodType; pt != nil { + pt.Type, err = getString(p.stringTable, &pt.typeX, err) + pt.Unit, err = getString(p.stringTable, &pt.unitX, err) + } + + for _, i := range p.commentX { + var c string + c, err = getString(p.stringTable, &i, err) + p.Comments = append(p.Comments, c) + } + + p.commentX = nil + p.DefaultSampleType, err = getString(p.stringTable, &p.defaultSampleTypeX, err) + p.stringTable = nil + return err +} + +// padStringArray pads arr with enough empty strings to make arr +// length l when arr's length is less than l. +func padStringArray(arr []string, l int) []string { + if l <= len(arr) { + return arr + } + return append(arr, make([]string, l-len(arr))...) +} + +func (p *ValueType) decoder() []decoder { + return valueTypeDecoder +} + +func (p *ValueType) encode(b *buffer) { + encodeInt64Opt(b, 1, p.typeX) + encodeInt64Opt(b, 2, p.unitX) +} + +var valueTypeDecoder = []decoder{ + nil, // 0 + // optional int64 type = 1 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*ValueType).typeX) }, + // optional int64 unit = 2 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*ValueType).unitX) }, +} + +func (p *Sample) decoder() []decoder { + return sampleDecoder +} + +func (p *Sample) encode(b *buffer) { + encodeUint64s(b, 1, p.locationIDX) + encodeInt64s(b, 2, p.Value) + for _, x := range p.labelX { + encodeMessage(b, 3, x) + } +} + +var sampleDecoder = []decoder{ + nil, // 0 + // repeated uint64 location = 1 + func(b *buffer, m message) error { return decodeUint64s(b, &m.(*Sample).locationIDX) }, + // repeated int64 value = 2 + func(b *buffer, m message) error { return decodeInt64s(b, &m.(*Sample).Value) }, + // repeated Label label = 3 + func(b *buffer, m message) error { + s := m.(*Sample) + n := len(s.labelX) + s.labelX = append(s.labelX, label{}) + return decodeMessage(b, &s.labelX[n]) + }, +} + +func (p label) decoder() []decoder { + return labelDecoder +} + +func (p label) encode(b *buffer) { + encodeInt64Opt(b, 1, p.keyX) + encodeInt64Opt(b, 2, p.strX) + encodeInt64Opt(b, 3, p.numX) + encodeInt64Opt(b, 4, p.unitX) +} + +var labelDecoder = []decoder{ + nil, // 0 + // optional int64 key = 1 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).keyX) }, + // optional int64 str = 2 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).strX) }, + // optional int64 num = 3 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).numX) }, + // optional int64 num = 4 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).unitX) }, +} + +func (p *Mapping) decoder() []decoder { + return mappingDecoder +} + +func (p *Mapping) encode(b *buffer) { + encodeUint64Opt(b, 1, p.ID) + encodeUint64Opt(b, 2, p.Start) + encodeUint64Opt(b, 3, p.Limit) + encodeUint64Opt(b, 4, p.Offset) + encodeInt64Opt(b, 5, p.fileX) + encodeInt64Opt(b, 6, p.buildIDX) + encodeBoolOpt(b, 7, p.HasFunctions) + encodeBoolOpt(b, 8, p.HasFilenames) + encodeBoolOpt(b, 9, p.HasLineNumbers) + encodeBoolOpt(b, 10, p.HasInlineFrames) +} + +var mappingDecoder = []decoder{ + nil, // 0 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).ID) }, // optional uint64 id = 1 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Start) }, // optional uint64 memory_offset = 2 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Limit) }, // optional uint64 memory_limit = 3 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Offset) }, // optional uint64 file_offset = 4 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Mapping).fileX) }, // optional int64 filename = 5 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Mapping).buildIDX) }, // optional int64 build_id = 6 + func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasFunctions) }, // optional bool has_functions = 7 + func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasFilenames) }, // optional bool has_filenames = 8 + func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasLineNumbers) }, // optional bool has_line_numbers = 9 + func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasInlineFrames) }, // optional bool has_inline_frames = 10 +} + +func (p *Location) decoder() []decoder { + return locationDecoder +} + +func (p *Location) encode(b *buffer) { + encodeUint64Opt(b, 1, p.ID) + encodeUint64Opt(b, 2, p.mappingIDX) + encodeUint64Opt(b, 3, p.Address) + for i := range p.Line { + encodeMessage(b, 4, &p.Line[i]) + } + encodeBoolOpt(b, 5, p.IsFolded) +} + +var locationDecoder = []decoder{ + nil, // 0 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).ID) }, // optional uint64 id = 1; + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).mappingIDX) }, // optional uint64 mapping_id = 2; + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).Address) }, // optional uint64 address = 3; + func(b *buffer, m message) error { // repeated Line line = 4 + pp := m.(*Location) + n := len(pp.Line) + pp.Line = append(pp.Line, Line{}) + return decodeMessage(b, &pp.Line[n]) + }, + func(b *buffer, m message) error { return decodeBool(b, &m.(*Location).IsFolded) }, // optional bool is_folded = 5; +} + +func (p *Line) decoder() []decoder { + return lineDecoder +} + +func (p *Line) encode(b *buffer) { + encodeUint64Opt(b, 1, p.functionIDX) + encodeInt64Opt(b, 2, p.Line) +} + +var lineDecoder = []decoder{ + nil, // 0 + // optional uint64 function_id = 1 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Line).functionIDX) }, + // optional int64 line = 2 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Line).Line) }, +} + +func (p *Function) decoder() []decoder { + return functionDecoder +} + +func (p *Function) encode(b *buffer) { + encodeUint64Opt(b, 1, p.ID) + encodeInt64Opt(b, 2, p.nameX) + encodeInt64Opt(b, 3, p.systemNameX) + encodeInt64Opt(b, 4, p.filenameX) + encodeInt64Opt(b, 5, p.StartLine) +} + +var functionDecoder = []decoder{ + nil, // 0 + // optional uint64 id = 1 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Function).ID) }, + // optional int64 function_name = 2 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).nameX) }, + // optional int64 function_system_name = 3 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).systemNameX) }, + // repeated int64 filename = 4 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).filenameX) }, + // optional int64 start_line = 5 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).StartLine) }, +} + +func addString(strings map[string]int, s string) int64 { + i, ok := strings[s] + if !ok { + i = len(strings) + strings[s] = i + } + return int64(i) +} + +func getString(strings []string, strng *int64, err error) (string, error) { + if err != nil { + return "", err + } + s := int(*strng) + if s < 0 || s >= len(strings) { + return "", errMalformed + } + *strng = 0 + return strings[s], nil +} diff --git a/vendor/github.com/google/pprof/profile/filter.go b/vendor/github.com/google/pprof/profile/filter.go new file mode 100644 index 0000000..ea8e66c --- /dev/null +++ b/vendor/github.com/google/pprof/profile/filter.go @@ -0,0 +1,270 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package profile + +// Implements methods to filter samples from profiles. + +import "regexp" + +// FilterSamplesByName filters the samples in a profile and only keeps +// samples where at least one frame matches focus but none match ignore. +// Returns true is the corresponding regexp matched at least one sample. +func (p *Profile) FilterSamplesByName(focus, ignore, hide, show *regexp.Regexp) (fm, im, hm, hnm bool) { + focusOrIgnore := make(map[uint64]bool) + hidden := make(map[uint64]bool) + for _, l := range p.Location { + if ignore != nil && l.matchesName(ignore) { + im = true + focusOrIgnore[l.ID] = false + } else if focus == nil || l.matchesName(focus) { + fm = true + focusOrIgnore[l.ID] = true + } + + if hide != nil && l.matchesName(hide) { + hm = true + l.Line = l.unmatchedLines(hide) + if len(l.Line) == 0 { + hidden[l.ID] = true + } + } + if show != nil { + l.Line = l.matchedLines(show) + if len(l.Line) == 0 { + hidden[l.ID] = true + } else { + hnm = true + } + } + } + + s := make([]*Sample, 0, len(p.Sample)) + for _, sample := range p.Sample { + if focusedAndNotIgnored(sample.Location, focusOrIgnore) { + if len(hidden) > 0 { + var locs []*Location + for _, loc := range sample.Location { + if !hidden[loc.ID] { + locs = append(locs, loc) + } + } + if len(locs) == 0 { + // Remove sample with no locations (by not adding it to s). + continue + } + sample.Location = locs + } + s = append(s, sample) + } + } + p.Sample = s + + return +} + +// ShowFrom drops all stack frames above the highest matching frame and returns +// whether a match was found. If showFrom is nil it returns false and does not +// modify the profile. +// +// Example: consider a sample with frames [A, B, C, B], where A is the root. +// ShowFrom(nil) returns false and has frames [A, B, C, B]. +// ShowFrom(A) returns true and has frames [A, B, C, B]. +// ShowFrom(B) returns true and has frames [B, C, B]. +// ShowFrom(C) returns true and has frames [C, B]. +// ShowFrom(D) returns false and drops the sample because no frames remain. +func (p *Profile) ShowFrom(showFrom *regexp.Regexp) (matched bool) { + if showFrom == nil { + return false + } + // showFromLocs stores location IDs that matched ShowFrom. + showFromLocs := make(map[uint64]bool) + // Apply to locations. + for _, loc := range p.Location { + if filterShowFromLocation(loc, showFrom) { + showFromLocs[loc.ID] = true + matched = true + } + } + // For all samples, strip locations after the highest matching one. + s := make([]*Sample, 0, len(p.Sample)) + for _, sample := range p.Sample { + for i := len(sample.Location) - 1; i >= 0; i-- { + if showFromLocs[sample.Location[i].ID] { + sample.Location = sample.Location[:i+1] + s = append(s, sample) + break + } + } + } + p.Sample = s + return matched +} + +// filterShowFromLocation tests a showFrom regex against a location, removes +// lines after the last match and returns whether a match was found. If the +// mapping is matched, then all lines are kept. +func filterShowFromLocation(loc *Location, showFrom *regexp.Regexp) bool { + if m := loc.Mapping; m != nil && showFrom.MatchString(m.File) { + return true + } + if i := loc.lastMatchedLineIndex(showFrom); i >= 0 { + loc.Line = loc.Line[:i+1] + return true + } + return false +} + +// lastMatchedLineIndex returns the index of the last line that matches a regex, +// or -1 if no match is found. +func (loc *Location) lastMatchedLineIndex(re *regexp.Regexp) int { + for i := len(loc.Line) - 1; i >= 0; i-- { + if fn := loc.Line[i].Function; fn != nil { + if re.MatchString(fn.Name) || re.MatchString(fn.Filename) { + return i + } + } + } + return -1 +} + +// FilterTagsByName filters the tags in a profile and only keeps +// tags that match show and not hide. +func (p *Profile) FilterTagsByName(show, hide *regexp.Regexp) (sm, hm bool) { + matchRemove := func(name string) bool { + matchShow := show == nil || show.MatchString(name) + matchHide := hide != nil && hide.MatchString(name) + + if matchShow { + sm = true + } + if matchHide { + hm = true + } + return !matchShow || matchHide + } + for _, s := range p.Sample { + for lab := range s.Label { + if matchRemove(lab) { + delete(s.Label, lab) + } + } + for lab := range s.NumLabel { + if matchRemove(lab) { + delete(s.NumLabel, lab) + } + } + } + return +} + +// matchesName returns whether the location matches the regular +// expression. It checks any available function names, file names, and +// mapping object filename. +func (loc *Location) matchesName(re *regexp.Regexp) bool { + for _, ln := range loc.Line { + if fn := ln.Function; fn != nil { + if re.MatchString(fn.Name) || re.MatchString(fn.Filename) { + return true + } + } + } + if m := loc.Mapping; m != nil && re.MatchString(m.File) { + return true + } + return false +} + +// unmatchedLines returns the lines in the location that do not match +// the regular expression. +func (loc *Location) unmatchedLines(re *regexp.Regexp) []Line { + if m := loc.Mapping; m != nil && re.MatchString(m.File) { + return nil + } + var lines []Line + for _, ln := range loc.Line { + if fn := ln.Function; fn != nil { + if re.MatchString(fn.Name) || re.MatchString(fn.Filename) { + continue + } + } + lines = append(lines, ln) + } + return lines +} + +// matchedLines returns the lines in the location that match +// the regular expression. +func (loc *Location) matchedLines(re *regexp.Regexp) []Line { + if m := loc.Mapping; m != nil && re.MatchString(m.File) { + return loc.Line + } + var lines []Line + for _, ln := range loc.Line { + if fn := ln.Function; fn != nil { + if !re.MatchString(fn.Name) && !re.MatchString(fn.Filename) { + continue + } + } + lines = append(lines, ln) + } + return lines +} + +// focusedAndNotIgnored looks up a slice of ids against a map of +// focused/ignored locations. The map only contains locations that are +// explicitly focused or ignored. Returns whether there is at least +// one focused location but no ignored locations. +func focusedAndNotIgnored(locs []*Location, m map[uint64]bool) bool { + var f bool + for _, loc := range locs { + if focus, focusOrIgnore := m[loc.ID]; focusOrIgnore { + if focus { + // Found focused location. Must keep searching in case there + // is an ignored one as well. + f = true + } else { + // Found ignored location. Can return false right away. + return false + } + } + } + return f +} + +// TagMatch selects tags for filtering +type TagMatch func(s *Sample) bool + +// FilterSamplesByTag removes all samples from the profile, except +// those that match focus and do not match the ignore regular +// expression. +func (p *Profile) FilterSamplesByTag(focus, ignore TagMatch) (fm, im bool) { + samples := make([]*Sample, 0, len(p.Sample)) + for _, s := range p.Sample { + focused, ignored := true, false + if focus != nil { + focused = focus(s) + } + if ignore != nil { + ignored = ignore(s) + } + fm = fm || focused + im = im || ignored + if focused && !ignored { + samples = append(samples, s) + } + } + p.Sample = samples + return +} diff --git a/vendor/github.com/google/pprof/profile/index.go b/vendor/github.com/google/pprof/profile/index.go new file mode 100644 index 0000000..bef1d60 --- /dev/null +++ b/vendor/github.com/google/pprof/profile/index.go @@ -0,0 +1,64 @@ +// Copyright 2016 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package profile + +import ( + "fmt" + "strconv" + "strings" +) + +// SampleIndexByName returns the appropriate index for a value of sample index. +// If numeric, it returns the number, otherwise it looks up the text in the +// profile sample types. +func (p *Profile) SampleIndexByName(sampleIndex string) (int, error) { + if sampleIndex == "" { + if dst := p.DefaultSampleType; dst != "" { + for i, t := range sampleTypes(p) { + if t == dst { + return i, nil + } + } + } + // By default select the last sample value + return len(p.SampleType) - 1, nil + } + if i, err := strconv.Atoi(sampleIndex); err == nil { + if i < 0 || i >= len(p.SampleType) { + return 0, fmt.Errorf("sample_index %s is outside the range [0..%d]", sampleIndex, len(p.SampleType)-1) + } + return i, nil + } + + // Remove the inuse_ prefix to support legacy pprof options + // "inuse_space" and "inuse_objects" for profiles containing types + // "space" and "objects". + noInuse := strings.TrimPrefix(sampleIndex, "inuse_") + for i, t := range p.SampleType { + if t.Type == sampleIndex || t.Type == noInuse { + return i, nil + } + } + + return 0, fmt.Errorf("sample_index %q must be one of: %v", sampleIndex, sampleTypes(p)) +} + +func sampleTypes(p *Profile) []string { + types := make([]string, len(p.SampleType)) + for i, t := range p.SampleType { + types[i] = t.Type + } + return types +} diff --git a/vendor/github.com/google/pprof/profile/legacy_java_profile.go b/vendor/github.com/google/pprof/profile/legacy_java_profile.go new file mode 100644 index 0000000..91f45e5 --- /dev/null +++ b/vendor/github.com/google/pprof/profile/legacy_java_profile.go @@ -0,0 +1,315 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file implements parsers to convert java legacy profiles into +// the profile.proto format. + +package profile + +import ( + "bytes" + "fmt" + "io" + "path/filepath" + "regexp" + "strconv" + "strings" +) + +var ( + attributeRx = regexp.MustCompile(`([\w ]+)=([\w ]+)`) + javaSampleRx = regexp.MustCompile(` *(\d+) +(\d+) +@ +([ x0-9a-f]*)`) + javaLocationRx = regexp.MustCompile(`^\s*0x([[:xdigit:]]+)\s+(.*)\s*$`) + javaLocationFileLineRx = regexp.MustCompile(`^(.*)\s+\((.+):(-?[[:digit:]]+)\)$`) + javaLocationPathRx = regexp.MustCompile(`^(.*)\s+\((.*)\)$`) +) + +// javaCPUProfile returns a new Profile from profilez data. +// b is the profile bytes after the header, period is the profiling +// period, and parse is a function to parse 8-byte chunks from the +// profile in its native endianness. +func javaCPUProfile(b []byte, period int64, parse func(b []byte) (uint64, []byte)) (*Profile, error) { + p := &Profile{ + Period: period * 1000, + PeriodType: &ValueType{Type: "cpu", Unit: "nanoseconds"}, + SampleType: []*ValueType{{Type: "samples", Unit: "count"}, {Type: "cpu", Unit: "nanoseconds"}}, + } + var err error + var locs map[uint64]*Location + if b, locs, err = parseCPUSamples(b, parse, false, p); err != nil { + return nil, err + } + + if err = parseJavaLocations(b, locs, p); err != nil { + return nil, err + } + + // Strip out addresses for better merge. + if err = p.Aggregate(true, true, true, true, false); err != nil { + return nil, err + } + + return p, nil +} + +// parseJavaProfile returns a new profile from heapz or contentionz +// data. b is the profile bytes after the header. +func parseJavaProfile(b []byte) (*Profile, error) { + h := bytes.SplitAfterN(b, []byte("\n"), 2) + if len(h) < 2 { + return nil, errUnrecognized + } + + p := &Profile{ + PeriodType: &ValueType{}, + } + header := string(bytes.TrimSpace(h[0])) + + var err error + var pType string + switch header { + case "--- heapz 1 ---": + pType = "heap" + case "--- contentionz 1 ---": + pType = "contention" + default: + return nil, errUnrecognized + } + + if b, err = parseJavaHeader(pType, h[1], p); err != nil { + return nil, err + } + var locs map[uint64]*Location + if b, locs, err = parseJavaSamples(pType, b, p); err != nil { + return nil, err + } + if err = parseJavaLocations(b, locs, p); err != nil { + return nil, err + } + + // Strip out addresses for better merge. + if err = p.Aggregate(true, true, true, true, false); err != nil { + return nil, err + } + + return p, nil +} + +// parseJavaHeader parses the attribute section on a java profile and +// populates a profile. Returns the remainder of the buffer after all +// attributes. +func parseJavaHeader(pType string, b []byte, p *Profile) ([]byte, error) { + nextNewLine := bytes.IndexByte(b, byte('\n')) + for nextNewLine != -1 { + line := string(bytes.TrimSpace(b[0:nextNewLine])) + if line != "" { + h := attributeRx.FindStringSubmatch(line) + if h == nil { + // Not a valid attribute, exit. + return b, nil + } + + attribute, value := strings.TrimSpace(h[1]), strings.TrimSpace(h[2]) + var err error + switch pType + "/" + attribute { + case "heap/format", "cpu/format", "contention/format": + if value != "java" { + return nil, errUnrecognized + } + case "heap/resolution": + p.SampleType = []*ValueType{ + {Type: "inuse_objects", Unit: "count"}, + {Type: "inuse_space", Unit: value}, + } + case "contention/resolution": + p.SampleType = []*ValueType{ + {Type: "contentions", Unit: "count"}, + {Type: "delay", Unit: value}, + } + case "contention/sampling period": + p.PeriodType = &ValueType{ + Type: "contentions", Unit: "count", + } + if p.Period, err = strconv.ParseInt(value, 0, 64); err != nil { + return nil, fmt.Errorf("failed to parse attribute %s: %v", line, err) + } + case "contention/ms since reset": + millis, err := strconv.ParseInt(value, 0, 64) + if err != nil { + return nil, fmt.Errorf("failed to parse attribute %s: %v", line, err) + } + p.DurationNanos = millis * 1000 * 1000 + default: + return nil, errUnrecognized + } + } + // Grab next line. + b = b[nextNewLine+1:] + nextNewLine = bytes.IndexByte(b, byte('\n')) + } + return b, nil +} + +// parseJavaSamples parses the samples from a java profile and +// populates the Samples in a profile. Returns the remainder of the +// buffer after the samples. +func parseJavaSamples(pType string, b []byte, p *Profile) ([]byte, map[uint64]*Location, error) { + nextNewLine := bytes.IndexByte(b, byte('\n')) + locs := make(map[uint64]*Location) + for nextNewLine != -1 { + line := string(bytes.TrimSpace(b[0:nextNewLine])) + if line != "" { + sample := javaSampleRx.FindStringSubmatch(line) + if sample == nil { + // Not a valid sample, exit. + return b, locs, nil + } + + // Java profiles have data/fields inverted compared to other + // profile types. + var err error + value1, value2, value3 := sample[2], sample[1], sample[3] + addrs, err := parseHexAddresses(value3) + if err != nil { + return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + + var sloc []*Location + for _, addr := range addrs { + loc := locs[addr] + if locs[addr] == nil { + loc = &Location{ + Address: addr, + } + p.Location = append(p.Location, loc) + locs[addr] = loc + } + sloc = append(sloc, loc) + } + s := &Sample{ + Value: make([]int64, 2), + Location: sloc, + } + + if s.Value[0], err = strconv.ParseInt(value1, 0, 64); err != nil { + return nil, nil, fmt.Errorf("parsing sample %s: %v", line, err) + } + if s.Value[1], err = strconv.ParseInt(value2, 0, 64); err != nil { + return nil, nil, fmt.Errorf("parsing sample %s: %v", line, err) + } + + switch pType { + case "heap": + const javaHeapzSamplingRate = 524288 // 512K + if s.Value[0] == 0 { + return nil, nil, fmt.Errorf("parsing sample %s: second value must be non-zero", line) + } + s.NumLabel = map[string][]int64{"bytes": {s.Value[1] / s.Value[0]}} + s.Value[0], s.Value[1] = scaleHeapSample(s.Value[0], s.Value[1], javaHeapzSamplingRate) + case "contention": + if period := p.Period; period != 0 { + s.Value[0] = s.Value[0] * p.Period + s.Value[1] = s.Value[1] * p.Period + } + } + p.Sample = append(p.Sample, s) + } + // Grab next line. + b = b[nextNewLine+1:] + nextNewLine = bytes.IndexByte(b, byte('\n')) + } + return b, locs, nil +} + +// parseJavaLocations parses the location information in a java +// profile and populates the Locations in a profile. It uses the +// location addresses from the profile as both the ID of each +// location. +func parseJavaLocations(b []byte, locs map[uint64]*Location, p *Profile) error { + r := bytes.NewBuffer(b) + fns := make(map[string]*Function) + for { + line, err := r.ReadString('\n') + if err != nil { + if err != io.EOF { + return err + } + if line == "" { + break + } + } + + if line = strings.TrimSpace(line); line == "" { + continue + } + + jloc := javaLocationRx.FindStringSubmatch(line) + if len(jloc) != 3 { + continue + } + addr, err := strconv.ParseUint(jloc[1], 16, 64) + if err != nil { + return fmt.Errorf("parsing sample %s: %v", line, err) + } + loc := locs[addr] + if loc == nil { + // Unused/unseen + continue + } + var lineFunc, lineFile string + var lineNo int64 + + if fileLine := javaLocationFileLineRx.FindStringSubmatch(jloc[2]); len(fileLine) == 4 { + // Found a line of the form: "function (file:line)" + lineFunc, lineFile = fileLine[1], fileLine[2] + if n, err := strconv.ParseInt(fileLine[3], 10, 64); err == nil && n > 0 { + lineNo = n + } + } else if filePath := javaLocationPathRx.FindStringSubmatch(jloc[2]); len(filePath) == 3 { + // If there's not a file:line, it's a shared library path. + // The path isn't interesting, so just give the .so. + lineFunc, lineFile = filePath[1], filepath.Base(filePath[2]) + } else if strings.Contains(jloc[2], "generated stub/JIT") { + lineFunc = "STUB" + } else { + // Treat whole line as the function name. This is used by the + // java agent for internal states such as "GC" or "VM". + lineFunc = jloc[2] + } + fn := fns[lineFunc] + + if fn == nil { + fn = &Function{ + Name: lineFunc, + SystemName: lineFunc, + Filename: lineFile, + } + fns[lineFunc] = fn + p.Function = append(p.Function, fn) + } + loc.Line = []Line{ + { + Function: fn, + Line: lineNo, + }, + } + loc.Address = 0 + } + + p.remapLocationIDs() + p.remapFunctionIDs() + p.remapMappingIDs() + + return nil +} diff --git a/vendor/github.com/google/pprof/profile/legacy_profile.go b/vendor/github.com/google/pprof/profile/legacy_profile.go new file mode 100644 index 0000000..0c8f3bb --- /dev/null +++ b/vendor/github.com/google/pprof/profile/legacy_profile.go @@ -0,0 +1,1225 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file implements parsers to convert legacy profiles into the +// profile.proto format. + +package profile + +import ( + "bufio" + "bytes" + "fmt" + "io" + "math" + "regexp" + "strconv" + "strings" +) + +var ( + countStartRE = regexp.MustCompile(`\A(\S+) profile: total \d+\z`) + countRE = regexp.MustCompile(`\A(\d+) @(( 0x[0-9a-f]+)+)\z`) + + heapHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] *@ *(heap[_a-z0-9]*)/?(\d*)`) + heapSampleRE = regexp.MustCompile(`(-?\d+): *(-?\d+) *\[ *(\d+): *(\d+) *] @([ x0-9a-f]*)`) + + contentionSampleRE = regexp.MustCompile(`(\d+) *(\d+) @([ x0-9a-f]*)`) + + hexNumberRE = regexp.MustCompile(`0x[0-9a-f]+`) + + growthHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] @ growthz?`) + + fragmentationHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] @ fragmentationz?`) + + threadzStartRE = regexp.MustCompile(`--- threadz \d+ ---`) + threadStartRE = regexp.MustCompile(`--- Thread ([[:xdigit:]]+) \(name: (.*)/(\d+)\) stack: ---`) + + // Regular expressions to parse process mappings. Support the format used by Linux /proc/.../maps and other tools. + // Recommended format: + // Start End object file name offset(optional) linker build id + // 0x40000-0x80000 /path/to/binary (@FF00) abc123456 + spaceDigits = `\s+[[:digit:]]+` + hexPair = `\s+[[:xdigit:]]+:[[:xdigit:]]+` + oSpace = `\s*` + // Capturing expressions. + cHex = `(?:0x)?([[:xdigit:]]+)` + cHexRange = `\s*` + cHex + `[\s-]?` + oSpace + cHex + `:?` + cSpaceString = `(?:\s+(\S+))?` + cSpaceHex = `(?:\s+([[:xdigit:]]+))?` + cSpaceAtOffset = `(?:\s+\(@([[:xdigit:]]+)\))?` + cPerm = `(?:\s+([-rwxp]+))?` + + procMapsRE = regexp.MustCompile(`^` + cHexRange + cPerm + cSpaceHex + hexPair + spaceDigits + cSpaceString) + briefMapsRE = regexp.MustCompile(`^` + cHexRange + cPerm + cSpaceString + cSpaceAtOffset + cSpaceHex) + + // Regular expression to parse log data, of the form: + // ... file:line] msg... + logInfoRE = regexp.MustCompile(`^[^\[\]]+:[0-9]+]\s`) +) + +func isSpaceOrComment(line string) bool { + trimmed := strings.TrimSpace(line) + return len(trimmed) == 0 || trimmed[0] == '#' +} + +// parseGoCount parses a Go count profile (e.g., threadcreate or +// goroutine) and returns a new Profile. +func parseGoCount(b []byte) (*Profile, error) { + s := bufio.NewScanner(bytes.NewBuffer(b)) + // Skip comments at the beginning of the file. + for s.Scan() && isSpaceOrComment(s.Text()) { + } + if err := s.Err(); err != nil { + return nil, err + } + m := countStartRE.FindStringSubmatch(s.Text()) + if m == nil { + return nil, errUnrecognized + } + profileType := m[1] + p := &Profile{ + PeriodType: &ValueType{Type: profileType, Unit: "count"}, + Period: 1, + SampleType: []*ValueType{{Type: profileType, Unit: "count"}}, + } + locations := make(map[uint64]*Location) + for s.Scan() { + line := s.Text() + if isSpaceOrComment(line) { + continue + } + if strings.HasPrefix(line, "---") { + break + } + m := countRE.FindStringSubmatch(line) + if m == nil { + return nil, errMalformed + } + n, err := strconv.ParseInt(m[1], 0, 64) + if err != nil { + return nil, errMalformed + } + fields := strings.Fields(m[2]) + locs := make([]*Location, 0, len(fields)) + for _, stk := range fields { + addr, err := strconv.ParseUint(stk, 0, 64) + if err != nil { + return nil, errMalformed + } + // Adjust all frames by -1 to land on top of the call instruction. + addr-- + loc := locations[addr] + if loc == nil { + loc = &Location{ + Address: addr, + } + locations[addr] = loc + p.Location = append(p.Location, loc) + } + locs = append(locs, loc) + } + p.Sample = append(p.Sample, &Sample{ + Location: locs, + Value: []int64{n}, + }) + } + if err := s.Err(); err != nil { + return nil, err + } + + if err := parseAdditionalSections(s, p); err != nil { + return nil, err + } + return p, nil +} + +// remapLocationIDs ensures there is a location for each address +// referenced by a sample, and remaps the samples to point to the new +// location ids. +func (p *Profile) remapLocationIDs() { + seen := make(map[*Location]bool, len(p.Location)) + var locs []*Location + + for _, s := range p.Sample { + for _, l := range s.Location { + if seen[l] { + continue + } + l.ID = uint64(len(locs) + 1) + locs = append(locs, l) + seen[l] = true + } + } + p.Location = locs +} + +func (p *Profile) remapFunctionIDs() { + seen := make(map[*Function]bool, len(p.Function)) + var fns []*Function + + for _, l := range p.Location { + for _, ln := range l.Line { + fn := ln.Function + if fn == nil || seen[fn] { + continue + } + fn.ID = uint64(len(fns) + 1) + fns = append(fns, fn) + seen[fn] = true + } + } + p.Function = fns +} + +// remapMappingIDs matches location addresses with existing mappings +// and updates them appropriately. This is O(N*M), if this ever shows +// up as a bottleneck, evaluate sorting the mappings and doing a +// binary search, which would make it O(N*log(M)). +func (p *Profile) remapMappingIDs() { + // Some profile handlers will incorrectly set regions for the main + // executable if its section is remapped. Fix them through heuristics. + + if len(p.Mapping) > 0 { + // Remove the initial mapping if named '/anon_hugepage' and has a + // consecutive adjacent mapping. + if m := p.Mapping[0]; strings.HasPrefix(m.File, "/anon_hugepage") { + if len(p.Mapping) > 1 && m.Limit == p.Mapping[1].Start { + p.Mapping = p.Mapping[1:] + } + } + } + + // Subtract the offset from the start of the main mapping if it + // ends up at a recognizable start address. + if len(p.Mapping) > 0 { + const expectedStart = 0x400000 + if m := p.Mapping[0]; m.Start-m.Offset == expectedStart { + m.Start = expectedStart + m.Offset = 0 + } + } + + // Associate each location with an address to the corresponding + // mapping. Create fake mapping if a suitable one isn't found. + var fake *Mapping +nextLocation: + for _, l := range p.Location { + a := l.Address + if l.Mapping != nil || a == 0 { + continue + } + for _, m := range p.Mapping { + if m.Start <= a && a < m.Limit { + l.Mapping = m + continue nextLocation + } + } + // Work around legacy handlers failing to encode the first + // part of mappings split into adjacent ranges. + for _, m := range p.Mapping { + if m.Offset != 0 && m.Start-m.Offset <= a && a < m.Start { + m.Start -= m.Offset + m.Offset = 0 + l.Mapping = m + continue nextLocation + } + } + // If there is still no mapping, create a fake one. + // This is important for the Go legacy handler, which produced + // no mappings. + if fake == nil { + fake = &Mapping{ + ID: 1, + Limit: ^uint64(0), + } + p.Mapping = append(p.Mapping, fake) + } + l.Mapping = fake + } + + // Reset all mapping IDs. + for i, m := range p.Mapping { + m.ID = uint64(i + 1) + } +} + +var cpuInts = []func([]byte) (uint64, []byte){ + get32l, + get32b, + get64l, + get64b, +} + +func get32l(b []byte) (uint64, []byte) { + if len(b) < 4 { + return 0, nil + } + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24, b[4:] +} + +func get32b(b []byte) (uint64, []byte) { + if len(b) < 4 { + return 0, nil + } + return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24, b[4:] +} + +func get64l(b []byte) (uint64, []byte) { + if len(b) < 8 { + return 0, nil + } + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56, b[8:] +} + +func get64b(b []byte) (uint64, []byte) { + if len(b) < 8 { + return 0, nil + } + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56, b[8:] +} + +// parseCPU parses a profilez legacy profile and returns a newly +// populated Profile. +// +// The general format for profilez samples is a sequence of words in +// binary format. The first words are a header with the following data: +// 1st word -- 0 +// 2nd word -- 3 +// 3rd word -- 0 if a c++ application, 1 if a java application. +// 4th word -- Sampling period (in microseconds). +// 5th word -- Padding. +func parseCPU(b []byte) (*Profile, error) { + var parse func([]byte) (uint64, []byte) + var n1, n2, n3, n4, n5 uint64 + for _, parse = range cpuInts { + var tmp []byte + n1, tmp = parse(b) + n2, tmp = parse(tmp) + n3, tmp = parse(tmp) + n4, tmp = parse(tmp) + n5, tmp = parse(tmp) + + if tmp != nil && n1 == 0 && n2 == 3 && n3 == 0 && n4 > 0 && n5 == 0 { + b = tmp + return cpuProfile(b, int64(n4), parse) + } + if tmp != nil && n1 == 0 && n2 == 3 && n3 == 1 && n4 > 0 && n5 == 0 { + b = tmp + return javaCPUProfile(b, int64(n4), parse) + } + } + return nil, errUnrecognized +} + +// cpuProfile returns a new Profile from C++ profilez data. +// b is the profile bytes after the header, period is the profiling +// period, and parse is a function to parse 8-byte chunks from the +// profile in its native endianness. +func cpuProfile(b []byte, period int64, parse func(b []byte) (uint64, []byte)) (*Profile, error) { + p := &Profile{ + Period: period * 1000, + PeriodType: &ValueType{Type: "cpu", Unit: "nanoseconds"}, + SampleType: []*ValueType{ + {Type: "samples", Unit: "count"}, + {Type: "cpu", Unit: "nanoseconds"}, + }, + } + var err error + if b, _, err = parseCPUSamples(b, parse, true, p); err != nil { + return nil, err + } + + // If *most* samples have the same second-to-the-bottom frame, it + // strongly suggests that it is an uninteresting artifact of + // measurement -- a stack frame pushed by the signal handler. The + // bottom frame is always correct as it is picked up from the signal + // structure, not the stack. Check if this is the case and if so, + // remove. + + // Remove up to two frames. + maxiter := 2 + // Allow one different sample for this many samples with the same + // second-to-last frame. + similarSamples := 32 + margin := len(p.Sample) / similarSamples + + for iter := 0; iter < maxiter; iter++ { + addr1 := make(map[uint64]int) + for _, s := range p.Sample { + if len(s.Location) > 1 { + a := s.Location[1].Address + addr1[a] = addr1[a] + 1 + } + } + + for id1, count := range addr1 { + if count >= len(p.Sample)-margin { + // Found uninteresting frame, strip it out from all samples + for _, s := range p.Sample { + if len(s.Location) > 1 && s.Location[1].Address == id1 { + s.Location = append(s.Location[:1], s.Location[2:]...) + } + } + break + } + } + } + + if err := p.ParseMemoryMap(bytes.NewBuffer(b)); err != nil { + return nil, err + } + + cleanupDuplicateLocations(p) + return p, nil +} + +func cleanupDuplicateLocations(p *Profile) { + // The profile handler may duplicate the leaf frame, because it gets + // its address both from stack unwinding and from the signal + // context. Detect this and delete the duplicate, which has been + // adjusted by -1. The leaf address should not be adjusted as it is + // not a call. + for _, s := range p.Sample { + if len(s.Location) > 1 && s.Location[0].Address == s.Location[1].Address+1 { + s.Location = append(s.Location[:1], s.Location[2:]...) + } + } +} + +// parseCPUSamples parses a collection of profilez samples from a +// profile. +// +// profilez samples are a repeated sequence of stack frames of the +// form: +// 1st word -- The number of times this stack was encountered. +// 2nd word -- The size of the stack (StackSize). +// 3rd word -- The first address on the stack. +// ... +// StackSize + 2 -- The last address on the stack +// The last stack trace is of the form: +// 1st word -- 0 +// 2nd word -- 1 +// 3rd word -- 0 +// +// Addresses from stack traces may point to the next instruction after +// each call. Optionally adjust by -1 to land somewhere on the actual +// call (except for the leaf, which is not a call). +func parseCPUSamples(b []byte, parse func(b []byte) (uint64, []byte), adjust bool, p *Profile) ([]byte, map[uint64]*Location, error) { + locs := make(map[uint64]*Location) + for len(b) > 0 { + var count, nstk uint64 + count, b = parse(b) + nstk, b = parse(b) + if b == nil || nstk > uint64(len(b)/4) { + return nil, nil, errUnrecognized + } + var sloc []*Location + addrs := make([]uint64, nstk) + for i := 0; i < int(nstk); i++ { + addrs[i], b = parse(b) + } + + if count == 0 && nstk == 1 && addrs[0] == 0 { + // End of data marker + break + } + for i, addr := range addrs { + if adjust && i > 0 { + addr-- + } + loc := locs[addr] + if loc == nil { + loc = &Location{ + Address: addr, + } + locs[addr] = loc + p.Location = append(p.Location, loc) + } + sloc = append(sloc, loc) + } + p.Sample = append(p.Sample, + &Sample{ + Value: []int64{int64(count), int64(count) * p.Period}, + Location: sloc, + }) + } + // Reached the end without finding the EOD marker. + return b, locs, nil +} + +// parseHeap parses a heapz legacy or a growthz profile and +// returns a newly populated Profile. +func parseHeap(b []byte) (p *Profile, err error) { + s := bufio.NewScanner(bytes.NewBuffer(b)) + if !s.Scan() { + if err := s.Err(); err != nil { + return nil, err + } + return nil, errUnrecognized + } + p = &Profile{} + + sampling := "" + hasAlloc := false + + line := s.Text() + p.PeriodType = &ValueType{Type: "space", Unit: "bytes"} + if header := heapHeaderRE.FindStringSubmatch(line); header != nil { + sampling, p.Period, hasAlloc, err = parseHeapHeader(line) + if err != nil { + return nil, err + } + } else if header = growthHeaderRE.FindStringSubmatch(line); header != nil { + p.Period = 1 + } else if header = fragmentationHeaderRE.FindStringSubmatch(line); header != nil { + p.Period = 1 + } else { + return nil, errUnrecognized + } + + if hasAlloc { + // Put alloc before inuse so that default pprof selection + // will prefer inuse_space. + p.SampleType = []*ValueType{ + {Type: "alloc_objects", Unit: "count"}, + {Type: "alloc_space", Unit: "bytes"}, + {Type: "inuse_objects", Unit: "count"}, + {Type: "inuse_space", Unit: "bytes"}, + } + } else { + p.SampleType = []*ValueType{ + {Type: "objects", Unit: "count"}, + {Type: "space", Unit: "bytes"}, + } + } + + locs := make(map[uint64]*Location) + for s.Scan() { + line := strings.TrimSpace(s.Text()) + + if isSpaceOrComment(line) { + continue + } + + if isMemoryMapSentinel(line) { + break + } + + value, blocksize, addrs, err := parseHeapSample(line, p.Period, sampling, hasAlloc) + if err != nil { + return nil, err + } + + var sloc []*Location + for _, addr := range addrs { + // Addresses from stack traces point to the next instruction after + // each call. Adjust by -1 to land somewhere on the actual call. + addr-- + loc := locs[addr] + if locs[addr] == nil { + loc = &Location{ + Address: addr, + } + p.Location = append(p.Location, loc) + locs[addr] = loc + } + sloc = append(sloc, loc) + } + + p.Sample = append(p.Sample, &Sample{ + Value: value, + Location: sloc, + NumLabel: map[string][]int64{"bytes": {blocksize}}, + }) + } + if err := s.Err(); err != nil { + return nil, err + } + if err := parseAdditionalSections(s, p); err != nil { + return nil, err + } + return p, nil +} + +func parseHeapHeader(line string) (sampling string, period int64, hasAlloc bool, err error) { + header := heapHeaderRE.FindStringSubmatch(line) + if header == nil { + return "", 0, false, errUnrecognized + } + + if len(header[6]) > 0 { + if period, err = strconv.ParseInt(header[6], 10, 64); err != nil { + return "", 0, false, errUnrecognized + } + } + + if (header[3] != header[1] && header[3] != "0") || (header[4] != header[2] && header[4] != "0") { + hasAlloc = true + } + + switch header[5] { + case "heapz_v2", "heap_v2": + return "v2", period, hasAlloc, nil + case "heapprofile": + return "", 1, hasAlloc, nil + case "heap": + return "v2", period / 2, hasAlloc, nil + default: + return "", 0, false, errUnrecognized + } +} + +// parseHeapSample parses a single row from a heap profile into a new Sample. +func parseHeapSample(line string, rate int64, sampling string, includeAlloc bool) (value []int64, blocksize int64, addrs []uint64, err error) { + sampleData := heapSampleRE.FindStringSubmatch(line) + if len(sampleData) != 6 { + return nil, 0, nil, fmt.Errorf("unexpected number of sample values: got %d, want 6", len(sampleData)) + } + + // This is a local-scoped helper function to avoid needing to pass + // around rate, sampling and many return parameters. + addValues := func(countString, sizeString string, label string) error { + count, err := strconv.ParseInt(countString, 10, 64) + if err != nil { + return fmt.Errorf("malformed sample: %s: %v", line, err) + } + size, err := strconv.ParseInt(sizeString, 10, 64) + if err != nil { + return fmt.Errorf("malformed sample: %s: %v", line, err) + } + if count == 0 && size != 0 { + return fmt.Errorf("%s count was 0 but %s bytes was %d", label, label, size) + } + if count != 0 { + blocksize = size / count + if sampling == "v2" { + count, size = scaleHeapSample(count, size, rate) + } + } + value = append(value, count, size) + return nil + } + + if includeAlloc { + if err := addValues(sampleData[3], sampleData[4], "allocation"); err != nil { + return nil, 0, nil, err + } + } + + if err := addValues(sampleData[1], sampleData[2], "inuse"); err != nil { + return nil, 0, nil, err + } + + addrs, err = parseHexAddresses(sampleData[5]) + if err != nil { + return nil, 0, nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + + return value, blocksize, addrs, nil +} + +// parseHexAddresses extracts hex numbers from a string, attempts to convert +// each to an unsigned 64-bit number and returns the resulting numbers as a +// slice, or an error if the string contains hex numbers which are too large to +// handle (which means a malformed profile). +func parseHexAddresses(s string) ([]uint64, error) { + hexStrings := hexNumberRE.FindAllString(s, -1) + var addrs []uint64 + for _, s := range hexStrings { + if addr, err := strconv.ParseUint(s, 0, 64); err == nil { + addrs = append(addrs, addr) + } else { + return nil, fmt.Errorf("failed to parse as hex 64-bit number: %s", s) + } + } + return addrs, nil +} + +// scaleHeapSample adjusts the data from a heapz Sample to +// account for its probability of appearing in the collected +// data. heapz profiles are a sampling of the memory allocations +// requests in a program. We estimate the unsampled value by dividing +// each collected sample by its probability of appearing in the +// profile. heapz v2 profiles rely on a poisson process to determine +// which samples to collect, based on the desired average collection +// rate R. The probability of a sample of size S to appear in that +// profile is 1-exp(-S/R). +func scaleHeapSample(count, size, rate int64) (int64, int64) { + if count == 0 || size == 0 { + return 0, 0 + } + + if rate <= 1 { + // if rate==1 all samples were collected so no adjustment is needed. + // if rate<1 treat as unknown and skip scaling. + return count, size + } + + avgSize := float64(size) / float64(count) + scale := 1 / (1 - math.Exp(-avgSize/float64(rate))) + + return int64(float64(count) * scale), int64(float64(size) * scale) +} + +// parseContention parses a mutex or contention profile. There are 2 cases: +// "--- contentionz " for legacy C++ profiles (and backwards compatibility) +// "--- mutex:" or "--- contention:" for profiles generated by the Go runtime. +func parseContention(b []byte) (*Profile, error) { + s := bufio.NewScanner(bytes.NewBuffer(b)) + if !s.Scan() { + if err := s.Err(); err != nil { + return nil, err + } + return nil, errUnrecognized + } + + switch l := s.Text(); { + case strings.HasPrefix(l, "--- contentionz "): + case strings.HasPrefix(l, "--- mutex:"): + case strings.HasPrefix(l, "--- contention:"): + default: + return nil, errUnrecognized + } + + p := &Profile{ + PeriodType: &ValueType{Type: "contentions", Unit: "count"}, + Period: 1, + SampleType: []*ValueType{ + {Type: "contentions", Unit: "count"}, + {Type: "delay", Unit: "nanoseconds"}, + }, + } + + var cpuHz int64 + // Parse text of the form "attribute = value" before the samples. + const delimiter = "=" + for s.Scan() { + line := s.Text() + if line = strings.TrimSpace(line); isSpaceOrComment(line) { + continue + } + if strings.HasPrefix(line, "---") { + break + } + attr := strings.SplitN(line, delimiter, 2) + if len(attr) != 2 { + break + } + key, val := strings.TrimSpace(attr[0]), strings.TrimSpace(attr[1]) + var err error + switch key { + case "cycles/second": + if cpuHz, err = strconv.ParseInt(val, 0, 64); err != nil { + return nil, errUnrecognized + } + case "sampling period": + if p.Period, err = strconv.ParseInt(val, 0, 64); err != nil { + return nil, errUnrecognized + } + case "ms since reset": + ms, err := strconv.ParseInt(val, 0, 64) + if err != nil { + return nil, errUnrecognized + } + p.DurationNanos = ms * 1000 * 1000 + case "format": + // CPP contentionz profiles don't have format. + return nil, errUnrecognized + case "resolution": + // CPP contentionz profiles don't have resolution. + return nil, errUnrecognized + case "discarded samples": + default: + return nil, errUnrecognized + } + } + if err := s.Err(); err != nil { + return nil, err + } + + locs := make(map[uint64]*Location) + for { + line := strings.TrimSpace(s.Text()) + if strings.HasPrefix(line, "---") { + break + } + if !isSpaceOrComment(line) { + value, addrs, err := parseContentionSample(line, p.Period, cpuHz) + if err != nil { + return nil, err + } + var sloc []*Location + for _, addr := range addrs { + // Addresses from stack traces point to the next instruction after + // each call. Adjust by -1 to land somewhere on the actual call. + addr-- + loc := locs[addr] + if locs[addr] == nil { + loc = &Location{ + Address: addr, + } + p.Location = append(p.Location, loc) + locs[addr] = loc + } + sloc = append(sloc, loc) + } + p.Sample = append(p.Sample, &Sample{ + Value: value, + Location: sloc, + }) + } + if !s.Scan() { + break + } + } + if err := s.Err(); err != nil { + return nil, err + } + + if err := parseAdditionalSections(s, p); err != nil { + return nil, err + } + + return p, nil +} + +// parseContentionSample parses a single row from a contention profile +// into a new Sample. +func parseContentionSample(line string, period, cpuHz int64) (value []int64, addrs []uint64, err error) { + sampleData := contentionSampleRE.FindStringSubmatch(line) + if sampleData == nil { + return nil, nil, errUnrecognized + } + + v1, err := strconv.ParseInt(sampleData[1], 10, 64) + if err != nil { + return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + v2, err := strconv.ParseInt(sampleData[2], 10, 64) + if err != nil { + return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + + // Unsample values if period and cpuHz are available. + // - Delays are scaled to cycles and then to nanoseconds. + // - Contentions are scaled to cycles. + if period > 0 { + if cpuHz > 0 { + cpuGHz := float64(cpuHz) / 1e9 + v1 = int64(float64(v1) * float64(period) / cpuGHz) + } + v2 = v2 * period + } + + value = []int64{v2, v1} + addrs, err = parseHexAddresses(sampleData[3]) + if err != nil { + return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + + return value, addrs, nil +} + +// parseThread parses a Threadz profile and returns a new Profile. +func parseThread(b []byte) (*Profile, error) { + s := bufio.NewScanner(bytes.NewBuffer(b)) + // Skip past comments and empty lines seeking a real header. + for s.Scan() && isSpaceOrComment(s.Text()) { + } + + line := s.Text() + if m := threadzStartRE.FindStringSubmatch(line); m != nil { + // Advance over initial comments until first stack trace. + for s.Scan() { + if line = s.Text(); isMemoryMapSentinel(line) || strings.HasPrefix(line, "-") { + break + } + } + } else if t := threadStartRE.FindStringSubmatch(line); len(t) != 4 { + return nil, errUnrecognized + } + + p := &Profile{ + SampleType: []*ValueType{{Type: "thread", Unit: "count"}}, + PeriodType: &ValueType{Type: "thread", Unit: "count"}, + Period: 1, + } + + locs := make(map[uint64]*Location) + // Recognize each thread and populate profile samples. + for !isMemoryMapSentinel(line) { + if strings.HasPrefix(line, "---- no stack trace for") { + line = "" + break + } + if t := threadStartRE.FindStringSubmatch(line); len(t) != 4 { + return nil, errUnrecognized + } + + var addrs []uint64 + var err error + line, addrs, err = parseThreadSample(s) + if err != nil { + return nil, err + } + if len(addrs) == 0 { + // We got a --same as previous threads--. Bump counters. + if len(p.Sample) > 0 { + s := p.Sample[len(p.Sample)-1] + s.Value[0]++ + } + continue + } + + var sloc []*Location + for i, addr := range addrs { + // Addresses from stack traces point to the next instruction after + // each call. Adjust by -1 to land somewhere on the actual call + // (except for the leaf, which is not a call). + if i > 0 { + addr-- + } + loc := locs[addr] + if locs[addr] == nil { + loc = &Location{ + Address: addr, + } + p.Location = append(p.Location, loc) + locs[addr] = loc + } + sloc = append(sloc, loc) + } + + p.Sample = append(p.Sample, &Sample{ + Value: []int64{1}, + Location: sloc, + }) + } + + if err := parseAdditionalSections(s, p); err != nil { + return nil, err + } + + cleanupDuplicateLocations(p) + return p, nil +} + +// parseThreadSample parses a symbolized or unsymbolized stack trace. +// Returns the first line after the traceback, the sample (or nil if +// it hits a 'same-as-previous' marker) and an error. +func parseThreadSample(s *bufio.Scanner) (nextl string, addrs []uint64, err error) { + var line string + sameAsPrevious := false + for s.Scan() { + line = strings.TrimSpace(s.Text()) + if line == "" { + continue + } + + if strings.HasPrefix(line, "---") { + break + } + if strings.Contains(line, "same as previous thread") { + sameAsPrevious = true + continue + } + + curAddrs, err := parseHexAddresses(line) + if err != nil { + return "", nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + addrs = append(addrs, curAddrs...) + } + if err := s.Err(); err != nil { + return "", nil, err + } + if sameAsPrevious { + return line, nil, nil + } + return line, addrs, nil +} + +// parseAdditionalSections parses any additional sections in the +// profile, ignoring any unrecognized sections. +func parseAdditionalSections(s *bufio.Scanner, p *Profile) error { + for !isMemoryMapSentinel(s.Text()) && s.Scan() { + } + if err := s.Err(); err != nil { + return err + } + return p.ParseMemoryMapFromScanner(s) +} + +// ParseProcMaps parses a memory map in the format of /proc/self/maps. +// ParseMemoryMap should be called after setting on a profile to +// associate locations to the corresponding mapping based on their +// address. +func ParseProcMaps(rd io.Reader) ([]*Mapping, error) { + s := bufio.NewScanner(rd) + return parseProcMapsFromScanner(s) +} + +func parseProcMapsFromScanner(s *bufio.Scanner) ([]*Mapping, error) { + var mapping []*Mapping + + var attrs []string + const delimiter = "=" + r := strings.NewReplacer() + for s.Scan() { + line := r.Replace(removeLoggingInfo(s.Text())) + m, err := parseMappingEntry(line) + if err != nil { + if err == errUnrecognized { + // Recognize assignments of the form: attr=value, and replace + // $attr with value on subsequent mappings. + if attr := strings.SplitN(line, delimiter, 2); len(attr) == 2 { + attrs = append(attrs, "$"+strings.TrimSpace(attr[0]), strings.TrimSpace(attr[1])) + r = strings.NewReplacer(attrs...) + } + // Ignore any unrecognized entries + continue + } + return nil, err + } + if m == nil { + continue + } + mapping = append(mapping, m) + } + if err := s.Err(); err != nil { + return nil, err + } + return mapping, nil +} + +// removeLoggingInfo detects and removes log prefix entries generated +// by the glog package. If no logging prefix is detected, the string +// is returned unmodified. +func removeLoggingInfo(line string) string { + if match := logInfoRE.FindStringIndex(line); match != nil { + return line[match[1]:] + } + return line +} + +// ParseMemoryMap parses a memory map in the format of +// /proc/self/maps, and overrides the mappings in the current profile. +// It renumbers the samples and locations in the profile correspondingly. +func (p *Profile) ParseMemoryMap(rd io.Reader) error { + return p.ParseMemoryMapFromScanner(bufio.NewScanner(rd)) +} + +// ParseMemoryMapFromScanner parses a memory map in the format of +// /proc/self/maps or a variety of legacy format, and overrides the +// mappings in the current profile. It renumbers the samples and +// locations in the profile correspondingly. +func (p *Profile) ParseMemoryMapFromScanner(s *bufio.Scanner) error { + mapping, err := parseProcMapsFromScanner(s) + if err != nil { + return err + } + p.Mapping = append(p.Mapping, mapping...) + p.massageMappings() + p.remapLocationIDs() + p.remapFunctionIDs() + p.remapMappingIDs() + return nil +} + +func parseMappingEntry(l string) (*Mapping, error) { + var start, end, perm, file, offset, buildID string + if me := procMapsRE.FindStringSubmatch(l); len(me) == 6 { + start, end, perm, offset, file = me[1], me[2], me[3], me[4], me[5] + } else if me := briefMapsRE.FindStringSubmatch(l); len(me) == 7 { + start, end, perm, file, offset, buildID = me[1], me[2], me[3], me[4], me[5], me[6] + } else { + return nil, errUnrecognized + } + + var err error + mapping := &Mapping{ + File: file, + BuildID: buildID, + } + if perm != "" && !strings.Contains(perm, "x") { + // Skip non-executable entries. + return nil, nil + } + if mapping.Start, err = strconv.ParseUint(start, 16, 64); err != nil { + return nil, errUnrecognized + } + if mapping.Limit, err = strconv.ParseUint(end, 16, 64); err != nil { + return nil, errUnrecognized + } + if offset != "" { + if mapping.Offset, err = strconv.ParseUint(offset, 16, 64); err != nil { + return nil, errUnrecognized + } + } + return mapping, nil +} + +var memoryMapSentinels = []string{ + "--- Memory map: ---", + "MAPPED_LIBRARIES:", +} + +// isMemoryMapSentinel returns true if the string contains one of the +// known sentinels for memory map information. +func isMemoryMapSentinel(line string) bool { + for _, s := range memoryMapSentinels { + if strings.Contains(line, s) { + return true + } + } + return false +} + +func (p *Profile) addLegacyFrameInfo() { + switch { + case isProfileType(p, heapzSampleTypes): + p.DropFrames, p.KeepFrames = allocRxStr, allocSkipRxStr + case isProfileType(p, contentionzSampleTypes): + p.DropFrames, p.KeepFrames = lockRxStr, "" + default: + p.DropFrames, p.KeepFrames = cpuProfilerRxStr, "" + } +} + +var heapzSampleTypes = [][]string{ + {"allocations", "size"}, // early Go pprof profiles + {"objects", "space"}, + {"inuse_objects", "inuse_space"}, + {"alloc_objects", "alloc_space"}, + {"alloc_objects", "alloc_space", "inuse_objects", "inuse_space"}, // Go pprof legacy profiles +} +var contentionzSampleTypes = [][]string{ + {"contentions", "delay"}, +} + +func isProfileType(p *Profile, types [][]string) bool { + st := p.SampleType +nextType: + for _, t := range types { + if len(st) != len(t) { + continue + } + + for i := range st { + if st[i].Type != t[i] { + continue nextType + } + } + return true + } + return false +} + +var allocRxStr = strings.Join([]string{ + // POSIX entry points. + `calloc`, + `cfree`, + `malloc`, + `free`, + `memalign`, + `do_memalign`, + `(__)?posix_memalign`, + `pvalloc`, + `valloc`, + `realloc`, + + // TC malloc. + `tcmalloc::.*`, + `tc_calloc`, + `tc_cfree`, + `tc_malloc`, + `tc_free`, + `tc_memalign`, + `tc_posix_memalign`, + `tc_pvalloc`, + `tc_valloc`, + `tc_realloc`, + `tc_new`, + `tc_delete`, + `tc_newarray`, + `tc_deletearray`, + `tc_new_nothrow`, + `tc_newarray_nothrow`, + + // Memory-allocation routines on OS X. + `malloc_zone_malloc`, + `malloc_zone_calloc`, + `malloc_zone_valloc`, + `malloc_zone_realloc`, + `malloc_zone_memalign`, + `malloc_zone_free`, + + // Go runtime + `runtime\..*`, + + // Other misc. memory allocation routines + `BaseArena::.*`, + `(::)?do_malloc_no_errno`, + `(::)?do_malloc_pages`, + `(::)?do_malloc`, + `DoSampledAllocation`, + `MallocedMemBlock::MallocedMemBlock`, + `_M_allocate`, + `__builtin_(vec_)?delete`, + `__builtin_(vec_)?new`, + `__gnu_cxx::new_allocator::allocate`, + `__libc_malloc`, + `__malloc_alloc_template::allocate`, + `allocate`, + `cpp_alloc`, + `operator new(\[\])?`, + `simple_alloc::allocate`, +}, `|`) + +var allocSkipRxStr = strings.Join([]string{ + // Preserve Go runtime frames that appear in the middle/bottom of + // the stack. + `runtime\.panic`, + `runtime\.reflectcall`, + `runtime\.call[0-9]*`, +}, `|`) + +var cpuProfilerRxStr = strings.Join([]string{ + `ProfileData::Add`, + `ProfileData::prof_handler`, + `CpuProfiler::prof_handler`, + `__pthread_sighandler`, + `__restore`, +}, `|`) + +var lockRxStr = strings.Join([]string{ + `RecordLockProfileData`, + `(base::)?RecordLockProfileData.*`, + `(base::)?SubmitMutexProfileData.*`, + `(base::)?SubmitSpinLockProfileData.*`, + `(base::Mutex::)?AwaitCommon.*`, + `(base::Mutex::)?Unlock.*`, + `(base::Mutex::)?UnlockSlow.*`, + `(base::Mutex::)?ReaderUnlock.*`, + `(base::MutexLock::)?~MutexLock.*`, + `(Mutex::)?AwaitCommon.*`, + `(Mutex::)?Unlock.*`, + `(Mutex::)?UnlockSlow.*`, + `(Mutex::)?ReaderUnlock.*`, + `(MutexLock::)?~MutexLock.*`, + `(SpinLock::)?Unlock.*`, + `(SpinLock::)?SlowUnlock.*`, + `(SpinLockHolder::)?~SpinLockHolder.*`, +}, `|`) diff --git a/vendor/github.com/google/pprof/profile/merge.go b/vendor/github.com/google/pprof/profile/merge.go new file mode 100644 index 0000000..5ab6e9b --- /dev/null +++ b/vendor/github.com/google/pprof/profile/merge.go @@ -0,0 +1,482 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package profile + +import ( + "fmt" + "sort" + "strconv" + "strings" +) + +// Compact performs garbage collection on a profile to remove any +// unreferenced fields. This is useful to reduce the size of a profile +// after samples or locations have been removed. +func (p *Profile) Compact() *Profile { + p, _ = Merge([]*Profile{p}) + return p +} + +// Merge merges all the profiles in profs into a single Profile. +// Returns a new profile independent of the input profiles. The merged +// profile is compacted to eliminate unused samples, locations, +// functions and mappings. Profiles must have identical profile sample +// and period types or the merge will fail. profile.Period of the +// resulting profile will be the maximum of all profiles, and +// profile.TimeNanos will be the earliest nonzero one. Merges are +// associative with the caveat of the first profile having some +// specialization in how headers are combined. There may be other +// subtleties now or in the future regarding associativity. +func Merge(srcs []*Profile) (*Profile, error) { + if len(srcs) == 0 { + return nil, fmt.Errorf("no profiles to merge") + } + p, err := combineHeaders(srcs) + if err != nil { + return nil, err + } + + pm := &profileMerger{ + p: p, + samples: make(map[sampleKey]*Sample, len(srcs[0].Sample)), + locations: make(map[locationKey]*Location, len(srcs[0].Location)), + functions: make(map[functionKey]*Function, len(srcs[0].Function)), + mappings: make(map[mappingKey]*Mapping, len(srcs[0].Mapping)), + } + + for _, src := range srcs { + // Clear the profile-specific hash tables + pm.locationsByID = make(map[uint64]*Location, len(src.Location)) + pm.functionsByID = make(map[uint64]*Function, len(src.Function)) + pm.mappingsByID = make(map[uint64]mapInfo, len(src.Mapping)) + + if len(pm.mappings) == 0 && len(src.Mapping) > 0 { + // The Mapping list has the property that the first mapping + // represents the main binary. Take the first Mapping we see, + // otherwise the operations below will add mappings in an + // arbitrary order. + pm.mapMapping(src.Mapping[0]) + } + + for _, s := range src.Sample { + if !isZeroSample(s) { + pm.mapSample(s) + } + } + } + + for _, s := range p.Sample { + if isZeroSample(s) { + // If there are any zero samples, re-merge the profile to GC + // them. + return Merge([]*Profile{p}) + } + } + + return p, nil +} + +// Normalize normalizes the source profile by multiplying each value in profile by the +// ratio of the sum of the base profile's values of that sample type to the sum of the +// source profile's value of that sample type. +func (p *Profile) Normalize(pb *Profile) error { + + if err := p.compatible(pb); err != nil { + return err + } + + baseVals := make([]int64, len(p.SampleType)) + for _, s := range pb.Sample { + for i, v := range s.Value { + baseVals[i] += v + } + } + + srcVals := make([]int64, len(p.SampleType)) + for _, s := range p.Sample { + for i, v := range s.Value { + srcVals[i] += v + } + } + + normScale := make([]float64, len(baseVals)) + for i := range baseVals { + if srcVals[i] == 0 { + normScale[i] = 0.0 + } else { + normScale[i] = float64(baseVals[i]) / float64(srcVals[i]) + } + } + p.ScaleN(normScale) + return nil +} + +func isZeroSample(s *Sample) bool { + for _, v := range s.Value { + if v != 0 { + return false + } + } + return true +} + +type profileMerger struct { + p *Profile + + // Memoization tables within a profile. + locationsByID map[uint64]*Location + functionsByID map[uint64]*Function + mappingsByID map[uint64]mapInfo + + // Memoization tables for profile entities. + samples map[sampleKey]*Sample + locations map[locationKey]*Location + functions map[functionKey]*Function + mappings map[mappingKey]*Mapping +} + +type mapInfo struct { + m *Mapping + offset int64 +} + +func (pm *profileMerger) mapSample(src *Sample) *Sample { + s := &Sample{ + Location: make([]*Location, len(src.Location)), + Value: make([]int64, len(src.Value)), + Label: make(map[string][]string, len(src.Label)), + NumLabel: make(map[string][]int64, len(src.NumLabel)), + NumUnit: make(map[string][]string, len(src.NumLabel)), + } + for i, l := range src.Location { + s.Location[i] = pm.mapLocation(l) + } + for k, v := range src.Label { + vv := make([]string, len(v)) + copy(vv, v) + s.Label[k] = vv + } + for k, v := range src.NumLabel { + u := src.NumUnit[k] + vv := make([]int64, len(v)) + uu := make([]string, len(u)) + copy(vv, v) + copy(uu, u) + s.NumLabel[k] = vv + s.NumUnit[k] = uu + } + // Check memoization table. Must be done on the remapped location to + // account for the remapped mapping. Add current values to the + // existing sample. + k := s.key() + if ss, ok := pm.samples[k]; ok { + for i, v := range src.Value { + ss.Value[i] += v + } + return ss + } + copy(s.Value, src.Value) + pm.samples[k] = s + pm.p.Sample = append(pm.p.Sample, s) + return s +} + +// key generates sampleKey to be used as a key for maps. +func (sample *Sample) key() sampleKey { + ids := make([]string, len(sample.Location)) + for i, l := range sample.Location { + ids[i] = strconv.FormatUint(l.ID, 16) + } + + labels := make([]string, 0, len(sample.Label)) + for k, v := range sample.Label { + labels = append(labels, fmt.Sprintf("%q%q", k, v)) + } + sort.Strings(labels) + + numlabels := make([]string, 0, len(sample.NumLabel)) + for k, v := range sample.NumLabel { + numlabels = append(numlabels, fmt.Sprintf("%q%x%x", k, v, sample.NumUnit[k])) + } + sort.Strings(numlabels) + + return sampleKey{ + strings.Join(ids, "|"), + strings.Join(labels, ""), + strings.Join(numlabels, ""), + } +} + +type sampleKey struct { + locations string + labels string + numlabels string +} + +func (pm *profileMerger) mapLocation(src *Location) *Location { + if src == nil { + return nil + } + + if l, ok := pm.locationsByID[src.ID]; ok { + pm.locationsByID[src.ID] = l + return l + } + + mi := pm.mapMapping(src.Mapping) + l := &Location{ + ID: uint64(len(pm.p.Location) + 1), + Mapping: mi.m, + Address: uint64(int64(src.Address) + mi.offset), + Line: make([]Line, len(src.Line)), + IsFolded: src.IsFolded, + } + for i, ln := range src.Line { + l.Line[i] = pm.mapLine(ln) + } + // Check memoization table. Must be done on the remapped location to + // account for the remapped mapping ID. + k := l.key() + if ll, ok := pm.locations[k]; ok { + pm.locationsByID[src.ID] = ll + return ll + } + pm.locationsByID[src.ID] = l + pm.locations[k] = l + pm.p.Location = append(pm.p.Location, l) + return l +} + +// key generates locationKey to be used as a key for maps. +func (l *Location) key() locationKey { + key := locationKey{ + addr: l.Address, + isFolded: l.IsFolded, + } + if l.Mapping != nil { + // Normalizes address to handle address space randomization. + key.addr -= l.Mapping.Start + key.mappingID = l.Mapping.ID + } + lines := make([]string, len(l.Line)*2) + for i, line := range l.Line { + if line.Function != nil { + lines[i*2] = strconv.FormatUint(line.Function.ID, 16) + } + lines[i*2+1] = strconv.FormatInt(line.Line, 16) + } + key.lines = strings.Join(lines, "|") + return key +} + +type locationKey struct { + addr, mappingID uint64 + lines string + isFolded bool +} + +func (pm *profileMerger) mapMapping(src *Mapping) mapInfo { + if src == nil { + return mapInfo{} + } + + if mi, ok := pm.mappingsByID[src.ID]; ok { + return mi + } + + // Check memoization tables. + mk := src.key() + if m, ok := pm.mappings[mk]; ok { + mi := mapInfo{m, int64(m.Start) - int64(src.Start)} + pm.mappingsByID[src.ID] = mi + return mi + } + m := &Mapping{ + ID: uint64(len(pm.p.Mapping) + 1), + Start: src.Start, + Limit: src.Limit, + Offset: src.Offset, + File: src.File, + BuildID: src.BuildID, + HasFunctions: src.HasFunctions, + HasFilenames: src.HasFilenames, + HasLineNumbers: src.HasLineNumbers, + HasInlineFrames: src.HasInlineFrames, + } + pm.p.Mapping = append(pm.p.Mapping, m) + + // Update memoization tables. + pm.mappings[mk] = m + mi := mapInfo{m, 0} + pm.mappingsByID[src.ID] = mi + return mi +} + +// key generates encoded strings of Mapping to be used as a key for +// maps. +func (m *Mapping) key() mappingKey { + // Normalize addresses to handle address space randomization. + // Round up to next 4K boundary to avoid minor discrepancies. + const mapsizeRounding = 0x1000 + + size := m.Limit - m.Start + size = size + mapsizeRounding - 1 + size = size - (size % mapsizeRounding) + key := mappingKey{ + size: size, + offset: m.Offset, + } + + switch { + case m.BuildID != "": + key.buildIDOrFile = m.BuildID + case m.File != "": + key.buildIDOrFile = m.File + default: + // A mapping containing neither build ID nor file name is a fake mapping. A + // key with empty buildIDOrFile is used for fake mappings so that they are + // treated as the same mapping during merging. + } + return key +} + +type mappingKey struct { + size, offset uint64 + buildIDOrFile string +} + +func (pm *profileMerger) mapLine(src Line) Line { + ln := Line{ + Function: pm.mapFunction(src.Function), + Line: src.Line, + } + return ln +} + +func (pm *profileMerger) mapFunction(src *Function) *Function { + if src == nil { + return nil + } + if f, ok := pm.functionsByID[src.ID]; ok { + return f + } + k := src.key() + if f, ok := pm.functions[k]; ok { + pm.functionsByID[src.ID] = f + return f + } + f := &Function{ + ID: uint64(len(pm.p.Function) + 1), + Name: src.Name, + SystemName: src.SystemName, + Filename: src.Filename, + StartLine: src.StartLine, + } + pm.functions[k] = f + pm.functionsByID[src.ID] = f + pm.p.Function = append(pm.p.Function, f) + return f +} + +// key generates a struct to be used as a key for maps. +func (f *Function) key() functionKey { + return functionKey{ + f.StartLine, + f.Name, + f.SystemName, + f.Filename, + } +} + +type functionKey struct { + startLine int64 + name, systemName, fileName string +} + +// combineHeaders checks that all profiles can be merged and returns +// their combined profile. +func combineHeaders(srcs []*Profile) (*Profile, error) { + for _, s := range srcs[1:] { + if err := srcs[0].compatible(s); err != nil { + return nil, err + } + } + + var timeNanos, durationNanos, period int64 + var comments []string + seenComments := map[string]bool{} + var defaultSampleType string + for _, s := range srcs { + if timeNanos == 0 || s.TimeNanos < timeNanos { + timeNanos = s.TimeNanos + } + durationNanos += s.DurationNanos + if period == 0 || period < s.Period { + period = s.Period + } + for _, c := range s.Comments { + if seen := seenComments[c]; !seen { + comments = append(comments, c) + seenComments[c] = true + } + } + if defaultSampleType == "" { + defaultSampleType = s.DefaultSampleType + } + } + + p := &Profile{ + SampleType: make([]*ValueType, len(srcs[0].SampleType)), + + DropFrames: srcs[0].DropFrames, + KeepFrames: srcs[0].KeepFrames, + + TimeNanos: timeNanos, + DurationNanos: durationNanos, + PeriodType: srcs[0].PeriodType, + Period: period, + + Comments: comments, + DefaultSampleType: defaultSampleType, + } + copy(p.SampleType, srcs[0].SampleType) + return p, nil +} + +// compatible determines if two profiles can be compared/merged. +// returns nil if the profiles are compatible; otherwise an error with +// details on the incompatibility. +func (p *Profile) compatible(pb *Profile) error { + if !equalValueType(p.PeriodType, pb.PeriodType) { + return fmt.Errorf("incompatible period types %v and %v", p.PeriodType, pb.PeriodType) + } + + if len(p.SampleType) != len(pb.SampleType) { + return fmt.Errorf("incompatible sample types %v and %v", p.SampleType, pb.SampleType) + } + + for i := range p.SampleType { + if !equalValueType(p.SampleType[i], pb.SampleType[i]) { + return fmt.Errorf("incompatible sample types %v and %v", p.SampleType, pb.SampleType) + } + } + return nil +} + +// equalValueType returns true if the two value types are semantically +// equal. It ignores the internal fields used during encode/decode. +func equalValueType(st1, st2 *ValueType) bool { + return st1.Type == st2.Type && st1.Unit == st2.Unit +} diff --git a/vendor/github.com/google/pprof/profile/profile.go b/vendor/github.com/google/pprof/profile/profile.go new file mode 100644 index 0000000..d94d8b3 --- /dev/null +++ b/vendor/github.com/google/pprof/profile/profile.go @@ -0,0 +1,793 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package profile provides a representation of profile.proto and +// methods to encode/decode profiles in this format. +package profile + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "path/filepath" + "regexp" + "sort" + "strings" + "sync" + "time" +) + +// Profile is an in-memory representation of profile.proto. +type Profile struct { + SampleType []*ValueType + DefaultSampleType string + Sample []*Sample + Mapping []*Mapping + Location []*Location + Function []*Function + Comments []string + + DropFrames string + KeepFrames string + + TimeNanos int64 + DurationNanos int64 + PeriodType *ValueType + Period int64 + + // The following fields are modified during encoding and copying, + // so are protected by a Mutex. + encodeMu sync.Mutex + + commentX []int64 + dropFramesX int64 + keepFramesX int64 + stringTable []string + defaultSampleTypeX int64 +} + +// ValueType corresponds to Profile.ValueType +type ValueType struct { + Type string // cpu, wall, inuse_space, etc + Unit string // seconds, nanoseconds, bytes, etc + + typeX int64 + unitX int64 +} + +// Sample corresponds to Profile.Sample +type Sample struct { + Location []*Location + Value []int64 + Label map[string][]string + NumLabel map[string][]int64 + NumUnit map[string][]string + + locationIDX []uint64 + labelX []label +} + +// label corresponds to Profile.Label +type label struct { + keyX int64 + // Exactly one of the two following values must be set + strX int64 + numX int64 // Integer value for this label + // can be set if numX has value + unitX int64 +} + +// Mapping corresponds to Profile.Mapping +type Mapping struct { + ID uint64 + Start uint64 + Limit uint64 + Offset uint64 + File string + BuildID string + HasFunctions bool + HasFilenames bool + HasLineNumbers bool + HasInlineFrames bool + + fileX int64 + buildIDX int64 +} + +// Location corresponds to Profile.Location +type Location struct { + ID uint64 + Mapping *Mapping + Address uint64 + Line []Line + IsFolded bool + + mappingIDX uint64 +} + +// Line corresponds to Profile.Line +type Line struct { + Function *Function + Line int64 + + functionIDX uint64 +} + +// Function corresponds to Profile.Function +type Function struct { + ID uint64 + Name string + SystemName string + Filename string + StartLine int64 + + nameX int64 + systemNameX int64 + filenameX int64 +} + +// Parse parses a profile and checks for its validity. The input +// may be a gzip-compressed encoded protobuf or one of many legacy +// profile formats which may be unsupported in the future. +func Parse(r io.Reader) (*Profile, error) { + data, err := ioutil.ReadAll(r) + if err != nil { + return nil, err + } + return ParseData(data) +} + +// ParseData parses a profile from a buffer and checks for its +// validity. +func ParseData(data []byte) (*Profile, error) { + var p *Profile + var err error + if len(data) >= 2 && data[0] == 0x1f && data[1] == 0x8b { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err == nil { + data, err = ioutil.ReadAll(gz) + } + if err != nil { + return nil, fmt.Errorf("decompressing profile: %v", err) + } + } + if p, err = ParseUncompressed(data); err != nil && err != errNoData && err != errConcatProfile { + p, err = parseLegacy(data) + } + + if err != nil { + return nil, fmt.Errorf("parsing profile: %v", err) + } + + if err := p.CheckValid(); err != nil { + return nil, fmt.Errorf("malformed profile: %v", err) + } + return p, nil +} + +var errUnrecognized = fmt.Errorf("unrecognized profile format") +var errMalformed = fmt.Errorf("malformed profile format") +var errNoData = fmt.Errorf("empty input file") +var errConcatProfile = fmt.Errorf("concatenated profiles detected") + +func parseLegacy(data []byte) (*Profile, error) { + parsers := []func([]byte) (*Profile, error){ + parseCPU, + parseHeap, + parseGoCount, // goroutine, threadcreate + parseThread, + parseContention, + parseJavaProfile, + } + + for _, parser := range parsers { + p, err := parser(data) + if err == nil { + p.addLegacyFrameInfo() + return p, nil + } + if err != errUnrecognized { + return nil, err + } + } + return nil, errUnrecognized +} + +// ParseUncompressed parses an uncompressed protobuf into a profile. +func ParseUncompressed(data []byte) (*Profile, error) { + if len(data) == 0 { + return nil, errNoData + } + p := &Profile{} + if err := unmarshal(data, p); err != nil { + return nil, err + } + + if err := p.postDecode(); err != nil { + return nil, err + } + + return p, nil +} + +var libRx = regexp.MustCompile(`([.]so$|[.]so[._][0-9]+)`) + +// massageMappings applies heuristic-based changes to the profile +// mappings to account for quirks of some environments. +func (p *Profile) massageMappings() { + // Merge adjacent regions with matching names, checking that the offsets match + if len(p.Mapping) > 1 { + mappings := []*Mapping{p.Mapping[0]} + for _, m := range p.Mapping[1:] { + lm := mappings[len(mappings)-1] + if adjacent(lm, m) { + lm.Limit = m.Limit + if m.File != "" { + lm.File = m.File + } + if m.BuildID != "" { + lm.BuildID = m.BuildID + } + p.updateLocationMapping(m, lm) + continue + } + mappings = append(mappings, m) + } + p.Mapping = mappings + } + + // Use heuristics to identify main binary and move it to the top of the list of mappings + for i, m := range p.Mapping { + file := strings.TrimSpace(strings.Replace(m.File, "(deleted)", "", -1)) + if len(file) == 0 { + continue + } + if len(libRx.FindStringSubmatch(file)) > 0 { + continue + } + if file[0] == '[' { + continue + } + // Swap what we guess is main to position 0. + p.Mapping[0], p.Mapping[i] = p.Mapping[i], p.Mapping[0] + break + } + + // Keep the mapping IDs neatly sorted + for i, m := range p.Mapping { + m.ID = uint64(i + 1) + } +} + +// adjacent returns whether two mapping entries represent the same +// mapping that has been split into two. Check that their addresses are adjacent, +// and if the offsets match, if they are available. +func adjacent(m1, m2 *Mapping) bool { + if m1.File != "" && m2.File != "" { + if m1.File != m2.File { + return false + } + } + if m1.BuildID != "" && m2.BuildID != "" { + if m1.BuildID != m2.BuildID { + return false + } + } + if m1.Limit != m2.Start { + return false + } + if m1.Offset != 0 && m2.Offset != 0 { + offset := m1.Offset + (m1.Limit - m1.Start) + if offset != m2.Offset { + return false + } + } + return true +} + +func (p *Profile) updateLocationMapping(from, to *Mapping) { + for _, l := range p.Location { + if l.Mapping == from { + l.Mapping = to + } + } +} + +func serialize(p *Profile) []byte { + p.encodeMu.Lock() + p.preEncode() + b := marshal(p) + p.encodeMu.Unlock() + return b +} + +// Write writes the profile as a gzip-compressed marshaled protobuf. +func (p *Profile) Write(w io.Writer) error { + zw := gzip.NewWriter(w) + defer zw.Close() + _, err := zw.Write(serialize(p)) + return err +} + +// WriteUncompressed writes the profile as a marshaled protobuf. +func (p *Profile) WriteUncompressed(w io.Writer) error { + _, err := w.Write(serialize(p)) + return err +} + +// CheckValid tests whether the profile is valid. Checks include, but are +// not limited to: +// - len(Profile.Sample[n].value) == len(Profile.value_unit) +// - Sample.id has a corresponding Profile.Location +func (p *Profile) CheckValid() error { + // Check that sample values are consistent + sampleLen := len(p.SampleType) + if sampleLen == 0 && len(p.Sample) != 0 { + return fmt.Errorf("missing sample type information") + } + for _, s := range p.Sample { + if s == nil { + return fmt.Errorf("profile has nil sample") + } + if len(s.Value) != sampleLen { + return fmt.Errorf("mismatch: sample has %d values vs. %d types", len(s.Value), len(p.SampleType)) + } + for _, l := range s.Location { + if l == nil { + return fmt.Errorf("sample has nil location") + } + } + } + + // Check that all mappings/locations/functions are in the tables + // Check that there are no duplicate ids + mappings := make(map[uint64]*Mapping, len(p.Mapping)) + for _, m := range p.Mapping { + if m == nil { + return fmt.Errorf("profile has nil mapping") + } + if m.ID == 0 { + return fmt.Errorf("found mapping with reserved ID=0") + } + if mappings[m.ID] != nil { + return fmt.Errorf("multiple mappings with same id: %d", m.ID) + } + mappings[m.ID] = m + } + functions := make(map[uint64]*Function, len(p.Function)) + for _, f := range p.Function { + if f == nil { + return fmt.Errorf("profile has nil function") + } + if f.ID == 0 { + return fmt.Errorf("found function with reserved ID=0") + } + if functions[f.ID] != nil { + return fmt.Errorf("multiple functions with same id: %d", f.ID) + } + functions[f.ID] = f + } + locations := make(map[uint64]*Location, len(p.Location)) + for _, l := range p.Location { + if l == nil { + return fmt.Errorf("profile has nil location") + } + if l.ID == 0 { + return fmt.Errorf("found location with reserved id=0") + } + if locations[l.ID] != nil { + return fmt.Errorf("multiple locations with same id: %d", l.ID) + } + locations[l.ID] = l + if m := l.Mapping; m != nil { + if m.ID == 0 || mappings[m.ID] != m { + return fmt.Errorf("inconsistent mapping %p: %d", m, m.ID) + } + } + for _, ln := range l.Line { + f := ln.Function + if f == nil { + return fmt.Errorf("location id: %d has a line with nil function", l.ID) + } + if f.ID == 0 || functions[f.ID] != f { + return fmt.Errorf("inconsistent function %p: %d", f, f.ID) + } + } + } + return nil +} + +// Aggregate merges the locations in the profile into equivalence +// classes preserving the request attributes. It also updates the +// samples to point to the merged locations. +func (p *Profile) Aggregate(inlineFrame, function, filename, linenumber, address bool) error { + for _, m := range p.Mapping { + m.HasInlineFrames = m.HasInlineFrames && inlineFrame + m.HasFunctions = m.HasFunctions && function + m.HasFilenames = m.HasFilenames && filename + m.HasLineNumbers = m.HasLineNumbers && linenumber + } + + // Aggregate functions + if !function || !filename { + for _, f := range p.Function { + if !function { + f.Name = "" + f.SystemName = "" + } + if !filename { + f.Filename = "" + } + } + } + + // Aggregate locations + if !inlineFrame || !address || !linenumber { + for _, l := range p.Location { + if !inlineFrame && len(l.Line) > 1 { + l.Line = l.Line[len(l.Line)-1:] + } + if !linenumber { + for i := range l.Line { + l.Line[i].Line = 0 + } + } + if !address { + l.Address = 0 + } + } + } + + return p.CheckValid() +} + +// NumLabelUnits returns a map of numeric label keys to the units +// associated with those keys and a map of those keys to any units +// that were encountered but not used. +// Unit for a given key is the first encountered unit for that key. If multiple +// units are encountered for values paired with a particular key, then the first +// unit encountered is used and all other units are returned in sorted order +// in map of ignored units. +// If no units are encountered for a particular key, the unit is then inferred +// based on the key. +func (p *Profile) NumLabelUnits() (map[string]string, map[string][]string) { + numLabelUnits := map[string]string{} + ignoredUnits := map[string]map[string]bool{} + encounteredKeys := map[string]bool{} + + // Determine units based on numeric tags for each sample. + for _, s := range p.Sample { + for k := range s.NumLabel { + encounteredKeys[k] = true + for _, unit := range s.NumUnit[k] { + if unit == "" { + continue + } + if wantUnit, ok := numLabelUnits[k]; !ok { + numLabelUnits[k] = unit + } else if wantUnit != unit { + if v, ok := ignoredUnits[k]; ok { + v[unit] = true + } else { + ignoredUnits[k] = map[string]bool{unit: true} + } + } + } + } + } + // Infer units for keys without any units associated with + // numeric tag values. + for key := range encounteredKeys { + unit := numLabelUnits[key] + if unit == "" { + switch key { + case "alignment", "request": + numLabelUnits[key] = "bytes" + default: + numLabelUnits[key] = key + } + } + } + + // Copy ignored units into more readable format + unitsIgnored := make(map[string][]string, len(ignoredUnits)) + for key, values := range ignoredUnits { + units := make([]string, len(values)) + i := 0 + for unit := range values { + units[i] = unit + i++ + } + sort.Strings(units) + unitsIgnored[key] = units + } + + return numLabelUnits, unitsIgnored +} + +// String dumps a text representation of a profile. Intended mainly +// for debugging purposes. +func (p *Profile) String() string { + ss := make([]string, 0, len(p.Comments)+len(p.Sample)+len(p.Mapping)+len(p.Location)) + for _, c := range p.Comments { + ss = append(ss, "Comment: "+c) + } + if pt := p.PeriodType; pt != nil { + ss = append(ss, fmt.Sprintf("PeriodType: %s %s", pt.Type, pt.Unit)) + } + ss = append(ss, fmt.Sprintf("Period: %d", p.Period)) + if p.TimeNanos != 0 { + ss = append(ss, fmt.Sprintf("Time: %v", time.Unix(0, p.TimeNanos))) + } + if p.DurationNanos != 0 { + ss = append(ss, fmt.Sprintf("Duration: %.4v", time.Duration(p.DurationNanos))) + } + + ss = append(ss, "Samples:") + var sh1 string + for _, s := range p.SampleType { + dflt := "" + if s.Type == p.DefaultSampleType { + dflt = "[dflt]" + } + sh1 = sh1 + fmt.Sprintf("%s/%s%s ", s.Type, s.Unit, dflt) + } + ss = append(ss, strings.TrimSpace(sh1)) + for _, s := range p.Sample { + ss = append(ss, s.string()) + } + + ss = append(ss, "Locations") + for _, l := range p.Location { + ss = append(ss, l.string()) + } + + ss = append(ss, "Mappings") + for _, m := range p.Mapping { + ss = append(ss, m.string()) + } + + return strings.Join(ss, "\n") + "\n" +} + +// string dumps a text representation of a mapping. Intended mainly +// for debugging purposes. +func (m *Mapping) string() string { + bits := "" + if m.HasFunctions { + bits = bits + "[FN]" + } + if m.HasFilenames { + bits = bits + "[FL]" + } + if m.HasLineNumbers { + bits = bits + "[LN]" + } + if m.HasInlineFrames { + bits = bits + "[IN]" + } + return fmt.Sprintf("%d: %#x/%#x/%#x %s %s %s", + m.ID, + m.Start, m.Limit, m.Offset, + m.File, + m.BuildID, + bits) +} + +// string dumps a text representation of a location. Intended mainly +// for debugging purposes. +func (l *Location) string() string { + ss := []string{} + locStr := fmt.Sprintf("%6d: %#x ", l.ID, l.Address) + if m := l.Mapping; m != nil { + locStr = locStr + fmt.Sprintf("M=%d ", m.ID) + } + if l.IsFolded { + locStr = locStr + "[F] " + } + if len(l.Line) == 0 { + ss = append(ss, locStr) + } + for li := range l.Line { + lnStr := "??" + if fn := l.Line[li].Function; fn != nil { + lnStr = fmt.Sprintf("%s %s:%d s=%d", + fn.Name, + fn.Filename, + l.Line[li].Line, + fn.StartLine) + if fn.Name != fn.SystemName { + lnStr = lnStr + "(" + fn.SystemName + ")" + } + } + ss = append(ss, locStr+lnStr) + // Do not print location details past the first line + locStr = " " + } + return strings.Join(ss, "\n") +} + +// string dumps a text representation of a sample. Intended mainly +// for debugging purposes. +func (s *Sample) string() string { + ss := []string{} + var sv string + for _, v := range s.Value { + sv = fmt.Sprintf("%s %10d", sv, v) + } + sv = sv + ": " + for _, l := range s.Location { + sv = sv + fmt.Sprintf("%d ", l.ID) + } + ss = append(ss, sv) + const labelHeader = " " + if len(s.Label) > 0 { + ss = append(ss, labelHeader+labelsToString(s.Label)) + } + if len(s.NumLabel) > 0 { + ss = append(ss, labelHeader+numLabelsToString(s.NumLabel, s.NumUnit)) + } + return strings.Join(ss, "\n") +} + +// labelsToString returns a string representation of a +// map representing labels. +func labelsToString(labels map[string][]string) string { + ls := []string{} + for k, v := range labels { + ls = append(ls, fmt.Sprintf("%s:%v", k, v)) + } + sort.Strings(ls) + return strings.Join(ls, " ") +} + +// numLabelsToString returns a string representation of a map +// representing numeric labels. +func numLabelsToString(numLabels map[string][]int64, numUnits map[string][]string) string { + ls := []string{} + for k, v := range numLabels { + units := numUnits[k] + var labelString string + if len(units) == len(v) { + values := make([]string, len(v)) + for i, vv := range v { + values[i] = fmt.Sprintf("%d %s", vv, units[i]) + } + labelString = fmt.Sprintf("%s:%v", k, values) + } else { + labelString = fmt.Sprintf("%s:%v", k, v) + } + ls = append(ls, labelString) + } + sort.Strings(ls) + return strings.Join(ls, " ") +} + +// SetLabel sets the specified key to the specified value for all samples in the +// profile. +func (p *Profile) SetLabel(key string, value []string) { + for _, sample := range p.Sample { + if sample.Label == nil { + sample.Label = map[string][]string{key: value} + } else { + sample.Label[key] = value + } + } +} + +// RemoveLabel removes all labels associated with the specified key for all +// samples in the profile. +func (p *Profile) RemoveLabel(key string) { + for _, sample := range p.Sample { + delete(sample.Label, key) + } +} + +// HasLabel returns true if a sample has a label with indicated key and value. +func (s *Sample) HasLabel(key, value string) bool { + for _, v := range s.Label[key] { + if v == value { + return true + } + } + return false +} + +// DiffBaseSample returns true if a sample belongs to the diff base and false +// otherwise. +func (s *Sample) DiffBaseSample() bool { + return s.HasLabel("pprof::base", "true") +} + +// Scale multiplies all sample values in a profile by a constant. +func (p *Profile) Scale(ratio float64) { + if ratio == 1 { + return + } + ratios := make([]float64, len(p.SampleType)) + for i := range p.SampleType { + ratios[i] = ratio + } + p.ScaleN(ratios) +} + +// ScaleN multiplies each sample values in a sample by a different amount. +func (p *Profile) ScaleN(ratios []float64) error { + if len(p.SampleType) != len(ratios) { + return fmt.Errorf("mismatched scale ratios, got %d, want %d", len(ratios), len(p.SampleType)) + } + allOnes := true + for _, r := range ratios { + if r != 1 { + allOnes = false + break + } + } + if allOnes { + return nil + } + for _, s := range p.Sample { + for i, v := range s.Value { + if ratios[i] != 1 { + s.Value[i] = int64(float64(v) * ratios[i]) + } + } + } + return nil +} + +// HasFunctions determines if all locations in this profile have +// symbolized function information. +func (p *Profile) HasFunctions() bool { + for _, l := range p.Location { + if l.Mapping != nil && !l.Mapping.HasFunctions { + return false + } + } + return true +} + +// HasFileLines determines if all locations in this profile have +// symbolized file and line number information. +func (p *Profile) HasFileLines() bool { + for _, l := range p.Location { + if l.Mapping != nil && (!l.Mapping.HasFilenames || !l.Mapping.HasLineNumbers) { + return false + } + } + return true +} + +// Unsymbolizable returns true if a mapping points to a binary for which +// locations can't be symbolized in principle, at least now. Examples are +// "[vdso]", [vsyscall]" and some others, see the code. +func (m *Mapping) Unsymbolizable() bool { + name := filepath.Base(m.File) + return strings.HasPrefix(name, "[") || strings.HasPrefix(name, "linux-vdso") || strings.HasPrefix(m.File, "/dev/dri/") +} + +// Copy makes a fully independent copy of a profile. +func (p *Profile) Copy() *Profile { + pp := &Profile{} + if err := unmarshal(serialize(p), pp); err != nil { + panic(err) + } + if err := pp.postDecode(); err != nil { + panic(err) + } + + return pp +} diff --git a/vendor/github.com/google/pprof/profile/proto.go b/vendor/github.com/google/pprof/profile/proto.go new file mode 100644 index 0000000..539ad3a --- /dev/null +++ b/vendor/github.com/google/pprof/profile/proto.go @@ -0,0 +1,370 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file is a simple protocol buffer encoder and decoder. +// The format is described at +// https://developers.google.com/protocol-buffers/docs/encoding +// +// A protocol message must implement the message interface: +// decoder() []decoder +// encode(*buffer) +// +// The decode method returns a slice indexed by field number that gives the +// function to decode that field. +// The encode method encodes its receiver into the given buffer. +// +// The two methods are simple enough to be implemented by hand rather than +// by using a protocol compiler. +// +// See profile.go for examples of messages implementing this interface. +// +// There is no support for groups, message sets, or "has" bits. + +package profile + +import ( + "errors" + "fmt" +) + +type buffer struct { + field int // field tag + typ int // proto wire type code for field + u64 uint64 + data []byte + tmp [16]byte +} + +type decoder func(*buffer, message) error + +type message interface { + decoder() []decoder + encode(*buffer) +} + +func marshal(m message) []byte { + var b buffer + m.encode(&b) + return b.data +} + +func encodeVarint(b *buffer, x uint64) { + for x >= 128 { + b.data = append(b.data, byte(x)|0x80) + x >>= 7 + } + b.data = append(b.data, byte(x)) +} + +func encodeLength(b *buffer, tag int, len int) { + encodeVarint(b, uint64(tag)<<3|2) + encodeVarint(b, uint64(len)) +} + +func encodeUint64(b *buffer, tag int, x uint64) { + // append varint to b.data + encodeVarint(b, uint64(tag)<<3) + encodeVarint(b, x) +} + +func encodeUint64s(b *buffer, tag int, x []uint64) { + if len(x) > 2 { + // Use packed encoding + n1 := len(b.data) + for _, u := range x { + encodeVarint(b, u) + } + n2 := len(b.data) + encodeLength(b, tag, n2-n1) + n3 := len(b.data) + copy(b.tmp[:], b.data[n2:n3]) + copy(b.data[n1+(n3-n2):], b.data[n1:n2]) + copy(b.data[n1:], b.tmp[:n3-n2]) + return + } + for _, u := range x { + encodeUint64(b, tag, u) + } +} + +func encodeUint64Opt(b *buffer, tag int, x uint64) { + if x == 0 { + return + } + encodeUint64(b, tag, x) +} + +func encodeInt64(b *buffer, tag int, x int64) { + u := uint64(x) + encodeUint64(b, tag, u) +} + +func encodeInt64s(b *buffer, tag int, x []int64) { + if len(x) > 2 { + // Use packed encoding + n1 := len(b.data) + for _, u := range x { + encodeVarint(b, uint64(u)) + } + n2 := len(b.data) + encodeLength(b, tag, n2-n1) + n3 := len(b.data) + copy(b.tmp[:], b.data[n2:n3]) + copy(b.data[n1+(n3-n2):], b.data[n1:n2]) + copy(b.data[n1:], b.tmp[:n3-n2]) + return + } + for _, u := range x { + encodeInt64(b, tag, u) + } +} + +func encodeInt64Opt(b *buffer, tag int, x int64) { + if x == 0 { + return + } + encodeInt64(b, tag, x) +} + +func encodeString(b *buffer, tag int, x string) { + encodeLength(b, tag, len(x)) + b.data = append(b.data, x...) +} + +func encodeStrings(b *buffer, tag int, x []string) { + for _, s := range x { + encodeString(b, tag, s) + } +} + +func encodeBool(b *buffer, tag int, x bool) { + if x { + encodeUint64(b, tag, 1) + } else { + encodeUint64(b, tag, 0) + } +} + +func encodeBoolOpt(b *buffer, tag int, x bool) { + if x { + encodeBool(b, tag, x) + } +} + +func encodeMessage(b *buffer, tag int, m message) { + n1 := len(b.data) + m.encode(b) + n2 := len(b.data) + encodeLength(b, tag, n2-n1) + n3 := len(b.data) + copy(b.tmp[:], b.data[n2:n3]) + copy(b.data[n1+(n3-n2):], b.data[n1:n2]) + copy(b.data[n1:], b.tmp[:n3-n2]) +} + +func unmarshal(data []byte, m message) (err error) { + b := buffer{data: data, typ: 2} + return decodeMessage(&b, m) +} + +func le64(p []byte) uint64 { + return uint64(p[0]) | uint64(p[1])<<8 | uint64(p[2])<<16 | uint64(p[3])<<24 | uint64(p[4])<<32 | uint64(p[5])<<40 | uint64(p[6])<<48 | uint64(p[7])<<56 +} + +func le32(p []byte) uint32 { + return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24 +} + +func decodeVarint(data []byte) (uint64, []byte, error) { + var u uint64 + for i := 0; ; i++ { + if i >= 10 || i >= len(data) { + return 0, nil, errors.New("bad varint") + } + u |= uint64(data[i]&0x7F) << uint(7*i) + if data[i]&0x80 == 0 { + return u, data[i+1:], nil + } + } +} + +func decodeField(b *buffer, data []byte) ([]byte, error) { + x, data, err := decodeVarint(data) + if err != nil { + return nil, err + } + b.field = int(x >> 3) + b.typ = int(x & 7) + b.data = nil + b.u64 = 0 + switch b.typ { + case 0: + b.u64, data, err = decodeVarint(data) + if err != nil { + return nil, err + } + case 1: + if len(data) < 8 { + return nil, errors.New("not enough data") + } + b.u64 = le64(data[:8]) + data = data[8:] + case 2: + var n uint64 + n, data, err = decodeVarint(data) + if err != nil { + return nil, err + } + if n > uint64(len(data)) { + return nil, errors.New("too much data") + } + b.data = data[:n] + data = data[n:] + case 5: + if len(data) < 4 { + return nil, errors.New("not enough data") + } + b.u64 = uint64(le32(data[:4])) + data = data[4:] + default: + return nil, fmt.Errorf("unknown wire type: %d", b.typ) + } + + return data, nil +} + +func checkType(b *buffer, typ int) error { + if b.typ != typ { + return errors.New("type mismatch") + } + return nil +} + +func decodeMessage(b *buffer, m message) error { + if err := checkType(b, 2); err != nil { + return err + } + dec := m.decoder() + data := b.data + for len(data) > 0 { + // pull varint field# + type + var err error + data, err = decodeField(b, data) + if err != nil { + return err + } + if b.field >= len(dec) || dec[b.field] == nil { + continue + } + if err := dec[b.field](b, m); err != nil { + return err + } + } + return nil +} + +func decodeInt64(b *buffer, x *int64) error { + if err := checkType(b, 0); err != nil { + return err + } + *x = int64(b.u64) + return nil +} + +func decodeInt64s(b *buffer, x *[]int64) error { + if b.typ == 2 { + // Packed encoding + data := b.data + tmp := make([]int64, 0, len(data)) // Maximally sized + for len(data) > 0 { + var u uint64 + var err error + + if u, data, err = decodeVarint(data); err != nil { + return err + } + tmp = append(tmp, int64(u)) + } + *x = append(*x, tmp...) + return nil + } + var i int64 + if err := decodeInt64(b, &i); err != nil { + return err + } + *x = append(*x, i) + return nil +} + +func decodeUint64(b *buffer, x *uint64) error { + if err := checkType(b, 0); err != nil { + return err + } + *x = b.u64 + return nil +} + +func decodeUint64s(b *buffer, x *[]uint64) error { + if b.typ == 2 { + data := b.data + // Packed encoding + tmp := make([]uint64, 0, len(data)) // Maximally sized + for len(data) > 0 { + var u uint64 + var err error + + if u, data, err = decodeVarint(data); err != nil { + return err + } + tmp = append(tmp, u) + } + *x = append(*x, tmp...) + return nil + } + var u uint64 + if err := decodeUint64(b, &u); err != nil { + return err + } + *x = append(*x, u) + return nil +} + +func decodeString(b *buffer, x *string) error { + if err := checkType(b, 2); err != nil { + return err + } + *x = string(b.data) + return nil +} + +func decodeStrings(b *buffer, x *[]string) error { + var s string + if err := decodeString(b, &s); err != nil { + return err + } + *x = append(*x, s) + return nil +} + +func decodeBool(b *buffer, x *bool) error { + if err := checkType(b, 0); err != nil { + return err + } + if int64(b.u64) == 0 { + *x = false + } else { + *x = true + } + return nil +} diff --git a/vendor/github.com/google/pprof/profile/prune.go b/vendor/github.com/google/pprof/profile/prune.go new file mode 100644 index 0000000..02d21a8 --- /dev/null +++ b/vendor/github.com/google/pprof/profile/prune.go @@ -0,0 +1,178 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Implements methods to remove frames from profiles. + +package profile + +import ( + "fmt" + "regexp" + "strings" +) + +var ( + reservedNames = []string{"(anonymous namespace)", "operator()"} + bracketRx = func() *regexp.Regexp { + var quotedNames []string + for _, name := range append(reservedNames, "(") { + quotedNames = append(quotedNames, regexp.QuoteMeta(name)) + } + return regexp.MustCompile(strings.Join(quotedNames, "|")) + }() +) + +// simplifyFunc does some primitive simplification of function names. +func simplifyFunc(f string) string { + // Account for leading '.' on the PPC ELF v1 ABI. + funcName := strings.TrimPrefix(f, ".") + // Account for unsimplified names -- try to remove the argument list by trimming + // starting from the first '(', but skipping reserved names that have '('. + for _, ind := range bracketRx.FindAllStringSubmatchIndex(funcName, -1) { + foundReserved := false + for _, res := range reservedNames { + if funcName[ind[0]:ind[1]] == res { + foundReserved = true + break + } + } + if !foundReserved { + funcName = funcName[:ind[0]] + break + } + } + return funcName +} + +// Prune removes all nodes beneath a node matching dropRx, and not +// matching keepRx. If the root node of a Sample matches, the sample +// will have an empty stack. +func (p *Profile) Prune(dropRx, keepRx *regexp.Regexp) { + prune := make(map[uint64]bool) + pruneBeneath := make(map[uint64]bool) + + for _, loc := range p.Location { + var i int + for i = len(loc.Line) - 1; i >= 0; i-- { + if fn := loc.Line[i].Function; fn != nil && fn.Name != "" { + funcName := simplifyFunc(fn.Name) + if dropRx.MatchString(funcName) { + if keepRx == nil || !keepRx.MatchString(funcName) { + break + } + } + } + } + + if i >= 0 { + // Found matching entry to prune. + pruneBeneath[loc.ID] = true + + // Remove the matching location. + if i == len(loc.Line)-1 { + // Matched the top entry: prune the whole location. + prune[loc.ID] = true + } else { + loc.Line = loc.Line[i+1:] + } + } + } + + // Prune locs from each Sample + for _, sample := range p.Sample { + // Scan from the root to the leaves to find the prune location. + // Do not prune frames before the first user frame, to avoid + // pruning everything. + foundUser := false + for i := len(sample.Location) - 1; i >= 0; i-- { + id := sample.Location[i].ID + if !prune[id] && !pruneBeneath[id] { + foundUser = true + continue + } + if !foundUser { + continue + } + if prune[id] { + sample.Location = sample.Location[i+1:] + break + } + if pruneBeneath[id] { + sample.Location = sample.Location[i:] + break + } + } + } +} + +// RemoveUninteresting prunes and elides profiles using built-in +// tables of uninteresting function names. +func (p *Profile) RemoveUninteresting() error { + var keep, drop *regexp.Regexp + var err error + + if p.DropFrames != "" { + if drop, err = regexp.Compile("^(" + p.DropFrames + ")$"); err != nil { + return fmt.Errorf("failed to compile regexp %s: %v", p.DropFrames, err) + } + if p.KeepFrames != "" { + if keep, err = regexp.Compile("^(" + p.KeepFrames + ")$"); err != nil { + return fmt.Errorf("failed to compile regexp %s: %v", p.KeepFrames, err) + } + } + p.Prune(drop, keep) + } + return nil +} + +// PruneFrom removes all nodes beneath the lowest node matching dropRx, not including itself. +// +// Please see the example below to understand this method as well as +// the difference from Prune method. +// +// A sample contains Location of [A,B,C,B,D] where D is the top frame and there's no inline. +// +// PruneFrom(A) returns [A,B,C,B,D] because there's no node beneath A. +// Prune(A, nil) returns [B,C,B,D] by removing A itself. +// +// PruneFrom(B) returns [B,C,B,D] by removing all nodes beneath the first B when scanning from the bottom. +// Prune(B, nil) returns [D] because a matching node is found by scanning from the root. +func (p *Profile) PruneFrom(dropRx *regexp.Regexp) { + pruneBeneath := make(map[uint64]bool) + + for _, loc := range p.Location { + for i := 0; i < len(loc.Line); i++ { + if fn := loc.Line[i].Function; fn != nil && fn.Name != "" { + funcName := simplifyFunc(fn.Name) + if dropRx.MatchString(funcName) { + // Found matching entry to prune. + pruneBeneath[loc.ID] = true + loc.Line = loc.Line[i:] + break + } + } + } + } + + // Prune locs from each Sample + for _, sample := range p.Sample { + // Scan from the bottom leaf to the root to find the prune location. + for i, loc := range sample.Location { + if pruneBeneath[loc.ID] { + sample.Location = sample.Location[i:] + break + } + } + } +} diff --git a/vendor/github.com/google/uuid/README.md b/vendor/github.com/google/uuid/README.md index 9d92c11..f765a46 100644 --- a/vendor/github.com/google/uuid/README.md +++ b/vendor/github.com/google/uuid/README.md @@ -16,4 +16,4 @@ change is the ability to represent an invalid UUID (vs a NIL UUID). Full `go doc` style documentation for the package can be viewed online without installing this package by using the GoDoc site here: -http://godoc.org/github.com/google/uuid +http://pkg.go.dev/github.com/google/uuid diff --git a/vendor/github.com/google/uuid/marshal.go b/vendor/github.com/google/uuid/marshal.go index 7f9e0c6..14bd340 100644 --- a/vendor/github.com/google/uuid/marshal.go +++ b/vendor/github.com/google/uuid/marshal.go @@ -16,10 +16,11 @@ func (uuid UUID) MarshalText() ([]byte, error) { // UnmarshalText implements encoding.TextUnmarshaler. func (uuid *UUID) UnmarshalText(data []byte) error { id, err := ParseBytes(data) - if err == nil { - *uuid = id + if err != nil { + return err } - return err + *uuid = id + return nil } // MarshalBinary implements encoding.BinaryMarshaler. diff --git a/vendor/github.com/google/uuid/version1.go b/vendor/github.com/google/uuid/version1.go index 199a1ac..4631096 100644 --- a/vendor/github.com/google/uuid/version1.go +++ b/vendor/github.com/google/uuid/version1.go @@ -17,12 +17,6 @@ import ( // // In most cases, New should be used. func NewUUID() (UUID, error) { - nodeMu.Lock() - if nodeID == zeroID { - setNodeInterface("") - } - nodeMu.Unlock() - var uuid UUID now, seq, err := GetTime() if err != nil { @@ -38,7 +32,13 @@ func NewUUID() (UUID, error) { binary.BigEndian.PutUint16(uuid[4:], timeMid) binary.BigEndian.PutUint16(uuid[6:], timeHi) binary.BigEndian.PutUint16(uuid[8:], seq) + + nodeMu.Lock() + if nodeID == zeroID { + setNodeInterface("") + } copy(uuid[10:], nodeID[:]) + nodeMu.Unlock() return uuid, nil } diff --git a/vendor/github.com/google/uuid/version4.go b/vendor/github.com/google/uuid/version4.go index 84af91c..c110465 100644 --- a/vendor/github.com/google/uuid/version4.go +++ b/vendor/github.com/google/uuid/version4.go @@ -27,8 +27,13 @@ func New() UUID { // equivalent to the odds of creating a few tens of trillions of UUIDs in a // year and having one duplicate. func NewRandom() (UUID, error) { + return NewRandomFromReader(rander) +} + +// NewRandomFromReader returns a UUID based on bytes read from a given io.Reader. +func NewRandomFromReader(r io.Reader) (UUID, error) { var uuid UUID - _, err := io.ReadFull(rander, uuid[:]) + _, err := io.ReadFull(r, uuid[:]) if err != nil { return Nil, err } diff --git a/vendor/github.com/gorilla/mux/AUTHORS b/vendor/github.com/gorilla/mux/AUTHORS new file mode 100644 index 0000000..b722392 --- /dev/null +++ b/vendor/github.com/gorilla/mux/AUTHORS @@ -0,0 +1,8 @@ +# This is the official list of gorilla/mux authors for copyright purposes. +# +# Please keep the list sorted. + +Google LLC (https://opensource.google.com/) +Kamil Kisielk +Matt Silverlock +Rodrigo Moraes (https://github.com/moraes) diff --git a/vendor/honnef.co/go/tools/lint/LICENSE b/vendor/github.com/gorilla/mux/LICENSE similarity index 80% rename from vendor/honnef.co/go/tools/lint/LICENSE rename to vendor/github.com/gorilla/mux/LICENSE index 796130a..6903df6 100644 --- a/vendor/honnef.co/go/tools/lint/LICENSE +++ b/vendor/github.com/gorilla/mux/LICENSE @@ -1,17 +1,16 @@ -Copyright (c) 2013 The Go Authors. All rights reserved. -Copyright (c) 2016 Dominik Honnef. All rights reserved. +Copyright (c) 2012-2018 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 + * 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 + * 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 + * 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. diff --git a/vendor/github.com/gorilla/mux/README.md b/vendor/github.com/gorilla/mux/README.md new file mode 100644 index 0000000..35eea9f --- /dev/null +++ b/vendor/github.com/gorilla/mux/README.md @@ -0,0 +1,805 @@ +# gorilla/mux + +[![GoDoc](https://godoc.org/github.com/gorilla/mux?status.svg)](https://godoc.org/github.com/gorilla/mux) +[![CircleCI](https://circleci.com/gh/gorilla/mux.svg?style=svg)](https://circleci.com/gh/gorilla/mux) +[![Sourcegraph](https://sourcegraph.com/github.com/gorilla/mux/-/badge.svg)](https://sourcegraph.com/github.com/gorilla/mux?badge) + +![Gorilla Logo](https://cloud-cdn.questionable.services/gorilla-icon-64.png) + +https://www.gorillatoolkit.org/pkg/mux + +Package `gorilla/mux` implements a request router and dispatcher for matching incoming requests to +their respective handler. + +The name mux stands for "HTTP request multiplexer". Like the standard `http.ServeMux`, `mux.Router` matches incoming requests against a list of registered routes and calls a handler for the route that matches the URL or other conditions. The main features are: + +* It implements the `http.Handler` interface so it is compatible with the standard `http.ServeMux`. +* Requests can be matched based on URL host, path, path prefix, schemes, header and query values, HTTP methods or using custom matchers. +* URL hosts, paths and query values can have variables with an optional regular expression. +* Registered URLs can be built, or "reversed", which helps maintaining references to resources. +* Routes can be used as subrouters: nested routes are only tested if the parent route matches. This is useful to define groups of routes that share common conditions like a host, a path prefix or other repeated attributes. As a bonus, this optimizes request matching. + +--- + +* [Install](#install) +* [Examples](#examples) +* [Matching Routes](#matching-routes) +* [Static Files](#static-files) +* [Serving Single Page Applications](#serving-single-page-applications) (e.g. React, Vue, Ember.js, etc.) +* [Registered URLs](#registered-urls) +* [Walking Routes](#walking-routes) +* [Graceful Shutdown](#graceful-shutdown) +* [Middleware](#middleware) +* [Handling CORS Requests](#handling-cors-requests) +* [Testing Handlers](#testing-handlers) +* [Full Example](#full-example) + +--- + +## Install + +With a [correctly configured](https://golang.org/doc/install#testing) Go toolchain: + +```sh +go get -u github.com/gorilla/mux +``` + +## Examples + +Let's start registering a couple of URL paths and handlers: + +```go +func main() { + r := mux.NewRouter() + r.HandleFunc("/", HomeHandler) + r.HandleFunc("/products", ProductsHandler) + r.HandleFunc("/articles", ArticlesHandler) + http.Handle("/", r) +} +``` + +Here we register three routes mapping URL paths to handlers. This is equivalent to how `http.HandleFunc()` works: if an incoming request URL matches one of the paths, the corresponding handler is called passing (`http.ResponseWriter`, `*http.Request`) as parameters. + +Paths can have variables. They are defined using the format `{name}` or `{name:pattern}`. If a regular expression pattern is not defined, the matched variable will be anything until the next slash. For example: + +```go +r := mux.NewRouter() +r.HandleFunc("/products/{key}", ProductHandler) +r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler) +r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler) +``` + +The names are used to create a map of route variables which can be retrieved calling `mux.Vars()`: + +```go +func ArticlesCategoryHandler(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + w.WriteHeader(http.StatusOK) + fmt.Fprintf(w, "Category: %v\n", vars["category"]) +} +``` + +And this is all you need to know about the basic usage. More advanced options are explained below. + +### Matching Routes + +Routes can also be restricted to a domain or subdomain. Just define a host pattern to be matched. They can also have variables: + +```go +r := mux.NewRouter() +// Only matches if domain is "www.example.com". +r.Host("www.example.com") +// Matches a dynamic subdomain. +r.Host("{subdomain:[a-z]+}.example.com") +``` + +There are several other matchers that can be added. To match path prefixes: + +```go +r.PathPrefix("/products/") +``` + +...or HTTP methods: + +```go +r.Methods("GET", "POST") +``` + +...or URL schemes: + +```go +r.Schemes("https") +``` + +...or header values: + +```go +r.Headers("X-Requested-With", "XMLHttpRequest") +``` + +...or query values: + +```go +r.Queries("key", "value") +``` + +...or to use a custom matcher function: + +```go +r.MatcherFunc(func(r *http.Request, rm *RouteMatch) bool { + return r.ProtoMajor == 0 +}) +``` + +...and finally, it is possible to combine several matchers in a single route: + +```go +r.HandleFunc("/products", ProductsHandler). + Host("www.example.com"). + Methods("GET"). + Schemes("http") +``` + +Routes are tested in the order they were added to the router. If two routes match, the first one wins: + +```go +r := mux.NewRouter() +r.HandleFunc("/specific", specificHandler) +r.PathPrefix("/").Handler(catchAllHandler) +``` + +Setting the same matching conditions again and again can be boring, so we have a way to group several routes that share the same requirements. We call it "subrouting". + +For example, let's say we have several URLs that should only match when the host is `www.example.com`. Create a route for that host and get a "subrouter" from it: + +```go +r := mux.NewRouter() +s := r.Host("www.example.com").Subrouter() +``` + +Then register routes in the subrouter: + +```go +s.HandleFunc("/products/", ProductsHandler) +s.HandleFunc("/products/{key}", ProductHandler) +s.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler) +``` + +The three URL paths we registered above will only be tested if the domain is `www.example.com`, because the subrouter is tested first. This is not only convenient, but also optimizes request matching. You can create subrouters combining any attribute matchers accepted by a route. + +Subrouters can be used to create domain or path "namespaces": you define subrouters in a central place and then parts of the app can register its paths relatively to a given subrouter. + +There's one more thing about subroutes. When a subrouter has a path prefix, the inner routes use it as base for their paths: + +```go +r := mux.NewRouter() +s := r.PathPrefix("/products").Subrouter() +// "/products/" +s.HandleFunc("/", ProductsHandler) +// "/products/{key}/" +s.HandleFunc("/{key}/", ProductHandler) +// "/products/{key}/details" +s.HandleFunc("/{key}/details", ProductDetailsHandler) +``` + + +### Static Files + +Note that the path provided to `PathPrefix()` represents a "wildcard": calling +`PathPrefix("/static/").Handler(...)` means that the handler will be passed any +request that matches "/static/\*". This makes it easy to serve static files with mux: + +```go +func main() { + var dir string + + flag.StringVar(&dir, "dir", ".", "the directory to serve files from. Defaults to the current dir") + flag.Parse() + r := mux.NewRouter() + + // This will serve files under http://localhost:8000/static/ + r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(dir)))) + + srv := &http.Server{ + Handler: r, + Addr: "127.0.0.1:8000", + // Good practice: enforce timeouts for servers you create! + WriteTimeout: 15 * time.Second, + ReadTimeout: 15 * time.Second, + } + + log.Fatal(srv.ListenAndServe()) +} +``` + +### Serving Single Page Applications + +Most of the time it makes sense to serve your SPA on a separate web server from your API, +but sometimes it's desirable to serve them both from one place. It's possible to write a simple +handler for serving your SPA (for use with React Router's [BrowserRouter](https://reacttraining.com/react-router/web/api/BrowserRouter) for example), and leverage +mux's powerful routing for your API endpoints. + +```go +package main + +import ( + "encoding/json" + "log" + "net/http" + "os" + "path/filepath" + "time" + + "github.com/gorilla/mux" +) + +// spaHandler implements the http.Handler interface, so we can use it +// to respond to HTTP requests. The path to the static directory and +// path to the index file within that static directory are used to +// serve the SPA in the given static directory. +type spaHandler struct { + staticPath string + indexPath string +} + +// ServeHTTP inspects the URL path to locate a file within the static dir +// on the SPA handler. If a file is found, it will be served. If not, the +// file located at the index path on the SPA handler will be served. This +// is suitable behavior for serving an SPA (single page application). +func (h spaHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + // get the absolute path to prevent directory traversal + path, err := filepath.Abs(r.URL.Path) + if err != nil { + // if we failed to get the absolute path respond with a 400 bad request + // and stop + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + // prepend the path with the path to the static directory + path = filepath.Join(h.staticPath, path) + + // check whether a file exists at the given path + _, err = os.Stat(path) + if os.IsNotExist(err) { + // file does not exist, serve index.html + http.ServeFile(w, r, filepath.Join(h.staticPath, h.indexPath)) + return + } else if err != nil { + // if we got an error (that wasn't that the file doesn't exist) stating the + // file, return a 500 internal server error and stop + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + // otherwise, use http.FileServer to serve the static dir + http.FileServer(http.Dir(h.staticPath)).ServeHTTP(w, r) +} + +func main() { + router := mux.NewRouter() + + router.HandleFunc("/api/health", func(w http.ResponseWriter, r *http.Request) { + // an example API handler + json.NewEncoder(w).Encode(map[string]bool{"ok": true}) + }) + + spa := spaHandler{staticPath: "build", indexPath: "index.html"} + router.PathPrefix("/").Handler(spa) + + srv := &http.Server{ + Handler: router, + Addr: "127.0.0.1:8000", + // Good practice: enforce timeouts for servers you create! + WriteTimeout: 15 * time.Second, + ReadTimeout: 15 * time.Second, + } + + log.Fatal(srv.ListenAndServe()) +} +``` + +### Registered URLs + +Now let's see how to build registered URLs. + +Routes can be named. All routes that define a name can have their URLs built, or "reversed". We define a name calling `Name()` on a route. For example: + +```go +r := mux.NewRouter() +r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler). + Name("article") +``` + +To build a URL, get the route and call the `URL()` method, passing a sequence of key/value pairs for the route variables. For the previous route, we would do: + +```go +url, err := r.Get("article").URL("category", "technology", "id", "42") +``` + +...and the result will be a `url.URL` with the following path: + +``` +"/articles/technology/42" +``` + +This also works for host and query value variables: + +```go +r := mux.NewRouter() +r.Host("{subdomain}.example.com"). + Path("/articles/{category}/{id:[0-9]+}"). + Queries("filter", "{filter}"). + HandlerFunc(ArticleHandler). + Name("article") + +// url.String() will be "http://news.example.com/articles/technology/42?filter=gorilla" +url, err := r.Get("article").URL("subdomain", "news", + "category", "technology", + "id", "42", + "filter", "gorilla") +``` + +All variables defined in the route are required, and their values must conform to the corresponding patterns. These requirements guarantee that a generated URL will always match a registered route -- the only exception is for explicitly defined "build-only" routes which never match. + +Regex support also exists for matching Headers within a route. For example, we could do: + +```go +r.HeadersRegexp("Content-Type", "application/(text|json)") +``` + +...and the route will match both requests with a Content-Type of `application/json` as well as `application/text` + +There's also a way to build only the URL host or path for a route: use the methods `URLHost()` or `URLPath()` instead. For the previous route, we would do: + +```go +// "http://news.example.com/" +host, err := r.Get("article").URLHost("subdomain", "news") + +// "/articles/technology/42" +path, err := r.Get("article").URLPath("category", "technology", "id", "42") +``` + +And if you use subrouters, host and path defined separately can be built as well: + +```go +r := mux.NewRouter() +s := r.Host("{subdomain}.example.com").Subrouter() +s.Path("/articles/{category}/{id:[0-9]+}"). + HandlerFunc(ArticleHandler). + Name("article") + +// "http://news.example.com/articles/technology/42" +url, err := r.Get("article").URL("subdomain", "news", + "category", "technology", + "id", "42") +``` + +### Walking Routes + +The `Walk` function on `mux.Router` can be used to visit all of the routes that are registered on a router. For example, +the following prints all of the registered routes: + +```go +package main + +import ( + "fmt" + "net/http" + "strings" + + "github.com/gorilla/mux" +) + +func handler(w http.ResponseWriter, r *http.Request) { + return +} + +func main() { + r := mux.NewRouter() + r.HandleFunc("/", handler) + r.HandleFunc("/products", handler).Methods("POST") + r.HandleFunc("/articles", handler).Methods("GET") + r.HandleFunc("/articles/{id}", handler).Methods("GET", "PUT") + r.HandleFunc("/authors", handler).Queries("surname", "{surname}") + err := r.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error { + pathTemplate, err := route.GetPathTemplate() + if err == nil { + fmt.Println("ROUTE:", pathTemplate) + } + pathRegexp, err := route.GetPathRegexp() + if err == nil { + fmt.Println("Path regexp:", pathRegexp) + } + queriesTemplates, err := route.GetQueriesTemplates() + if err == nil { + fmt.Println("Queries templates:", strings.Join(queriesTemplates, ",")) + } + queriesRegexps, err := route.GetQueriesRegexp() + if err == nil { + fmt.Println("Queries regexps:", strings.Join(queriesRegexps, ",")) + } + methods, err := route.GetMethods() + if err == nil { + fmt.Println("Methods:", strings.Join(methods, ",")) + } + fmt.Println() + return nil + }) + + if err != nil { + fmt.Println(err) + } + + http.Handle("/", r) +} +``` + +### Graceful Shutdown + +Go 1.8 introduced the ability to [gracefully shutdown](https://golang.org/doc/go1.8#http_shutdown) a `*http.Server`. Here's how to do that alongside `mux`: + +```go +package main + +import ( + "context" + "flag" + "log" + "net/http" + "os" + "os/signal" + "time" + + "github.com/gorilla/mux" +) + +func main() { + var wait time.Duration + flag.DurationVar(&wait, "graceful-timeout", time.Second * 15, "the duration for which the server gracefully wait for existing connections to finish - e.g. 15s or 1m") + flag.Parse() + + r := mux.NewRouter() + // Add your routes as needed + + srv := &http.Server{ + Addr: "0.0.0.0:8080", + // Good practice to set timeouts to avoid Slowloris attacks. + WriteTimeout: time.Second * 15, + ReadTimeout: time.Second * 15, + IdleTimeout: time.Second * 60, + Handler: r, // Pass our instance of gorilla/mux in. + } + + // Run our server in a goroutine so that it doesn't block. + go func() { + if err := srv.ListenAndServe(); err != nil { + log.Println(err) + } + }() + + c := make(chan os.Signal, 1) + // We'll accept graceful shutdowns when quit via SIGINT (Ctrl+C) + // SIGKILL, SIGQUIT or SIGTERM (Ctrl+/) will not be caught. + signal.Notify(c, os.Interrupt) + + // Block until we receive our signal. + <-c + + // Create a deadline to wait for. + ctx, cancel := context.WithTimeout(context.Background(), wait) + defer cancel() + // Doesn't block if no connections, but will otherwise wait + // until the timeout deadline. + srv.Shutdown(ctx) + // Optionally, you could run srv.Shutdown in a goroutine and block on + // <-ctx.Done() if your application should wait for other services + // to finalize based on context cancellation. + log.Println("shutting down") + os.Exit(0) +} +``` + +### Middleware + +Mux supports the addition of middlewares to a [Router](https://godoc.org/github.com/gorilla/mux#Router), which are executed in the order they are added if a match is found, including its subrouters. +Middlewares are (typically) small pieces of code which take one request, do something with it, and pass it down to another middleware or the final handler. Some common use cases for middleware are request logging, header manipulation, or `ResponseWriter` hijacking. + +Mux middlewares are defined using the de facto standard type: + +```go +type MiddlewareFunc func(http.Handler) http.Handler +``` + +Typically, the returned handler is a closure which does something with the http.ResponseWriter and http.Request passed to it, and then calls the handler passed as parameter to the MiddlewareFunc. This takes advantage of closures being able access variables from the context where they are created, while retaining the signature enforced by the receivers. + +A very basic middleware which logs the URI of the request being handled could be written as: + +```go +func loggingMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Do stuff here + log.Println(r.RequestURI) + // Call the next handler, which can be another middleware in the chain, or the final handler. + next.ServeHTTP(w, r) + }) +} +``` + +Middlewares can be added to a router using `Router.Use()`: + +```go +r := mux.NewRouter() +r.HandleFunc("/", handler) +r.Use(loggingMiddleware) +``` + +A more complex authentication middleware, which maps session token to users, could be written as: + +```go +// Define our struct +type authenticationMiddleware struct { + tokenUsers map[string]string +} + +// Initialize it somewhere +func (amw *authenticationMiddleware) Populate() { + amw.tokenUsers["00000000"] = "user0" + amw.tokenUsers["aaaaaaaa"] = "userA" + amw.tokenUsers["05f717e5"] = "randomUser" + amw.tokenUsers["deadbeef"] = "user0" +} + +// Middleware function, which will be called for each request +func (amw *authenticationMiddleware) Middleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + token := r.Header.Get("X-Session-Token") + + if user, found := amw.tokenUsers[token]; found { + // We found the token in our map + log.Printf("Authenticated user %s\n", user) + // Pass down the request to the next middleware (or final handler) + next.ServeHTTP(w, r) + } else { + // Write an error and stop the handler chain + http.Error(w, "Forbidden", http.StatusForbidden) + } + }) +} +``` + +```go +r := mux.NewRouter() +r.HandleFunc("/", handler) + +amw := authenticationMiddleware{} +amw.Populate() + +r.Use(amw.Middleware) +``` + +Note: The handler chain will be stopped if your middleware doesn't call `next.ServeHTTP()` with the corresponding parameters. This can be used to abort a request if the middleware writer wants to. Middlewares _should_ write to `ResponseWriter` if they _are_ going to terminate the request, and they _should not_ write to `ResponseWriter` if they _are not_ going to terminate it. + +### Handling CORS Requests + +[CORSMethodMiddleware](https://godoc.org/github.com/gorilla/mux#CORSMethodMiddleware) intends to make it easier to strictly set the `Access-Control-Allow-Methods` response header. + +* You will still need to use your own CORS handler to set the other CORS headers such as `Access-Control-Allow-Origin` +* The middleware will set the `Access-Control-Allow-Methods` header to all the method matchers (e.g. `r.Methods(http.MethodGet, http.MethodPut, http.MethodOptions)` -> `Access-Control-Allow-Methods: GET,PUT,OPTIONS`) on a route +* If you do not specify any methods, then: +> _Important_: there must be an `OPTIONS` method matcher for the middleware to set the headers. + +Here is an example of using `CORSMethodMiddleware` along with a custom `OPTIONS` handler to set all the required CORS headers: + +```go +package main + +import ( + "net/http" + "github.com/gorilla/mux" +) + +func main() { + r := mux.NewRouter() + + // IMPORTANT: you must specify an OPTIONS method matcher for the middleware to set CORS headers + r.HandleFunc("/foo", fooHandler).Methods(http.MethodGet, http.MethodPut, http.MethodPatch, http.MethodOptions) + r.Use(mux.CORSMethodMiddleware(r)) + + http.ListenAndServe(":8080", r) +} + +func fooHandler(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + if r.Method == http.MethodOptions { + return + } + + w.Write([]byte("foo")) +} +``` + +And an request to `/foo` using something like: + +```bash +curl localhost:8080/foo -v +``` + +Would look like: + +```bash +* Trying ::1... +* TCP_NODELAY set +* Connected to localhost (::1) port 8080 (#0) +> GET /foo HTTP/1.1 +> Host: localhost:8080 +> User-Agent: curl/7.59.0 +> Accept: */* +> +< HTTP/1.1 200 OK +< Access-Control-Allow-Methods: GET,PUT,PATCH,OPTIONS +< Access-Control-Allow-Origin: * +< Date: Fri, 28 Jun 2019 20:13:30 GMT +< Content-Length: 3 +< Content-Type: text/plain; charset=utf-8 +< +* Connection #0 to host localhost left intact +foo +``` + +### Testing Handlers + +Testing handlers in a Go web application is straightforward, and _mux_ doesn't complicate this any further. Given two files: `endpoints.go` and `endpoints_test.go`, here's how we'd test an application using _mux_. + +First, our simple HTTP handler: + +```go +// endpoints.go +package main + +func HealthCheckHandler(w http.ResponseWriter, r *http.Request) { + // A very simple health check. + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + + // In the future we could report back on the status of our DB, or our cache + // (e.g. Redis) by performing a simple PING, and include them in the response. + io.WriteString(w, `{"alive": true}`) +} + +func main() { + r := mux.NewRouter() + r.HandleFunc("/health", HealthCheckHandler) + + log.Fatal(http.ListenAndServe("localhost:8080", r)) +} +``` + +Our test code: + +```go +// endpoints_test.go +package main + +import ( + "net/http" + "net/http/httptest" + "testing" +) + +func TestHealthCheckHandler(t *testing.T) { + // Create a request to pass to our handler. We don't have any query parameters for now, so we'll + // pass 'nil' as the third parameter. + req, err := http.NewRequest("GET", "/health", nil) + if err != nil { + t.Fatal(err) + } + + // We create a ResponseRecorder (which satisfies http.ResponseWriter) to record the response. + rr := httptest.NewRecorder() + handler := http.HandlerFunc(HealthCheckHandler) + + // Our handlers satisfy http.Handler, so we can call their ServeHTTP method + // directly and pass in our Request and ResponseRecorder. + handler.ServeHTTP(rr, req) + + // Check the status code is what we expect. + if status := rr.Code; status != http.StatusOK { + t.Errorf("handler returned wrong status code: got %v want %v", + status, http.StatusOK) + } + + // Check the response body is what we expect. + expected := `{"alive": true}` + if rr.Body.String() != expected { + t.Errorf("handler returned unexpected body: got %v want %v", + rr.Body.String(), expected) + } +} +``` + +In the case that our routes have [variables](#examples), we can pass those in the request. We could write +[table-driven tests](https://dave.cheney.net/2013/06/09/writing-table-driven-tests-in-go) to test multiple +possible route variables as needed. + +```go +// endpoints.go +func main() { + r := mux.NewRouter() + // A route with a route variable: + r.HandleFunc("/metrics/{type}", MetricsHandler) + + log.Fatal(http.ListenAndServe("localhost:8080", r)) +} +``` + +Our test file, with a table-driven test of `routeVariables`: + +```go +// endpoints_test.go +func TestMetricsHandler(t *testing.T) { + tt := []struct{ + routeVariable string + shouldPass bool + }{ + {"goroutines", true}, + {"heap", true}, + {"counters", true}, + {"queries", true}, + {"adhadaeqm3k", false}, + } + + for _, tc := range tt { + path := fmt.Sprintf("/metrics/%s", tc.routeVariable) + req, err := http.NewRequest("GET", path, nil) + if err != nil { + t.Fatal(err) + } + + rr := httptest.NewRecorder() + + // Need to create a router that we can pass the request through so that the vars will be added to the context + router := mux.NewRouter() + router.HandleFunc("/metrics/{type}", MetricsHandler) + router.ServeHTTP(rr, req) + + // In this case, our MetricsHandler returns a non-200 response + // for a route variable it doesn't know about. + if rr.Code == http.StatusOK && !tc.shouldPass { + t.Errorf("handler should have failed on routeVariable %s: got %v want %v", + tc.routeVariable, rr.Code, http.StatusOK) + } + } +} +``` + +## Full Example + +Here's a complete, runnable example of a small `mux` based server: + +```go +package main + +import ( + "net/http" + "log" + "github.com/gorilla/mux" +) + +func YourHandler(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("Gorilla!\n")) +} + +func main() { + r := mux.NewRouter() + // Routes consist of a path and a handler function. + r.HandleFunc("/", YourHandler) + + // Bind to a port and pass our router in + log.Fatal(http.ListenAndServe(":8000", r)) +} +``` + +## License + +BSD licensed. See the LICENSE file for details. diff --git a/vendor/github.com/gorilla/mux/doc.go b/vendor/github.com/gorilla/mux/doc.go new file mode 100644 index 0000000..bd5a38b --- /dev/null +++ b/vendor/github.com/gorilla/mux/doc.go @@ -0,0 +1,306 @@ +// Copyright 2012 The Gorilla Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package mux implements a request router and dispatcher. + +The name mux stands for "HTTP request multiplexer". Like the standard +http.ServeMux, mux.Router matches incoming requests against a list of +registered routes and calls a handler for the route that matches the URL +or other conditions. The main features are: + + * Requests can be matched based on URL host, path, path prefix, schemes, + header and query values, HTTP methods or using custom matchers. + * URL hosts, paths and query values can have variables with an optional + regular expression. + * Registered URLs can be built, or "reversed", which helps maintaining + references to resources. + * Routes can be used as subrouters: nested routes are only tested if the + parent route matches. This is useful to define groups of routes that + share common conditions like a host, a path prefix or other repeated + attributes. As a bonus, this optimizes request matching. + * It implements the http.Handler interface so it is compatible with the + standard http.ServeMux. + +Let's start registering a couple of URL paths and handlers: + + func main() { + r := mux.NewRouter() + r.HandleFunc("/", HomeHandler) + r.HandleFunc("/products", ProductsHandler) + r.HandleFunc("/articles", ArticlesHandler) + http.Handle("/", r) + } + +Here we register three routes mapping URL paths to handlers. This is +equivalent to how http.HandleFunc() works: if an incoming request URL matches +one of the paths, the corresponding handler is called passing +(http.ResponseWriter, *http.Request) as parameters. + +Paths can have variables. They are defined using the format {name} or +{name:pattern}. If a regular expression pattern is not defined, the matched +variable will be anything until the next slash. For example: + + r := mux.NewRouter() + r.HandleFunc("/products/{key}", ProductHandler) + r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler) + r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler) + +Groups can be used inside patterns, as long as they are non-capturing (?:re). For example: + + r.HandleFunc("/articles/{category}/{sort:(?:asc|desc|new)}", ArticlesCategoryHandler) + +The names are used to create a map of route variables which can be retrieved +calling mux.Vars(): + + vars := mux.Vars(request) + category := vars["category"] + +Note that if any capturing groups are present, mux will panic() during parsing. To prevent +this, convert any capturing groups to non-capturing, e.g. change "/{sort:(asc|desc)}" to +"/{sort:(?:asc|desc)}". This is a change from prior versions which behaved unpredictably +when capturing groups were present. + +And this is all you need to know about the basic usage. More advanced options +are explained below. + +Routes can also be restricted to a domain or subdomain. Just define a host +pattern to be matched. They can also have variables: + + r := mux.NewRouter() + // Only matches if domain is "www.example.com". + r.Host("www.example.com") + // Matches a dynamic subdomain. + r.Host("{subdomain:[a-z]+}.domain.com") + +There are several other matchers that can be added. To match path prefixes: + + r.PathPrefix("/products/") + +...or HTTP methods: + + r.Methods("GET", "POST") + +...or URL schemes: + + r.Schemes("https") + +...or header values: + + r.Headers("X-Requested-With", "XMLHttpRequest") + +...or query values: + + r.Queries("key", "value") + +...or to use a custom matcher function: + + r.MatcherFunc(func(r *http.Request, rm *RouteMatch) bool { + return r.ProtoMajor == 0 + }) + +...and finally, it is possible to combine several matchers in a single route: + + r.HandleFunc("/products", ProductsHandler). + Host("www.example.com"). + Methods("GET"). + Schemes("http") + +Setting the same matching conditions again and again can be boring, so we have +a way to group several routes that share the same requirements. +We call it "subrouting". + +For example, let's say we have several URLs that should only match when the +host is "www.example.com". Create a route for that host and get a "subrouter" +from it: + + r := mux.NewRouter() + s := r.Host("www.example.com").Subrouter() + +Then register routes in the subrouter: + + s.HandleFunc("/products/", ProductsHandler) + s.HandleFunc("/products/{key}", ProductHandler) + s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler) + +The three URL paths we registered above will only be tested if the domain is +"www.example.com", because the subrouter is tested first. This is not +only convenient, but also optimizes request matching. You can create +subrouters combining any attribute matchers accepted by a route. + +Subrouters can be used to create domain or path "namespaces": you define +subrouters in a central place and then parts of the app can register its +paths relatively to a given subrouter. + +There's one more thing about subroutes. When a subrouter has a path prefix, +the inner routes use it as base for their paths: + + r := mux.NewRouter() + s := r.PathPrefix("/products").Subrouter() + // "/products/" + s.HandleFunc("/", ProductsHandler) + // "/products/{key}/" + s.HandleFunc("/{key}/", ProductHandler) + // "/products/{key}/details" + s.HandleFunc("/{key}/details", ProductDetailsHandler) + +Note that the path provided to PathPrefix() represents a "wildcard": calling +PathPrefix("/static/").Handler(...) means that the handler will be passed any +request that matches "/static/*". This makes it easy to serve static files with mux: + + func main() { + var dir string + + flag.StringVar(&dir, "dir", ".", "the directory to serve files from. Defaults to the current dir") + flag.Parse() + r := mux.NewRouter() + + // This will serve files under http://localhost:8000/static/ + r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(dir)))) + + srv := &http.Server{ + Handler: r, + Addr: "127.0.0.1:8000", + // Good practice: enforce timeouts for servers you create! + WriteTimeout: 15 * time.Second, + ReadTimeout: 15 * time.Second, + } + + log.Fatal(srv.ListenAndServe()) + } + +Now let's see how to build registered URLs. + +Routes can be named. All routes that define a name can have their URLs built, +or "reversed". We define a name calling Name() on a route. For example: + + r := mux.NewRouter() + r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler). + Name("article") + +To build a URL, get the route and call the URL() method, passing a sequence of +key/value pairs for the route variables. For the previous route, we would do: + + url, err := r.Get("article").URL("category", "technology", "id", "42") + +...and the result will be a url.URL with the following path: + + "/articles/technology/42" + +This also works for host and query value variables: + + r := mux.NewRouter() + r.Host("{subdomain}.domain.com"). + Path("/articles/{category}/{id:[0-9]+}"). + Queries("filter", "{filter}"). + HandlerFunc(ArticleHandler). + Name("article") + + // url.String() will be "http://news.domain.com/articles/technology/42?filter=gorilla" + url, err := r.Get("article").URL("subdomain", "news", + "category", "technology", + "id", "42", + "filter", "gorilla") + +All variables defined in the route are required, and their values must +conform to the corresponding patterns. These requirements guarantee that a +generated URL will always match a registered route -- the only exception is +for explicitly defined "build-only" routes which never match. + +Regex support also exists for matching Headers within a route. For example, we could do: + + r.HeadersRegexp("Content-Type", "application/(text|json)") + +...and the route will match both requests with a Content-Type of `application/json` as well as +`application/text` + +There's also a way to build only the URL host or path for a route: +use the methods URLHost() or URLPath() instead. For the previous route, +we would do: + + // "http://news.domain.com/" + host, err := r.Get("article").URLHost("subdomain", "news") + + // "/articles/technology/42" + path, err := r.Get("article").URLPath("category", "technology", "id", "42") + +And if you use subrouters, host and path defined separately can be built +as well: + + r := mux.NewRouter() + s := r.Host("{subdomain}.domain.com").Subrouter() + s.Path("/articles/{category}/{id:[0-9]+}"). + HandlerFunc(ArticleHandler). + Name("article") + + // "http://news.domain.com/articles/technology/42" + url, err := r.Get("article").URL("subdomain", "news", + "category", "technology", + "id", "42") + +Mux supports the addition of middlewares to a Router, which are executed in the order they are added if a match is found, including its subrouters. Middlewares are (typically) small pieces of code which take one request, do something with it, and pass it down to another middleware or the final handler. Some common use cases for middleware are request logging, header manipulation, or ResponseWriter hijacking. + + type MiddlewareFunc func(http.Handler) http.Handler + +Typically, the returned handler is a closure which does something with the http.ResponseWriter and http.Request passed to it, and then calls the handler passed as parameter to the MiddlewareFunc (closures can access variables from the context where they are created). + +A very basic middleware which logs the URI of the request being handled could be written as: + + func simpleMw(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Do stuff here + log.Println(r.RequestURI) + // Call the next handler, which can be another middleware in the chain, or the final handler. + next.ServeHTTP(w, r) + }) + } + +Middlewares can be added to a router using `Router.Use()`: + + r := mux.NewRouter() + r.HandleFunc("/", handler) + r.Use(simpleMw) + +A more complex authentication middleware, which maps session token to users, could be written as: + + // Define our struct + type authenticationMiddleware struct { + tokenUsers map[string]string + } + + // Initialize it somewhere + func (amw *authenticationMiddleware) Populate() { + amw.tokenUsers["00000000"] = "user0" + amw.tokenUsers["aaaaaaaa"] = "userA" + amw.tokenUsers["05f717e5"] = "randomUser" + amw.tokenUsers["deadbeef"] = "user0" + } + + // Middleware function, which will be called for each request + func (amw *authenticationMiddleware) Middleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + token := r.Header.Get("X-Session-Token") + + if user, found := amw.tokenUsers[token]; found { + // We found the token in our map + log.Printf("Authenticated user %s\n", user) + next.ServeHTTP(w, r) + } else { + http.Error(w, "Forbidden", http.StatusForbidden) + } + }) + } + + r := mux.NewRouter() + r.HandleFunc("/", handler) + + amw := authenticationMiddleware{tokenUsers: make(map[string]string)} + amw.Populate() + + r.Use(amw.Middleware) + +Note: The handler chain will be stopped if your middleware doesn't call `next.ServeHTTP()` with the corresponding parameters. This can be used to abort a request if the middleware writer wants to. + +*/ +package mux diff --git a/vendor/github.com/gorilla/mux/go.mod b/vendor/github.com/gorilla/mux/go.mod new file mode 100644 index 0000000..df170a3 --- /dev/null +++ b/vendor/github.com/gorilla/mux/go.mod @@ -0,0 +1,3 @@ +module github.com/gorilla/mux + +go 1.12 diff --git a/vendor/github.com/gorilla/mux/middleware.go b/vendor/github.com/gorilla/mux/middleware.go new file mode 100644 index 0000000..cb51c56 --- /dev/null +++ b/vendor/github.com/gorilla/mux/middleware.go @@ -0,0 +1,74 @@ +package mux + +import ( + "net/http" + "strings" +) + +// MiddlewareFunc is a function which receives an http.Handler and returns another http.Handler. +// Typically, the returned handler is a closure which does something with the http.ResponseWriter and http.Request passed +// to it, and then calls the handler passed as parameter to the MiddlewareFunc. +type MiddlewareFunc func(http.Handler) http.Handler + +// middleware interface is anything which implements a MiddlewareFunc named Middleware. +type middleware interface { + Middleware(handler http.Handler) http.Handler +} + +// Middleware allows MiddlewareFunc to implement the middleware interface. +func (mw MiddlewareFunc) Middleware(handler http.Handler) http.Handler { + return mw(handler) +} + +// Use appends a MiddlewareFunc to the chain. Middleware can be used to intercept or otherwise modify requests and/or responses, and are executed in the order that they are applied to the Router. +func (r *Router) Use(mwf ...MiddlewareFunc) { + for _, fn := range mwf { + r.middlewares = append(r.middlewares, fn) + } +} + +// useInterface appends a middleware to the chain. Middleware can be used to intercept or otherwise modify requests and/or responses, and are executed in the order that they are applied to the Router. +func (r *Router) useInterface(mw middleware) { + r.middlewares = append(r.middlewares, mw) +} + +// CORSMethodMiddleware automatically sets the Access-Control-Allow-Methods response header +// on requests for routes that have an OPTIONS method matcher to all the method matchers on +// the route. Routes that do not explicitly handle OPTIONS requests will not be processed +// by the middleware. See examples for usage. +func CORSMethodMiddleware(r *Router) MiddlewareFunc { + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + allMethods, err := getAllMethodsForRoute(r, req) + if err == nil { + for _, v := range allMethods { + if v == http.MethodOptions { + w.Header().Set("Access-Control-Allow-Methods", strings.Join(allMethods, ",")) + } + } + } + + next.ServeHTTP(w, req) + }) + } +} + +// getAllMethodsForRoute returns all the methods from method matchers matching a given +// request. +func getAllMethodsForRoute(r *Router, req *http.Request) ([]string, error) { + var allMethods []string + + for _, route := range r.routes { + var match RouteMatch + if route.Match(req, &match) || match.MatchErr == ErrMethodMismatch { + methods, err := route.GetMethods() + if err != nil { + return nil, err + } + + allMethods = append(allMethods, methods...) + } + } + + return allMethods, nil +} diff --git a/vendor/github.com/gorilla/mux/mux.go b/vendor/github.com/gorilla/mux/mux.go new file mode 100644 index 0000000..782a34b --- /dev/null +++ b/vendor/github.com/gorilla/mux/mux.go @@ -0,0 +1,606 @@ +// Copyright 2012 The Gorilla Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mux + +import ( + "context" + "errors" + "fmt" + "net/http" + "path" + "regexp" +) + +var ( + // ErrMethodMismatch is returned when the method in the request does not match + // the method defined against the route. + ErrMethodMismatch = errors.New("method is not allowed") + // ErrNotFound is returned when no route match is found. + ErrNotFound = errors.New("no matching route was found") +) + +// NewRouter returns a new router instance. +func NewRouter() *Router { + return &Router{namedRoutes: make(map[string]*Route)} +} + +// Router registers routes to be matched and dispatches a handler. +// +// It implements the http.Handler interface, so it can be registered to serve +// requests: +// +// var router = mux.NewRouter() +// +// func main() { +// http.Handle("/", router) +// } +// +// Or, for Google App Engine, register it in a init() function: +// +// func init() { +// http.Handle("/", router) +// } +// +// This will send all incoming requests to the router. +type Router struct { + // Configurable Handler to be used when no route matches. + NotFoundHandler http.Handler + + // Configurable Handler to be used when the request method does not match the route. + MethodNotAllowedHandler http.Handler + + // Routes to be matched, in order. + routes []*Route + + // Routes by name for URL building. + namedRoutes map[string]*Route + + // If true, do not clear the request context after handling the request. + // + // Deprecated: No effect, since the context is stored on the request itself. + KeepContext bool + + // Slice of middlewares to be called after a match is found + middlewares []middleware + + // configuration shared with `Route` + routeConf +} + +// common route configuration shared between `Router` and `Route` +type routeConf struct { + // If true, "/path/foo%2Fbar/to" will match the path "/path/{var}/to" + useEncodedPath bool + + // If true, when the path pattern is "/path/", accessing "/path" will + // redirect to the former and vice versa. + strictSlash bool + + // If true, when the path pattern is "/path//to", accessing "/path//to" + // will not redirect + skipClean bool + + // Manager for the variables from host and path. + regexp routeRegexpGroup + + // List of matchers. + matchers []matcher + + // The scheme used when building URLs. + buildScheme string + + buildVarsFunc BuildVarsFunc +} + +// returns an effective deep copy of `routeConf` +func copyRouteConf(r routeConf) routeConf { + c := r + + if r.regexp.path != nil { + c.regexp.path = copyRouteRegexp(r.regexp.path) + } + + if r.regexp.host != nil { + c.regexp.host = copyRouteRegexp(r.regexp.host) + } + + c.regexp.queries = make([]*routeRegexp, 0, len(r.regexp.queries)) + for _, q := range r.regexp.queries { + c.regexp.queries = append(c.regexp.queries, copyRouteRegexp(q)) + } + + c.matchers = make([]matcher, len(r.matchers)) + copy(c.matchers, r.matchers) + + return c +} + +func copyRouteRegexp(r *routeRegexp) *routeRegexp { + c := *r + return &c +} + +// Match attempts to match the given request against the router's registered routes. +// +// If the request matches a route of this router or one of its subrouters the Route, +// Handler, and Vars fields of the the match argument are filled and this function +// returns true. +// +// If the request does not match any of this router's or its subrouters' routes +// then this function returns false. If available, a reason for the match failure +// will be filled in the match argument's MatchErr field. If the match failure type +// (eg: not found) has a registered handler, the handler is assigned to the Handler +// field of the match argument. +func (r *Router) Match(req *http.Request, match *RouteMatch) bool { + for _, route := range r.routes { + if route.Match(req, match) { + // Build middleware chain if no error was found + if match.MatchErr == nil { + for i := len(r.middlewares) - 1; i >= 0; i-- { + match.Handler = r.middlewares[i].Middleware(match.Handler) + } + } + return true + } + } + + if match.MatchErr == ErrMethodMismatch { + if r.MethodNotAllowedHandler != nil { + match.Handler = r.MethodNotAllowedHandler + return true + } + + return false + } + + // Closest match for a router (includes sub-routers) + if r.NotFoundHandler != nil { + match.Handler = r.NotFoundHandler + match.MatchErr = ErrNotFound + return true + } + + match.MatchErr = ErrNotFound + return false +} + +// ServeHTTP dispatches the handler registered in the matched route. +// +// When there is a match, the route variables can be retrieved calling +// mux.Vars(request). +func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { + if !r.skipClean { + path := req.URL.Path + if r.useEncodedPath { + path = req.URL.EscapedPath() + } + // Clean path to canonical form and redirect. + if p := cleanPath(path); p != path { + + // Added 3 lines (Philip Schlump) - It was dropping the query string and #whatever from query. + // This matches with fix in go 1.2 r.c. 4 for same problem. Go Issue: + // http://code.google.com/p/go/issues/detail?id=5252 + url := *req.URL + url.Path = p + p = url.String() + + w.Header().Set("Location", p) + w.WriteHeader(http.StatusMovedPermanently) + return + } + } + var match RouteMatch + var handler http.Handler + if r.Match(req, &match) { + handler = match.Handler + req = requestWithVars(req, match.Vars) + req = requestWithRoute(req, match.Route) + } + + if handler == nil && match.MatchErr == ErrMethodMismatch { + handler = methodNotAllowedHandler() + } + + if handler == nil { + handler = http.NotFoundHandler() + } + + handler.ServeHTTP(w, req) +} + +// Get returns a route registered with the given name. +func (r *Router) Get(name string) *Route { + return r.namedRoutes[name] +} + +// GetRoute returns a route registered with the given name. This method +// was renamed to Get() and remains here for backwards compatibility. +func (r *Router) GetRoute(name string) *Route { + return r.namedRoutes[name] +} + +// StrictSlash defines the trailing slash behavior for new routes. The initial +// value is false. +// +// When true, if the route path is "/path/", accessing "/path" will perform a redirect +// to the former and vice versa. In other words, your application will always +// see the path as specified in the route. +// +// When false, if the route path is "/path", accessing "/path/" will not match +// this route and vice versa. +// +// The re-direct is a HTTP 301 (Moved Permanently). Note that when this is set for +// routes with a non-idempotent method (e.g. POST, PUT), the subsequent re-directed +// request will be made as a GET by most clients. Use middleware or client settings +// to modify this behaviour as needed. +// +// Special case: when a route sets a path prefix using the PathPrefix() method, +// strict slash is ignored for that route because the redirect behavior can't +// be determined from a prefix alone. However, any subrouters created from that +// route inherit the original StrictSlash setting. +func (r *Router) StrictSlash(value bool) *Router { + r.strictSlash = value + return r +} + +// SkipClean defines the path cleaning behaviour for new routes. The initial +// value is false. Users should be careful about which routes are not cleaned +// +// When true, if the route path is "/path//to", it will remain with the double +// slash. This is helpful if you have a route like: /fetch/http://xkcd.com/534/ +// +// When false, the path will be cleaned, so /fetch/http://xkcd.com/534/ will +// become /fetch/http/xkcd.com/534 +func (r *Router) SkipClean(value bool) *Router { + r.skipClean = value + return r +} + +// UseEncodedPath tells the router to match the encoded original path +// to the routes. +// For eg. "/path/foo%2Fbar/to" will match the path "/path/{var}/to". +// +// If not called, the router will match the unencoded path to the routes. +// For eg. "/path/foo%2Fbar/to" will match the path "/path/foo/bar/to" +func (r *Router) UseEncodedPath() *Router { + r.useEncodedPath = true + return r +} + +// ---------------------------------------------------------------------------- +// Route factories +// ---------------------------------------------------------------------------- + +// NewRoute registers an empty route. +func (r *Router) NewRoute() *Route { + // initialize a route with a copy of the parent router's configuration + route := &Route{routeConf: copyRouteConf(r.routeConf), namedRoutes: r.namedRoutes} + r.routes = append(r.routes, route) + return route +} + +// Name registers a new route with a name. +// See Route.Name(). +func (r *Router) Name(name string) *Route { + return r.NewRoute().Name(name) +} + +// Handle registers a new route with a matcher for the URL path. +// See Route.Path() and Route.Handler(). +func (r *Router) Handle(path string, handler http.Handler) *Route { + return r.NewRoute().Path(path).Handler(handler) +} + +// HandleFunc registers a new route with a matcher for the URL path. +// See Route.Path() and Route.HandlerFunc(). +func (r *Router) HandleFunc(path string, f func(http.ResponseWriter, + *http.Request)) *Route { + return r.NewRoute().Path(path).HandlerFunc(f) +} + +// Headers registers a new route with a matcher for request header values. +// See Route.Headers(). +func (r *Router) Headers(pairs ...string) *Route { + return r.NewRoute().Headers(pairs...) +} + +// Host registers a new route with a matcher for the URL host. +// See Route.Host(). +func (r *Router) Host(tpl string) *Route { + return r.NewRoute().Host(tpl) +} + +// MatcherFunc registers a new route with a custom matcher function. +// See Route.MatcherFunc(). +func (r *Router) MatcherFunc(f MatcherFunc) *Route { + return r.NewRoute().MatcherFunc(f) +} + +// Methods registers a new route with a matcher for HTTP methods. +// See Route.Methods(). +func (r *Router) Methods(methods ...string) *Route { + return r.NewRoute().Methods(methods...) +} + +// Path registers a new route with a matcher for the URL path. +// See Route.Path(). +func (r *Router) Path(tpl string) *Route { + return r.NewRoute().Path(tpl) +} + +// PathPrefix registers a new route with a matcher for the URL path prefix. +// See Route.PathPrefix(). +func (r *Router) PathPrefix(tpl string) *Route { + return r.NewRoute().PathPrefix(tpl) +} + +// Queries registers a new route with a matcher for URL query values. +// See Route.Queries(). +func (r *Router) Queries(pairs ...string) *Route { + return r.NewRoute().Queries(pairs...) +} + +// Schemes registers a new route with a matcher for URL schemes. +// See Route.Schemes(). +func (r *Router) Schemes(schemes ...string) *Route { + return r.NewRoute().Schemes(schemes...) +} + +// BuildVarsFunc registers a new route with a custom function for modifying +// route variables before building a URL. +func (r *Router) BuildVarsFunc(f BuildVarsFunc) *Route { + return r.NewRoute().BuildVarsFunc(f) +} + +// Walk walks the router and all its sub-routers, calling walkFn for each route +// in the tree. The routes are walked in the order they were added. Sub-routers +// are explored depth-first. +func (r *Router) Walk(walkFn WalkFunc) error { + return r.walk(walkFn, []*Route{}) +} + +// SkipRouter is used as a return value from WalkFuncs to indicate that the +// router that walk is about to descend down to should be skipped. +var SkipRouter = errors.New("skip this router") + +// WalkFunc is the type of the function called for each route visited by Walk. +// At every invocation, it is given the current route, and the current router, +// and a list of ancestor routes that lead to the current route. +type WalkFunc func(route *Route, router *Router, ancestors []*Route) error + +func (r *Router) walk(walkFn WalkFunc, ancestors []*Route) error { + for _, t := range r.routes { + err := walkFn(t, r, ancestors) + if err == SkipRouter { + continue + } + if err != nil { + return err + } + for _, sr := range t.matchers { + if h, ok := sr.(*Router); ok { + ancestors = append(ancestors, t) + err := h.walk(walkFn, ancestors) + if err != nil { + return err + } + ancestors = ancestors[:len(ancestors)-1] + } + } + if h, ok := t.handler.(*Router); ok { + ancestors = append(ancestors, t) + err := h.walk(walkFn, ancestors) + if err != nil { + return err + } + ancestors = ancestors[:len(ancestors)-1] + } + } + return nil +} + +// ---------------------------------------------------------------------------- +// Context +// ---------------------------------------------------------------------------- + +// RouteMatch stores information about a matched route. +type RouteMatch struct { + Route *Route + Handler http.Handler + Vars map[string]string + + // MatchErr is set to appropriate matching error + // It is set to ErrMethodMismatch if there is a mismatch in + // the request method and route method + MatchErr error +} + +type contextKey int + +const ( + varsKey contextKey = iota + routeKey +) + +// Vars returns the route variables for the current request, if any. +func Vars(r *http.Request) map[string]string { + if rv := r.Context().Value(varsKey); rv != nil { + return rv.(map[string]string) + } + return nil +} + +// CurrentRoute returns the matched route for the current request, if any. +// This only works when called inside the handler of the matched route +// because the matched route is stored in the request context which is cleared +// after the handler returns. +func CurrentRoute(r *http.Request) *Route { + if rv := r.Context().Value(routeKey); rv != nil { + return rv.(*Route) + } + return nil +} + +func requestWithVars(r *http.Request, vars map[string]string) *http.Request { + ctx := context.WithValue(r.Context(), varsKey, vars) + return r.WithContext(ctx) +} + +func requestWithRoute(r *http.Request, route *Route) *http.Request { + ctx := context.WithValue(r.Context(), routeKey, route) + return r.WithContext(ctx) +} + +// ---------------------------------------------------------------------------- +// Helpers +// ---------------------------------------------------------------------------- + +// cleanPath returns the canonical path for p, eliminating . and .. elements. +// Borrowed from the net/http package. +func cleanPath(p string) string { + if p == "" { + return "/" + } + if p[0] != '/' { + p = "/" + p + } + np := path.Clean(p) + // path.Clean removes trailing slash except for root; + // put the trailing slash back if necessary. + if p[len(p)-1] == '/' && np != "/" { + np += "/" + } + + return np +} + +// uniqueVars returns an error if two slices contain duplicated strings. +func uniqueVars(s1, s2 []string) error { + for _, v1 := range s1 { + for _, v2 := range s2 { + if v1 == v2 { + return fmt.Errorf("mux: duplicated route variable %q", v2) + } + } + } + return nil +} + +// checkPairs returns the count of strings passed in, and an error if +// the count is not an even number. +func checkPairs(pairs ...string) (int, error) { + length := len(pairs) + if length%2 != 0 { + return length, fmt.Errorf( + "mux: number of parameters must be multiple of 2, got %v", pairs) + } + return length, nil +} + +// mapFromPairsToString converts variadic string parameters to a +// string to string map. +func mapFromPairsToString(pairs ...string) (map[string]string, error) { + length, err := checkPairs(pairs...) + if err != nil { + return nil, err + } + m := make(map[string]string, length/2) + for i := 0; i < length; i += 2 { + m[pairs[i]] = pairs[i+1] + } + return m, nil +} + +// mapFromPairsToRegex converts variadic string parameters to a +// string to regex map. +func mapFromPairsToRegex(pairs ...string) (map[string]*regexp.Regexp, error) { + length, err := checkPairs(pairs...) + if err != nil { + return nil, err + } + m := make(map[string]*regexp.Regexp, length/2) + for i := 0; i < length; i += 2 { + regex, err := regexp.Compile(pairs[i+1]) + if err != nil { + return nil, err + } + m[pairs[i]] = regex + } + return m, nil +} + +// matchInArray returns true if the given string value is in the array. +func matchInArray(arr []string, value string) bool { + for _, v := range arr { + if v == value { + return true + } + } + return false +} + +// matchMapWithString returns true if the given key/value pairs exist in a given map. +func matchMapWithString(toCheck map[string]string, toMatch map[string][]string, canonicalKey bool) bool { + for k, v := range toCheck { + // Check if key exists. + if canonicalKey { + k = http.CanonicalHeaderKey(k) + } + if values := toMatch[k]; values == nil { + return false + } else if v != "" { + // If value was defined as an empty string we only check that the + // key exists. Otherwise we also check for equality. + valueExists := false + for _, value := range values { + if v == value { + valueExists = true + break + } + } + if !valueExists { + return false + } + } + } + return true +} + +// matchMapWithRegex returns true if the given key/value pairs exist in a given map compiled against +// the given regex +func matchMapWithRegex(toCheck map[string]*regexp.Regexp, toMatch map[string][]string, canonicalKey bool) bool { + for k, v := range toCheck { + // Check if key exists. + if canonicalKey { + k = http.CanonicalHeaderKey(k) + } + if values := toMatch[k]; values == nil { + return false + } else if v != nil { + // If value was defined as an empty string we only check that the + // key exists. Otherwise we also check for equality. + valueExists := false + for _, value := range values { + if v.MatchString(value) { + valueExists = true + break + } + } + if !valueExists { + return false + } + } + } + return true +} + +// methodNotAllowed replies to the request with an HTTP status code 405. +func methodNotAllowed(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusMethodNotAllowed) +} + +// methodNotAllowedHandler returns a simple request handler +// that replies to each request with a status code 405. +func methodNotAllowedHandler() http.Handler { return http.HandlerFunc(methodNotAllowed) } diff --git a/vendor/github.com/gorilla/mux/regexp.go b/vendor/github.com/gorilla/mux/regexp.go new file mode 100644 index 0000000..0144842 --- /dev/null +++ b/vendor/github.com/gorilla/mux/regexp.go @@ -0,0 +1,388 @@ +// Copyright 2012 The Gorilla Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mux + +import ( + "bytes" + "fmt" + "net/http" + "net/url" + "regexp" + "strconv" + "strings" +) + +type routeRegexpOptions struct { + strictSlash bool + useEncodedPath bool +} + +type regexpType int + +const ( + regexpTypePath regexpType = 0 + regexpTypeHost regexpType = 1 + regexpTypePrefix regexpType = 2 + regexpTypeQuery regexpType = 3 +) + +// newRouteRegexp parses a route template and returns a routeRegexp, +// used to match a host, a path or a query string. +// +// It will extract named variables, assemble a regexp to be matched, create +// a "reverse" template to build URLs and compile regexps to validate variable +// values used in URL building. +// +// Previously we accepted only Python-like identifiers for variable +// names ([a-zA-Z_][a-zA-Z0-9_]*), but currently the only restriction is that +// name and pattern can't be empty, and names can't contain a colon. +func newRouteRegexp(tpl string, typ regexpType, options routeRegexpOptions) (*routeRegexp, error) { + // Check if it is well-formed. + idxs, errBraces := braceIndices(tpl) + if errBraces != nil { + return nil, errBraces + } + // Backup the original. + template := tpl + // Now let's parse it. + defaultPattern := "[^/]+" + if typ == regexpTypeQuery { + defaultPattern = ".*" + } else if typ == regexpTypeHost { + defaultPattern = "[^.]+" + } + // Only match strict slash if not matching + if typ != regexpTypePath { + options.strictSlash = false + } + // Set a flag for strictSlash. + endSlash := false + if options.strictSlash && strings.HasSuffix(tpl, "/") { + tpl = tpl[:len(tpl)-1] + endSlash = true + } + varsN := make([]string, len(idxs)/2) + varsR := make([]*regexp.Regexp, len(idxs)/2) + pattern := bytes.NewBufferString("") + pattern.WriteByte('^') + reverse := bytes.NewBufferString("") + var end int + var err error + for i := 0; i < len(idxs); i += 2 { + // Set all values we are interested in. + raw := tpl[end:idxs[i]] + end = idxs[i+1] + parts := strings.SplitN(tpl[idxs[i]+1:end-1], ":", 2) + name := parts[0] + patt := defaultPattern + if len(parts) == 2 { + patt = parts[1] + } + // Name or pattern can't be empty. + if name == "" || patt == "" { + return nil, fmt.Errorf("mux: missing name or pattern in %q", + tpl[idxs[i]:end]) + } + // Build the regexp pattern. + fmt.Fprintf(pattern, "%s(?P<%s>%s)", regexp.QuoteMeta(raw), varGroupName(i/2), patt) + + // Build the reverse template. + fmt.Fprintf(reverse, "%s%%s", raw) + + // Append variable name and compiled pattern. + varsN[i/2] = name + varsR[i/2], err = regexp.Compile(fmt.Sprintf("^%s$", patt)) + if err != nil { + return nil, err + } + } + // Add the remaining. + raw := tpl[end:] + pattern.WriteString(regexp.QuoteMeta(raw)) + if options.strictSlash { + pattern.WriteString("[/]?") + } + if typ == regexpTypeQuery { + // Add the default pattern if the query value is empty + if queryVal := strings.SplitN(template, "=", 2)[1]; queryVal == "" { + pattern.WriteString(defaultPattern) + } + } + if typ != regexpTypePrefix { + pattern.WriteByte('$') + } + + var wildcardHostPort bool + if typ == regexpTypeHost { + if !strings.Contains(pattern.String(), ":") { + wildcardHostPort = true + } + } + reverse.WriteString(raw) + if endSlash { + reverse.WriteByte('/') + } + // Compile full regexp. + reg, errCompile := regexp.Compile(pattern.String()) + if errCompile != nil { + return nil, errCompile + } + + // Check for capturing groups which used to work in older versions + if reg.NumSubexp() != len(idxs)/2 { + panic(fmt.Sprintf("route %s contains capture groups in its regexp. ", template) + + "Only non-capturing groups are accepted: e.g. (?:pattern) instead of (pattern)") + } + + // Done! + return &routeRegexp{ + template: template, + regexpType: typ, + options: options, + regexp: reg, + reverse: reverse.String(), + varsN: varsN, + varsR: varsR, + wildcardHostPort: wildcardHostPort, + }, nil +} + +// routeRegexp stores a regexp to match a host or path and information to +// collect and validate route variables. +type routeRegexp struct { + // The unmodified template. + template string + // The type of match + regexpType regexpType + // Options for matching + options routeRegexpOptions + // Expanded regexp. + regexp *regexp.Regexp + // Reverse template. + reverse string + // Variable names. + varsN []string + // Variable regexps (validators). + varsR []*regexp.Regexp + // Wildcard host-port (no strict port match in hostname) + wildcardHostPort bool +} + +// Match matches the regexp against the URL host or path. +func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool { + if r.regexpType == regexpTypeHost { + host := getHost(req) + if r.wildcardHostPort { + // Don't be strict on the port match + if i := strings.Index(host, ":"); i != -1 { + host = host[:i] + } + } + return r.regexp.MatchString(host) + } + + if r.regexpType == regexpTypeQuery { + return r.matchQueryString(req) + } + path := req.URL.Path + if r.options.useEncodedPath { + path = req.URL.EscapedPath() + } + return r.regexp.MatchString(path) +} + +// url builds a URL part using the given values. +func (r *routeRegexp) url(values map[string]string) (string, error) { + urlValues := make([]interface{}, len(r.varsN), len(r.varsN)) + for k, v := range r.varsN { + value, ok := values[v] + if !ok { + return "", fmt.Errorf("mux: missing route variable %q", v) + } + if r.regexpType == regexpTypeQuery { + value = url.QueryEscape(value) + } + urlValues[k] = value + } + rv := fmt.Sprintf(r.reverse, urlValues...) + if !r.regexp.MatchString(rv) { + // The URL is checked against the full regexp, instead of checking + // individual variables. This is faster but to provide a good error + // message, we check individual regexps if the URL doesn't match. + for k, v := range r.varsN { + if !r.varsR[k].MatchString(values[v]) { + return "", fmt.Errorf( + "mux: variable %q doesn't match, expected %q", values[v], + r.varsR[k].String()) + } + } + } + return rv, nil +} + +// getURLQuery returns a single query parameter from a request URL. +// For a URL with foo=bar&baz=ding, we return only the relevant key +// value pair for the routeRegexp. +func (r *routeRegexp) getURLQuery(req *http.Request) string { + if r.regexpType != regexpTypeQuery { + return "" + } + templateKey := strings.SplitN(r.template, "=", 2)[0] + val, ok := findFirstQueryKey(req.URL.RawQuery, templateKey) + if ok { + return templateKey + "=" + val + } + return "" +} + +// findFirstQueryKey returns the same result as (*url.URL).Query()[key][0]. +// If key was not found, empty string and false is returned. +func findFirstQueryKey(rawQuery, key string) (value string, ok bool) { + query := []byte(rawQuery) + for len(query) > 0 { + foundKey := query + if i := bytes.IndexAny(foundKey, "&;"); i >= 0 { + foundKey, query = foundKey[:i], foundKey[i+1:] + } else { + query = query[:0] + } + if len(foundKey) == 0 { + continue + } + var value []byte + if i := bytes.IndexByte(foundKey, '='); i >= 0 { + foundKey, value = foundKey[:i], foundKey[i+1:] + } + if len(foundKey) < len(key) { + // Cannot possibly be key. + continue + } + keyString, err := url.QueryUnescape(string(foundKey)) + if err != nil { + continue + } + if keyString != key { + continue + } + valueString, err := url.QueryUnescape(string(value)) + if err != nil { + continue + } + return valueString, true + } + return "", false +} + +func (r *routeRegexp) matchQueryString(req *http.Request) bool { + return r.regexp.MatchString(r.getURLQuery(req)) +} + +// braceIndices returns the first level curly brace indices from a string. +// It returns an error in case of unbalanced braces. +func braceIndices(s string) ([]int, error) { + var level, idx int + var idxs []int + for i := 0; i < len(s); i++ { + switch s[i] { + case '{': + if level++; level == 1 { + idx = i + } + case '}': + if level--; level == 0 { + idxs = append(idxs, idx, i+1) + } else if level < 0 { + return nil, fmt.Errorf("mux: unbalanced braces in %q", s) + } + } + } + if level != 0 { + return nil, fmt.Errorf("mux: unbalanced braces in %q", s) + } + return idxs, nil +} + +// varGroupName builds a capturing group name for the indexed variable. +func varGroupName(idx int) string { + return "v" + strconv.Itoa(idx) +} + +// ---------------------------------------------------------------------------- +// routeRegexpGroup +// ---------------------------------------------------------------------------- + +// routeRegexpGroup groups the route matchers that carry variables. +type routeRegexpGroup struct { + host *routeRegexp + path *routeRegexp + queries []*routeRegexp +} + +// setMatch extracts the variables from the URL once a route matches. +func (v routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) { + // Store host variables. + if v.host != nil { + host := getHost(req) + if v.host.wildcardHostPort { + // Don't be strict on the port match + if i := strings.Index(host, ":"); i != -1 { + host = host[:i] + } + } + matches := v.host.regexp.FindStringSubmatchIndex(host) + if len(matches) > 0 { + extractVars(host, matches, v.host.varsN, m.Vars) + } + } + path := req.URL.Path + if r.useEncodedPath { + path = req.URL.EscapedPath() + } + // Store path variables. + if v.path != nil { + matches := v.path.regexp.FindStringSubmatchIndex(path) + if len(matches) > 0 { + extractVars(path, matches, v.path.varsN, m.Vars) + // Check if we should redirect. + if v.path.options.strictSlash { + p1 := strings.HasSuffix(path, "/") + p2 := strings.HasSuffix(v.path.template, "/") + if p1 != p2 { + u, _ := url.Parse(req.URL.String()) + if p1 { + u.Path = u.Path[:len(u.Path)-1] + } else { + u.Path += "/" + } + m.Handler = http.RedirectHandler(u.String(), http.StatusMovedPermanently) + } + } + } + } + // Store query string variables. + for _, q := range v.queries { + queryURL := q.getURLQuery(req) + matches := q.regexp.FindStringSubmatchIndex(queryURL) + if len(matches) > 0 { + extractVars(queryURL, matches, q.varsN, m.Vars) + } + } +} + +// getHost tries its best to return the request host. +// According to section 14.23 of RFC 2616 the Host header +// can include the port number if the default value of 80 is not used. +func getHost(r *http.Request) string { + if r.URL.IsAbs() { + return r.URL.Host + } + return r.Host +} + +func extractVars(input string, matches []int, names []string, output map[string]string) { + for i, name := range names { + output[name] = input[matches[2*i+2]:matches[2*i+3]] + } +} diff --git a/vendor/github.com/gorilla/mux/route.go b/vendor/github.com/gorilla/mux/route.go new file mode 100644 index 0000000..750afe5 --- /dev/null +++ b/vendor/github.com/gorilla/mux/route.go @@ -0,0 +1,736 @@ +// Copyright 2012 The Gorilla Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mux + +import ( + "errors" + "fmt" + "net/http" + "net/url" + "regexp" + "strings" +) + +// Route stores information to match a request and build URLs. +type Route struct { + // Request handler for the route. + handler http.Handler + // If true, this route never matches: it is only used to build URLs. + buildOnly bool + // The name used to build URLs. + name string + // Error resulted from building a route. + err error + + // "global" reference to all named routes + namedRoutes map[string]*Route + + // config possibly passed in from `Router` + routeConf +} + +// SkipClean reports whether path cleaning is enabled for this route via +// Router.SkipClean. +func (r *Route) SkipClean() bool { + return r.skipClean +} + +// Match matches the route against the request. +func (r *Route) Match(req *http.Request, match *RouteMatch) bool { + if r.buildOnly || r.err != nil { + return false + } + + var matchErr error + + // Match everything. + for _, m := range r.matchers { + if matched := m.Match(req, match); !matched { + if _, ok := m.(methodMatcher); ok { + matchErr = ErrMethodMismatch + continue + } + + // Ignore ErrNotFound errors. These errors arise from match call + // to Subrouters. + // + // This prevents subsequent matching subrouters from failing to + // run middleware. If not ignored, the middleware would see a + // non-nil MatchErr and be skipped, even when there was a + // matching route. + if match.MatchErr == ErrNotFound { + match.MatchErr = nil + } + + matchErr = nil + return false + } + } + + if matchErr != nil { + match.MatchErr = matchErr + return false + } + + if match.MatchErr == ErrMethodMismatch && r.handler != nil { + // We found a route which matches request method, clear MatchErr + match.MatchErr = nil + // Then override the mis-matched handler + match.Handler = r.handler + } + + // Yay, we have a match. Let's collect some info about it. + if match.Route == nil { + match.Route = r + } + if match.Handler == nil { + match.Handler = r.handler + } + if match.Vars == nil { + match.Vars = make(map[string]string) + } + + // Set variables. + r.regexp.setMatch(req, match, r) + return true +} + +// ---------------------------------------------------------------------------- +// Route attributes +// ---------------------------------------------------------------------------- + +// GetError returns an error resulted from building the route, if any. +func (r *Route) GetError() error { + return r.err +} + +// BuildOnly sets the route to never match: it is only used to build URLs. +func (r *Route) BuildOnly() *Route { + r.buildOnly = true + return r +} + +// Handler -------------------------------------------------------------------- + +// Handler sets a handler for the route. +func (r *Route) Handler(handler http.Handler) *Route { + if r.err == nil { + r.handler = handler + } + return r +} + +// HandlerFunc sets a handler function for the route. +func (r *Route) HandlerFunc(f func(http.ResponseWriter, *http.Request)) *Route { + return r.Handler(http.HandlerFunc(f)) +} + +// GetHandler returns the handler for the route, if any. +func (r *Route) GetHandler() http.Handler { + return r.handler +} + +// Name ----------------------------------------------------------------------- + +// Name sets the name for the route, used to build URLs. +// It is an error to call Name more than once on a route. +func (r *Route) Name(name string) *Route { + if r.name != "" { + r.err = fmt.Errorf("mux: route already has name %q, can't set %q", + r.name, name) + } + if r.err == nil { + r.name = name + r.namedRoutes[name] = r + } + return r +} + +// GetName returns the name for the route, if any. +func (r *Route) GetName() string { + return r.name +} + +// ---------------------------------------------------------------------------- +// Matchers +// ---------------------------------------------------------------------------- + +// matcher types try to match a request. +type matcher interface { + Match(*http.Request, *RouteMatch) bool +} + +// addMatcher adds a matcher to the route. +func (r *Route) addMatcher(m matcher) *Route { + if r.err == nil { + r.matchers = append(r.matchers, m) + } + return r +} + +// addRegexpMatcher adds a host or path matcher and builder to a route. +func (r *Route) addRegexpMatcher(tpl string, typ regexpType) error { + if r.err != nil { + return r.err + } + if typ == regexpTypePath || typ == regexpTypePrefix { + if len(tpl) > 0 && tpl[0] != '/' { + return fmt.Errorf("mux: path must start with a slash, got %q", tpl) + } + if r.regexp.path != nil { + tpl = strings.TrimRight(r.regexp.path.template, "/") + tpl + } + } + rr, err := newRouteRegexp(tpl, typ, routeRegexpOptions{ + strictSlash: r.strictSlash, + useEncodedPath: r.useEncodedPath, + }) + if err != nil { + return err + } + for _, q := range r.regexp.queries { + if err = uniqueVars(rr.varsN, q.varsN); err != nil { + return err + } + } + if typ == regexpTypeHost { + if r.regexp.path != nil { + if err = uniqueVars(rr.varsN, r.regexp.path.varsN); err != nil { + return err + } + } + r.regexp.host = rr + } else { + if r.regexp.host != nil { + if err = uniqueVars(rr.varsN, r.regexp.host.varsN); err != nil { + return err + } + } + if typ == regexpTypeQuery { + r.regexp.queries = append(r.regexp.queries, rr) + } else { + r.regexp.path = rr + } + } + r.addMatcher(rr) + return nil +} + +// Headers -------------------------------------------------------------------- + +// headerMatcher matches the request against header values. +type headerMatcher map[string]string + +func (m headerMatcher) Match(r *http.Request, match *RouteMatch) bool { + return matchMapWithString(m, r.Header, true) +} + +// Headers adds a matcher for request header values. +// It accepts a sequence of key/value pairs to be matched. For example: +// +// r := mux.NewRouter() +// r.Headers("Content-Type", "application/json", +// "X-Requested-With", "XMLHttpRequest") +// +// The above route will only match if both request header values match. +// If the value is an empty string, it will match any value if the key is set. +func (r *Route) Headers(pairs ...string) *Route { + if r.err == nil { + var headers map[string]string + headers, r.err = mapFromPairsToString(pairs...) + return r.addMatcher(headerMatcher(headers)) + } + return r +} + +// headerRegexMatcher matches the request against the route given a regex for the header +type headerRegexMatcher map[string]*regexp.Regexp + +func (m headerRegexMatcher) Match(r *http.Request, match *RouteMatch) bool { + return matchMapWithRegex(m, r.Header, true) +} + +// HeadersRegexp accepts a sequence of key/value pairs, where the value has regex +// support. For example: +// +// r := mux.NewRouter() +// r.HeadersRegexp("Content-Type", "application/(text|json)", +// "X-Requested-With", "XMLHttpRequest") +// +// The above route will only match if both the request header matches both regular expressions. +// If the value is an empty string, it will match any value if the key is set. +// Use the start and end of string anchors (^ and $) to match an exact value. +func (r *Route) HeadersRegexp(pairs ...string) *Route { + if r.err == nil { + var headers map[string]*regexp.Regexp + headers, r.err = mapFromPairsToRegex(pairs...) + return r.addMatcher(headerRegexMatcher(headers)) + } + return r +} + +// Host ----------------------------------------------------------------------- + +// Host adds a matcher for the URL host. +// It accepts a template with zero or more URL variables enclosed by {}. +// Variables can define an optional regexp pattern to be matched: +// +// - {name} matches anything until the next dot. +// +// - {name:pattern} matches the given regexp pattern. +// +// For example: +// +// r := mux.NewRouter() +// r.Host("www.example.com") +// r.Host("{subdomain}.domain.com") +// r.Host("{subdomain:[a-z]+}.domain.com") +// +// Variable names must be unique in a given route. They can be retrieved +// calling mux.Vars(request). +func (r *Route) Host(tpl string) *Route { + r.err = r.addRegexpMatcher(tpl, regexpTypeHost) + return r +} + +// MatcherFunc ---------------------------------------------------------------- + +// MatcherFunc is the function signature used by custom matchers. +type MatcherFunc func(*http.Request, *RouteMatch) bool + +// Match returns the match for a given request. +func (m MatcherFunc) Match(r *http.Request, match *RouteMatch) bool { + return m(r, match) +} + +// MatcherFunc adds a custom function to be used as request matcher. +func (r *Route) MatcherFunc(f MatcherFunc) *Route { + return r.addMatcher(f) +} + +// Methods -------------------------------------------------------------------- + +// methodMatcher matches the request against HTTP methods. +type methodMatcher []string + +func (m methodMatcher) Match(r *http.Request, match *RouteMatch) bool { + return matchInArray(m, r.Method) +} + +// Methods adds a matcher for HTTP methods. +// It accepts a sequence of one or more methods to be matched, e.g.: +// "GET", "POST", "PUT". +func (r *Route) Methods(methods ...string) *Route { + for k, v := range methods { + methods[k] = strings.ToUpper(v) + } + return r.addMatcher(methodMatcher(methods)) +} + +// Path ----------------------------------------------------------------------- + +// Path adds a matcher for the URL path. +// It accepts a template with zero or more URL variables enclosed by {}. The +// template must start with a "/". +// Variables can define an optional regexp pattern to be matched: +// +// - {name} matches anything until the next slash. +// +// - {name:pattern} matches the given regexp pattern. +// +// For example: +// +// r := mux.NewRouter() +// r.Path("/products/").Handler(ProductsHandler) +// r.Path("/products/{key}").Handler(ProductsHandler) +// r.Path("/articles/{category}/{id:[0-9]+}"). +// Handler(ArticleHandler) +// +// Variable names must be unique in a given route. They can be retrieved +// calling mux.Vars(request). +func (r *Route) Path(tpl string) *Route { + r.err = r.addRegexpMatcher(tpl, regexpTypePath) + return r +} + +// PathPrefix ----------------------------------------------------------------- + +// PathPrefix adds a matcher for the URL path prefix. This matches if the given +// template is a prefix of the full URL path. See Route.Path() for details on +// the tpl argument. +// +// Note that it does not treat slashes specially ("/foobar/" will be matched by +// the prefix "/foo") so you may want to use a trailing slash here. +// +// Also note that the setting of Router.StrictSlash() has no effect on routes +// with a PathPrefix matcher. +func (r *Route) PathPrefix(tpl string) *Route { + r.err = r.addRegexpMatcher(tpl, regexpTypePrefix) + return r +} + +// Query ---------------------------------------------------------------------- + +// Queries adds a matcher for URL query values. +// It accepts a sequence of key/value pairs. Values may define variables. +// For example: +// +// r := mux.NewRouter() +// r.Queries("foo", "bar", "id", "{id:[0-9]+}") +// +// The above route will only match if the URL contains the defined queries +// values, e.g.: ?foo=bar&id=42. +// +// If the value is an empty string, it will match any value if the key is set. +// +// Variables can define an optional regexp pattern to be matched: +// +// - {name} matches anything until the next slash. +// +// - {name:pattern} matches the given regexp pattern. +func (r *Route) Queries(pairs ...string) *Route { + length := len(pairs) + if length%2 != 0 { + r.err = fmt.Errorf( + "mux: number of parameters must be multiple of 2, got %v", pairs) + return nil + } + for i := 0; i < length; i += 2 { + if r.err = r.addRegexpMatcher(pairs[i]+"="+pairs[i+1], regexpTypeQuery); r.err != nil { + return r + } + } + + return r +} + +// Schemes -------------------------------------------------------------------- + +// schemeMatcher matches the request against URL schemes. +type schemeMatcher []string + +func (m schemeMatcher) Match(r *http.Request, match *RouteMatch) bool { + scheme := r.URL.Scheme + // https://golang.org/pkg/net/http/#Request + // "For [most] server requests, fields other than Path and RawQuery will be + // empty." + // Since we're an http muxer, the scheme is either going to be http or https + // though, so we can just set it based on the tls termination state. + if scheme == "" { + if r.TLS == nil { + scheme = "http" + } else { + scheme = "https" + } + } + return matchInArray(m, scheme) +} + +// Schemes adds a matcher for URL schemes. +// It accepts a sequence of schemes to be matched, e.g.: "http", "https". +// If the request's URL has a scheme set, it will be matched against. +// Generally, the URL scheme will only be set if a previous handler set it, +// such as the ProxyHeaders handler from gorilla/handlers. +// If unset, the scheme will be determined based on the request's TLS +// termination state. +// The first argument to Schemes will be used when constructing a route URL. +func (r *Route) Schemes(schemes ...string) *Route { + for k, v := range schemes { + schemes[k] = strings.ToLower(v) + } + if len(schemes) > 0 { + r.buildScheme = schemes[0] + } + return r.addMatcher(schemeMatcher(schemes)) +} + +// BuildVarsFunc -------------------------------------------------------------- + +// BuildVarsFunc is the function signature used by custom build variable +// functions (which can modify route variables before a route's URL is built). +type BuildVarsFunc func(map[string]string) map[string]string + +// BuildVarsFunc adds a custom function to be used to modify build variables +// before a route's URL is built. +func (r *Route) BuildVarsFunc(f BuildVarsFunc) *Route { + if r.buildVarsFunc != nil { + // compose the old and new functions + old := r.buildVarsFunc + r.buildVarsFunc = func(m map[string]string) map[string]string { + return f(old(m)) + } + } else { + r.buildVarsFunc = f + } + return r +} + +// Subrouter ------------------------------------------------------------------ + +// Subrouter creates a subrouter for the route. +// +// It will test the inner routes only if the parent route matched. For example: +// +// r := mux.NewRouter() +// s := r.Host("www.example.com").Subrouter() +// s.HandleFunc("/products/", ProductsHandler) +// s.HandleFunc("/products/{key}", ProductHandler) +// s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler) +// +// Here, the routes registered in the subrouter won't be tested if the host +// doesn't match. +func (r *Route) Subrouter() *Router { + // initialize a subrouter with a copy of the parent route's configuration + router := &Router{routeConf: copyRouteConf(r.routeConf), namedRoutes: r.namedRoutes} + r.addMatcher(router) + return router +} + +// ---------------------------------------------------------------------------- +// URL building +// ---------------------------------------------------------------------------- + +// URL builds a URL for the route. +// +// It accepts a sequence of key/value pairs for the route variables. For +// example, given this route: +// +// r := mux.NewRouter() +// r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler). +// Name("article") +// +// ...a URL for it can be built using: +// +// url, err := r.Get("article").URL("category", "technology", "id", "42") +// +// ...which will return an url.URL with the following path: +// +// "/articles/technology/42" +// +// This also works for host variables: +// +// r := mux.NewRouter() +// r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler). +// Host("{subdomain}.domain.com"). +// Name("article") +// +// // url.String() will be "http://news.domain.com/articles/technology/42" +// url, err := r.Get("article").URL("subdomain", "news", +// "category", "technology", +// "id", "42") +// +// The scheme of the resulting url will be the first argument that was passed to Schemes: +// +// // url.String() will be "https://example.com" +// r := mux.NewRouter() +// url, err := r.Host("example.com") +// .Schemes("https", "http").URL() +// +// All variables defined in the route are required, and their values must +// conform to the corresponding patterns. +func (r *Route) URL(pairs ...string) (*url.URL, error) { + if r.err != nil { + return nil, r.err + } + values, err := r.prepareVars(pairs...) + if err != nil { + return nil, err + } + var scheme, host, path string + queries := make([]string, 0, len(r.regexp.queries)) + if r.regexp.host != nil { + if host, err = r.regexp.host.url(values); err != nil { + return nil, err + } + scheme = "http" + if r.buildScheme != "" { + scheme = r.buildScheme + } + } + if r.regexp.path != nil { + if path, err = r.regexp.path.url(values); err != nil { + return nil, err + } + } + for _, q := range r.regexp.queries { + var query string + if query, err = q.url(values); err != nil { + return nil, err + } + queries = append(queries, query) + } + return &url.URL{ + Scheme: scheme, + Host: host, + Path: path, + RawQuery: strings.Join(queries, "&"), + }, nil +} + +// URLHost builds the host part of the URL for a route. See Route.URL(). +// +// The route must have a host defined. +func (r *Route) URLHost(pairs ...string) (*url.URL, error) { + if r.err != nil { + return nil, r.err + } + if r.regexp.host == nil { + return nil, errors.New("mux: route doesn't have a host") + } + values, err := r.prepareVars(pairs...) + if err != nil { + return nil, err + } + host, err := r.regexp.host.url(values) + if err != nil { + return nil, err + } + u := &url.URL{ + Scheme: "http", + Host: host, + } + if r.buildScheme != "" { + u.Scheme = r.buildScheme + } + return u, nil +} + +// URLPath builds the path part of the URL for a route. See Route.URL(). +// +// The route must have a path defined. +func (r *Route) URLPath(pairs ...string) (*url.URL, error) { + if r.err != nil { + return nil, r.err + } + if r.regexp.path == nil { + return nil, errors.New("mux: route doesn't have a path") + } + values, err := r.prepareVars(pairs...) + if err != nil { + return nil, err + } + path, err := r.regexp.path.url(values) + if err != nil { + return nil, err + } + return &url.URL{ + Path: path, + }, nil +} + +// GetPathTemplate returns the template used to build the +// route match. +// This is useful for building simple REST API documentation and for instrumentation +// against third-party services. +// An error will be returned if the route does not define a path. +func (r *Route) GetPathTemplate() (string, error) { + if r.err != nil { + return "", r.err + } + if r.regexp.path == nil { + return "", errors.New("mux: route doesn't have a path") + } + return r.regexp.path.template, nil +} + +// GetPathRegexp returns the expanded regular expression used to match route path. +// This is useful for building simple REST API documentation and for instrumentation +// against third-party services. +// An error will be returned if the route does not define a path. +func (r *Route) GetPathRegexp() (string, error) { + if r.err != nil { + return "", r.err + } + if r.regexp.path == nil { + return "", errors.New("mux: route does not have a path") + } + return r.regexp.path.regexp.String(), nil +} + +// GetQueriesRegexp returns the expanded regular expressions used to match the +// route queries. +// This is useful for building simple REST API documentation and for instrumentation +// against third-party services. +// An error will be returned if the route does not have queries. +func (r *Route) GetQueriesRegexp() ([]string, error) { + if r.err != nil { + return nil, r.err + } + if r.regexp.queries == nil { + return nil, errors.New("mux: route doesn't have queries") + } + queries := make([]string, 0, len(r.regexp.queries)) + for _, query := range r.regexp.queries { + queries = append(queries, query.regexp.String()) + } + return queries, nil +} + +// GetQueriesTemplates returns the templates used to build the +// query matching. +// This is useful for building simple REST API documentation and for instrumentation +// against third-party services. +// An error will be returned if the route does not define queries. +func (r *Route) GetQueriesTemplates() ([]string, error) { + if r.err != nil { + return nil, r.err + } + if r.regexp.queries == nil { + return nil, errors.New("mux: route doesn't have queries") + } + queries := make([]string, 0, len(r.regexp.queries)) + for _, query := range r.regexp.queries { + queries = append(queries, query.template) + } + return queries, nil +} + +// GetMethods returns the methods the route matches against +// This is useful for building simple REST API documentation and for instrumentation +// against third-party services. +// An error will be returned if route does not have methods. +func (r *Route) GetMethods() ([]string, error) { + if r.err != nil { + return nil, r.err + } + for _, m := range r.matchers { + if methods, ok := m.(methodMatcher); ok { + return []string(methods), nil + } + } + return nil, errors.New("mux: route doesn't have methods") +} + +// GetHostTemplate returns the template used to build the +// route match. +// This is useful for building simple REST API documentation and for instrumentation +// against third-party services. +// An error will be returned if the route does not define a host. +func (r *Route) GetHostTemplate() (string, error) { + if r.err != nil { + return "", r.err + } + if r.regexp.host == nil { + return "", errors.New("mux: route doesn't have a host") + } + return r.regexp.host.template, nil +} + +// prepareVars converts the route variable pairs into a map. If the route has a +// BuildVarsFunc, it is invoked. +func (r *Route) prepareVars(pairs ...string) (map[string]string, error) { + m, err := mapFromPairsToString(pairs...) + if err != nil { + return nil, err + } + return r.buildVars(m), nil +} + +func (r *Route) buildVars(m map[string]string) map[string]string { + if r.buildVarsFunc != nil { + m = r.buildVarsFunc(m) + } + return m +} diff --git a/vendor/github.com/gorilla/mux/test_helpers.go b/vendor/github.com/gorilla/mux/test_helpers.go new file mode 100644 index 0000000..5f5c496 --- /dev/null +++ b/vendor/github.com/gorilla/mux/test_helpers.go @@ -0,0 +1,19 @@ +// Copyright 2012 The Gorilla Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mux + +import "net/http" + +// SetURLVars sets the URL variables for the given request, to be accessed via +// mux.Vars for testing route behaviour. Arguments are not modified, a shallow +// copy is returned. +// +// This API should only be used for testing purposes; it provides a way to +// inject variables into the request context. Alternatively, URL variables +// can be set by making a route that captures the required variables, +// starting a server and sending the request to that server. +func SetURLVars(r *http.Request, val map[string]string) *http.Request { + return requestWithVars(r, val) +} diff --git a/vendor/github.com/jaytaylor/html2text/.travis.yml b/vendor/github.com/jaytaylor/html2text/.travis.yml index 6c7f48e..2e8ae28 100644 --- a/vendor/github.com/jaytaylor/html2text/.travis.yml +++ b/vendor/github.com/jaytaylor/html2text/.travis.yml @@ -1,13 +1,12 @@ language: go go: + # n.b. For golang release history, see https://golang.org/doc/devel/release.html - tip - - 1.8 - - 1.7 - - 1.6 - - 1.5 - - 1.4 - - 1.3 - - 1.2 + - "1.13.8" + - "1.12.17" + - "1.11.13" + - "1.10.8" + - "1.9.7" notifications: email: on_success: change diff --git a/vendor/github.com/jaytaylor/html2text/README.md b/vendor/github.com/jaytaylor/html2text/README.md index 6b2494e..90848fa 100644 --- a/vendor/github.com/jaytaylor/html2text/README.md +++ b/vendor/github.com/jaytaylor/html2text/README.md @@ -135,3 +135,6 @@ Email: jay at (my github username).com Twitter: [@jtaylor](https://twitter.com/jtaylor) +# Alternatives + +https://github.com/k3a/html2text - Lightweight diff --git a/vendor/github.com/jaytaylor/html2text/html2text.go b/vendor/github.com/jaytaylor/html2text/html2text.go index fa36990..4398909 100644 --- a/vendor/github.com/jaytaylor/html2text/html2text.go +++ b/vendor/github.com/jaytaylor/html2text/html2text.go @@ -15,8 +15,51 @@ import ( // Options provide toggles and overrides to control specific rendering behaviors. type Options struct { - PrettyTables bool // Turns on pretty ASCII rendering for table elements. - OmitLinks bool // Turns on omitting links + PrettyTables bool // Turns on pretty ASCII rendering for table elements. + PrettyTablesOptions *PrettyTablesOptions // Configures pretty ASCII rendering for table elements. + OmitLinks bool // Turns on omitting links +} + +// PrettyTablesOptions overrides tablewriter behaviors +type PrettyTablesOptions struct { + AutoFormatHeader bool + AutoWrapText bool + ReflowDuringAutoWrap bool + ColWidth int + ColumnSeparator string + RowSeparator string + CenterSeparator string + HeaderAlignment int + FooterAlignment int + Alignment int + ColumnAlignment []int + NewLine string + HeaderLine bool + RowLine bool + AutoMergeCells bool + Borders tablewriter.Border +} + +// NewPrettyTablesOptions creates PrettyTablesOptions with default settings +func NewPrettyTablesOptions() *PrettyTablesOptions { + return &PrettyTablesOptions{ + AutoFormatHeader: true, + AutoWrapText: true, + ReflowDuringAutoWrap: true, + ColWidth: tablewriter.MAX_ROW_WIDTH, + ColumnSeparator: tablewriter.COLUMN, + RowSeparator: tablewriter.ROW, + CenterSeparator: tablewriter.CENTER, + HeaderAlignment: tablewriter.ALIGN_DEFAULT, + FooterAlignment: tablewriter.ALIGN_DEFAULT, + Alignment: tablewriter.ALIGN_DEFAULT, + ColumnAlignment: []int{}, + NewLine: tablewriter.NEWLINE, + HeaderLine: true, + RowLine: false, + AutoMergeCells: false, + Borders: tablewriter.Border{Left: true, Right: true, Bottom: true, Top: true}, + } } // FromHTMLNode renders text output from a pre-parsed HTML document. @@ -277,6 +320,25 @@ func (ctx *textifyTraverseContext) handleTableElement(node *html.Node) error { buf := &bytes.Buffer{} table := tablewriter.NewWriter(buf) + if ctx.options.PrettyTablesOptions != nil { + options := ctx.options.PrettyTablesOptions + table.SetAutoFormatHeaders(options.AutoFormatHeader) + table.SetAutoWrapText(options.AutoWrapText) + table.SetReflowDuringAutoWrap(options.ReflowDuringAutoWrap) + table.SetColWidth(options.ColWidth) + table.SetColumnSeparator(options.ColumnSeparator) + table.SetRowSeparator(options.RowSeparator) + table.SetCenterSeparator(options.CenterSeparator) + table.SetHeaderAlignment(options.HeaderAlignment) + table.SetFooterAlignment(options.FooterAlignment) + table.SetAlignment(options.Alignment) + table.SetColumnAlignment(options.ColumnAlignment) + table.SetNewLine(options.NewLine) + table.SetHeaderLine(options.HeaderLine) + table.SetRowLine(options.RowLine) + table.SetAutoMergeCells(options.AutoMergeCells) + table.SetBorders(options.Borders) + } table.SetHeader(ctx.tableCtx.header) table.SetFooter(ctx.tableCtx.footer) table.AppendBulk(ctx.tableCtx.body) @@ -337,7 +399,7 @@ func (ctx *textifyTraverseContext) traverse(node *html.Node) error { if ctx.isPre { data = node.Data } else { - data = strings.Trim(spacingRe.ReplaceAllString(node.Data, " "), " ") + data = strings.TrimSpace(spacingRe.ReplaceAllString(node.Data, " ")) } return ctx.emit(data) diff --git a/vendor/github.com/json-iterator/go/.codecov.yml b/vendor/github.com/json-iterator/go/.codecov.yml new file mode 100644 index 0000000..955dc0b --- /dev/null +++ b/vendor/github.com/json-iterator/go/.codecov.yml @@ -0,0 +1,3 @@ +ignore: + - "output_tests/.*" + diff --git a/vendor/github.com/json-iterator/go/.gitignore b/vendor/github.com/json-iterator/go/.gitignore new file mode 100644 index 0000000..1555653 --- /dev/null +++ b/vendor/github.com/json-iterator/go/.gitignore @@ -0,0 +1,4 @@ +/vendor +/bug_test.go +/coverage.txt +/.idea diff --git a/vendor/github.com/json-iterator/go/.travis.yml b/vendor/github.com/json-iterator/go/.travis.yml new file mode 100644 index 0000000..449e67c --- /dev/null +++ b/vendor/github.com/json-iterator/go/.travis.yml @@ -0,0 +1,14 @@ +language: go + +go: + - 1.8.x + - 1.x + +before_install: + - go get -t -v ./... + +script: + - ./test.sh + +after_success: + - bash <(curl -s https://codecov.io/bash) diff --git a/vendor/github.com/json-iterator/go/Gopkg.lock b/vendor/github.com/json-iterator/go/Gopkg.lock new file mode 100644 index 0000000..c8a9fbb --- /dev/null +++ b/vendor/github.com/json-iterator/go/Gopkg.lock @@ -0,0 +1,21 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/modern-go/concurrent" + packages = ["."] + revision = "e0a39a4cb4216ea8db28e22a69f4ec25610d513a" + version = "1.0.0" + +[[projects]] + name = "github.com/modern-go/reflect2" + packages = ["."] + revision = "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd" + version = "1.0.1" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "ea54a775e5a354cb015502d2e7aa4b74230fc77e894f34a838b268c25ec8eeb8" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/vendor/github.com/json-iterator/go/Gopkg.toml b/vendor/github.com/json-iterator/go/Gopkg.toml new file mode 100644 index 0000000..313a0f8 --- /dev/null +++ b/vendor/github.com/json-iterator/go/Gopkg.toml @@ -0,0 +1,26 @@ +# Gopkg.toml example +# +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" + +ignored = ["github.com/davecgh/go-spew*","github.com/google/gofuzz*","github.com/stretchr/testify*"] + +[[constraint]] + name = "github.com/modern-go/reflect2" + version = "1.0.1" diff --git a/vendor/github.com/BurntSushi/toml/COPYING b/vendor/github.com/json-iterator/go/LICENSE similarity index 86% rename from vendor/github.com/BurntSushi/toml/COPYING rename to vendor/github.com/json-iterator/go/LICENSE index 01b5743..2cf4f5a 100644 --- a/vendor/github.com/BurntSushi/toml/COPYING +++ b/vendor/github.com/json-iterator/go/LICENSE @@ -1,6 +1,6 @@ -The MIT License (MIT) +MIT License -Copyright (c) 2013 TOML authors +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 @@ -9,13 +9,13 @@ 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 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. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/json-iterator/go/README.md b/vendor/github.com/json-iterator/go/README.md new file mode 100644 index 0000000..52b111d --- /dev/null +++ b/vendor/github.com/json-iterator/go/README.md @@ -0,0 +1,87 @@ +[![Sourcegraph](https://sourcegraph.com/github.com/json-iterator/go/-/badge.svg)](https://sourcegraph.com/github.com/json-iterator/go?badge) +[![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](https://pkg.go.dev/github.com/json-iterator/go) +[![Build Status](https://travis-ci.org/json-iterator/go.svg?branch=master)](https://travis-ci.org/json-iterator/go) +[![codecov](https://codecov.io/gh/json-iterator/go/branch/master/graph/badge.svg)](https://codecov.io/gh/json-iterator/go) +[![rcard](https://goreportcard.com/badge/github.com/json-iterator/go)](https://goreportcard.com/report/github.com/json-iterator/go) +[![License](http://img.shields.io/badge/license-mit-blue.svg?style=flat-square)](https://raw.githubusercontent.com/json-iterator/go/master/LICENSE) +[![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/json-iterator/Lobby) + +A high-performance 100% compatible drop-in replacement of "encoding/json" + +You can also use thrift like JSON using [thrift-iterator](https://github.com/thrift-iterator/go) + +# Benchmark + +![benchmark](http://jsoniter.com/benchmarks/go-benchmark.png) + +Source code: https://github.com/json-iterator/go-benchmark/blob/master/src/github.com/json-iterator/go-benchmark/benchmark_medium_payload_test.go + +Raw Result (easyjson requires static code generation) + +| | ns/op | allocation bytes | allocation times | +| --------------- | ----------- | ---------------- | ---------------- | +| std decode | 35510 ns/op | 1960 B/op | 99 allocs/op | +| easyjson decode | 8499 ns/op | 160 B/op | 4 allocs/op | +| jsoniter decode | 5623 ns/op | 160 B/op | 3 allocs/op | +| std encode | 2213 ns/op | 712 B/op | 5 allocs/op | +| easyjson encode | 883 ns/op | 576 B/op | 3 allocs/op | +| jsoniter encode | 837 ns/op | 384 B/op | 4 allocs/op | + +Always benchmark with your own workload. +The result depends heavily on the data input. + +# Usage + +100% compatibility with standard lib + +Replace + +```go +import "encoding/json" +json.Marshal(&data) +``` + +with + +```go +import jsoniter "github.com/json-iterator/go" + +var json = jsoniter.ConfigCompatibleWithStandardLibrary +json.Marshal(&data) +``` + +Replace + +```go +import "encoding/json" +json.Unmarshal(input, &data) +``` + +with + +```go +import jsoniter "github.com/json-iterator/go" + +var json = jsoniter.ConfigCompatibleWithStandardLibrary +json.Unmarshal(input, &data) +``` + +[More documentation](http://jsoniter.com/migrate-from-go-std.html) + +# How to get + +``` +go get github.com/json-iterator/go +``` + +# Contribution Welcomed ! + +Contributors + +- [thockin](https://github.com/thockin) +- [mattn](https://github.com/mattn) +- [cch123](https://github.com/cch123) +- [Oleg Shaldybin](https://github.com/olegshaldybin) +- [Jason Toffaletti](https://github.com/toffaletti) + +Report issue or pull request, or email taowen@gmail.com, or [![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/json-iterator/Lobby) diff --git a/vendor/github.com/json-iterator/go/adapter.go b/vendor/github.com/json-iterator/go/adapter.go new file mode 100644 index 0000000..92d2cc4 --- /dev/null +++ b/vendor/github.com/json-iterator/go/adapter.go @@ -0,0 +1,150 @@ +package jsoniter + +import ( + "bytes" + "io" +) + +// RawMessage to make replace json with jsoniter +type RawMessage []byte + +// Unmarshal adapts to json/encoding Unmarshal API +// +// Unmarshal parses the JSON-encoded data and stores the result in the value pointed to by v. +// Refer to https://godoc.org/encoding/json#Unmarshal for more information +func Unmarshal(data []byte, v interface{}) error { + return ConfigDefault.Unmarshal(data, v) +} + +// UnmarshalFromString is a convenient method to read from string instead of []byte +func UnmarshalFromString(str string, v interface{}) error { + return ConfigDefault.UnmarshalFromString(str, v) +} + +// Get quick method to get value from deeply nested JSON structure +func Get(data []byte, path ...interface{}) Any { + return ConfigDefault.Get(data, path...) +} + +// Marshal adapts to json/encoding Marshal API +// +// Marshal returns the JSON encoding of v, adapts to json/encoding Marshal API +// Refer to https://godoc.org/encoding/json#Marshal for more information +func Marshal(v interface{}) ([]byte, error) { + return ConfigDefault.Marshal(v) +} + +// MarshalIndent same as json.MarshalIndent. Prefix is not supported. +func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) { + return ConfigDefault.MarshalIndent(v, prefix, indent) +} + +// MarshalToString convenient method to write as string instead of []byte +func MarshalToString(v interface{}) (string, error) { + return ConfigDefault.MarshalToString(v) +} + +// NewDecoder adapts to json/stream NewDecoder API. +// +// NewDecoder returns a new decoder that reads from r. +// +// Instead of a json/encoding Decoder, an Decoder is returned +// Refer to https://godoc.org/encoding/json#NewDecoder for more information +func NewDecoder(reader io.Reader) *Decoder { + return ConfigDefault.NewDecoder(reader) +} + +// Decoder reads and decodes JSON values from an input stream. +// Decoder provides identical APIs with json/stream Decoder (Token() and UseNumber() are in progress) +type Decoder struct { + iter *Iterator +} + +// Decode decode JSON into interface{} +func (adapter *Decoder) Decode(obj interface{}) error { + if adapter.iter.head == adapter.iter.tail && adapter.iter.reader != nil { + if !adapter.iter.loadMore() { + return io.EOF + } + } + adapter.iter.ReadVal(obj) + err := adapter.iter.Error + if err == io.EOF { + return nil + } + return adapter.iter.Error +} + +// More is there more? +func (adapter *Decoder) More() bool { + iter := adapter.iter + if iter.Error != nil { + return false + } + c := iter.nextToken() + if c == 0 { + return false + } + iter.unreadByte() + return c != ']' && c != '}' +} + +// Buffered remaining buffer +func (adapter *Decoder) Buffered() io.Reader { + remaining := adapter.iter.buf[adapter.iter.head:adapter.iter.tail] + return bytes.NewReader(remaining) +} + +// UseNumber causes the Decoder to unmarshal a number into an interface{} as a +// Number instead of as a float64. +func (adapter *Decoder) UseNumber() { + cfg := adapter.iter.cfg.configBeforeFrozen + cfg.UseNumber = true + adapter.iter.cfg = cfg.frozeWithCacheReuse(adapter.iter.cfg.extraExtensions) +} + +// DisallowUnknownFields causes the Decoder to return an error when the destination +// is a struct and the input contains object keys which do not match any +// non-ignored, exported fields in the destination. +func (adapter *Decoder) DisallowUnknownFields() { + cfg := adapter.iter.cfg.configBeforeFrozen + cfg.DisallowUnknownFields = true + adapter.iter.cfg = cfg.frozeWithCacheReuse(adapter.iter.cfg.extraExtensions) +} + +// NewEncoder same as json.NewEncoder +func NewEncoder(writer io.Writer) *Encoder { + return ConfigDefault.NewEncoder(writer) +} + +// Encoder same as json.Encoder +type Encoder struct { + stream *Stream +} + +// Encode encode interface{} as JSON to io.Writer +func (adapter *Encoder) Encode(val interface{}) error { + adapter.stream.WriteVal(val) + adapter.stream.WriteRaw("\n") + adapter.stream.Flush() + return adapter.stream.Error +} + +// SetIndent set the indention. Prefix is not supported +func (adapter *Encoder) SetIndent(prefix, indent string) { + config := adapter.stream.cfg.configBeforeFrozen + config.IndentionStep = len(indent) + adapter.stream.cfg = config.frozeWithCacheReuse(adapter.stream.cfg.extraExtensions) +} + +// SetEscapeHTML escape html by default, set to false to disable +func (adapter *Encoder) SetEscapeHTML(escapeHTML bool) { + config := adapter.stream.cfg.configBeforeFrozen + config.EscapeHTML = escapeHTML + adapter.stream.cfg = config.frozeWithCacheReuse(adapter.stream.cfg.extraExtensions) +} + +// Valid reports whether data is a valid JSON encoding. +func Valid(data []byte) bool { + return ConfigDefault.Valid(data) +} diff --git a/vendor/github.com/json-iterator/go/any.go b/vendor/github.com/json-iterator/go/any.go new file mode 100644 index 0000000..f6b8aea --- /dev/null +++ b/vendor/github.com/json-iterator/go/any.go @@ -0,0 +1,325 @@ +package jsoniter + +import ( + "errors" + "fmt" + "github.com/modern-go/reflect2" + "io" + "reflect" + "strconv" + "unsafe" +) + +// Any generic object representation. +// The lazy json implementation holds []byte and parse lazily. +type Any interface { + LastError() error + ValueType() ValueType + MustBeValid() Any + ToBool() bool + ToInt() int + ToInt32() int32 + ToInt64() int64 + ToUint() uint + ToUint32() uint32 + ToUint64() uint64 + ToFloat32() float32 + ToFloat64() float64 + ToString() string + ToVal(val interface{}) + Get(path ...interface{}) Any + Size() int + Keys() []string + GetInterface() interface{} + WriteTo(stream *Stream) +} + +type baseAny struct{} + +func (any *baseAny) Get(path ...interface{}) Any { + return &invalidAny{baseAny{}, fmt.Errorf("GetIndex %v from simple value", path)} +} + +func (any *baseAny) Size() int { + return 0 +} + +func (any *baseAny) Keys() []string { + return []string{} +} + +func (any *baseAny) ToVal(obj interface{}) { + panic("not implemented") +} + +// WrapInt32 turn int32 into Any interface +func WrapInt32(val int32) Any { + return &int32Any{baseAny{}, val} +} + +// WrapInt64 turn int64 into Any interface +func WrapInt64(val int64) Any { + return &int64Any{baseAny{}, val} +} + +// WrapUint32 turn uint32 into Any interface +func WrapUint32(val uint32) Any { + return &uint32Any{baseAny{}, val} +} + +// WrapUint64 turn uint64 into Any interface +func WrapUint64(val uint64) Any { + return &uint64Any{baseAny{}, val} +} + +// WrapFloat64 turn float64 into Any interface +func WrapFloat64(val float64) Any { + return &floatAny{baseAny{}, val} +} + +// WrapString turn string into Any interface +func WrapString(val string) Any { + return &stringAny{baseAny{}, val} +} + +// Wrap turn a go object into Any interface +func Wrap(val interface{}) Any { + if val == nil { + return &nilAny{} + } + asAny, isAny := val.(Any) + if isAny { + return asAny + } + typ := reflect2.TypeOf(val) + switch typ.Kind() { + case reflect.Slice: + return wrapArray(val) + case reflect.Struct: + return wrapStruct(val) + case reflect.Map: + return wrapMap(val) + case reflect.String: + return WrapString(val.(string)) + case reflect.Int: + if strconv.IntSize == 32 { + return WrapInt32(int32(val.(int))) + } + return WrapInt64(int64(val.(int))) + case reflect.Int8: + return WrapInt32(int32(val.(int8))) + case reflect.Int16: + return WrapInt32(int32(val.(int16))) + case reflect.Int32: + return WrapInt32(val.(int32)) + case reflect.Int64: + return WrapInt64(val.(int64)) + case reflect.Uint: + if strconv.IntSize == 32 { + return WrapUint32(uint32(val.(uint))) + } + return WrapUint64(uint64(val.(uint))) + case reflect.Uintptr: + if ptrSize == 32 { + return WrapUint32(uint32(val.(uintptr))) + } + return WrapUint64(uint64(val.(uintptr))) + case reflect.Uint8: + return WrapUint32(uint32(val.(uint8))) + case reflect.Uint16: + return WrapUint32(uint32(val.(uint16))) + case reflect.Uint32: + return WrapUint32(uint32(val.(uint32))) + case reflect.Uint64: + return WrapUint64(val.(uint64)) + case reflect.Float32: + return WrapFloat64(float64(val.(float32))) + case reflect.Float64: + return WrapFloat64(val.(float64)) + case reflect.Bool: + if val.(bool) == true { + return &trueAny{} + } + return &falseAny{} + } + return &invalidAny{baseAny{}, fmt.Errorf("unsupported type: %v", typ)} +} + +// ReadAny read next JSON element as an Any object. It is a better json.RawMessage. +func (iter *Iterator) ReadAny() Any { + return iter.readAny() +} + +func (iter *Iterator) readAny() Any { + c := iter.nextToken() + switch c { + case '"': + iter.unreadByte() + return &stringAny{baseAny{}, iter.ReadString()} + case 'n': + iter.skipThreeBytes('u', 'l', 'l') // null + return &nilAny{} + case 't': + iter.skipThreeBytes('r', 'u', 'e') // true + return &trueAny{} + case 'f': + iter.skipFourBytes('a', 'l', 's', 'e') // false + return &falseAny{} + case '{': + return iter.readObjectAny() + case '[': + return iter.readArrayAny() + case '-': + return iter.readNumberAny(false) + case 0: + return &invalidAny{baseAny{}, errors.New("input is empty")} + default: + return iter.readNumberAny(true) + } +} + +func (iter *Iterator) readNumberAny(positive bool) Any { + iter.startCapture(iter.head - 1) + iter.skipNumber() + lazyBuf := iter.stopCapture() + return &numberLazyAny{baseAny{}, iter.cfg, lazyBuf, nil} +} + +func (iter *Iterator) readObjectAny() Any { + iter.startCapture(iter.head - 1) + iter.skipObject() + lazyBuf := iter.stopCapture() + return &objectLazyAny{baseAny{}, iter.cfg, lazyBuf, nil} +} + +func (iter *Iterator) readArrayAny() Any { + iter.startCapture(iter.head - 1) + iter.skipArray() + lazyBuf := iter.stopCapture() + return &arrayLazyAny{baseAny{}, iter.cfg, lazyBuf, nil} +} + +func locateObjectField(iter *Iterator, target string) []byte { + var found []byte + iter.ReadObjectCB(func(iter *Iterator, field string) bool { + if field == target { + found = iter.SkipAndReturnBytes() + return false + } + iter.Skip() + return true + }) + return found +} + +func locateArrayElement(iter *Iterator, target int) []byte { + var found []byte + n := 0 + iter.ReadArrayCB(func(iter *Iterator) bool { + if n == target { + found = iter.SkipAndReturnBytes() + return false + } + iter.Skip() + n++ + return true + }) + return found +} + +func locatePath(iter *Iterator, path []interface{}) Any { + for i, pathKeyObj := range path { + switch pathKey := pathKeyObj.(type) { + case string: + valueBytes := locateObjectField(iter, pathKey) + if valueBytes == nil { + return newInvalidAny(path[i:]) + } + iter.ResetBytes(valueBytes) + case int: + valueBytes := locateArrayElement(iter, pathKey) + if valueBytes == nil { + return newInvalidAny(path[i:]) + } + iter.ResetBytes(valueBytes) + case int32: + if '*' == pathKey { + return iter.readAny().Get(path[i:]...) + } + return newInvalidAny(path[i:]) + default: + return newInvalidAny(path[i:]) + } + } + if iter.Error != nil && iter.Error != io.EOF { + return &invalidAny{baseAny{}, iter.Error} + } + return iter.readAny() +} + +var anyType = reflect2.TypeOfPtr((*Any)(nil)).Elem() + +func createDecoderOfAny(ctx *ctx, typ reflect2.Type) ValDecoder { + if typ == anyType { + return &directAnyCodec{} + } + if typ.Implements(anyType) { + return &anyCodec{ + valType: typ, + } + } + return nil +} + +func createEncoderOfAny(ctx *ctx, typ reflect2.Type) ValEncoder { + if typ == anyType { + return &directAnyCodec{} + } + if typ.Implements(anyType) { + return &anyCodec{ + valType: typ, + } + } + return nil +} + +type anyCodec struct { + valType reflect2.Type +} + +func (codec *anyCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { + panic("not implemented") +} + +func (codec *anyCodec) Encode(ptr unsafe.Pointer, stream *Stream) { + obj := codec.valType.UnsafeIndirect(ptr) + any := obj.(Any) + any.WriteTo(stream) +} + +func (codec *anyCodec) IsEmpty(ptr unsafe.Pointer) bool { + obj := codec.valType.UnsafeIndirect(ptr) + any := obj.(Any) + return any.Size() == 0 +} + +type directAnyCodec struct { +} + +func (codec *directAnyCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { + *(*Any)(ptr) = iter.readAny() +} + +func (codec *directAnyCodec) Encode(ptr unsafe.Pointer, stream *Stream) { + any := *(*Any)(ptr) + if any == nil { + stream.WriteNil() + return + } + any.WriteTo(stream) +} + +func (codec *directAnyCodec) IsEmpty(ptr unsafe.Pointer) bool { + any := *(*Any)(ptr) + return any.Size() == 0 +} diff --git a/vendor/github.com/json-iterator/go/any_array.go b/vendor/github.com/json-iterator/go/any_array.go new file mode 100644 index 0000000..0449e9a --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_array.go @@ -0,0 +1,278 @@ +package jsoniter + +import ( + "reflect" + "unsafe" +) + +type arrayLazyAny struct { + baseAny + cfg *frozenConfig + buf []byte + err error +} + +func (any *arrayLazyAny) ValueType() ValueType { + return ArrayValue +} + +func (any *arrayLazyAny) MustBeValid() Any { + return any +} + +func (any *arrayLazyAny) LastError() error { + return any.err +} + +func (any *arrayLazyAny) ToBool() bool { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + return iter.ReadArray() +} + +func (any *arrayLazyAny) ToInt() int { + if any.ToBool() { + return 1 + } + return 0 +} + +func (any *arrayLazyAny) ToInt32() int32 { + if any.ToBool() { + return 1 + } + return 0 +} + +func (any *arrayLazyAny) ToInt64() int64 { + if any.ToBool() { + return 1 + } + return 0 +} + +func (any *arrayLazyAny) ToUint() uint { + if any.ToBool() { + return 1 + } + return 0 +} + +func (any *arrayLazyAny) ToUint32() uint32 { + if any.ToBool() { + return 1 + } + return 0 +} + +func (any *arrayLazyAny) ToUint64() uint64 { + if any.ToBool() { + return 1 + } + return 0 +} + +func (any *arrayLazyAny) ToFloat32() float32 { + if any.ToBool() { + return 1 + } + return 0 +} + +func (any *arrayLazyAny) ToFloat64() float64 { + if any.ToBool() { + return 1 + } + return 0 +} + +func (any *arrayLazyAny) ToString() string { + return *(*string)(unsafe.Pointer(&any.buf)) +} + +func (any *arrayLazyAny) ToVal(val interface{}) { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + iter.ReadVal(val) +} + +func (any *arrayLazyAny) Get(path ...interface{}) Any { + if len(path) == 0 { + return any + } + switch firstPath := path[0].(type) { + case int: + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + valueBytes := locateArrayElement(iter, firstPath) + if valueBytes == nil { + return newInvalidAny(path) + } + iter.ResetBytes(valueBytes) + return locatePath(iter, path[1:]) + case int32: + if '*' == firstPath { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + arr := make([]Any, 0) + iter.ReadArrayCB(func(iter *Iterator) bool { + found := iter.readAny().Get(path[1:]...) + if found.ValueType() != InvalidValue { + arr = append(arr, found) + } + return true + }) + return wrapArray(arr) + } + return newInvalidAny(path) + default: + return newInvalidAny(path) + } +} + +func (any *arrayLazyAny) Size() int { + size := 0 + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + iter.ReadArrayCB(func(iter *Iterator) bool { + size++ + iter.Skip() + return true + }) + return size +} + +func (any *arrayLazyAny) WriteTo(stream *Stream) { + stream.Write(any.buf) +} + +func (any *arrayLazyAny) GetInterface() interface{} { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + return iter.Read() +} + +type arrayAny struct { + baseAny + val reflect.Value +} + +func wrapArray(val interface{}) *arrayAny { + return &arrayAny{baseAny{}, reflect.ValueOf(val)} +} + +func (any *arrayAny) ValueType() ValueType { + return ArrayValue +} + +func (any *arrayAny) MustBeValid() Any { + return any +} + +func (any *arrayAny) LastError() error { + return nil +} + +func (any *arrayAny) ToBool() bool { + return any.val.Len() != 0 +} + +func (any *arrayAny) ToInt() int { + if any.val.Len() == 0 { + return 0 + } + return 1 +} + +func (any *arrayAny) ToInt32() int32 { + if any.val.Len() == 0 { + return 0 + } + return 1 +} + +func (any *arrayAny) ToInt64() int64 { + if any.val.Len() == 0 { + return 0 + } + return 1 +} + +func (any *arrayAny) ToUint() uint { + if any.val.Len() == 0 { + return 0 + } + return 1 +} + +func (any *arrayAny) ToUint32() uint32 { + if any.val.Len() == 0 { + return 0 + } + return 1 +} + +func (any *arrayAny) ToUint64() uint64 { + if any.val.Len() == 0 { + return 0 + } + return 1 +} + +func (any *arrayAny) ToFloat32() float32 { + if any.val.Len() == 0 { + return 0 + } + return 1 +} + +func (any *arrayAny) ToFloat64() float64 { + if any.val.Len() == 0 { + return 0 + } + return 1 +} + +func (any *arrayAny) ToString() string { + str, _ := MarshalToString(any.val.Interface()) + return str +} + +func (any *arrayAny) Get(path ...interface{}) Any { + if len(path) == 0 { + return any + } + switch firstPath := path[0].(type) { + case int: + if firstPath < 0 || firstPath >= any.val.Len() { + return newInvalidAny(path) + } + return Wrap(any.val.Index(firstPath).Interface()) + case int32: + if '*' == firstPath { + mappedAll := make([]Any, 0) + for i := 0; i < any.val.Len(); i++ { + mapped := Wrap(any.val.Index(i).Interface()).Get(path[1:]...) + if mapped.ValueType() != InvalidValue { + mappedAll = append(mappedAll, mapped) + } + } + return wrapArray(mappedAll) + } + return newInvalidAny(path) + default: + return newInvalidAny(path) + } +} + +func (any *arrayAny) Size() int { + return any.val.Len() +} + +func (any *arrayAny) WriteTo(stream *Stream) { + stream.WriteVal(any.val) +} + +func (any *arrayAny) GetInterface() interface{} { + return any.val.Interface() +} diff --git a/vendor/github.com/json-iterator/go/any_bool.go b/vendor/github.com/json-iterator/go/any_bool.go new file mode 100644 index 0000000..9452324 --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_bool.go @@ -0,0 +1,137 @@ +package jsoniter + +type trueAny struct { + baseAny +} + +func (any *trueAny) LastError() error { + return nil +} + +func (any *trueAny) ToBool() bool { + return true +} + +func (any *trueAny) ToInt() int { + return 1 +} + +func (any *trueAny) ToInt32() int32 { + return 1 +} + +func (any *trueAny) ToInt64() int64 { + return 1 +} + +func (any *trueAny) ToUint() uint { + return 1 +} + +func (any *trueAny) ToUint32() uint32 { + return 1 +} + +func (any *trueAny) ToUint64() uint64 { + return 1 +} + +func (any *trueAny) ToFloat32() float32 { + return 1 +} + +func (any *trueAny) ToFloat64() float64 { + return 1 +} + +func (any *trueAny) ToString() string { + return "true" +} + +func (any *trueAny) WriteTo(stream *Stream) { + stream.WriteTrue() +} + +func (any *trueAny) Parse() *Iterator { + return nil +} + +func (any *trueAny) GetInterface() interface{} { + return true +} + +func (any *trueAny) ValueType() ValueType { + return BoolValue +} + +func (any *trueAny) MustBeValid() Any { + return any +} + +type falseAny struct { + baseAny +} + +func (any *falseAny) LastError() error { + return nil +} + +func (any *falseAny) ToBool() bool { + return false +} + +func (any *falseAny) ToInt() int { + return 0 +} + +func (any *falseAny) ToInt32() int32 { + return 0 +} + +func (any *falseAny) ToInt64() int64 { + return 0 +} + +func (any *falseAny) ToUint() uint { + return 0 +} + +func (any *falseAny) ToUint32() uint32 { + return 0 +} + +func (any *falseAny) ToUint64() uint64 { + return 0 +} + +func (any *falseAny) ToFloat32() float32 { + return 0 +} + +func (any *falseAny) ToFloat64() float64 { + return 0 +} + +func (any *falseAny) ToString() string { + return "false" +} + +func (any *falseAny) WriteTo(stream *Stream) { + stream.WriteFalse() +} + +func (any *falseAny) Parse() *Iterator { + return nil +} + +func (any *falseAny) GetInterface() interface{} { + return false +} + +func (any *falseAny) ValueType() ValueType { + return BoolValue +} + +func (any *falseAny) MustBeValid() Any { + return any +} diff --git a/vendor/github.com/json-iterator/go/any_float.go b/vendor/github.com/json-iterator/go/any_float.go new file mode 100644 index 0000000..35fdb09 --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_float.go @@ -0,0 +1,83 @@ +package jsoniter + +import ( + "strconv" +) + +type floatAny struct { + baseAny + val float64 +} + +func (any *floatAny) Parse() *Iterator { + return nil +} + +func (any *floatAny) ValueType() ValueType { + return NumberValue +} + +func (any *floatAny) MustBeValid() Any { + return any +} + +func (any *floatAny) LastError() error { + return nil +} + +func (any *floatAny) ToBool() bool { + return any.ToFloat64() != 0 +} + +func (any *floatAny) ToInt() int { + return int(any.val) +} + +func (any *floatAny) ToInt32() int32 { + return int32(any.val) +} + +func (any *floatAny) ToInt64() int64 { + return int64(any.val) +} + +func (any *floatAny) ToUint() uint { + if any.val > 0 { + return uint(any.val) + } + return 0 +} + +func (any *floatAny) ToUint32() uint32 { + if any.val > 0 { + return uint32(any.val) + } + return 0 +} + +func (any *floatAny) ToUint64() uint64 { + if any.val > 0 { + return uint64(any.val) + } + return 0 +} + +func (any *floatAny) ToFloat32() float32 { + return float32(any.val) +} + +func (any *floatAny) ToFloat64() float64 { + return any.val +} + +func (any *floatAny) ToString() string { + return strconv.FormatFloat(any.val, 'E', -1, 64) +} + +func (any *floatAny) WriteTo(stream *Stream) { + stream.WriteFloat64(any.val) +} + +func (any *floatAny) GetInterface() interface{} { + return any.val +} diff --git a/vendor/github.com/json-iterator/go/any_int32.go b/vendor/github.com/json-iterator/go/any_int32.go new file mode 100644 index 0000000..1b56f39 --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_int32.go @@ -0,0 +1,74 @@ +package jsoniter + +import ( + "strconv" +) + +type int32Any struct { + baseAny + val int32 +} + +func (any *int32Any) LastError() error { + return nil +} + +func (any *int32Any) ValueType() ValueType { + return NumberValue +} + +func (any *int32Any) MustBeValid() Any { + return any +} + +func (any *int32Any) ToBool() bool { + return any.val != 0 +} + +func (any *int32Any) ToInt() int { + return int(any.val) +} + +func (any *int32Any) ToInt32() int32 { + return any.val +} + +func (any *int32Any) ToInt64() int64 { + return int64(any.val) +} + +func (any *int32Any) ToUint() uint { + return uint(any.val) +} + +func (any *int32Any) ToUint32() uint32 { + return uint32(any.val) +} + +func (any *int32Any) ToUint64() uint64 { + return uint64(any.val) +} + +func (any *int32Any) ToFloat32() float32 { + return float32(any.val) +} + +func (any *int32Any) ToFloat64() float64 { + return float64(any.val) +} + +func (any *int32Any) ToString() string { + return strconv.FormatInt(int64(any.val), 10) +} + +func (any *int32Any) WriteTo(stream *Stream) { + stream.WriteInt32(any.val) +} + +func (any *int32Any) Parse() *Iterator { + return nil +} + +func (any *int32Any) GetInterface() interface{} { + return any.val +} diff --git a/vendor/github.com/json-iterator/go/any_int64.go b/vendor/github.com/json-iterator/go/any_int64.go new file mode 100644 index 0000000..c440d72 --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_int64.go @@ -0,0 +1,74 @@ +package jsoniter + +import ( + "strconv" +) + +type int64Any struct { + baseAny + val int64 +} + +func (any *int64Any) LastError() error { + return nil +} + +func (any *int64Any) ValueType() ValueType { + return NumberValue +} + +func (any *int64Any) MustBeValid() Any { + return any +} + +func (any *int64Any) ToBool() bool { + return any.val != 0 +} + +func (any *int64Any) ToInt() int { + return int(any.val) +} + +func (any *int64Any) ToInt32() int32 { + return int32(any.val) +} + +func (any *int64Any) ToInt64() int64 { + return any.val +} + +func (any *int64Any) ToUint() uint { + return uint(any.val) +} + +func (any *int64Any) ToUint32() uint32 { + return uint32(any.val) +} + +func (any *int64Any) ToUint64() uint64 { + return uint64(any.val) +} + +func (any *int64Any) ToFloat32() float32 { + return float32(any.val) +} + +func (any *int64Any) ToFloat64() float64 { + return float64(any.val) +} + +func (any *int64Any) ToString() string { + return strconv.FormatInt(any.val, 10) +} + +func (any *int64Any) WriteTo(stream *Stream) { + stream.WriteInt64(any.val) +} + +func (any *int64Any) Parse() *Iterator { + return nil +} + +func (any *int64Any) GetInterface() interface{} { + return any.val +} diff --git a/vendor/github.com/json-iterator/go/any_invalid.go b/vendor/github.com/json-iterator/go/any_invalid.go new file mode 100644 index 0000000..1d859ea --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_invalid.go @@ -0,0 +1,82 @@ +package jsoniter + +import "fmt" + +type invalidAny struct { + baseAny + err error +} + +func newInvalidAny(path []interface{}) *invalidAny { + return &invalidAny{baseAny{}, fmt.Errorf("%v not found", path)} +} + +func (any *invalidAny) LastError() error { + return any.err +} + +func (any *invalidAny) ValueType() ValueType { + return InvalidValue +} + +func (any *invalidAny) MustBeValid() Any { + panic(any.err) +} + +func (any *invalidAny) ToBool() bool { + return false +} + +func (any *invalidAny) ToInt() int { + return 0 +} + +func (any *invalidAny) ToInt32() int32 { + return 0 +} + +func (any *invalidAny) ToInt64() int64 { + return 0 +} + +func (any *invalidAny) ToUint() uint { + return 0 +} + +func (any *invalidAny) ToUint32() uint32 { + return 0 +} + +func (any *invalidAny) ToUint64() uint64 { + return 0 +} + +func (any *invalidAny) ToFloat32() float32 { + return 0 +} + +func (any *invalidAny) ToFloat64() float64 { + return 0 +} + +func (any *invalidAny) ToString() string { + return "" +} + +func (any *invalidAny) WriteTo(stream *Stream) { +} + +func (any *invalidAny) Get(path ...interface{}) Any { + if any.err == nil { + return &invalidAny{baseAny{}, fmt.Errorf("get %v from invalid", path)} + } + return &invalidAny{baseAny{}, fmt.Errorf("%v, get %v from invalid", any.err, path)} +} + +func (any *invalidAny) Parse() *Iterator { + return nil +} + +func (any *invalidAny) GetInterface() interface{} { + return nil +} diff --git a/vendor/github.com/json-iterator/go/any_nil.go b/vendor/github.com/json-iterator/go/any_nil.go new file mode 100644 index 0000000..d04cb54 --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_nil.go @@ -0,0 +1,69 @@ +package jsoniter + +type nilAny struct { + baseAny +} + +func (any *nilAny) LastError() error { + return nil +} + +func (any *nilAny) ValueType() ValueType { + return NilValue +} + +func (any *nilAny) MustBeValid() Any { + return any +} + +func (any *nilAny) ToBool() bool { + return false +} + +func (any *nilAny) ToInt() int { + return 0 +} + +func (any *nilAny) ToInt32() int32 { + return 0 +} + +func (any *nilAny) ToInt64() int64 { + return 0 +} + +func (any *nilAny) ToUint() uint { + return 0 +} + +func (any *nilAny) ToUint32() uint32 { + return 0 +} + +func (any *nilAny) ToUint64() uint64 { + return 0 +} + +func (any *nilAny) ToFloat32() float32 { + return 0 +} + +func (any *nilAny) ToFloat64() float64 { + return 0 +} + +func (any *nilAny) ToString() string { + return "" +} + +func (any *nilAny) WriteTo(stream *Stream) { + stream.WriteNil() +} + +func (any *nilAny) Parse() *Iterator { + return nil +} + +func (any *nilAny) GetInterface() interface{} { + return nil +} diff --git a/vendor/github.com/json-iterator/go/any_number.go b/vendor/github.com/json-iterator/go/any_number.go new file mode 100644 index 0000000..9d1e901 --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_number.go @@ -0,0 +1,123 @@ +package jsoniter + +import ( + "io" + "unsafe" +) + +type numberLazyAny struct { + baseAny + cfg *frozenConfig + buf []byte + err error +} + +func (any *numberLazyAny) ValueType() ValueType { + return NumberValue +} + +func (any *numberLazyAny) MustBeValid() Any { + return any +} + +func (any *numberLazyAny) LastError() error { + return any.err +} + +func (any *numberLazyAny) ToBool() bool { + return any.ToFloat64() != 0 +} + +func (any *numberLazyAny) ToInt() int { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + val := iter.ReadInt() + if iter.Error != nil && iter.Error != io.EOF { + any.err = iter.Error + } + return val +} + +func (any *numberLazyAny) ToInt32() int32 { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + val := iter.ReadInt32() + if iter.Error != nil && iter.Error != io.EOF { + any.err = iter.Error + } + return val +} + +func (any *numberLazyAny) ToInt64() int64 { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + val := iter.ReadInt64() + if iter.Error != nil && iter.Error != io.EOF { + any.err = iter.Error + } + return val +} + +func (any *numberLazyAny) ToUint() uint { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + val := iter.ReadUint() + if iter.Error != nil && iter.Error != io.EOF { + any.err = iter.Error + } + return val +} + +func (any *numberLazyAny) ToUint32() uint32 { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + val := iter.ReadUint32() + if iter.Error != nil && iter.Error != io.EOF { + any.err = iter.Error + } + return val +} + +func (any *numberLazyAny) ToUint64() uint64 { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + val := iter.ReadUint64() + if iter.Error != nil && iter.Error != io.EOF { + any.err = iter.Error + } + return val +} + +func (any *numberLazyAny) ToFloat32() float32 { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + val := iter.ReadFloat32() + if iter.Error != nil && iter.Error != io.EOF { + any.err = iter.Error + } + return val +} + +func (any *numberLazyAny) ToFloat64() float64 { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + val := iter.ReadFloat64() + if iter.Error != nil && iter.Error != io.EOF { + any.err = iter.Error + } + return val +} + +func (any *numberLazyAny) ToString() string { + return *(*string)(unsafe.Pointer(&any.buf)) +} + +func (any *numberLazyAny) WriteTo(stream *Stream) { + stream.Write(any.buf) +} + +func (any *numberLazyAny) GetInterface() interface{} { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + return iter.Read() +} diff --git a/vendor/github.com/json-iterator/go/any_object.go b/vendor/github.com/json-iterator/go/any_object.go new file mode 100644 index 0000000..c44ef5c --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_object.go @@ -0,0 +1,374 @@ +package jsoniter + +import ( + "reflect" + "unsafe" +) + +type objectLazyAny struct { + baseAny + cfg *frozenConfig + buf []byte + err error +} + +func (any *objectLazyAny) ValueType() ValueType { + return ObjectValue +} + +func (any *objectLazyAny) MustBeValid() Any { + return any +} + +func (any *objectLazyAny) LastError() error { + return any.err +} + +func (any *objectLazyAny) ToBool() bool { + return true +} + +func (any *objectLazyAny) ToInt() int { + return 0 +} + +func (any *objectLazyAny) ToInt32() int32 { + return 0 +} + +func (any *objectLazyAny) ToInt64() int64 { + return 0 +} + +func (any *objectLazyAny) ToUint() uint { + return 0 +} + +func (any *objectLazyAny) ToUint32() uint32 { + return 0 +} + +func (any *objectLazyAny) ToUint64() uint64 { + return 0 +} + +func (any *objectLazyAny) ToFloat32() float32 { + return 0 +} + +func (any *objectLazyAny) ToFloat64() float64 { + return 0 +} + +func (any *objectLazyAny) ToString() string { + return *(*string)(unsafe.Pointer(&any.buf)) +} + +func (any *objectLazyAny) ToVal(obj interface{}) { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + iter.ReadVal(obj) +} + +func (any *objectLazyAny) Get(path ...interface{}) Any { + if len(path) == 0 { + return any + } + switch firstPath := path[0].(type) { + case string: + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + valueBytes := locateObjectField(iter, firstPath) + if valueBytes == nil { + return newInvalidAny(path) + } + iter.ResetBytes(valueBytes) + return locatePath(iter, path[1:]) + case int32: + if '*' == firstPath { + mappedAll := map[string]Any{} + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + iter.ReadMapCB(func(iter *Iterator, field string) bool { + mapped := locatePath(iter, path[1:]) + if mapped.ValueType() != InvalidValue { + mappedAll[field] = mapped + } + return true + }) + return wrapMap(mappedAll) + } + return newInvalidAny(path) + default: + return newInvalidAny(path) + } +} + +func (any *objectLazyAny) Keys() []string { + keys := []string{} + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + iter.ReadMapCB(func(iter *Iterator, field string) bool { + iter.Skip() + keys = append(keys, field) + return true + }) + return keys +} + +func (any *objectLazyAny) Size() int { + size := 0 + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + iter.ReadObjectCB(func(iter *Iterator, field string) bool { + iter.Skip() + size++ + return true + }) + return size +} + +func (any *objectLazyAny) WriteTo(stream *Stream) { + stream.Write(any.buf) +} + +func (any *objectLazyAny) GetInterface() interface{} { + iter := any.cfg.BorrowIterator(any.buf) + defer any.cfg.ReturnIterator(iter) + return iter.Read() +} + +type objectAny struct { + baseAny + err error + val reflect.Value +} + +func wrapStruct(val interface{}) *objectAny { + return &objectAny{baseAny{}, nil, reflect.ValueOf(val)} +} + +func (any *objectAny) ValueType() ValueType { + return ObjectValue +} + +func (any *objectAny) MustBeValid() Any { + return any +} + +func (any *objectAny) Parse() *Iterator { + return nil +} + +func (any *objectAny) LastError() error { + return any.err +} + +func (any *objectAny) ToBool() bool { + return any.val.NumField() != 0 +} + +func (any *objectAny) ToInt() int { + return 0 +} + +func (any *objectAny) ToInt32() int32 { + return 0 +} + +func (any *objectAny) ToInt64() int64 { + return 0 +} + +func (any *objectAny) ToUint() uint { + return 0 +} + +func (any *objectAny) ToUint32() uint32 { + return 0 +} + +func (any *objectAny) ToUint64() uint64 { + return 0 +} + +func (any *objectAny) ToFloat32() float32 { + return 0 +} + +func (any *objectAny) ToFloat64() float64 { + return 0 +} + +func (any *objectAny) ToString() string { + str, err := MarshalToString(any.val.Interface()) + any.err = err + return str +} + +func (any *objectAny) Get(path ...interface{}) Any { + if len(path) == 0 { + return any + } + switch firstPath := path[0].(type) { + case string: + field := any.val.FieldByName(firstPath) + if !field.IsValid() { + return newInvalidAny(path) + } + return Wrap(field.Interface()) + case int32: + if '*' == firstPath { + mappedAll := map[string]Any{} + for i := 0; i < any.val.NumField(); i++ { + field := any.val.Field(i) + if field.CanInterface() { + mapped := Wrap(field.Interface()).Get(path[1:]...) + if mapped.ValueType() != InvalidValue { + mappedAll[any.val.Type().Field(i).Name] = mapped + } + } + } + return wrapMap(mappedAll) + } + return newInvalidAny(path) + default: + return newInvalidAny(path) + } +} + +func (any *objectAny) Keys() []string { + keys := make([]string, 0, any.val.NumField()) + for i := 0; i < any.val.NumField(); i++ { + keys = append(keys, any.val.Type().Field(i).Name) + } + return keys +} + +func (any *objectAny) Size() int { + return any.val.NumField() +} + +func (any *objectAny) WriteTo(stream *Stream) { + stream.WriteVal(any.val) +} + +func (any *objectAny) GetInterface() interface{} { + return any.val.Interface() +} + +type mapAny struct { + baseAny + err error + val reflect.Value +} + +func wrapMap(val interface{}) *mapAny { + return &mapAny{baseAny{}, nil, reflect.ValueOf(val)} +} + +func (any *mapAny) ValueType() ValueType { + return ObjectValue +} + +func (any *mapAny) MustBeValid() Any { + return any +} + +func (any *mapAny) Parse() *Iterator { + return nil +} + +func (any *mapAny) LastError() error { + return any.err +} + +func (any *mapAny) ToBool() bool { + return true +} + +func (any *mapAny) ToInt() int { + return 0 +} + +func (any *mapAny) ToInt32() int32 { + return 0 +} + +func (any *mapAny) ToInt64() int64 { + return 0 +} + +func (any *mapAny) ToUint() uint { + return 0 +} + +func (any *mapAny) ToUint32() uint32 { + return 0 +} + +func (any *mapAny) ToUint64() uint64 { + return 0 +} + +func (any *mapAny) ToFloat32() float32 { + return 0 +} + +func (any *mapAny) ToFloat64() float64 { + return 0 +} + +func (any *mapAny) ToString() string { + str, err := MarshalToString(any.val.Interface()) + any.err = err + return str +} + +func (any *mapAny) Get(path ...interface{}) Any { + if len(path) == 0 { + return any + } + switch firstPath := path[0].(type) { + case int32: + if '*' == firstPath { + mappedAll := map[string]Any{} + for _, key := range any.val.MapKeys() { + keyAsStr := key.String() + element := Wrap(any.val.MapIndex(key).Interface()) + mapped := element.Get(path[1:]...) + if mapped.ValueType() != InvalidValue { + mappedAll[keyAsStr] = mapped + } + } + return wrapMap(mappedAll) + } + return newInvalidAny(path) + default: + value := any.val.MapIndex(reflect.ValueOf(firstPath)) + if !value.IsValid() { + return newInvalidAny(path) + } + return Wrap(value.Interface()) + } +} + +func (any *mapAny) Keys() []string { + keys := make([]string, 0, any.val.Len()) + for _, key := range any.val.MapKeys() { + keys = append(keys, key.String()) + } + return keys +} + +func (any *mapAny) Size() int { + return any.val.Len() +} + +func (any *mapAny) WriteTo(stream *Stream) { + stream.WriteVal(any.val) +} + +func (any *mapAny) GetInterface() interface{} { + return any.val.Interface() +} diff --git a/vendor/github.com/json-iterator/go/any_str.go b/vendor/github.com/json-iterator/go/any_str.go new file mode 100644 index 0000000..1f12f66 --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_str.go @@ -0,0 +1,166 @@ +package jsoniter + +import ( + "fmt" + "strconv" +) + +type stringAny struct { + baseAny + val string +} + +func (any *stringAny) Get(path ...interface{}) Any { + if len(path) == 0 { + return any + } + return &invalidAny{baseAny{}, fmt.Errorf("GetIndex %v from simple value", path)} +} + +func (any *stringAny) Parse() *Iterator { + return nil +} + +func (any *stringAny) ValueType() ValueType { + return StringValue +} + +func (any *stringAny) MustBeValid() Any { + return any +} + +func (any *stringAny) LastError() error { + return nil +} + +func (any *stringAny) ToBool() bool { + str := any.ToString() + if str == "0" { + return false + } + for _, c := range str { + switch c { + case ' ', '\n', '\r', '\t': + default: + return true + } + } + return false +} + +func (any *stringAny) ToInt() int { + return int(any.ToInt64()) + +} + +func (any *stringAny) ToInt32() int32 { + return int32(any.ToInt64()) +} + +func (any *stringAny) ToInt64() int64 { + if any.val == "" { + return 0 + } + + flag := 1 + startPos := 0 + if any.val[0] == '+' || any.val[0] == '-' { + startPos = 1 + } + + if any.val[0] == '-' { + flag = -1 + } + + endPos := startPos + for i := startPos; i < len(any.val); i++ { + if any.val[i] >= '0' && any.val[i] <= '9' { + endPos = i + 1 + } else { + break + } + } + parsed, _ := strconv.ParseInt(any.val[startPos:endPos], 10, 64) + return int64(flag) * parsed +} + +func (any *stringAny) ToUint() uint { + return uint(any.ToUint64()) +} + +func (any *stringAny) ToUint32() uint32 { + return uint32(any.ToUint64()) +} + +func (any *stringAny) ToUint64() uint64 { + if any.val == "" { + return 0 + } + + startPos := 0 + + if any.val[0] == '-' { + return 0 + } + if any.val[0] == '+' { + startPos = 1 + } + + endPos := startPos + for i := startPos; i < len(any.val); i++ { + if any.val[i] >= '0' && any.val[i] <= '9' { + endPos = i + 1 + } else { + break + } + } + parsed, _ := strconv.ParseUint(any.val[startPos:endPos], 10, 64) + return parsed +} + +func (any *stringAny) ToFloat32() float32 { + return float32(any.ToFloat64()) +} + +func (any *stringAny) ToFloat64() float64 { + if len(any.val) == 0 { + return 0 + } + + // first char invalid + if any.val[0] != '+' && any.val[0] != '-' && (any.val[0] > '9' || any.val[0] < '0') { + return 0 + } + + // extract valid num expression from string + // eg 123true => 123, -12.12xxa => -12.12 + endPos := 1 + for i := 1; i < len(any.val); i++ { + if any.val[i] == '.' || any.val[i] == 'e' || any.val[i] == 'E' || any.val[i] == '+' || any.val[i] == '-' { + endPos = i + 1 + continue + } + + // end position is the first char which is not digit + if any.val[i] >= '0' && any.val[i] <= '9' { + endPos = i + 1 + } else { + endPos = i + break + } + } + parsed, _ := strconv.ParseFloat(any.val[:endPos], 64) + return parsed +} + +func (any *stringAny) ToString() string { + return any.val +} + +func (any *stringAny) WriteTo(stream *Stream) { + stream.WriteString(any.val) +} + +func (any *stringAny) GetInterface() interface{} { + return any.val +} diff --git a/vendor/github.com/json-iterator/go/any_uint32.go b/vendor/github.com/json-iterator/go/any_uint32.go new file mode 100644 index 0000000..656bbd3 --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_uint32.go @@ -0,0 +1,74 @@ +package jsoniter + +import ( + "strconv" +) + +type uint32Any struct { + baseAny + val uint32 +} + +func (any *uint32Any) LastError() error { + return nil +} + +func (any *uint32Any) ValueType() ValueType { + return NumberValue +} + +func (any *uint32Any) MustBeValid() Any { + return any +} + +func (any *uint32Any) ToBool() bool { + return any.val != 0 +} + +func (any *uint32Any) ToInt() int { + return int(any.val) +} + +func (any *uint32Any) ToInt32() int32 { + return int32(any.val) +} + +func (any *uint32Any) ToInt64() int64 { + return int64(any.val) +} + +func (any *uint32Any) ToUint() uint { + return uint(any.val) +} + +func (any *uint32Any) ToUint32() uint32 { + return any.val +} + +func (any *uint32Any) ToUint64() uint64 { + return uint64(any.val) +} + +func (any *uint32Any) ToFloat32() float32 { + return float32(any.val) +} + +func (any *uint32Any) ToFloat64() float64 { + return float64(any.val) +} + +func (any *uint32Any) ToString() string { + return strconv.FormatInt(int64(any.val), 10) +} + +func (any *uint32Any) WriteTo(stream *Stream) { + stream.WriteUint32(any.val) +} + +func (any *uint32Any) Parse() *Iterator { + return nil +} + +func (any *uint32Any) GetInterface() interface{} { + return any.val +} diff --git a/vendor/github.com/json-iterator/go/any_uint64.go b/vendor/github.com/json-iterator/go/any_uint64.go new file mode 100644 index 0000000..7df2fce --- /dev/null +++ b/vendor/github.com/json-iterator/go/any_uint64.go @@ -0,0 +1,74 @@ +package jsoniter + +import ( + "strconv" +) + +type uint64Any struct { + baseAny + val uint64 +} + +func (any *uint64Any) LastError() error { + return nil +} + +func (any *uint64Any) ValueType() ValueType { + return NumberValue +} + +func (any *uint64Any) MustBeValid() Any { + return any +} + +func (any *uint64Any) ToBool() bool { + return any.val != 0 +} + +func (any *uint64Any) ToInt() int { + return int(any.val) +} + +func (any *uint64Any) ToInt32() int32 { + return int32(any.val) +} + +func (any *uint64Any) ToInt64() int64 { + return int64(any.val) +} + +func (any *uint64Any) ToUint() uint { + return uint(any.val) +} + +func (any *uint64Any) ToUint32() uint32 { + return uint32(any.val) +} + +func (any *uint64Any) ToUint64() uint64 { + return any.val +} + +func (any *uint64Any) ToFloat32() float32 { + return float32(any.val) +} + +func (any *uint64Any) ToFloat64() float64 { + return float64(any.val) +} + +func (any *uint64Any) ToString() string { + return strconv.FormatUint(any.val, 10) +} + +func (any *uint64Any) WriteTo(stream *Stream) { + stream.WriteUint64(any.val) +} + +func (any *uint64Any) Parse() *Iterator { + return nil +} + +func (any *uint64Any) GetInterface() interface{} { + return any.val +} diff --git a/vendor/github.com/json-iterator/go/build.sh b/vendor/github.com/json-iterator/go/build.sh new file mode 100644 index 0000000..b45ef68 --- /dev/null +++ b/vendor/github.com/json-iterator/go/build.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e +set -x + +if [ ! -d /tmp/build-golang/src/github.com/json-iterator ]; then + mkdir -p /tmp/build-golang/src/github.com/json-iterator + ln -s $PWD /tmp/build-golang/src/github.com/json-iterator/go +fi +export GOPATH=/tmp/build-golang +go get -u github.com/golang/dep/cmd/dep +cd /tmp/build-golang/src/github.com/json-iterator/go +exec $GOPATH/bin/dep ensure -update diff --git a/vendor/github.com/json-iterator/go/config.go b/vendor/github.com/json-iterator/go/config.go new file mode 100644 index 0000000..2adcdc3 --- /dev/null +++ b/vendor/github.com/json-iterator/go/config.go @@ -0,0 +1,375 @@ +package jsoniter + +import ( + "encoding/json" + "io" + "reflect" + "sync" + "unsafe" + + "github.com/modern-go/concurrent" + "github.com/modern-go/reflect2" +) + +// Config customize how the API should behave. +// The API is created from Config by Froze. +type Config struct { + IndentionStep int + MarshalFloatWith6Digits bool + EscapeHTML bool + SortMapKeys bool + UseNumber bool + DisallowUnknownFields bool + TagKey string + OnlyTaggedField bool + ValidateJsonRawMessage bool + ObjectFieldMustBeSimpleString bool + CaseSensitive bool +} + +// API the public interface of this package. +// Primary Marshal and Unmarshal. +type API interface { + IteratorPool + StreamPool + MarshalToString(v interface{}) (string, error) + Marshal(v interface{}) ([]byte, error) + MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) + UnmarshalFromString(str string, v interface{}) error + Unmarshal(data []byte, v interface{}) error + Get(data []byte, path ...interface{}) Any + NewEncoder(writer io.Writer) *Encoder + NewDecoder(reader io.Reader) *Decoder + Valid(data []byte) bool + RegisterExtension(extension Extension) + DecoderOf(typ reflect2.Type) ValDecoder + EncoderOf(typ reflect2.Type) ValEncoder +} + +// ConfigDefault the default API +var ConfigDefault = Config{ + EscapeHTML: true, +}.Froze() + +// ConfigCompatibleWithStandardLibrary tries to be 100% compatible with standard library behavior +var ConfigCompatibleWithStandardLibrary = Config{ + EscapeHTML: true, + SortMapKeys: true, + ValidateJsonRawMessage: true, +}.Froze() + +// ConfigFastest marshals float with only 6 digits precision +var ConfigFastest = Config{ + EscapeHTML: false, + MarshalFloatWith6Digits: true, // will lose precession + ObjectFieldMustBeSimpleString: true, // do not unescape object field +}.Froze() + +type frozenConfig struct { + configBeforeFrozen Config + sortMapKeys bool + indentionStep int + objectFieldMustBeSimpleString bool + onlyTaggedField bool + disallowUnknownFields bool + decoderCache *concurrent.Map + encoderCache *concurrent.Map + encoderExtension Extension + decoderExtension Extension + extraExtensions []Extension + streamPool *sync.Pool + iteratorPool *sync.Pool + caseSensitive bool +} + +func (cfg *frozenConfig) initCache() { + cfg.decoderCache = concurrent.NewMap() + cfg.encoderCache = concurrent.NewMap() +} + +func (cfg *frozenConfig) addDecoderToCache(cacheKey uintptr, decoder ValDecoder) { + cfg.decoderCache.Store(cacheKey, decoder) +} + +func (cfg *frozenConfig) addEncoderToCache(cacheKey uintptr, encoder ValEncoder) { + cfg.encoderCache.Store(cacheKey, encoder) +} + +func (cfg *frozenConfig) getDecoderFromCache(cacheKey uintptr) ValDecoder { + decoder, found := cfg.decoderCache.Load(cacheKey) + if found { + return decoder.(ValDecoder) + } + return nil +} + +func (cfg *frozenConfig) getEncoderFromCache(cacheKey uintptr) ValEncoder { + encoder, found := cfg.encoderCache.Load(cacheKey) + if found { + return encoder.(ValEncoder) + } + return nil +} + +var cfgCache = concurrent.NewMap() + +func getFrozenConfigFromCache(cfg Config) *frozenConfig { + obj, found := cfgCache.Load(cfg) + if found { + return obj.(*frozenConfig) + } + return nil +} + +func addFrozenConfigToCache(cfg Config, frozenConfig *frozenConfig) { + cfgCache.Store(cfg, frozenConfig) +} + +// Froze forge API from config +func (cfg Config) Froze() API { + api := &frozenConfig{ + sortMapKeys: cfg.SortMapKeys, + indentionStep: cfg.IndentionStep, + objectFieldMustBeSimpleString: cfg.ObjectFieldMustBeSimpleString, + onlyTaggedField: cfg.OnlyTaggedField, + disallowUnknownFields: cfg.DisallowUnknownFields, + caseSensitive: cfg.CaseSensitive, + } + api.streamPool = &sync.Pool{ + New: func() interface{} { + return NewStream(api, nil, 512) + }, + } + api.iteratorPool = &sync.Pool{ + New: func() interface{} { + return NewIterator(api) + }, + } + api.initCache() + encoderExtension := EncoderExtension{} + decoderExtension := DecoderExtension{} + if cfg.MarshalFloatWith6Digits { + api.marshalFloatWith6Digits(encoderExtension) + } + if cfg.EscapeHTML { + api.escapeHTML(encoderExtension) + } + if cfg.UseNumber { + api.useNumber(decoderExtension) + } + if cfg.ValidateJsonRawMessage { + api.validateJsonRawMessage(encoderExtension) + } + api.encoderExtension = encoderExtension + api.decoderExtension = decoderExtension + api.configBeforeFrozen = cfg + return api +} + +func (cfg Config) frozeWithCacheReuse(extraExtensions []Extension) *frozenConfig { + api := getFrozenConfigFromCache(cfg) + if api != nil { + return api + } + api = cfg.Froze().(*frozenConfig) + for _, extension := range extraExtensions { + api.RegisterExtension(extension) + } + addFrozenConfigToCache(cfg, api) + return api +} + +func (cfg *frozenConfig) validateJsonRawMessage(extension EncoderExtension) { + encoder := &funcEncoder{func(ptr unsafe.Pointer, stream *Stream) { + rawMessage := *(*json.RawMessage)(ptr) + iter := cfg.BorrowIterator([]byte(rawMessage)) + defer cfg.ReturnIterator(iter) + iter.Read() + if iter.Error != nil && iter.Error != io.EOF { + stream.WriteRaw("null") + } else { + stream.WriteRaw(string(rawMessage)) + } + }, func(ptr unsafe.Pointer) bool { + return len(*((*json.RawMessage)(ptr))) == 0 + }} + extension[reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem()] = encoder + extension[reflect2.TypeOfPtr((*RawMessage)(nil)).Elem()] = encoder +} + +func (cfg *frozenConfig) useNumber(extension DecoderExtension) { + extension[reflect2.TypeOfPtr((*interface{})(nil)).Elem()] = &funcDecoder{func(ptr unsafe.Pointer, iter *Iterator) { + exitingValue := *((*interface{})(ptr)) + if exitingValue != nil && reflect.TypeOf(exitingValue).Kind() == reflect.Ptr { + iter.ReadVal(exitingValue) + return + } + if iter.WhatIsNext() == NumberValue { + *((*interface{})(ptr)) = json.Number(iter.readNumberAsString()) + } else { + *((*interface{})(ptr)) = iter.Read() + } + }} +} +func (cfg *frozenConfig) getTagKey() string { + tagKey := cfg.configBeforeFrozen.TagKey + if tagKey == "" { + return "json" + } + return tagKey +} + +func (cfg *frozenConfig) RegisterExtension(extension Extension) { + cfg.extraExtensions = append(cfg.extraExtensions, extension) + copied := cfg.configBeforeFrozen + cfg.configBeforeFrozen = copied +} + +type lossyFloat32Encoder struct { +} + +func (encoder *lossyFloat32Encoder) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteFloat32Lossy(*((*float32)(ptr))) +} + +func (encoder *lossyFloat32Encoder) IsEmpty(ptr unsafe.Pointer) bool { + return *((*float32)(ptr)) == 0 +} + +type lossyFloat64Encoder struct { +} + +func (encoder *lossyFloat64Encoder) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteFloat64Lossy(*((*float64)(ptr))) +} + +func (encoder *lossyFloat64Encoder) IsEmpty(ptr unsafe.Pointer) bool { + return *((*float64)(ptr)) == 0 +} + +// EnableLossyFloatMarshalling keeps 10**(-6) precision +// for float variables for better performance. +func (cfg *frozenConfig) marshalFloatWith6Digits(extension EncoderExtension) { + // for better performance + extension[reflect2.TypeOfPtr((*float32)(nil)).Elem()] = &lossyFloat32Encoder{} + extension[reflect2.TypeOfPtr((*float64)(nil)).Elem()] = &lossyFloat64Encoder{} +} + +type htmlEscapedStringEncoder struct { +} + +func (encoder *htmlEscapedStringEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + str := *((*string)(ptr)) + stream.WriteStringWithHTMLEscaped(str) +} + +func (encoder *htmlEscapedStringEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return *((*string)(ptr)) == "" +} + +func (cfg *frozenConfig) escapeHTML(encoderExtension EncoderExtension) { + encoderExtension[reflect2.TypeOfPtr((*string)(nil)).Elem()] = &htmlEscapedStringEncoder{} +} + +func (cfg *frozenConfig) cleanDecoders() { + typeDecoders = map[string]ValDecoder{} + fieldDecoders = map[string]ValDecoder{} + *cfg = *(cfg.configBeforeFrozen.Froze().(*frozenConfig)) +} + +func (cfg *frozenConfig) cleanEncoders() { + typeEncoders = map[string]ValEncoder{} + fieldEncoders = map[string]ValEncoder{} + *cfg = *(cfg.configBeforeFrozen.Froze().(*frozenConfig)) +} + +func (cfg *frozenConfig) MarshalToString(v interface{}) (string, error) { + stream := cfg.BorrowStream(nil) + defer cfg.ReturnStream(stream) + stream.WriteVal(v) + if stream.Error != nil { + return "", stream.Error + } + return string(stream.Buffer()), nil +} + +func (cfg *frozenConfig) Marshal(v interface{}) ([]byte, error) { + stream := cfg.BorrowStream(nil) + defer cfg.ReturnStream(stream) + stream.WriteVal(v) + if stream.Error != nil { + return nil, stream.Error + } + result := stream.Buffer() + copied := make([]byte, len(result)) + copy(copied, result) + return copied, nil +} + +func (cfg *frozenConfig) MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) { + if prefix != "" { + panic("prefix is not supported") + } + for _, r := range indent { + if r != ' ' { + panic("indent can only be space") + } + } + newCfg := cfg.configBeforeFrozen + newCfg.IndentionStep = len(indent) + return newCfg.frozeWithCacheReuse(cfg.extraExtensions).Marshal(v) +} + +func (cfg *frozenConfig) UnmarshalFromString(str string, v interface{}) error { + data := []byte(str) + iter := cfg.BorrowIterator(data) + defer cfg.ReturnIterator(iter) + iter.ReadVal(v) + c := iter.nextToken() + if c == 0 { + if iter.Error == io.EOF { + return nil + } + return iter.Error + } + iter.ReportError("Unmarshal", "there are bytes left after unmarshal") + return iter.Error +} + +func (cfg *frozenConfig) Get(data []byte, path ...interface{}) Any { + iter := cfg.BorrowIterator(data) + defer cfg.ReturnIterator(iter) + return locatePath(iter, path) +} + +func (cfg *frozenConfig) Unmarshal(data []byte, v interface{}) error { + iter := cfg.BorrowIterator(data) + defer cfg.ReturnIterator(iter) + iter.ReadVal(v) + c := iter.nextToken() + if c == 0 { + if iter.Error == io.EOF { + return nil + } + return iter.Error + } + iter.ReportError("Unmarshal", "there are bytes left after unmarshal") + return iter.Error +} + +func (cfg *frozenConfig) NewEncoder(writer io.Writer) *Encoder { + stream := NewStream(cfg, writer, 512) + return &Encoder{stream} +} + +func (cfg *frozenConfig) NewDecoder(reader io.Reader) *Decoder { + iter := Parse(cfg, reader, 512) + return &Decoder{iter} +} + +func (cfg *frozenConfig) Valid(data []byte) bool { + iter := cfg.BorrowIterator(data) + defer cfg.ReturnIterator(iter) + iter.Skip() + return iter.Error == nil +} diff --git a/vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md b/vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md new file mode 100644 index 0000000..3095662 --- /dev/null +++ b/vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md @@ -0,0 +1,7 @@ +| json type \ dest type | bool | int | uint | float |string| +| --- | --- | --- | --- |--|--| +| number | positive => true
negative => true
zero => false| 23.2 => 23
-32.1 => -32| 12.1 => 12
-12.1 => 0|as normal|same as origin| +| string | empty string => false
string "0" => false
other strings => true | "123.32" => 123
"-123.4" => -123
"123.23xxxw" => 123
"abcde12" => 0
"-32.1" => -32| 13.2 => 13
-1.1 => 0 |12.1 => 12.1
-12.3 => -12.3
12.4xxa => 12.4
+1.1e2 =>110 |same as origin| +| bool | true => true
false => false| true => 1
false => 0 | true => 1
false => 0 |true => 1
false => 0|true => "true"
false => "false"| +| object | true | 0 | 0 |0|originnal json| +| array | empty array => false
nonempty array => true| [] => 0
[1,2] => 1 | [] => 0
[1,2] => 1 |[] => 0
[1,2] => 1|original json| \ No newline at end of file diff --git a/vendor/github.com/json-iterator/go/go.mod b/vendor/github.com/json-iterator/go/go.mod new file mode 100644 index 0000000..e05c42f --- /dev/null +++ b/vendor/github.com/json-iterator/go/go.mod @@ -0,0 +1,11 @@ +module github.com/json-iterator/go + +go 1.12 + +require ( + github.com/davecgh/go-spew v1.1.1 + github.com/google/gofuzz v1.0.0 + github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 + github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 + github.com/stretchr/testify v1.3.0 +) diff --git a/vendor/github.com/json-iterator/go/go.sum b/vendor/github.com/json-iterator/go/go.sum new file mode 100644 index 0000000..d778b5a --- /dev/null +++ b/vendor/github.com/json-iterator/go/go.sum @@ -0,0 +1,14 @@ +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/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/vendor/github.com/json-iterator/go/iter.go b/vendor/github.com/json-iterator/go/iter.go new file mode 100644 index 0000000..29b31cf --- /dev/null +++ b/vendor/github.com/json-iterator/go/iter.go @@ -0,0 +1,349 @@ +package jsoniter + +import ( + "encoding/json" + "fmt" + "io" +) + +// ValueType the type for JSON element +type ValueType int + +const ( + // InvalidValue invalid JSON element + InvalidValue ValueType = iota + // StringValue JSON element "string" + StringValue + // NumberValue JSON element 100 or 0.10 + NumberValue + // NilValue JSON element null + NilValue + // BoolValue JSON element true or false + BoolValue + // ArrayValue JSON element [] + ArrayValue + // ObjectValue JSON element {} + ObjectValue +) + +var hexDigits []byte +var valueTypes []ValueType + +func init() { + hexDigits = make([]byte, 256) + for i := 0; i < len(hexDigits); i++ { + hexDigits[i] = 255 + } + for i := '0'; i <= '9'; i++ { + hexDigits[i] = byte(i - '0') + } + for i := 'a'; i <= 'f'; i++ { + hexDigits[i] = byte((i - 'a') + 10) + } + for i := 'A'; i <= 'F'; i++ { + hexDigits[i] = byte((i - 'A') + 10) + } + valueTypes = make([]ValueType, 256) + for i := 0; i < len(valueTypes); i++ { + valueTypes[i] = InvalidValue + } + valueTypes['"'] = StringValue + valueTypes['-'] = NumberValue + valueTypes['0'] = NumberValue + valueTypes['1'] = NumberValue + valueTypes['2'] = NumberValue + valueTypes['3'] = NumberValue + valueTypes['4'] = NumberValue + valueTypes['5'] = NumberValue + valueTypes['6'] = NumberValue + valueTypes['7'] = NumberValue + valueTypes['8'] = NumberValue + valueTypes['9'] = NumberValue + valueTypes['t'] = BoolValue + valueTypes['f'] = BoolValue + valueTypes['n'] = NilValue + valueTypes['['] = ArrayValue + valueTypes['{'] = ObjectValue +} + +// Iterator is a io.Reader like object, with JSON specific read functions. +// Error is not returned as return value, but stored as Error member on this iterator instance. +type Iterator struct { + cfg *frozenConfig + reader io.Reader + buf []byte + head int + tail int + depth int + captureStartedAt int + captured []byte + Error error + Attachment interface{} // open for customized decoder +} + +// NewIterator creates an empty Iterator instance +func NewIterator(cfg API) *Iterator { + return &Iterator{ + cfg: cfg.(*frozenConfig), + reader: nil, + buf: nil, + head: 0, + tail: 0, + depth: 0, + } +} + +// Parse creates an Iterator instance from io.Reader +func Parse(cfg API, reader io.Reader, bufSize int) *Iterator { + return &Iterator{ + cfg: cfg.(*frozenConfig), + reader: reader, + buf: make([]byte, bufSize), + head: 0, + tail: 0, + depth: 0, + } +} + +// ParseBytes creates an Iterator instance from byte array +func ParseBytes(cfg API, input []byte) *Iterator { + return &Iterator{ + cfg: cfg.(*frozenConfig), + reader: nil, + buf: input, + head: 0, + tail: len(input), + depth: 0, + } +} + +// ParseString creates an Iterator instance from string +func ParseString(cfg API, input string) *Iterator { + return ParseBytes(cfg, []byte(input)) +} + +// Pool returns a pool can provide more iterator with same configuration +func (iter *Iterator) Pool() IteratorPool { + return iter.cfg +} + +// Reset reuse iterator instance by specifying another reader +func (iter *Iterator) Reset(reader io.Reader) *Iterator { + iter.reader = reader + iter.head = 0 + iter.tail = 0 + iter.depth = 0 + return iter +} + +// ResetBytes reuse iterator instance by specifying another byte array as input +func (iter *Iterator) ResetBytes(input []byte) *Iterator { + iter.reader = nil + iter.buf = input + iter.head = 0 + iter.tail = len(input) + iter.depth = 0 + return iter +} + +// WhatIsNext gets ValueType of relatively next json element +func (iter *Iterator) WhatIsNext() ValueType { + valueType := valueTypes[iter.nextToken()] + iter.unreadByte() + return valueType +} + +func (iter *Iterator) skipWhitespacesWithoutLoadMore() bool { + for i := iter.head; i < iter.tail; i++ { + c := iter.buf[i] + switch c { + case ' ', '\n', '\t', '\r': + continue + } + iter.head = i + return false + } + return true +} + +func (iter *Iterator) isObjectEnd() bool { + c := iter.nextToken() + if c == ',' { + return false + } + if c == '}' { + return true + } + iter.ReportError("isObjectEnd", "object ended prematurely, unexpected char "+string([]byte{c})) + return true +} + +func (iter *Iterator) nextToken() byte { + // a variation of skip whitespaces, returning the next non-whitespace token + for { + for i := iter.head; i < iter.tail; i++ { + c := iter.buf[i] + switch c { + case ' ', '\n', '\t', '\r': + continue + } + iter.head = i + 1 + return c + } + if !iter.loadMore() { + return 0 + } + } +} + +// ReportError record a error in iterator instance with current position. +func (iter *Iterator) ReportError(operation string, msg string) { + if iter.Error != nil { + if iter.Error != io.EOF { + return + } + } + peekStart := iter.head - 10 + if peekStart < 0 { + peekStart = 0 + } + peekEnd := iter.head + 10 + if peekEnd > iter.tail { + peekEnd = iter.tail + } + parsing := string(iter.buf[peekStart:peekEnd]) + contextStart := iter.head - 50 + if contextStart < 0 { + contextStart = 0 + } + contextEnd := iter.head + 50 + if contextEnd > iter.tail { + contextEnd = iter.tail + } + context := string(iter.buf[contextStart:contextEnd]) + iter.Error = fmt.Errorf("%s: %s, error found in #%v byte of ...|%s|..., bigger context ...|%s|...", + operation, msg, iter.head-peekStart, parsing, context) +} + +// CurrentBuffer gets current buffer as string for debugging purpose +func (iter *Iterator) CurrentBuffer() string { + peekStart := iter.head - 10 + if peekStart < 0 { + peekStart = 0 + } + return fmt.Sprintf("parsing #%v byte, around ...|%s|..., whole buffer ...|%s|...", iter.head, + string(iter.buf[peekStart:iter.head]), string(iter.buf[0:iter.tail])) +} + +func (iter *Iterator) readByte() (ret byte) { + if iter.head == iter.tail { + if iter.loadMore() { + ret = iter.buf[iter.head] + iter.head++ + return ret + } + return 0 + } + ret = iter.buf[iter.head] + iter.head++ + return ret +} + +func (iter *Iterator) loadMore() bool { + if iter.reader == nil { + if iter.Error == nil { + iter.head = iter.tail + iter.Error = io.EOF + } + return false + } + if iter.captured != nil { + iter.captured = append(iter.captured, + iter.buf[iter.captureStartedAt:iter.tail]...) + iter.captureStartedAt = 0 + } + for { + n, err := iter.reader.Read(iter.buf) + if n == 0 { + if err != nil { + if iter.Error == nil { + iter.Error = err + } + return false + } + } else { + iter.head = 0 + iter.tail = n + return true + } + } +} + +func (iter *Iterator) unreadByte() { + if iter.Error != nil { + return + } + iter.head-- + return +} + +// Read read the next JSON element as generic interface{}. +func (iter *Iterator) Read() interface{} { + valueType := iter.WhatIsNext() + switch valueType { + case StringValue: + return iter.ReadString() + case NumberValue: + if iter.cfg.configBeforeFrozen.UseNumber { + return json.Number(iter.readNumberAsString()) + } + return iter.ReadFloat64() + case NilValue: + iter.skipFourBytes('n', 'u', 'l', 'l') + return nil + case BoolValue: + return iter.ReadBool() + case ArrayValue: + arr := []interface{}{} + iter.ReadArrayCB(func(iter *Iterator) bool { + var elem interface{} + iter.ReadVal(&elem) + arr = append(arr, elem) + return true + }) + return arr + case ObjectValue: + obj := map[string]interface{}{} + iter.ReadMapCB(func(Iter *Iterator, field string) bool { + var elem interface{} + iter.ReadVal(&elem) + obj[field] = elem + return true + }) + return obj + default: + iter.ReportError("Read", fmt.Sprintf("unexpected value type: %v", valueType)) + return nil + } +} + +// limit maximum depth of nesting, as allowed by https://tools.ietf.org/html/rfc7159#section-9 +const maxDepth = 10000 + +func (iter *Iterator) incrementDepth() (success bool) { + iter.depth++ + if iter.depth <= maxDepth { + return true + } + iter.ReportError("incrementDepth", "exceeded max depth") + return false +} + +func (iter *Iterator) decrementDepth() (success bool) { + iter.depth-- + if iter.depth >= 0 { + return true + } + iter.ReportError("decrementDepth", "unexpected negative nesting") + return false +} diff --git a/vendor/github.com/json-iterator/go/iter_array.go b/vendor/github.com/json-iterator/go/iter_array.go new file mode 100644 index 0000000..204fe0e --- /dev/null +++ b/vendor/github.com/json-iterator/go/iter_array.go @@ -0,0 +1,64 @@ +package jsoniter + +// ReadArray read array element, tells if the array has more element to read. +func (iter *Iterator) ReadArray() (ret bool) { + c := iter.nextToken() + switch c { + case 'n': + iter.skipThreeBytes('u', 'l', 'l') + return false // null + case '[': + c = iter.nextToken() + if c != ']' { + iter.unreadByte() + return true + } + return false + case ']': + return false + case ',': + return true + default: + iter.ReportError("ReadArray", "expect [ or , or ] or n, but found "+string([]byte{c})) + return + } +} + +// ReadArrayCB read array with callback +func (iter *Iterator) ReadArrayCB(callback func(*Iterator) bool) (ret bool) { + c := iter.nextToken() + if c == '[' { + if !iter.incrementDepth() { + return false + } + c = iter.nextToken() + if c != ']' { + iter.unreadByte() + if !callback(iter) { + iter.decrementDepth() + return false + } + c = iter.nextToken() + for c == ',' { + if !callback(iter) { + iter.decrementDepth() + return false + } + c = iter.nextToken() + } + if c != ']' { + iter.ReportError("ReadArrayCB", "expect ] in the end, but found "+string([]byte{c})) + iter.decrementDepth() + return false + } + return iter.decrementDepth() + } + return iter.decrementDepth() + } + if c == 'n' { + iter.skipThreeBytes('u', 'l', 'l') + return true // null + } + iter.ReportError("ReadArrayCB", "expect [ or n, but found "+string([]byte{c})) + return false +} diff --git a/vendor/github.com/json-iterator/go/iter_float.go b/vendor/github.com/json-iterator/go/iter_float.go new file mode 100644 index 0000000..b975463 --- /dev/null +++ b/vendor/github.com/json-iterator/go/iter_float.go @@ -0,0 +1,339 @@ +package jsoniter + +import ( + "encoding/json" + "io" + "math/big" + "strconv" + "strings" + "unsafe" +) + +var floatDigits []int8 + +const invalidCharForNumber = int8(-1) +const endOfNumber = int8(-2) +const dotInNumber = int8(-3) + +func init() { + floatDigits = make([]int8, 256) + for i := 0; i < len(floatDigits); i++ { + floatDigits[i] = invalidCharForNumber + } + for i := int8('0'); i <= int8('9'); i++ { + floatDigits[i] = i - int8('0') + } + floatDigits[','] = endOfNumber + floatDigits[']'] = endOfNumber + floatDigits['}'] = endOfNumber + floatDigits[' '] = endOfNumber + floatDigits['\t'] = endOfNumber + floatDigits['\n'] = endOfNumber + floatDigits['.'] = dotInNumber +} + +// ReadBigFloat read big.Float +func (iter *Iterator) ReadBigFloat() (ret *big.Float) { + str := iter.readNumberAsString() + if iter.Error != nil && iter.Error != io.EOF { + return nil + } + prec := 64 + if len(str) > prec { + prec = len(str) + } + val, _, err := big.ParseFloat(str, 10, uint(prec), big.ToZero) + if err != nil { + iter.Error = err + return nil + } + return val +} + +// ReadBigInt read big.Int +func (iter *Iterator) ReadBigInt() (ret *big.Int) { + str := iter.readNumberAsString() + if iter.Error != nil && iter.Error != io.EOF { + return nil + } + ret = big.NewInt(0) + var success bool + ret, success = ret.SetString(str, 10) + if !success { + iter.ReportError("ReadBigInt", "invalid big int") + return nil + } + return ret +} + +//ReadFloat32 read float32 +func (iter *Iterator) ReadFloat32() (ret float32) { + c := iter.nextToken() + if c == '-' { + return -iter.readPositiveFloat32() + } + iter.unreadByte() + return iter.readPositiveFloat32() +} + +func (iter *Iterator) readPositiveFloat32() (ret float32) { + i := iter.head + // first char + if i == iter.tail { + return iter.readFloat32SlowPath() + } + c := iter.buf[i] + i++ + ind := floatDigits[c] + switch ind { + case invalidCharForNumber: + return iter.readFloat32SlowPath() + case endOfNumber: + iter.ReportError("readFloat32", "empty number") + return + case dotInNumber: + iter.ReportError("readFloat32", "leading dot is invalid") + return + case 0: + if i == iter.tail { + return iter.readFloat32SlowPath() + } + c = iter.buf[i] + switch c { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + iter.ReportError("readFloat32", "leading zero is invalid") + return + } + } + value := uint64(ind) + // chars before dot +non_decimal_loop: + for ; i < iter.tail; i++ { + c = iter.buf[i] + ind := floatDigits[c] + switch ind { + case invalidCharForNumber: + return iter.readFloat32SlowPath() + case endOfNumber: + iter.head = i + return float32(value) + case dotInNumber: + break non_decimal_loop + } + if value > uint64SafeToMultiple10 { + return iter.readFloat32SlowPath() + } + value = (value << 3) + (value << 1) + uint64(ind) // value = value * 10 + ind; + } + // chars after dot + if c == '.' { + i++ + decimalPlaces := 0 + if i == iter.tail { + return iter.readFloat32SlowPath() + } + for ; i < iter.tail; i++ { + c = iter.buf[i] + ind := floatDigits[c] + switch ind { + case endOfNumber: + if decimalPlaces > 0 && decimalPlaces < len(pow10) { + iter.head = i + return float32(float64(value) / float64(pow10[decimalPlaces])) + } + // too many decimal places + return iter.readFloat32SlowPath() + case invalidCharForNumber, dotInNumber: + return iter.readFloat32SlowPath() + } + decimalPlaces++ + if value > uint64SafeToMultiple10 { + return iter.readFloat32SlowPath() + } + value = (value << 3) + (value << 1) + uint64(ind) + } + } + return iter.readFloat32SlowPath() +} + +func (iter *Iterator) readNumberAsString() (ret string) { + strBuf := [16]byte{} + str := strBuf[0:0] +load_loop: + for { + for i := iter.head; i < iter.tail; i++ { + c := iter.buf[i] + switch c { + case '+', '-', '.', 'e', 'E', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + str = append(str, c) + continue + default: + iter.head = i + break load_loop + } + } + if !iter.loadMore() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF { + return + } + if len(str) == 0 { + iter.ReportError("readNumberAsString", "invalid number") + } + return *(*string)(unsafe.Pointer(&str)) +} + +func (iter *Iterator) readFloat32SlowPath() (ret float32) { + str := iter.readNumberAsString() + if iter.Error != nil && iter.Error != io.EOF { + return + } + errMsg := validateFloat(str) + if errMsg != "" { + iter.ReportError("readFloat32SlowPath", errMsg) + return + } + val, err := strconv.ParseFloat(str, 32) + if err != nil { + iter.Error = err + return + } + return float32(val) +} + +// ReadFloat64 read float64 +func (iter *Iterator) ReadFloat64() (ret float64) { + c := iter.nextToken() + if c == '-' { + return -iter.readPositiveFloat64() + } + iter.unreadByte() + return iter.readPositiveFloat64() +} + +func (iter *Iterator) readPositiveFloat64() (ret float64) { + i := iter.head + // first char + if i == iter.tail { + return iter.readFloat64SlowPath() + } + c := iter.buf[i] + i++ + ind := floatDigits[c] + switch ind { + case invalidCharForNumber: + return iter.readFloat64SlowPath() + case endOfNumber: + iter.ReportError("readFloat64", "empty number") + return + case dotInNumber: + iter.ReportError("readFloat64", "leading dot is invalid") + return + case 0: + if i == iter.tail { + return iter.readFloat64SlowPath() + } + c = iter.buf[i] + switch c { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + iter.ReportError("readFloat64", "leading zero is invalid") + return + } + } + value := uint64(ind) + // chars before dot +non_decimal_loop: + for ; i < iter.tail; i++ { + c = iter.buf[i] + ind := floatDigits[c] + switch ind { + case invalidCharForNumber: + return iter.readFloat64SlowPath() + case endOfNumber: + iter.head = i + return float64(value) + case dotInNumber: + break non_decimal_loop + } + if value > uint64SafeToMultiple10 { + return iter.readFloat64SlowPath() + } + value = (value << 3) + (value << 1) + uint64(ind) // value = value * 10 + ind; + } + // chars after dot + if c == '.' { + i++ + decimalPlaces := 0 + if i == iter.tail { + return iter.readFloat64SlowPath() + } + for ; i < iter.tail; i++ { + c = iter.buf[i] + ind := floatDigits[c] + switch ind { + case endOfNumber: + if decimalPlaces > 0 && decimalPlaces < len(pow10) { + iter.head = i + return float64(value) / float64(pow10[decimalPlaces]) + } + // too many decimal places + return iter.readFloat64SlowPath() + case invalidCharForNumber, dotInNumber: + return iter.readFloat64SlowPath() + } + decimalPlaces++ + if value > uint64SafeToMultiple10 { + return iter.readFloat64SlowPath() + } + value = (value << 3) + (value << 1) + uint64(ind) + } + } + return iter.readFloat64SlowPath() +} + +func (iter *Iterator) readFloat64SlowPath() (ret float64) { + str := iter.readNumberAsString() + if iter.Error != nil && iter.Error != io.EOF { + return + } + errMsg := validateFloat(str) + if errMsg != "" { + iter.ReportError("readFloat64SlowPath", errMsg) + return + } + val, err := strconv.ParseFloat(str, 64) + if err != nil { + iter.Error = err + return + } + return val +} + +func validateFloat(str string) string { + // strconv.ParseFloat is not validating `1.` or `1.e1` + if len(str) == 0 { + return "empty number" + } + if str[0] == '-' { + return "-- is not valid" + } + dotPos := strings.IndexByte(str, '.') + if dotPos != -1 { + if dotPos == len(str)-1 { + return "dot can not be last character" + } + switch str[dotPos+1] { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + default: + return "missing digit after dot" + } + } + return "" +} + +// ReadNumber read json.Number +func (iter *Iterator) ReadNumber() (ret json.Number) { + return json.Number(iter.readNumberAsString()) +} diff --git a/vendor/github.com/json-iterator/go/iter_int.go b/vendor/github.com/json-iterator/go/iter_int.go new file mode 100644 index 0000000..2142320 --- /dev/null +++ b/vendor/github.com/json-iterator/go/iter_int.go @@ -0,0 +1,345 @@ +package jsoniter + +import ( + "math" + "strconv" +) + +var intDigits []int8 + +const uint32SafeToMultiply10 = uint32(0xffffffff)/10 - 1 +const uint64SafeToMultiple10 = uint64(0xffffffffffffffff)/10 - 1 + +func init() { + intDigits = make([]int8, 256) + for i := 0; i < len(intDigits); i++ { + intDigits[i] = invalidCharForNumber + } + for i := int8('0'); i <= int8('9'); i++ { + intDigits[i] = i - int8('0') + } +} + +// ReadUint read uint +func (iter *Iterator) ReadUint() uint { + if strconv.IntSize == 32 { + return uint(iter.ReadUint32()) + } + return uint(iter.ReadUint64()) +} + +// ReadInt read int +func (iter *Iterator) ReadInt() int { + if strconv.IntSize == 32 { + return int(iter.ReadInt32()) + } + return int(iter.ReadInt64()) +} + +// ReadInt8 read int8 +func (iter *Iterator) ReadInt8() (ret int8) { + c := iter.nextToken() + if c == '-' { + val := iter.readUint32(iter.readByte()) + if val > math.MaxInt8+1 { + iter.ReportError("ReadInt8", "overflow: "+strconv.FormatInt(int64(val), 10)) + return + } + return -int8(val) + } + val := iter.readUint32(c) + if val > math.MaxInt8 { + iter.ReportError("ReadInt8", "overflow: "+strconv.FormatInt(int64(val), 10)) + return + } + return int8(val) +} + +// ReadUint8 read uint8 +func (iter *Iterator) ReadUint8() (ret uint8) { + val := iter.readUint32(iter.nextToken()) + if val > math.MaxUint8 { + iter.ReportError("ReadUint8", "overflow: "+strconv.FormatInt(int64(val), 10)) + return + } + return uint8(val) +} + +// ReadInt16 read int16 +func (iter *Iterator) ReadInt16() (ret int16) { + c := iter.nextToken() + if c == '-' { + val := iter.readUint32(iter.readByte()) + if val > math.MaxInt16+1 { + iter.ReportError("ReadInt16", "overflow: "+strconv.FormatInt(int64(val), 10)) + return + } + return -int16(val) + } + val := iter.readUint32(c) + if val > math.MaxInt16 { + iter.ReportError("ReadInt16", "overflow: "+strconv.FormatInt(int64(val), 10)) + return + } + return int16(val) +} + +// ReadUint16 read uint16 +func (iter *Iterator) ReadUint16() (ret uint16) { + val := iter.readUint32(iter.nextToken()) + if val > math.MaxUint16 { + iter.ReportError("ReadUint16", "overflow: "+strconv.FormatInt(int64(val), 10)) + return + } + return uint16(val) +} + +// ReadInt32 read int32 +func (iter *Iterator) ReadInt32() (ret int32) { + c := iter.nextToken() + if c == '-' { + val := iter.readUint32(iter.readByte()) + if val > math.MaxInt32+1 { + iter.ReportError("ReadInt32", "overflow: "+strconv.FormatInt(int64(val), 10)) + return + } + return -int32(val) + } + val := iter.readUint32(c) + if val > math.MaxInt32 { + iter.ReportError("ReadInt32", "overflow: "+strconv.FormatInt(int64(val), 10)) + return + } + return int32(val) +} + +// ReadUint32 read uint32 +func (iter *Iterator) ReadUint32() (ret uint32) { + return iter.readUint32(iter.nextToken()) +} + +func (iter *Iterator) readUint32(c byte) (ret uint32) { + ind := intDigits[c] + if ind == 0 { + iter.assertInteger() + return 0 // single zero + } + if ind == invalidCharForNumber { + iter.ReportError("readUint32", "unexpected character: "+string([]byte{byte(ind)})) + return + } + value := uint32(ind) + if iter.tail-iter.head > 10 { + i := iter.head + ind2 := intDigits[iter.buf[i]] + if ind2 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value + } + i++ + ind3 := intDigits[iter.buf[i]] + if ind3 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*10 + uint32(ind2) + } + //iter.head = i + 1 + //value = value * 100 + uint32(ind2) * 10 + uint32(ind3) + i++ + ind4 := intDigits[iter.buf[i]] + if ind4 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*100 + uint32(ind2)*10 + uint32(ind3) + } + i++ + ind5 := intDigits[iter.buf[i]] + if ind5 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*1000 + uint32(ind2)*100 + uint32(ind3)*10 + uint32(ind4) + } + i++ + ind6 := intDigits[iter.buf[i]] + if ind6 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*10000 + uint32(ind2)*1000 + uint32(ind3)*100 + uint32(ind4)*10 + uint32(ind5) + } + i++ + ind7 := intDigits[iter.buf[i]] + if ind7 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*100000 + uint32(ind2)*10000 + uint32(ind3)*1000 + uint32(ind4)*100 + uint32(ind5)*10 + uint32(ind6) + } + i++ + ind8 := intDigits[iter.buf[i]] + if ind8 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*1000000 + uint32(ind2)*100000 + uint32(ind3)*10000 + uint32(ind4)*1000 + uint32(ind5)*100 + uint32(ind6)*10 + uint32(ind7) + } + i++ + ind9 := intDigits[iter.buf[i]] + value = value*10000000 + uint32(ind2)*1000000 + uint32(ind3)*100000 + uint32(ind4)*10000 + uint32(ind5)*1000 + uint32(ind6)*100 + uint32(ind7)*10 + uint32(ind8) + iter.head = i + if ind9 == invalidCharForNumber { + iter.assertInteger() + return value + } + } + for { + for i := iter.head; i < iter.tail; i++ { + ind = intDigits[iter.buf[i]] + if ind == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value + } + if value > uint32SafeToMultiply10 { + value2 := (value << 3) + (value << 1) + uint32(ind) + if value2 < value { + iter.ReportError("readUint32", "overflow") + return + } + value = value2 + continue + } + value = (value << 3) + (value << 1) + uint32(ind) + } + if !iter.loadMore() { + iter.assertInteger() + return value + } + } +} + +// ReadInt64 read int64 +func (iter *Iterator) ReadInt64() (ret int64) { + c := iter.nextToken() + if c == '-' { + val := iter.readUint64(iter.readByte()) + if val > math.MaxInt64+1 { + iter.ReportError("ReadInt64", "overflow: "+strconv.FormatUint(uint64(val), 10)) + return + } + return -int64(val) + } + val := iter.readUint64(c) + if val > math.MaxInt64 { + iter.ReportError("ReadInt64", "overflow: "+strconv.FormatUint(uint64(val), 10)) + return + } + return int64(val) +} + +// ReadUint64 read uint64 +func (iter *Iterator) ReadUint64() uint64 { + return iter.readUint64(iter.nextToken()) +} + +func (iter *Iterator) readUint64(c byte) (ret uint64) { + ind := intDigits[c] + if ind == 0 { + iter.assertInteger() + return 0 // single zero + } + if ind == invalidCharForNumber { + iter.ReportError("readUint64", "unexpected character: "+string([]byte{byte(ind)})) + return + } + value := uint64(ind) + if iter.tail-iter.head > 10 { + i := iter.head + ind2 := intDigits[iter.buf[i]] + if ind2 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value + } + i++ + ind3 := intDigits[iter.buf[i]] + if ind3 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*10 + uint64(ind2) + } + //iter.head = i + 1 + //value = value * 100 + uint32(ind2) * 10 + uint32(ind3) + i++ + ind4 := intDigits[iter.buf[i]] + if ind4 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*100 + uint64(ind2)*10 + uint64(ind3) + } + i++ + ind5 := intDigits[iter.buf[i]] + if ind5 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*1000 + uint64(ind2)*100 + uint64(ind3)*10 + uint64(ind4) + } + i++ + ind6 := intDigits[iter.buf[i]] + if ind6 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*10000 + uint64(ind2)*1000 + uint64(ind3)*100 + uint64(ind4)*10 + uint64(ind5) + } + i++ + ind7 := intDigits[iter.buf[i]] + if ind7 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*100000 + uint64(ind2)*10000 + uint64(ind3)*1000 + uint64(ind4)*100 + uint64(ind5)*10 + uint64(ind6) + } + i++ + ind8 := intDigits[iter.buf[i]] + if ind8 == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value*1000000 + uint64(ind2)*100000 + uint64(ind3)*10000 + uint64(ind4)*1000 + uint64(ind5)*100 + uint64(ind6)*10 + uint64(ind7) + } + i++ + ind9 := intDigits[iter.buf[i]] + value = value*10000000 + uint64(ind2)*1000000 + uint64(ind3)*100000 + uint64(ind4)*10000 + uint64(ind5)*1000 + uint64(ind6)*100 + uint64(ind7)*10 + uint64(ind8) + iter.head = i + if ind9 == invalidCharForNumber { + iter.assertInteger() + return value + } + } + for { + for i := iter.head; i < iter.tail; i++ { + ind = intDigits[iter.buf[i]] + if ind == invalidCharForNumber { + iter.head = i + iter.assertInteger() + return value + } + if value > uint64SafeToMultiple10 { + value2 := (value << 3) + (value << 1) + uint64(ind) + if value2 < value { + iter.ReportError("readUint64", "overflow") + return + } + value = value2 + continue + } + value = (value << 3) + (value << 1) + uint64(ind) + } + if !iter.loadMore() { + iter.assertInteger() + return value + } + } +} + +func (iter *Iterator) assertInteger() { + if iter.head < len(iter.buf) && iter.buf[iter.head] == '.' { + iter.ReportError("assertInteger", "can not decode float as int") + } +} diff --git a/vendor/github.com/json-iterator/go/iter_object.go b/vendor/github.com/json-iterator/go/iter_object.go new file mode 100644 index 0000000..58ee89c --- /dev/null +++ b/vendor/github.com/json-iterator/go/iter_object.go @@ -0,0 +1,267 @@ +package jsoniter + +import ( + "fmt" + "strings" +) + +// ReadObject read one field from object. +// If object ended, returns empty string. +// Otherwise, returns the field name. +func (iter *Iterator) ReadObject() (ret string) { + c := iter.nextToken() + switch c { + case 'n': + iter.skipThreeBytes('u', 'l', 'l') + return "" // null + case '{': + c = iter.nextToken() + if c == '"' { + iter.unreadByte() + field := iter.ReadString() + c = iter.nextToken() + if c != ':' { + iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) + } + return field + } + if c == '}' { + return "" // end of object + } + iter.ReportError("ReadObject", `expect " after {, but found `+string([]byte{c})) + return + case ',': + field := iter.ReadString() + c = iter.nextToken() + if c != ':' { + iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) + } + return field + case '}': + return "" // end of object + default: + iter.ReportError("ReadObject", fmt.Sprintf(`expect { or , or } or n, but found %s`, string([]byte{c}))) + return + } +} + +// CaseInsensitive +func (iter *Iterator) readFieldHash() int64 { + hash := int64(0x811c9dc5) + c := iter.nextToken() + if c != '"' { + iter.ReportError("readFieldHash", `expect ", but found `+string([]byte{c})) + return 0 + } + for { + for i := iter.head; i < iter.tail; i++ { + // require ascii string and no escape + b := iter.buf[i] + if b == '\\' { + iter.head = i + for _, b := range iter.readStringSlowPath() { + if 'A' <= b && b <= 'Z' && !iter.cfg.caseSensitive { + b += 'a' - 'A' + } + hash ^= int64(b) + hash *= 0x1000193 + } + c = iter.nextToken() + if c != ':' { + iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c})) + return 0 + } + return hash + } + if b == '"' { + iter.head = i + 1 + c = iter.nextToken() + if c != ':' { + iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c})) + return 0 + } + return hash + } + if 'A' <= b && b <= 'Z' && !iter.cfg.caseSensitive { + b += 'a' - 'A' + } + hash ^= int64(b) + hash *= 0x1000193 + } + if !iter.loadMore() { + iter.ReportError("readFieldHash", `incomplete field name`) + return 0 + } + } +} + +func calcHash(str string, caseSensitive bool) int64 { + if !caseSensitive { + str = strings.ToLower(str) + } + hash := int64(0x811c9dc5) + for _, b := range []byte(str) { + hash ^= int64(b) + hash *= 0x1000193 + } + return int64(hash) +} + +// ReadObjectCB read object with callback, the key is ascii only and field name not copied +func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool { + c := iter.nextToken() + var field string + if c == '{' { + if !iter.incrementDepth() { + return false + } + c = iter.nextToken() + if c == '"' { + iter.unreadByte() + field = iter.ReadString() + c = iter.nextToken() + if c != ':' { + iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) + } + if !callback(iter, field) { + iter.decrementDepth() + return false + } + c = iter.nextToken() + for c == ',' { + field = iter.ReadString() + c = iter.nextToken() + if c != ':' { + iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) + } + if !callback(iter, field) { + iter.decrementDepth() + return false + } + c = iter.nextToken() + } + if c != '}' { + iter.ReportError("ReadObjectCB", `object not ended with }`) + iter.decrementDepth() + return false + } + return iter.decrementDepth() + } + if c == '}' { + return iter.decrementDepth() + } + iter.ReportError("ReadObjectCB", `expect " after {, but found `+string([]byte{c})) + iter.decrementDepth() + return false + } + if c == 'n' { + iter.skipThreeBytes('u', 'l', 'l') + return true // null + } + iter.ReportError("ReadObjectCB", `expect { or n, but found `+string([]byte{c})) + return false +} + +// ReadMapCB read map with callback, the key can be any string +func (iter *Iterator) ReadMapCB(callback func(*Iterator, string) bool) bool { + c := iter.nextToken() + if c == '{' { + if !iter.incrementDepth() { + return false + } + c = iter.nextToken() + if c == '"' { + iter.unreadByte() + field := iter.ReadString() + if iter.nextToken() != ':' { + iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c})) + iter.decrementDepth() + return false + } + if !callback(iter, field) { + iter.decrementDepth() + return false + } + c = iter.nextToken() + for c == ',' { + field = iter.ReadString() + if iter.nextToken() != ':' { + iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c})) + iter.decrementDepth() + return false + } + if !callback(iter, field) { + iter.decrementDepth() + return false + } + c = iter.nextToken() + } + if c != '}' { + iter.ReportError("ReadMapCB", `object not ended with }`) + iter.decrementDepth() + return false + } + return iter.decrementDepth() + } + if c == '}' { + return iter.decrementDepth() + } + iter.ReportError("ReadMapCB", `expect " after {, but found `+string([]byte{c})) + iter.decrementDepth() + return false + } + if c == 'n' { + iter.skipThreeBytes('u', 'l', 'l') + return true // null + } + iter.ReportError("ReadMapCB", `expect { or n, but found `+string([]byte{c})) + return false +} + +func (iter *Iterator) readObjectStart() bool { + c := iter.nextToken() + if c == '{' { + c = iter.nextToken() + if c == '}' { + return false + } + iter.unreadByte() + return true + } else if c == 'n' { + iter.skipThreeBytes('u', 'l', 'l') + return false + } + iter.ReportError("readObjectStart", "expect { or n, but found "+string([]byte{c})) + return false +} + +func (iter *Iterator) readObjectFieldAsBytes() (ret []byte) { + str := iter.ReadStringAsSlice() + if iter.skipWhitespacesWithoutLoadMore() { + if ret == nil { + ret = make([]byte, len(str)) + copy(ret, str) + } + if !iter.loadMore() { + return + } + } + if iter.buf[iter.head] != ':' { + iter.ReportError("readObjectFieldAsBytes", "expect : after object field, but found "+string([]byte{iter.buf[iter.head]})) + return + } + iter.head++ + if iter.skipWhitespacesWithoutLoadMore() { + if ret == nil { + ret = make([]byte, len(str)) + copy(ret, str) + } + if !iter.loadMore() { + return + } + } + if ret == nil { + return str + } + return ret +} diff --git a/vendor/github.com/json-iterator/go/iter_skip.go b/vendor/github.com/json-iterator/go/iter_skip.go new file mode 100644 index 0000000..e91eefb --- /dev/null +++ b/vendor/github.com/json-iterator/go/iter_skip.go @@ -0,0 +1,130 @@ +package jsoniter + +import "fmt" + +// ReadNil reads a json object as nil and +// returns whether it's a nil or not +func (iter *Iterator) ReadNil() (ret bool) { + c := iter.nextToken() + if c == 'n' { + iter.skipThreeBytes('u', 'l', 'l') // null + return true + } + iter.unreadByte() + return false +} + +// ReadBool reads a json object as BoolValue +func (iter *Iterator) ReadBool() (ret bool) { + c := iter.nextToken() + if c == 't' { + iter.skipThreeBytes('r', 'u', 'e') + return true + } + if c == 'f' { + iter.skipFourBytes('a', 'l', 's', 'e') + return false + } + iter.ReportError("ReadBool", "expect t or f, but found "+string([]byte{c})) + return +} + +// SkipAndReturnBytes skip next JSON element, and return its content as []byte. +// The []byte can be kept, it is a copy of data. +func (iter *Iterator) SkipAndReturnBytes() []byte { + iter.startCapture(iter.head) + iter.Skip() + return iter.stopCapture() +} + +// SkipAndAppendBytes skips next JSON element and appends its content to +// buffer, returning the result. +func (iter *Iterator) SkipAndAppendBytes(buf []byte) []byte { + iter.startCaptureTo(buf, iter.head) + iter.Skip() + return iter.stopCapture() +} + +func (iter *Iterator) startCaptureTo(buf []byte, captureStartedAt int) { + if iter.captured != nil { + panic("already in capture mode") + } + iter.captureStartedAt = captureStartedAt + iter.captured = buf +} + +func (iter *Iterator) startCapture(captureStartedAt int) { + iter.startCaptureTo(make([]byte, 0, 32), captureStartedAt) +} + +func (iter *Iterator) stopCapture() []byte { + if iter.captured == nil { + panic("not in capture mode") + } + captured := iter.captured + remaining := iter.buf[iter.captureStartedAt:iter.head] + iter.captureStartedAt = -1 + iter.captured = nil + return append(captured, remaining...) +} + +// Skip skips a json object and positions to relatively the next json object +func (iter *Iterator) Skip() { + c := iter.nextToken() + switch c { + case '"': + iter.skipString() + case 'n': + iter.skipThreeBytes('u', 'l', 'l') // null + case 't': + iter.skipThreeBytes('r', 'u', 'e') // true + case 'f': + iter.skipFourBytes('a', 'l', 's', 'e') // false + case '0': + iter.unreadByte() + iter.ReadFloat32() + case '-', '1', '2', '3', '4', '5', '6', '7', '8', '9': + iter.skipNumber() + case '[': + iter.skipArray() + case '{': + iter.skipObject() + default: + iter.ReportError("Skip", fmt.Sprintf("do not know how to skip: %v", c)) + return + } +} + +func (iter *Iterator) skipFourBytes(b1, b2, b3, b4 byte) { + if iter.readByte() != b1 { + iter.ReportError("skipFourBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3, b4}))) + return + } + if iter.readByte() != b2 { + iter.ReportError("skipFourBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3, b4}))) + return + } + if iter.readByte() != b3 { + iter.ReportError("skipFourBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3, b4}))) + return + } + if iter.readByte() != b4 { + iter.ReportError("skipFourBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3, b4}))) + return + } +} + +func (iter *Iterator) skipThreeBytes(b1, b2, b3 byte) { + if iter.readByte() != b1 { + iter.ReportError("skipThreeBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3}))) + return + } + if iter.readByte() != b2 { + iter.ReportError("skipThreeBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3}))) + return + } + if iter.readByte() != b3 { + iter.ReportError("skipThreeBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3}))) + return + } +} diff --git a/vendor/github.com/json-iterator/go/iter_skip_sloppy.go b/vendor/github.com/json-iterator/go/iter_skip_sloppy.go new file mode 100644 index 0000000..9303de4 --- /dev/null +++ b/vendor/github.com/json-iterator/go/iter_skip_sloppy.go @@ -0,0 +1,163 @@ +//+build jsoniter_sloppy + +package jsoniter + +// sloppy but faster implementation, do not validate the input json + +func (iter *Iterator) skipNumber() { + for { + for i := iter.head; i < iter.tail; i++ { + c := iter.buf[i] + switch c { + case ' ', '\n', '\r', '\t', ',', '}', ']': + iter.head = i + return + } + } + if !iter.loadMore() { + return + } + } +} + +func (iter *Iterator) skipArray() { + level := 1 + if !iter.incrementDepth() { + return + } + for { + for i := iter.head; i < iter.tail; i++ { + switch iter.buf[i] { + case '"': // If inside string, skip it + iter.head = i + 1 + iter.skipString() + i = iter.head - 1 // it will be i++ soon + case '[': // If open symbol, increase level + level++ + if !iter.incrementDepth() { + return + } + case ']': // If close symbol, increase level + level-- + if !iter.decrementDepth() { + return + } + + // If we have returned to the original level, we're done + if level == 0 { + iter.head = i + 1 + return + } + } + } + if !iter.loadMore() { + iter.ReportError("skipObject", "incomplete array") + return + } + } +} + +func (iter *Iterator) skipObject() { + level := 1 + if !iter.incrementDepth() { + return + } + + for { + for i := iter.head; i < iter.tail; i++ { + switch iter.buf[i] { + case '"': // If inside string, skip it + iter.head = i + 1 + iter.skipString() + i = iter.head - 1 // it will be i++ soon + case '{': // If open symbol, increase level + level++ + if !iter.incrementDepth() { + return + } + case '}': // If close symbol, increase level + level-- + if !iter.decrementDepth() { + return + } + + // If we have returned to the original level, we're done + if level == 0 { + iter.head = i + 1 + return + } + } + } + if !iter.loadMore() { + iter.ReportError("skipObject", "incomplete object") + return + } + } +} + +func (iter *Iterator) skipString() { + for { + end, escaped := iter.findStringEnd() + if end == -1 { + if !iter.loadMore() { + iter.ReportError("skipString", "incomplete string") + return + } + if escaped { + iter.head = 1 // skip the first char as last char read is \ + } + } else { + iter.head = end + return + } + } +} + +// adapted from: https://github.com/buger/jsonparser/blob/master/parser.go +// Tries to find the end of string +// Support if string contains escaped quote symbols. +func (iter *Iterator) findStringEnd() (int, bool) { + escaped := false + for i := iter.head; i < iter.tail; i++ { + c := iter.buf[i] + if c == '"' { + if !escaped { + return i + 1, false + } + j := i - 1 + for { + if j < iter.head || iter.buf[j] != '\\' { + // even number of backslashes + // either end of buffer, or " found + return i + 1, true + } + j-- + if j < iter.head || iter.buf[j] != '\\' { + // odd number of backslashes + // it is \" or \\\" + break + } + j-- + } + } else if c == '\\' { + escaped = true + } + } + j := iter.tail - 1 + for { + if j < iter.head || iter.buf[j] != '\\' { + // even number of backslashes + // either end of buffer, or " found + return -1, false // do not end with \ + } + j-- + if j < iter.head || iter.buf[j] != '\\' { + // odd number of backslashes + // it is \" or \\\" + break + } + j-- + + } + return -1, true // end with \ +} diff --git a/vendor/github.com/json-iterator/go/iter_skip_strict.go b/vendor/github.com/json-iterator/go/iter_skip_strict.go new file mode 100644 index 0000000..6cf66d0 --- /dev/null +++ b/vendor/github.com/json-iterator/go/iter_skip_strict.go @@ -0,0 +1,99 @@ +//+build !jsoniter_sloppy + +package jsoniter + +import ( + "fmt" + "io" +) + +func (iter *Iterator) skipNumber() { + if !iter.trySkipNumber() { + iter.unreadByte() + if iter.Error != nil && iter.Error != io.EOF { + return + } + iter.ReadFloat64() + if iter.Error != nil && iter.Error != io.EOF { + iter.Error = nil + iter.ReadBigFloat() + } + } +} + +func (iter *Iterator) trySkipNumber() bool { + dotFound := false + for i := iter.head; i < iter.tail; i++ { + c := iter.buf[i] + switch c { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + case '.': + if dotFound { + iter.ReportError("validateNumber", `more than one dot found in number`) + return true // already failed + } + if i+1 == iter.tail { + return false + } + c = iter.buf[i+1] + switch c { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + default: + iter.ReportError("validateNumber", `missing digit after dot`) + return true // already failed + } + dotFound = true + default: + switch c { + case ',', ']', '}', ' ', '\t', '\n', '\r': + if iter.head == i { + return false // if - without following digits + } + iter.head = i + return true // must be valid + } + return false // may be invalid + } + } + return false +} + +func (iter *Iterator) skipString() { + if !iter.trySkipString() { + iter.unreadByte() + iter.ReadString() + } +} + +func (iter *Iterator) trySkipString() bool { + for i := iter.head; i < iter.tail; i++ { + c := iter.buf[i] + if c == '"' { + iter.head = i + 1 + return true // valid + } else if c == '\\' { + return false + } else if c < ' ' { + iter.ReportError("trySkipString", + fmt.Sprintf(`invalid control character found: %d`, c)) + return true // already failed + } + } + return false +} + +func (iter *Iterator) skipObject() { + iter.unreadByte() + iter.ReadObjectCB(func(iter *Iterator, field string) bool { + iter.Skip() + return true + }) +} + +func (iter *Iterator) skipArray() { + iter.unreadByte() + iter.ReadArrayCB(func(iter *Iterator) bool { + iter.Skip() + return true + }) +} diff --git a/vendor/github.com/json-iterator/go/iter_str.go b/vendor/github.com/json-iterator/go/iter_str.go new file mode 100644 index 0000000..adc487e --- /dev/null +++ b/vendor/github.com/json-iterator/go/iter_str.go @@ -0,0 +1,215 @@ +package jsoniter + +import ( + "fmt" + "unicode/utf16" +) + +// ReadString read string from iterator +func (iter *Iterator) ReadString() (ret string) { + c := iter.nextToken() + if c == '"' { + for i := iter.head; i < iter.tail; i++ { + c := iter.buf[i] + if c == '"' { + ret = string(iter.buf[iter.head:i]) + iter.head = i + 1 + return ret + } else if c == '\\' { + break + } else if c < ' ' { + iter.ReportError("ReadString", + fmt.Sprintf(`invalid control character found: %d`, c)) + return + } + } + return iter.readStringSlowPath() + } else if c == 'n' { + iter.skipThreeBytes('u', 'l', 'l') + return "" + } + iter.ReportError("ReadString", `expects " or n, but found `+string([]byte{c})) + return +} + +func (iter *Iterator) readStringSlowPath() (ret string) { + var str []byte + var c byte + for iter.Error == nil { + c = iter.readByte() + if c == '"' { + return string(str) + } + if c == '\\' { + c = iter.readByte() + str = iter.readEscapedChar(c, str) + } else { + str = append(str, c) + } + } + iter.ReportError("readStringSlowPath", "unexpected end of input") + return +} + +func (iter *Iterator) readEscapedChar(c byte, str []byte) []byte { + switch c { + case 'u': + r := iter.readU4() + if utf16.IsSurrogate(r) { + c = iter.readByte() + if iter.Error != nil { + return nil + } + if c != '\\' { + iter.unreadByte() + str = appendRune(str, r) + return str + } + c = iter.readByte() + if iter.Error != nil { + return nil + } + if c != 'u' { + str = appendRune(str, r) + return iter.readEscapedChar(c, str) + } + r2 := iter.readU4() + if iter.Error != nil { + return nil + } + combined := utf16.DecodeRune(r, r2) + if combined == '\uFFFD' { + str = appendRune(str, r) + str = appendRune(str, r2) + } else { + str = appendRune(str, combined) + } + } else { + str = appendRune(str, r) + } + case '"': + str = append(str, '"') + case '\\': + str = append(str, '\\') + case '/': + str = append(str, '/') + case 'b': + str = append(str, '\b') + case 'f': + str = append(str, '\f') + case 'n': + str = append(str, '\n') + case 'r': + str = append(str, '\r') + case 't': + str = append(str, '\t') + default: + iter.ReportError("readEscapedChar", + `invalid escape char after \`) + return nil + } + return str +} + +// ReadStringAsSlice read string from iterator without copying into string form. +// The []byte can not be kept, as it will change after next iterator call. +func (iter *Iterator) ReadStringAsSlice() (ret []byte) { + c := iter.nextToken() + if c == '"' { + for i := iter.head; i < iter.tail; i++ { + // require ascii string and no escape + // for: field name, base64, number + if iter.buf[i] == '"' { + // fast path: reuse the underlying buffer + ret = iter.buf[iter.head:i] + iter.head = i + 1 + return ret + } + } + readLen := iter.tail - iter.head + copied := make([]byte, readLen, readLen*2) + copy(copied, iter.buf[iter.head:iter.tail]) + iter.head = iter.tail + for iter.Error == nil { + c := iter.readByte() + if c == '"' { + return copied + } + copied = append(copied, c) + } + return copied + } + iter.ReportError("ReadStringAsSlice", `expects " or n, but found `+string([]byte{c})) + return +} + +func (iter *Iterator) readU4() (ret rune) { + for i := 0; i < 4; i++ { + c := iter.readByte() + if iter.Error != nil { + return + } + if c >= '0' && c <= '9' { + ret = ret*16 + rune(c-'0') + } else if c >= 'a' && c <= 'f' { + ret = ret*16 + rune(c-'a'+10) + } else if c >= 'A' && c <= 'F' { + ret = ret*16 + rune(c-'A'+10) + } else { + iter.ReportError("readU4", "expects 0~9 or a~f, but found "+string([]byte{c})) + return + } + } + return ret +} + +const ( + t1 = 0x00 // 0000 0000 + tx = 0x80 // 1000 0000 + t2 = 0xC0 // 1100 0000 + t3 = 0xE0 // 1110 0000 + t4 = 0xF0 // 1111 0000 + t5 = 0xF8 // 1111 1000 + + maskx = 0x3F // 0011 1111 + mask2 = 0x1F // 0001 1111 + mask3 = 0x0F // 0000 1111 + mask4 = 0x07 // 0000 0111 + + rune1Max = 1<<7 - 1 + rune2Max = 1<<11 - 1 + rune3Max = 1<<16 - 1 + + surrogateMin = 0xD800 + surrogateMax = 0xDFFF + + maxRune = '\U0010FFFF' // Maximum valid Unicode code point. + runeError = '\uFFFD' // the "error" Rune or "Unicode replacement character" +) + +func appendRune(p []byte, r rune) []byte { + // Negative values are erroneous. Making it unsigned addresses the problem. + switch i := uint32(r); { + case i <= rune1Max: + p = append(p, byte(r)) + return p + case i <= rune2Max: + p = append(p, t2|byte(r>>6)) + p = append(p, tx|byte(r)&maskx) + return p + case i > maxRune, surrogateMin <= i && i <= surrogateMax: + r = runeError + fallthrough + case i <= rune3Max: + p = append(p, t3|byte(r>>12)) + p = append(p, tx|byte(r>>6)&maskx) + p = append(p, tx|byte(r)&maskx) + return p + default: + p = append(p, t4|byte(r>>18)) + p = append(p, tx|byte(r>>12)&maskx) + p = append(p, tx|byte(r>>6)&maskx) + p = append(p, tx|byte(r)&maskx) + return p + } +} diff --git a/vendor/github.com/json-iterator/go/jsoniter.go b/vendor/github.com/json-iterator/go/jsoniter.go new file mode 100644 index 0000000..c2934f9 --- /dev/null +++ b/vendor/github.com/json-iterator/go/jsoniter.go @@ -0,0 +1,18 @@ +// Package jsoniter implements encoding and decoding of JSON as defined in +// RFC 4627 and provides interfaces with identical syntax of standard lib encoding/json. +// Converting from encoding/json to jsoniter is no more than replacing the package with jsoniter +// and variable type declarations (if any). +// jsoniter interfaces gives 100% compatibility with code using standard lib. +// +// "JSON and Go" +// (https://golang.org/doc/articles/json_and_go.html) +// gives a description of how Marshal/Unmarshal operate +// between arbitrary or predefined json objects and bytes, +// and it applies to jsoniter.Marshal/Unmarshal as well. +// +// Besides, jsoniter.Iterator provides a different set of interfaces +// iterating given bytes/string/reader +// and yielding parsed elements one by one. +// This set of interfaces reads input as required and gives +// better performance. +package jsoniter diff --git a/vendor/github.com/json-iterator/go/pool.go b/vendor/github.com/json-iterator/go/pool.go new file mode 100644 index 0000000..e2389b5 --- /dev/null +++ b/vendor/github.com/json-iterator/go/pool.go @@ -0,0 +1,42 @@ +package jsoniter + +import ( + "io" +) + +// IteratorPool a thread safe pool of iterators with same configuration +type IteratorPool interface { + BorrowIterator(data []byte) *Iterator + ReturnIterator(iter *Iterator) +} + +// StreamPool a thread safe pool of streams with same configuration +type StreamPool interface { + BorrowStream(writer io.Writer) *Stream + ReturnStream(stream *Stream) +} + +func (cfg *frozenConfig) BorrowStream(writer io.Writer) *Stream { + stream := cfg.streamPool.Get().(*Stream) + stream.Reset(writer) + return stream +} + +func (cfg *frozenConfig) ReturnStream(stream *Stream) { + stream.out = nil + stream.Error = nil + stream.Attachment = nil + cfg.streamPool.Put(stream) +} + +func (cfg *frozenConfig) BorrowIterator(data []byte) *Iterator { + iter := cfg.iteratorPool.Get().(*Iterator) + iter.ResetBytes(data) + return iter +} + +func (cfg *frozenConfig) ReturnIterator(iter *Iterator) { + iter.Error = nil + iter.Attachment = nil + cfg.iteratorPool.Put(iter) +} diff --git a/vendor/github.com/json-iterator/go/reflect.go b/vendor/github.com/json-iterator/go/reflect.go new file mode 100644 index 0000000..74974ba --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect.go @@ -0,0 +1,337 @@ +package jsoniter + +import ( + "fmt" + "reflect" + "unsafe" + + "github.com/modern-go/reflect2" +) + +// ValDecoder is an internal type registered to cache as needed. +// Don't confuse jsoniter.ValDecoder with json.Decoder. +// For json.Decoder's adapter, refer to jsoniter.AdapterDecoder(todo link). +// +// Reflection on type to create decoders, which is then cached +// Reflection on value is avoided as we can, as the reflect.Value itself will allocate, with following exceptions +// 1. create instance of new value, for example *int will need a int to be allocated +// 2. append to slice, if the existing cap is not enough, allocate will be done using Reflect.New +// 3. assignment to map, both key and value will be reflect.Value +// For a simple struct binding, it will be reflect.Value free and allocation free +type ValDecoder interface { + Decode(ptr unsafe.Pointer, iter *Iterator) +} + +// ValEncoder is an internal type registered to cache as needed. +// Don't confuse jsoniter.ValEncoder with json.Encoder. +// For json.Encoder's adapter, refer to jsoniter.AdapterEncoder(todo godoc link). +type ValEncoder interface { + IsEmpty(ptr unsafe.Pointer) bool + Encode(ptr unsafe.Pointer, stream *Stream) +} + +type checkIsEmpty interface { + IsEmpty(ptr unsafe.Pointer) bool +} + +type ctx struct { + *frozenConfig + prefix string + encoders map[reflect2.Type]ValEncoder + decoders map[reflect2.Type]ValDecoder +} + +func (b *ctx) caseSensitive() bool { + if b.frozenConfig == nil { + // default is case-insensitive + return false + } + return b.frozenConfig.caseSensitive +} + +func (b *ctx) append(prefix string) *ctx { + return &ctx{ + frozenConfig: b.frozenConfig, + prefix: b.prefix + " " + prefix, + encoders: b.encoders, + decoders: b.decoders, + } +} + +// ReadVal copy the underlying JSON into go interface, same as json.Unmarshal +func (iter *Iterator) ReadVal(obj interface{}) { + depth := iter.depth + cacheKey := reflect2.RTypeOf(obj) + decoder := iter.cfg.getDecoderFromCache(cacheKey) + if decoder == nil { + typ := reflect2.TypeOf(obj) + if typ.Kind() != reflect.Ptr { + iter.ReportError("ReadVal", "can only unmarshal into pointer") + return + } + decoder = iter.cfg.DecoderOf(typ) + } + ptr := reflect2.PtrOf(obj) + if ptr == nil { + iter.ReportError("ReadVal", "can not read into nil pointer") + return + } + decoder.Decode(ptr, iter) + if iter.depth != depth { + iter.ReportError("ReadVal", "unexpected mismatched nesting") + return + } +} + +// WriteVal copy the go interface into underlying JSON, same as json.Marshal +func (stream *Stream) WriteVal(val interface{}) { + if nil == val { + stream.WriteNil() + return + } + cacheKey := reflect2.RTypeOf(val) + encoder := stream.cfg.getEncoderFromCache(cacheKey) + if encoder == nil { + typ := reflect2.TypeOf(val) + encoder = stream.cfg.EncoderOf(typ) + } + encoder.Encode(reflect2.PtrOf(val), stream) +} + +func (cfg *frozenConfig) DecoderOf(typ reflect2.Type) ValDecoder { + cacheKey := typ.RType() + decoder := cfg.getDecoderFromCache(cacheKey) + if decoder != nil { + return decoder + } + ctx := &ctx{ + frozenConfig: cfg, + prefix: "", + decoders: map[reflect2.Type]ValDecoder{}, + encoders: map[reflect2.Type]ValEncoder{}, + } + ptrType := typ.(*reflect2.UnsafePtrType) + decoder = decoderOfType(ctx, ptrType.Elem()) + cfg.addDecoderToCache(cacheKey, decoder) + return decoder +} + +func decoderOfType(ctx *ctx, typ reflect2.Type) ValDecoder { + decoder := getTypeDecoderFromExtension(ctx, typ) + if decoder != nil { + return decoder + } + decoder = createDecoderOfType(ctx, typ) + for _, extension := range extensions { + decoder = extension.DecorateDecoder(typ, decoder) + } + decoder = ctx.decoderExtension.DecorateDecoder(typ, decoder) + for _, extension := range ctx.extraExtensions { + decoder = extension.DecorateDecoder(typ, decoder) + } + return decoder +} + +func createDecoderOfType(ctx *ctx, typ reflect2.Type) ValDecoder { + decoder := ctx.decoders[typ] + if decoder != nil { + return decoder + } + placeholder := &placeholderDecoder{} + ctx.decoders[typ] = placeholder + decoder = _createDecoderOfType(ctx, typ) + placeholder.decoder = decoder + return decoder +} + +func _createDecoderOfType(ctx *ctx, typ reflect2.Type) ValDecoder { + decoder := createDecoderOfJsonRawMessage(ctx, typ) + if decoder != nil { + return decoder + } + decoder = createDecoderOfJsonNumber(ctx, typ) + if decoder != nil { + return decoder + } + decoder = createDecoderOfMarshaler(ctx, typ) + if decoder != nil { + return decoder + } + decoder = createDecoderOfAny(ctx, typ) + if decoder != nil { + return decoder + } + decoder = createDecoderOfNative(ctx, typ) + if decoder != nil { + return decoder + } + switch typ.Kind() { + case reflect.Interface: + ifaceType, isIFace := typ.(*reflect2.UnsafeIFaceType) + if isIFace { + return &ifaceDecoder{valType: ifaceType} + } + return &efaceDecoder{} + case reflect.Struct: + return decoderOfStruct(ctx, typ) + case reflect.Array: + return decoderOfArray(ctx, typ) + case reflect.Slice: + return decoderOfSlice(ctx, typ) + case reflect.Map: + return decoderOfMap(ctx, typ) + case reflect.Ptr: + return decoderOfOptional(ctx, typ) + default: + return &lazyErrorDecoder{err: fmt.Errorf("%s%s is unsupported type", ctx.prefix, typ.String())} + } +} + +func (cfg *frozenConfig) EncoderOf(typ reflect2.Type) ValEncoder { + cacheKey := typ.RType() + encoder := cfg.getEncoderFromCache(cacheKey) + if encoder != nil { + return encoder + } + ctx := &ctx{ + frozenConfig: cfg, + prefix: "", + decoders: map[reflect2.Type]ValDecoder{}, + encoders: map[reflect2.Type]ValEncoder{}, + } + encoder = encoderOfType(ctx, typ) + if typ.LikePtr() { + encoder = &onePtrEncoder{encoder} + } + cfg.addEncoderToCache(cacheKey, encoder) + return encoder +} + +type onePtrEncoder struct { + encoder ValEncoder +} + +func (encoder *onePtrEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.encoder.IsEmpty(unsafe.Pointer(&ptr)) +} + +func (encoder *onePtrEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + encoder.encoder.Encode(unsafe.Pointer(&ptr), stream) +} + +func encoderOfType(ctx *ctx, typ reflect2.Type) ValEncoder { + encoder := getTypeEncoderFromExtension(ctx, typ) + if encoder != nil { + return encoder + } + encoder = createEncoderOfType(ctx, typ) + for _, extension := range extensions { + encoder = extension.DecorateEncoder(typ, encoder) + } + encoder = ctx.encoderExtension.DecorateEncoder(typ, encoder) + for _, extension := range ctx.extraExtensions { + encoder = extension.DecorateEncoder(typ, encoder) + } + return encoder +} + +func createEncoderOfType(ctx *ctx, typ reflect2.Type) ValEncoder { + encoder := ctx.encoders[typ] + if encoder != nil { + return encoder + } + placeholder := &placeholderEncoder{} + ctx.encoders[typ] = placeholder + encoder = _createEncoderOfType(ctx, typ) + placeholder.encoder = encoder + return encoder +} +func _createEncoderOfType(ctx *ctx, typ reflect2.Type) ValEncoder { + encoder := createEncoderOfJsonRawMessage(ctx, typ) + if encoder != nil { + return encoder + } + encoder = createEncoderOfJsonNumber(ctx, typ) + if encoder != nil { + return encoder + } + encoder = createEncoderOfMarshaler(ctx, typ) + if encoder != nil { + return encoder + } + encoder = createEncoderOfAny(ctx, typ) + if encoder != nil { + return encoder + } + encoder = createEncoderOfNative(ctx, typ) + if encoder != nil { + return encoder + } + kind := typ.Kind() + switch kind { + case reflect.Interface: + return &dynamicEncoder{typ} + case reflect.Struct: + return encoderOfStruct(ctx, typ) + case reflect.Array: + return encoderOfArray(ctx, typ) + case reflect.Slice: + return encoderOfSlice(ctx, typ) + case reflect.Map: + return encoderOfMap(ctx, typ) + case reflect.Ptr: + return encoderOfOptional(ctx, typ) + default: + return &lazyErrorEncoder{err: fmt.Errorf("%s%s is unsupported type", ctx.prefix, typ.String())} + } +} + +type lazyErrorDecoder struct { + err error +} + +func (decoder *lazyErrorDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if iter.WhatIsNext() != NilValue { + if iter.Error == nil { + iter.Error = decoder.err + } + } else { + iter.Skip() + } +} + +type lazyErrorEncoder struct { + err error +} + +func (encoder *lazyErrorEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + if ptr == nil { + stream.WriteNil() + } else if stream.Error == nil { + stream.Error = encoder.err + } +} + +func (encoder *lazyErrorEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return false +} + +type placeholderDecoder struct { + decoder ValDecoder +} + +func (decoder *placeholderDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + decoder.decoder.Decode(ptr, iter) +} + +type placeholderEncoder struct { + encoder ValEncoder +} + +func (encoder *placeholderEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + encoder.encoder.Encode(ptr, stream) +} + +func (encoder *placeholderEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.encoder.IsEmpty(ptr) +} diff --git a/vendor/github.com/json-iterator/go/reflect_array.go b/vendor/github.com/json-iterator/go/reflect_array.go new file mode 100644 index 0000000..13a0b7b --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_array.go @@ -0,0 +1,104 @@ +package jsoniter + +import ( + "fmt" + "github.com/modern-go/reflect2" + "io" + "unsafe" +) + +func decoderOfArray(ctx *ctx, typ reflect2.Type) ValDecoder { + arrayType := typ.(*reflect2.UnsafeArrayType) + decoder := decoderOfType(ctx.append("[arrayElem]"), arrayType.Elem()) + return &arrayDecoder{arrayType, decoder} +} + +func encoderOfArray(ctx *ctx, typ reflect2.Type) ValEncoder { + arrayType := typ.(*reflect2.UnsafeArrayType) + if arrayType.Len() == 0 { + return emptyArrayEncoder{} + } + encoder := encoderOfType(ctx.append("[arrayElem]"), arrayType.Elem()) + return &arrayEncoder{arrayType, encoder} +} + +type emptyArrayEncoder struct{} + +func (encoder emptyArrayEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteEmptyArray() +} + +func (encoder emptyArrayEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return true +} + +type arrayEncoder struct { + arrayType *reflect2.UnsafeArrayType + elemEncoder ValEncoder +} + +func (encoder *arrayEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteArrayStart() + elemPtr := unsafe.Pointer(ptr) + encoder.elemEncoder.Encode(elemPtr, stream) + for i := 1; i < encoder.arrayType.Len(); i++ { + stream.WriteMore() + elemPtr = encoder.arrayType.UnsafeGetIndex(ptr, i) + encoder.elemEncoder.Encode(elemPtr, stream) + } + stream.WriteArrayEnd() + if stream.Error != nil && stream.Error != io.EOF { + stream.Error = fmt.Errorf("%v: %s", encoder.arrayType, stream.Error.Error()) + } +} + +func (encoder *arrayEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return false +} + +type arrayDecoder struct { + arrayType *reflect2.UnsafeArrayType + elemDecoder ValDecoder +} + +func (decoder *arrayDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + decoder.doDecode(ptr, iter) + if iter.Error != nil && iter.Error != io.EOF { + iter.Error = fmt.Errorf("%v: %s", decoder.arrayType, iter.Error.Error()) + } +} + +func (decoder *arrayDecoder) doDecode(ptr unsafe.Pointer, iter *Iterator) { + c := iter.nextToken() + arrayType := decoder.arrayType + if c == 'n' { + iter.skipThreeBytes('u', 'l', 'l') + return + } + if c != '[' { + iter.ReportError("decode array", "expect [ or n, but found "+string([]byte{c})) + return + } + c = iter.nextToken() + if c == ']' { + return + } + iter.unreadByte() + elemPtr := arrayType.UnsafeGetIndex(ptr, 0) + decoder.elemDecoder.Decode(elemPtr, iter) + length := 1 + for c = iter.nextToken(); c == ','; c = iter.nextToken() { + if length >= arrayType.Len() { + iter.Skip() + continue + } + idx := length + length += 1 + elemPtr = arrayType.UnsafeGetIndex(ptr, idx) + decoder.elemDecoder.Decode(elemPtr, iter) + } + if c != ']' { + iter.ReportError("decode array", "expect ], but found "+string([]byte{c})) + return + } +} diff --git a/vendor/github.com/json-iterator/go/reflect_dynamic.go b/vendor/github.com/json-iterator/go/reflect_dynamic.go new file mode 100644 index 0000000..8b6bc8b --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_dynamic.go @@ -0,0 +1,70 @@ +package jsoniter + +import ( + "github.com/modern-go/reflect2" + "reflect" + "unsafe" +) + +type dynamicEncoder struct { + valType reflect2.Type +} + +func (encoder *dynamicEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + obj := encoder.valType.UnsafeIndirect(ptr) + stream.WriteVal(obj) +} + +func (encoder *dynamicEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.valType.UnsafeIndirect(ptr) == nil +} + +type efaceDecoder struct { +} + +func (decoder *efaceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + pObj := (*interface{})(ptr) + obj := *pObj + if obj == nil { + *pObj = iter.Read() + return + } + typ := reflect2.TypeOf(obj) + if typ.Kind() != reflect.Ptr { + *pObj = iter.Read() + return + } + ptrType := typ.(*reflect2.UnsafePtrType) + ptrElemType := ptrType.Elem() + if iter.WhatIsNext() == NilValue { + if ptrElemType.Kind() != reflect.Ptr { + iter.skipFourBytes('n', 'u', 'l', 'l') + *pObj = nil + return + } + } + if reflect2.IsNil(obj) { + obj := ptrElemType.New() + iter.ReadVal(obj) + *pObj = obj + return + } + iter.ReadVal(obj) +} + +type ifaceDecoder struct { + valType *reflect2.UnsafeIFaceType +} + +func (decoder *ifaceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if iter.ReadNil() { + decoder.valType.UnsafeSet(ptr, decoder.valType.UnsafeNew()) + return + } + obj := decoder.valType.UnsafeIndirect(ptr) + if reflect2.IsNil(obj) { + iter.ReportError("decode non empty interface", "can not unmarshal into nil") + return + } + iter.ReadVal(obj) +} diff --git a/vendor/github.com/json-iterator/go/reflect_extension.go b/vendor/github.com/json-iterator/go/reflect_extension.go new file mode 100644 index 0000000..74a97bf --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_extension.go @@ -0,0 +1,483 @@ +package jsoniter + +import ( + "fmt" + "github.com/modern-go/reflect2" + "reflect" + "sort" + "strings" + "unicode" + "unsafe" +) + +var typeDecoders = map[string]ValDecoder{} +var fieldDecoders = map[string]ValDecoder{} +var typeEncoders = map[string]ValEncoder{} +var fieldEncoders = map[string]ValEncoder{} +var extensions = []Extension{} + +// StructDescriptor describe how should we encode/decode the struct +type StructDescriptor struct { + Type reflect2.Type + Fields []*Binding +} + +// GetField get one field from the descriptor by its name. +// Can not use map here to keep field orders. +func (structDescriptor *StructDescriptor) GetField(fieldName string) *Binding { + for _, binding := range structDescriptor.Fields { + if binding.Field.Name() == fieldName { + return binding + } + } + return nil +} + +// Binding describe how should we encode/decode the struct field +type Binding struct { + levels []int + Field reflect2.StructField + FromNames []string + ToNames []string + Encoder ValEncoder + Decoder ValDecoder +} + +// Extension the one for all SPI. Customize encoding/decoding by specifying alternate encoder/decoder. +// Can also rename fields by UpdateStructDescriptor. +type Extension interface { + UpdateStructDescriptor(structDescriptor *StructDescriptor) + CreateMapKeyDecoder(typ reflect2.Type) ValDecoder + CreateMapKeyEncoder(typ reflect2.Type) ValEncoder + CreateDecoder(typ reflect2.Type) ValDecoder + CreateEncoder(typ reflect2.Type) ValEncoder + DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder + DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder +} + +// DummyExtension embed this type get dummy implementation for all methods of Extension +type DummyExtension struct { +} + +// UpdateStructDescriptor No-op +func (extension *DummyExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) { +} + +// CreateMapKeyDecoder No-op +func (extension *DummyExtension) CreateMapKeyDecoder(typ reflect2.Type) ValDecoder { + return nil +} + +// CreateMapKeyEncoder No-op +func (extension *DummyExtension) CreateMapKeyEncoder(typ reflect2.Type) ValEncoder { + return nil +} + +// CreateDecoder No-op +func (extension *DummyExtension) CreateDecoder(typ reflect2.Type) ValDecoder { + return nil +} + +// CreateEncoder No-op +func (extension *DummyExtension) CreateEncoder(typ reflect2.Type) ValEncoder { + return nil +} + +// DecorateDecoder No-op +func (extension *DummyExtension) DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder { + return decoder +} + +// DecorateEncoder No-op +func (extension *DummyExtension) DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder { + return encoder +} + +type EncoderExtension map[reflect2.Type]ValEncoder + +// UpdateStructDescriptor No-op +func (extension EncoderExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) { +} + +// CreateDecoder No-op +func (extension EncoderExtension) CreateDecoder(typ reflect2.Type) ValDecoder { + return nil +} + +// CreateEncoder get encoder from map +func (extension EncoderExtension) CreateEncoder(typ reflect2.Type) ValEncoder { + return extension[typ] +} + +// CreateMapKeyDecoder No-op +func (extension EncoderExtension) CreateMapKeyDecoder(typ reflect2.Type) ValDecoder { + return nil +} + +// CreateMapKeyEncoder No-op +func (extension EncoderExtension) CreateMapKeyEncoder(typ reflect2.Type) ValEncoder { + return nil +} + +// DecorateDecoder No-op +func (extension EncoderExtension) DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder { + return decoder +} + +// DecorateEncoder No-op +func (extension EncoderExtension) DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder { + return encoder +} + +type DecoderExtension map[reflect2.Type]ValDecoder + +// UpdateStructDescriptor No-op +func (extension DecoderExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) { +} + +// CreateMapKeyDecoder No-op +func (extension DecoderExtension) CreateMapKeyDecoder(typ reflect2.Type) ValDecoder { + return nil +} + +// CreateMapKeyEncoder No-op +func (extension DecoderExtension) CreateMapKeyEncoder(typ reflect2.Type) ValEncoder { + return nil +} + +// CreateDecoder get decoder from map +func (extension DecoderExtension) CreateDecoder(typ reflect2.Type) ValDecoder { + return extension[typ] +} + +// CreateEncoder No-op +func (extension DecoderExtension) CreateEncoder(typ reflect2.Type) ValEncoder { + return nil +} + +// DecorateDecoder No-op +func (extension DecoderExtension) DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder { + return decoder +} + +// DecorateEncoder No-op +func (extension DecoderExtension) DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder { + return encoder +} + +type funcDecoder struct { + fun DecoderFunc +} + +func (decoder *funcDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + decoder.fun(ptr, iter) +} + +type funcEncoder struct { + fun EncoderFunc + isEmptyFunc func(ptr unsafe.Pointer) bool +} + +func (encoder *funcEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + encoder.fun(ptr, stream) +} + +func (encoder *funcEncoder) IsEmpty(ptr unsafe.Pointer) bool { + if encoder.isEmptyFunc == nil { + return false + } + return encoder.isEmptyFunc(ptr) +} + +// DecoderFunc the function form of TypeDecoder +type DecoderFunc func(ptr unsafe.Pointer, iter *Iterator) + +// EncoderFunc the function form of TypeEncoder +type EncoderFunc func(ptr unsafe.Pointer, stream *Stream) + +// RegisterTypeDecoderFunc register TypeDecoder for a type with function +func RegisterTypeDecoderFunc(typ string, fun DecoderFunc) { + typeDecoders[typ] = &funcDecoder{fun} +} + +// RegisterTypeDecoder register TypeDecoder for a typ +func RegisterTypeDecoder(typ string, decoder ValDecoder) { + typeDecoders[typ] = decoder +} + +// RegisterFieldDecoderFunc register TypeDecoder for a struct field with function +func RegisterFieldDecoderFunc(typ string, field string, fun DecoderFunc) { + RegisterFieldDecoder(typ, field, &funcDecoder{fun}) +} + +// RegisterFieldDecoder register TypeDecoder for a struct field +func RegisterFieldDecoder(typ string, field string, decoder ValDecoder) { + fieldDecoders[fmt.Sprintf("%s/%s", typ, field)] = decoder +} + +// RegisterTypeEncoderFunc register TypeEncoder for a type with encode/isEmpty function +func RegisterTypeEncoderFunc(typ string, fun EncoderFunc, isEmptyFunc func(unsafe.Pointer) bool) { + typeEncoders[typ] = &funcEncoder{fun, isEmptyFunc} +} + +// RegisterTypeEncoder register TypeEncoder for a type +func RegisterTypeEncoder(typ string, encoder ValEncoder) { + typeEncoders[typ] = encoder +} + +// RegisterFieldEncoderFunc register TypeEncoder for a struct field with encode/isEmpty function +func RegisterFieldEncoderFunc(typ string, field string, fun EncoderFunc, isEmptyFunc func(unsafe.Pointer) bool) { + RegisterFieldEncoder(typ, field, &funcEncoder{fun, isEmptyFunc}) +} + +// RegisterFieldEncoder register TypeEncoder for a struct field +func RegisterFieldEncoder(typ string, field string, encoder ValEncoder) { + fieldEncoders[fmt.Sprintf("%s/%s", typ, field)] = encoder +} + +// RegisterExtension register extension +func RegisterExtension(extension Extension) { + extensions = append(extensions, extension) +} + +func getTypeDecoderFromExtension(ctx *ctx, typ reflect2.Type) ValDecoder { + decoder := _getTypeDecoderFromExtension(ctx, typ) + if decoder != nil { + for _, extension := range extensions { + decoder = extension.DecorateDecoder(typ, decoder) + } + decoder = ctx.decoderExtension.DecorateDecoder(typ, decoder) + for _, extension := range ctx.extraExtensions { + decoder = extension.DecorateDecoder(typ, decoder) + } + } + return decoder +} +func _getTypeDecoderFromExtension(ctx *ctx, typ reflect2.Type) ValDecoder { + for _, extension := range extensions { + decoder := extension.CreateDecoder(typ) + if decoder != nil { + return decoder + } + } + decoder := ctx.decoderExtension.CreateDecoder(typ) + if decoder != nil { + return decoder + } + for _, extension := range ctx.extraExtensions { + decoder := extension.CreateDecoder(typ) + if decoder != nil { + return decoder + } + } + typeName := typ.String() + decoder = typeDecoders[typeName] + if decoder != nil { + return decoder + } + if typ.Kind() == reflect.Ptr { + ptrType := typ.(*reflect2.UnsafePtrType) + decoder := typeDecoders[ptrType.Elem().String()] + if decoder != nil { + return &OptionalDecoder{ptrType.Elem(), decoder} + } + } + return nil +} + +func getTypeEncoderFromExtension(ctx *ctx, typ reflect2.Type) ValEncoder { + encoder := _getTypeEncoderFromExtension(ctx, typ) + if encoder != nil { + for _, extension := range extensions { + encoder = extension.DecorateEncoder(typ, encoder) + } + encoder = ctx.encoderExtension.DecorateEncoder(typ, encoder) + for _, extension := range ctx.extraExtensions { + encoder = extension.DecorateEncoder(typ, encoder) + } + } + return encoder +} + +func _getTypeEncoderFromExtension(ctx *ctx, typ reflect2.Type) ValEncoder { + for _, extension := range extensions { + encoder := extension.CreateEncoder(typ) + if encoder != nil { + return encoder + } + } + encoder := ctx.encoderExtension.CreateEncoder(typ) + if encoder != nil { + return encoder + } + for _, extension := range ctx.extraExtensions { + encoder := extension.CreateEncoder(typ) + if encoder != nil { + return encoder + } + } + typeName := typ.String() + encoder = typeEncoders[typeName] + if encoder != nil { + return encoder + } + if typ.Kind() == reflect.Ptr { + typePtr := typ.(*reflect2.UnsafePtrType) + encoder := typeEncoders[typePtr.Elem().String()] + if encoder != nil { + return &OptionalEncoder{encoder} + } + } + return nil +} + +func describeStruct(ctx *ctx, typ reflect2.Type) *StructDescriptor { + structType := typ.(*reflect2.UnsafeStructType) + embeddedBindings := []*Binding{} + bindings := []*Binding{} + for i := 0; i < structType.NumField(); i++ { + field := structType.Field(i) + tag, hastag := field.Tag().Lookup(ctx.getTagKey()) + if ctx.onlyTaggedField && !hastag && !field.Anonymous() { + continue + } + if tag == "-" || field.Name() == "_" { + continue + } + tagParts := strings.Split(tag, ",") + if field.Anonymous() && (tag == "" || tagParts[0] == "") { + if field.Type().Kind() == reflect.Struct { + structDescriptor := describeStruct(ctx, field.Type()) + for _, binding := range structDescriptor.Fields { + binding.levels = append([]int{i}, binding.levels...) + omitempty := binding.Encoder.(*structFieldEncoder).omitempty + binding.Encoder = &structFieldEncoder{field, binding.Encoder, omitempty} + binding.Decoder = &structFieldDecoder{field, binding.Decoder} + embeddedBindings = append(embeddedBindings, binding) + } + continue + } else if field.Type().Kind() == reflect.Ptr { + ptrType := field.Type().(*reflect2.UnsafePtrType) + if ptrType.Elem().Kind() == reflect.Struct { + structDescriptor := describeStruct(ctx, ptrType.Elem()) + for _, binding := range structDescriptor.Fields { + binding.levels = append([]int{i}, binding.levels...) + omitempty := binding.Encoder.(*structFieldEncoder).omitempty + binding.Encoder = &dereferenceEncoder{binding.Encoder} + binding.Encoder = &structFieldEncoder{field, binding.Encoder, omitempty} + binding.Decoder = &dereferenceDecoder{ptrType.Elem(), binding.Decoder} + binding.Decoder = &structFieldDecoder{field, binding.Decoder} + embeddedBindings = append(embeddedBindings, binding) + } + continue + } + } + } + fieldNames := calcFieldNames(field.Name(), tagParts[0], tag) + fieldCacheKey := fmt.Sprintf("%s/%s", typ.String(), field.Name()) + decoder := fieldDecoders[fieldCacheKey] + if decoder == nil { + decoder = decoderOfType(ctx.append(field.Name()), field.Type()) + } + encoder := fieldEncoders[fieldCacheKey] + if encoder == nil { + encoder = encoderOfType(ctx.append(field.Name()), field.Type()) + } + binding := &Binding{ + Field: field, + FromNames: fieldNames, + ToNames: fieldNames, + Decoder: decoder, + Encoder: encoder, + } + binding.levels = []int{i} + bindings = append(bindings, binding) + } + return createStructDescriptor(ctx, typ, bindings, embeddedBindings) +} +func createStructDescriptor(ctx *ctx, typ reflect2.Type, bindings []*Binding, embeddedBindings []*Binding) *StructDescriptor { + structDescriptor := &StructDescriptor{ + Type: typ, + Fields: bindings, + } + for _, extension := range extensions { + extension.UpdateStructDescriptor(structDescriptor) + } + ctx.encoderExtension.UpdateStructDescriptor(structDescriptor) + ctx.decoderExtension.UpdateStructDescriptor(structDescriptor) + for _, extension := range ctx.extraExtensions { + extension.UpdateStructDescriptor(structDescriptor) + } + processTags(structDescriptor, ctx.frozenConfig) + // merge normal & embedded bindings & sort with original order + allBindings := sortableBindings(append(embeddedBindings, structDescriptor.Fields...)) + sort.Sort(allBindings) + structDescriptor.Fields = allBindings + return structDescriptor +} + +type sortableBindings []*Binding + +func (bindings sortableBindings) Len() int { + return len(bindings) +} + +func (bindings sortableBindings) Less(i, j int) bool { + left := bindings[i].levels + right := bindings[j].levels + k := 0 + for { + if left[k] < right[k] { + return true + } else if left[k] > right[k] { + return false + } + k++ + } +} + +func (bindings sortableBindings) Swap(i, j int) { + bindings[i], bindings[j] = bindings[j], bindings[i] +} + +func processTags(structDescriptor *StructDescriptor, cfg *frozenConfig) { + for _, binding := range structDescriptor.Fields { + shouldOmitEmpty := false + tagParts := strings.Split(binding.Field.Tag().Get(cfg.getTagKey()), ",") + for _, tagPart := range tagParts[1:] { + if tagPart == "omitempty" { + shouldOmitEmpty = true + } else if tagPart == "string" { + if binding.Field.Type().Kind() == reflect.String { + binding.Decoder = &stringModeStringDecoder{binding.Decoder, cfg} + binding.Encoder = &stringModeStringEncoder{binding.Encoder, cfg} + } else { + binding.Decoder = &stringModeNumberDecoder{binding.Decoder} + binding.Encoder = &stringModeNumberEncoder{binding.Encoder} + } + } + } + binding.Decoder = &structFieldDecoder{binding.Field, binding.Decoder} + binding.Encoder = &structFieldEncoder{binding.Field, binding.Encoder, shouldOmitEmpty} + } +} + +func calcFieldNames(originalFieldName string, tagProvidedFieldName string, wholeTag string) []string { + // ignore? + if wholeTag == "-" { + return []string{} + } + // rename? + var fieldNames []string + if tagProvidedFieldName == "" { + fieldNames = []string{originalFieldName} + } else { + fieldNames = []string{tagProvidedFieldName} + } + // private? + isNotExported := unicode.IsLower(rune(originalFieldName[0])) || originalFieldName[0] == '_' + if isNotExported { + fieldNames = []string{} + } + return fieldNames +} diff --git a/vendor/github.com/json-iterator/go/reflect_json_number.go b/vendor/github.com/json-iterator/go/reflect_json_number.go new file mode 100644 index 0000000..98d45c1 --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_json_number.go @@ -0,0 +1,112 @@ +package jsoniter + +import ( + "encoding/json" + "github.com/modern-go/reflect2" + "strconv" + "unsafe" +) + +type Number string + +// String returns the literal text of the number. +func (n Number) String() string { return string(n) } + +// Float64 returns the number as a float64. +func (n Number) Float64() (float64, error) { + return strconv.ParseFloat(string(n), 64) +} + +// Int64 returns the number as an int64. +func (n Number) Int64() (int64, error) { + return strconv.ParseInt(string(n), 10, 64) +} + +func CastJsonNumber(val interface{}) (string, bool) { + switch typedVal := val.(type) { + case json.Number: + return string(typedVal), true + case Number: + return string(typedVal), true + } + return "", false +} + +var jsonNumberType = reflect2.TypeOfPtr((*json.Number)(nil)).Elem() +var jsoniterNumberType = reflect2.TypeOfPtr((*Number)(nil)).Elem() + +func createDecoderOfJsonNumber(ctx *ctx, typ reflect2.Type) ValDecoder { + if typ.AssignableTo(jsonNumberType) { + return &jsonNumberCodec{} + } + if typ.AssignableTo(jsoniterNumberType) { + return &jsoniterNumberCodec{} + } + return nil +} + +func createEncoderOfJsonNumber(ctx *ctx, typ reflect2.Type) ValEncoder { + if typ.AssignableTo(jsonNumberType) { + return &jsonNumberCodec{} + } + if typ.AssignableTo(jsoniterNumberType) { + return &jsoniterNumberCodec{} + } + return nil +} + +type jsonNumberCodec struct { +} + +func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { + switch iter.WhatIsNext() { + case StringValue: + *((*json.Number)(ptr)) = json.Number(iter.ReadString()) + case NilValue: + iter.skipFourBytes('n', 'u', 'l', 'l') + *((*json.Number)(ptr)) = "" + default: + *((*json.Number)(ptr)) = json.Number([]byte(iter.readNumberAsString())) + } +} + +func (codec *jsonNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) { + number := *((*json.Number)(ptr)) + if len(number) == 0 { + stream.writeByte('0') + } else { + stream.WriteRaw(string(number)) + } +} + +func (codec *jsonNumberCodec) IsEmpty(ptr unsafe.Pointer) bool { + return len(*((*json.Number)(ptr))) == 0 +} + +type jsoniterNumberCodec struct { +} + +func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { + switch iter.WhatIsNext() { + case StringValue: + *((*Number)(ptr)) = Number(iter.ReadString()) + case NilValue: + iter.skipFourBytes('n', 'u', 'l', 'l') + *((*Number)(ptr)) = "" + default: + *((*Number)(ptr)) = Number([]byte(iter.readNumberAsString())) + } +} + +func (codec *jsoniterNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) { + number := *((*Number)(ptr)) + if len(number) == 0 { + stream.writeByte('0') + } else { + stream.WriteRaw(string(number)) + } +} + +func (codec *jsoniterNumberCodec) IsEmpty(ptr unsafe.Pointer) bool { + return len(*((*Number)(ptr))) == 0 +} diff --git a/vendor/github.com/json-iterator/go/reflect_json_raw_message.go b/vendor/github.com/json-iterator/go/reflect_json_raw_message.go new file mode 100644 index 0000000..f261993 --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_json_raw_message.go @@ -0,0 +1,60 @@ +package jsoniter + +import ( + "encoding/json" + "github.com/modern-go/reflect2" + "unsafe" +) + +var jsonRawMessageType = reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem() +var jsoniterRawMessageType = reflect2.TypeOfPtr((*RawMessage)(nil)).Elem() + +func createEncoderOfJsonRawMessage(ctx *ctx, typ reflect2.Type) ValEncoder { + if typ == jsonRawMessageType { + return &jsonRawMessageCodec{} + } + if typ == jsoniterRawMessageType { + return &jsoniterRawMessageCodec{} + } + return nil +} + +func createDecoderOfJsonRawMessage(ctx *ctx, typ reflect2.Type) ValDecoder { + if typ == jsonRawMessageType { + return &jsonRawMessageCodec{} + } + if typ == jsoniterRawMessageType { + return &jsoniterRawMessageCodec{} + } + return nil +} + +type jsonRawMessageCodec struct { +} + +func (codec *jsonRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { + *((*json.RawMessage)(ptr)) = json.RawMessage(iter.SkipAndReturnBytes()) +} + +func (codec *jsonRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteRaw(string(*((*json.RawMessage)(ptr)))) +} + +func (codec *jsonRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool { + return len(*((*json.RawMessage)(ptr))) == 0 +} + +type jsoniterRawMessageCodec struct { +} + +func (codec *jsoniterRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { + *((*RawMessage)(ptr)) = RawMessage(iter.SkipAndReturnBytes()) +} + +func (codec *jsoniterRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteRaw(string(*((*RawMessage)(ptr)))) +} + +func (codec *jsoniterRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool { + return len(*((*RawMessage)(ptr))) == 0 +} diff --git a/vendor/github.com/json-iterator/go/reflect_map.go b/vendor/github.com/json-iterator/go/reflect_map.go new file mode 100644 index 0000000..5829671 --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_map.go @@ -0,0 +1,346 @@ +package jsoniter + +import ( + "fmt" + "github.com/modern-go/reflect2" + "io" + "reflect" + "sort" + "unsafe" +) + +func decoderOfMap(ctx *ctx, typ reflect2.Type) ValDecoder { + mapType := typ.(*reflect2.UnsafeMapType) + keyDecoder := decoderOfMapKey(ctx.append("[mapKey]"), mapType.Key()) + elemDecoder := decoderOfType(ctx.append("[mapElem]"), mapType.Elem()) + return &mapDecoder{ + mapType: mapType, + keyType: mapType.Key(), + elemType: mapType.Elem(), + keyDecoder: keyDecoder, + elemDecoder: elemDecoder, + } +} + +func encoderOfMap(ctx *ctx, typ reflect2.Type) ValEncoder { + mapType := typ.(*reflect2.UnsafeMapType) + if ctx.sortMapKeys { + return &sortKeysMapEncoder{ + mapType: mapType, + keyEncoder: encoderOfMapKey(ctx.append("[mapKey]"), mapType.Key()), + elemEncoder: encoderOfType(ctx.append("[mapElem]"), mapType.Elem()), + } + } + return &mapEncoder{ + mapType: mapType, + keyEncoder: encoderOfMapKey(ctx.append("[mapKey]"), mapType.Key()), + elemEncoder: encoderOfType(ctx.append("[mapElem]"), mapType.Elem()), + } +} + +func decoderOfMapKey(ctx *ctx, typ reflect2.Type) ValDecoder { + decoder := ctx.decoderExtension.CreateMapKeyDecoder(typ) + if decoder != nil { + return decoder + } + for _, extension := range ctx.extraExtensions { + decoder := extension.CreateMapKeyDecoder(typ) + if decoder != nil { + return decoder + } + } + + ptrType := reflect2.PtrTo(typ) + if ptrType.Implements(unmarshalerType) { + return &referenceDecoder{ + &unmarshalerDecoder{ + valType: ptrType, + }, + } + } + if typ.Implements(unmarshalerType) { + return &unmarshalerDecoder{ + valType: typ, + } + } + if ptrType.Implements(textUnmarshalerType) { + return &referenceDecoder{ + &textUnmarshalerDecoder{ + valType: ptrType, + }, + } + } + if typ.Implements(textUnmarshalerType) { + return &textUnmarshalerDecoder{ + valType: typ, + } + } + + switch typ.Kind() { + case reflect.String: + return decoderOfType(ctx, reflect2.DefaultTypeOfKind(reflect.String)) + case reflect.Bool, + reflect.Uint8, reflect.Int8, + reflect.Uint16, reflect.Int16, + reflect.Uint32, reflect.Int32, + reflect.Uint64, reflect.Int64, + reflect.Uint, reflect.Int, + reflect.Float32, reflect.Float64, + reflect.Uintptr: + typ = reflect2.DefaultTypeOfKind(typ.Kind()) + return &numericMapKeyDecoder{decoderOfType(ctx, typ)} + default: + return &lazyErrorDecoder{err: fmt.Errorf("unsupported map key type: %v", typ)} + } +} + +func encoderOfMapKey(ctx *ctx, typ reflect2.Type) ValEncoder { + encoder := ctx.encoderExtension.CreateMapKeyEncoder(typ) + if encoder != nil { + return encoder + } + for _, extension := range ctx.extraExtensions { + encoder := extension.CreateMapKeyEncoder(typ) + if encoder != nil { + return encoder + } + } + + if typ == textMarshalerType { + return &directTextMarshalerEncoder{ + stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")), + } + } + if typ.Implements(textMarshalerType) { + return &textMarshalerEncoder{ + valType: typ, + stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")), + } + } + + switch typ.Kind() { + case reflect.String: + return encoderOfType(ctx, reflect2.DefaultTypeOfKind(reflect.String)) + case reflect.Bool, + reflect.Uint8, reflect.Int8, + reflect.Uint16, reflect.Int16, + reflect.Uint32, reflect.Int32, + reflect.Uint64, reflect.Int64, + reflect.Uint, reflect.Int, + reflect.Float32, reflect.Float64, + reflect.Uintptr: + typ = reflect2.DefaultTypeOfKind(typ.Kind()) + return &numericMapKeyEncoder{encoderOfType(ctx, typ)} + default: + if typ.Kind() == reflect.Interface { + return &dynamicMapKeyEncoder{ctx, typ} + } + return &lazyErrorEncoder{err: fmt.Errorf("unsupported map key type: %v", typ)} + } +} + +type mapDecoder struct { + mapType *reflect2.UnsafeMapType + keyType reflect2.Type + elemType reflect2.Type + keyDecoder ValDecoder + elemDecoder ValDecoder +} + +func (decoder *mapDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + mapType := decoder.mapType + c := iter.nextToken() + if c == 'n' { + iter.skipThreeBytes('u', 'l', 'l') + *(*unsafe.Pointer)(ptr) = nil + mapType.UnsafeSet(ptr, mapType.UnsafeNew()) + return + } + if mapType.UnsafeIsNil(ptr) { + mapType.UnsafeSet(ptr, mapType.UnsafeMakeMap(0)) + } + if c != '{' { + iter.ReportError("ReadMapCB", `expect { or n, but found `+string([]byte{c})) + return + } + c = iter.nextToken() + if c == '}' { + return + } + iter.unreadByte() + key := decoder.keyType.UnsafeNew() + decoder.keyDecoder.Decode(key, iter) + c = iter.nextToken() + if c != ':' { + iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c})) + return + } + elem := decoder.elemType.UnsafeNew() + decoder.elemDecoder.Decode(elem, iter) + decoder.mapType.UnsafeSetIndex(ptr, key, elem) + for c = iter.nextToken(); c == ','; c = iter.nextToken() { + key := decoder.keyType.UnsafeNew() + decoder.keyDecoder.Decode(key, iter) + c = iter.nextToken() + if c != ':' { + iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c})) + return + } + elem := decoder.elemType.UnsafeNew() + decoder.elemDecoder.Decode(elem, iter) + decoder.mapType.UnsafeSetIndex(ptr, key, elem) + } + if c != '}' { + iter.ReportError("ReadMapCB", `expect }, but found `+string([]byte{c})) + } +} + +type numericMapKeyDecoder struct { + decoder ValDecoder +} + +func (decoder *numericMapKeyDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + c := iter.nextToken() + if c != '"' { + iter.ReportError("ReadMapCB", `expect ", but found `+string([]byte{c})) + return + } + decoder.decoder.Decode(ptr, iter) + c = iter.nextToken() + if c != '"' { + iter.ReportError("ReadMapCB", `expect ", but found `+string([]byte{c})) + return + } +} + +type numericMapKeyEncoder struct { + encoder ValEncoder +} + +func (encoder *numericMapKeyEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.writeByte('"') + encoder.encoder.Encode(ptr, stream) + stream.writeByte('"') +} + +func (encoder *numericMapKeyEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return false +} + +type dynamicMapKeyEncoder struct { + ctx *ctx + valType reflect2.Type +} + +func (encoder *dynamicMapKeyEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + obj := encoder.valType.UnsafeIndirect(ptr) + encoderOfMapKey(encoder.ctx, reflect2.TypeOf(obj)).Encode(reflect2.PtrOf(obj), stream) +} + +func (encoder *dynamicMapKeyEncoder) IsEmpty(ptr unsafe.Pointer) bool { + obj := encoder.valType.UnsafeIndirect(ptr) + return encoderOfMapKey(encoder.ctx, reflect2.TypeOf(obj)).IsEmpty(reflect2.PtrOf(obj)) +} + +type mapEncoder struct { + mapType *reflect2.UnsafeMapType + keyEncoder ValEncoder + elemEncoder ValEncoder +} + +func (encoder *mapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + if *(*unsafe.Pointer)(ptr) == nil { + stream.WriteNil() + return + } + stream.WriteObjectStart() + iter := encoder.mapType.UnsafeIterate(ptr) + for i := 0; iter.HasNext(); i++ { + if i != 0 { + stream.WriteMore() + } + key, elem := iter.UnsafeNext() + encoder.keyEncoder.Encode(key, stream) + if stream.indention > 0 { + stream.writeTwoBytes(byte(':'), byte(' ')) + } else { + stream.writeByte(':') + } + encoder.elemEncoder.Encode(elem, stream) + } + stream.WriteObjectEnd() +} + +func (encoder *mapEncoder) IsEmpty(ptr unsafe.Pointer) bool { + iter := encoder.mapType.UnsafeIterate(ptr) + return !iter.HasNext() +} + +type sortKeysMapEncoder struct { + mapType *reflect2.UnsafeMapType + keyEncoder ValEncoder + elemEncoder ValEncoder +} + +func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + if *(*unsafe.Pointer)(ptr) == nil { + stream.WriteNil() + return + } + stream.WriteObjectStart() + mapIter := encoder.mapType.UnsafeIterate(ptr) + subStream := stream.cfg.BorrowStream(nil) + subStream.Attachment = stream.Attachment + subIter := stream.cfg.BorrowIterator(nil) + keyValues := encodedKeyValues{} + for mapIter.HasNext() { + key, elem := mapIter.UnsafeNext() + subStreamIndex := subStream.Buffered() + encoder.keyEncoder.Encode(key, subStream) + if subStream.Error != nil && subStream.Error != io.EOF && stream.Error == nil { + stream.Error = subStream.Error + } + encodedKey := subStream.Buffer()[subStreamIndex:] + subIter.ResetBytes(encodedKey) + decodedKey := subIter.ReadString() + if stream.indention > 0 { + subStream.writeTwoBytes(byte(':'), byte(' ')) + } else { + subStream.writeByte(':') + } + encoder.elemEncoder.Encode(elem, subStream) + keyValues = append(keyValues, encodedKV{ + key: decodedKey, + keyValue: subStream.Buffer()[subStreamIndex:], + }) + } + sort.Sort(keyValues) + for i, keyValue := range keyValues { + if i != 0 { + stream.WriteMore() + } + stream.Write(keyValue.keyValue) + } + if subStream.Error != nil && stream.Error == nil { + stream.Error = subStream.Error + } + stream.WriteObjectEnd() + stream.cfg.ReturnStream(subStream) + stream.cfg.ReturnIterator(subIter) +} + +func (encoder *sortKeysMapEncoder) IsEmpty(ptr unsafe.Pointer) bool { + iter := encoder.mapType.UnsafeIterate(ptr) + return !iter.HasNext() +} + +type encodedKeyValues []encodedKV + +type encodedKV struct { + key string + keyValue []byte +} + +func (sv encodedKeyValues) Len() int { return len(sv) } +func (sv encodedKeyValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] } +func (sv encodedKeyValues) Less(i, j int) bool { return sv[i].key < sv[j].key } diff --git a/vendor/github.com/json-iterator/go/reflect_marshaler.go b/vendor/github.com/json-iterator/go/reflect_marshaler.go new file mode 100644 index 0000000..3e21f37 --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_marshaler.go @@ -0,0 +1,225 @@ +package jsoniter + +import ( + "encoding" + "encoding/json" + "unsafe" + + "github.com/modern-go/reflect2" +) + +var marshalerType = reflect2.TypeOfPtr((*json.Marshaler)(nil)).Elem() +var unmarshalerType = reflect2.TypeOfPtr((*json.Unmarshaler)(nil)).Elem() +var textMarshalerType = reflect2.TypeOfPtr((*encoding.TextMarshaler)(nil)).Elem() +var textUnmarshalerType = reflect2.TypeOfPtr((*encoding.TextUnmarshaler)(nil)).Elem() + +func createDecoderOfMarshaler(ctx *ctx, typ reflect2.Type) ValDecoder { + ptrType := reflect2.PtrTo(typ) + if ptrType.Implements(unmarshalerType) { + return &referenceDecoder{ + &unmarshalerDecoder{ptrType}, + } + } + if ptrType.Implements(textUnmarshalerType) { + return &referenceDecoder{ + &textUnmarshalerDecoder{ptrType}, + } + } + return nil +} + +func createEncoderOfMarshaler(ctx *ctx, typ reflect2.Type) ValEncoder { + if typ == marshalerType { + checkIsEmpty := createCheckIsEmpty(ctx, typ) + var encoder ValEncoder = &directMarshalerEncoder{ + checkIsEmpty: checkIsEmpty, + } + return encoder + } + if typ.Implements(marshalerType) { + checkIsEmpty := createCheckIsEmpty(ctx, typ) + var encoder ValEncoder = &marshalerEncoder{ + valType: typ, + checkIsEmpty: checkIsEmpty, + } + return encoder + } + ptrType := reflect2.PtrTo(typ) + if ctx.prefix != "" && ptrType.Implements(marshalerType) { + checkIsEmpty := createCheckIsEmpty(ctx, ptrType) + var encoder ValEncoder = &marshalerEncoder{ + valType: ptrType, + checkIsEmpty: checkIsEmpty, + } + return &referenceEncoder{encoder} + } + if typ == textMarshalerType { + checkIsEmpty := createCheckIsEmpty(ctx, typ) + var encoder ValEncoder = &directTextMarshalerEncoder{ + checkIsEmpty: checkIsEmpty, + stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")), + } + return encoder + } + if typ.Implements(textMarshalerType) { + checkIsEmpty := createCheckIsEmpty(ctx, typ) + var encoder ValEncoder = &textMarshalerEncoder{ + valType: typ, + stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")), + checkIsEmpty: checkIsEmpty, + } + return encoder + } + // if prefix is empty, the type is the root type + if ctx.prefix != "" && ptrType.Implements(textMarshalerType) { + checkIsEmpty := createCheckIsEmpty(ctx, ptrType) + var encoder ValEncoder = &textMarshalerEncoder{ + valType: ptrType, + stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")), + checkIsEmpty: checkIsEmpty, + } + return &referenceEncoder{encoder} + } + return nil +} + +type marshalerEncoder struct { + checkIsEmpty checkIsEmpty + valType reflect2.Type +} + +func (encoder *marshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + obj := encoder.valType.UnsafeIndirect(ptr) + if encoder.valType.IsNullable() && reflect2.IsNil(obj) { + stream.WriteNil() + return + } + marshaler := obj.(json.Marshaler) + bytes, err := marshaler.MarshalJSON() + if err != nil { + stream.Error = err + } else { + // html escape was already done by jsoniter + // but the extra '\n' should be trimed + l := len(bytes) + if l > 0 && bytes[l-1] == '\n' { + bytes = bytes[:l-1] + } + stream.Write(bytes) + } +} + +func (encoder *marshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.checkIsEmpty.IsEmpty(ptr) +} + +type directMarshalerEncoder struct { + checkIsEmpty checkIsEmpty +} + +func (encoder *directMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + marshaler := *(*json.Marshaler)(ptr) + if marshaler == nil { + stream.WriteNil() + return + } + bytes, err := marshaler.MarshalJSON() + if err != nil { + stream.Error = err + } else { + stream.Write(bytes) + } +} + +func (encoder *directMarshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.checkIsEmpty.IsEmpty(ptr) +} + +type textMarshalerEncoder struct { + valType reflect2.Type + stringEncoder ValEncoder + checkIsEmpty checkIsEmpty +} + +func (encoder *textMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + obj := encoder.valType.UnsafeIndirect(ptr) + if encoder.valType.IsNullable() && reflect2.IsNil(obj) { + stream.WriteNil() + return + } + marshaler := (obj).(encoding.TextMarshaler) + bytes, err := marshaler.MarshalText() + if err != nil { + stream.Error = err + } else { + str := string(bytes) + encoder.stringEncoder.Encode(unsafe.Pointer(&str), stream) + } +} + +func (encoder *textMarshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.checkIsEmpty.IsEmpty(ptr) +} + +type directTextMarshalerEncoder struct { + stringEncoder ValEncoder + checkIsEmpty checkIsEmpty +} + +func (encoder *directTextMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + marshaler := *(*encoding.TextMarshaler)(ptr) + if marshaler == nil { + stream.WriteNil() + return + } + bytes, err := marshaler.MarshalText() + if err != nil { + stream.Error = err + } else { + str := string(bytes) + encoder.stringEncoder.Encode(unsafe.Pointer(&str), stream) + } +} + +func (encoder *directTextMarshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.checkIsEmpty.IsEmpty(ptr) +} + +type unmarshalerDecoder struct { + valType reflect2.Type +} + +func (decoder *unmarshalerDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + valType := decoder.valType + obj := valType.UnsafeIndirect(ptr) + unmarshaler := obj.(json.Unmarshaler) + iter.nextToken() + iter.unreadByte() // skip spaces + bytes := iter.SkipAndReturnBytes() + err := unmarshaler.UnmarshalJSON(bytes) + if err != nil { + iter.ReportError("unmarshalerDecoder", err.Error()) + } +} + +type textUnmarshalerDecoder struct { + valType reflect2.Type +} + +func (decoder *textUnmarshalerDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + valType := decoder.valType + obj := valType.UnsafeIndirect(ptr) + if reflect2.IsNil(obj) { + ptrType := valType.(*reflect2.UnsafePtrType) + elemType := ptrType.Elem() + elem := elemType.UnsafeNew() + ptrType.UnsafeSet(ptr, unsafe.Pointer(&elem)) + obj = valType.UnsafeIndirect(ptr) + } + unmarshaler := (obj).(encoding.TextUnmarshaler) + str := iter.ReadString() + err := unmarshaler.UnmarshalText([]byte(str)) + if err != nil { + iter.ReportError("textUnmarshalerDecoder", err.Error()) + } +} diff --git a/vendor/github.com/json-iterator/go/reflect_native.go b/vendor/github.com/json-iterator/go/reflect_native.go new file mode 100644 index 0000000..f88722d --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_native.go @@ -0,0 +1,453 @@ +package jsoniter + +import ( + "encoding/base64" + "reflect" + "strconv" + "unsafe" + + "github.com/modern-go/reflect2" +) + +const ptrSize = 32 << uintptr(^uintptr(0)>>63) + +func createEncoderOfNative(ctx *ctx, typ reflect2.Type) ValEncoder { + if typ.Kind() == reflect.Slice && typ.(reflect2.SliceType).Elem().Kind() == reflect.Uint8 { + sliceDecoder := decoderOfSlice(ctx, typ) + return &base64Codec{sliceDecoder: sliceDecoder} + } + typeName := typ.String() + kind := typ.Kind() + switch kind { + case reflect.String: + if typeName != "string" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*string)(nil)).Elem()) + } + return &stringCodec{} + case reflect.Int: + if typeName != "int" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*int)(nil)).Elem()) + } + if strconv.IntSize == 32 { + return &int32Codec{} + } + return &int64Codec{} + case reflect.Int8: + if typeName != "int8" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*int8)(nil)).Elem()) + } + return &int8Codec{} + case reflect.Int16: + if typeName != "int16" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*int16)(nil)).Elem()) + } + return &int16Codec{} + case reflect.Int32: + if typeName != "int32" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*int32)(nil)).Elem()) + } + return &int32Codec{} + case reflect.Int64: + if typeName != "int64" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*int64)(nil)).Elem()) + } + return &int64Codec{} + case reflect.Uint: + if typeName != "uint" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*uint)(nil)).Elem()) + } + if strconv.IntSize == 32 { + return &uint32Codec{} + } + return &uint64Codec{} + case reflect.Uint8: + if typeName != "uint8" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*uint8)(nil)).Elem()) + } + return &uint8Codec{} + case reflect.Uint16: + if typeName != "uint16" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*uint16)(nil)).Elem()) + } + return &uint16Codec{} + case reflect.Uint32: + if typeName != "uint32" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*uint32)(nil)).Elem()) + } + return &uint32Codec{} + case reflect.Uintptr: + if typeName != "uintptr" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*uintptr)(nil)).Elem()) + } + if ptrSize == 32 { + return &uint32Codec{} + } + return &uint64Codec{} + case reflect.Uint64: + if typeName != "uint64" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*uint64)(nil)).Elem()) + } + return &uint64Codec{} + case reflect.Float32: + if typeName != "float32" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*float32)(nil)).Elem()) + } + return &float32Codec{} + case reflect.Float64: + if typeName != "float64" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*float64)(nil)).Elem()) + } + return &float64Codec{} + case reflect.Bool: + if typeName != "bool" { + return encoderOfType(ctx, reflect2.TypeOfPtr((*bool)(nil)).Elem()) + } + return &boolCodec{} + } + return nil +} + +func createDecoderOfNative(ctx *ctx, typ reflect2.Type) ValDecoder { + if typ.Kind() == reflect.Slice && typ.(reflect2.SliceType).Elem().Kind() == reflect.Uint8 { + sliceDecoder := decoderOfSlice(ctx, typ) + return &base64Codec{sliceDecoder: sliceDecoder} + } + typeName := typ.String() + switch typ.Kind() { + case reflect.String: + if typeName != "string" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*string)(nil)).Elem()) + } + return &stringCodec{} + case reflect.Int: + if typeName != "int" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*int)(nil)).Elem()) + } + if strconv.IntSize == 32 { + return &int32Codec{} + } + return &int64Codec{} + case reflect.Int8: + if typeName != "int8" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*int8)(nil)).Elem()) + } + return &int8Codec{} + case reflect.Int16: + if typeName != "int16" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*int16)(nil)).Elem()) + } + return &int16Codec{} + case reflect.Int32: + if typeName != "int32" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*int32)(nil)).Elem()) + } + return &int32Codec{} + case reflect.Int64: + if typeName != "int64" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*int64)(nil)).Elem()) + } + return &int64Codec{} + case reflect.Uint: + if typeName != "uint" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*uint)(nil)).Elem()) + } + if strconv.IntSize == 32 { + return &uint32Codec{} + } + return &uint64Codec{} + case reflect.Uint8: + if typeName != "uint8" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*uint8)(nil)).Elem()) + } + return &uint8Codec{} + case reflect.Uint16: + if typeName != "uint16" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*uint16)(nil)).Elem()) + } + return &uint16Codec{} + case reflect.Uint32: + if typeName != "uint32" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*uint32)(nil)).Elem()) + } + return &uint32Codec{} + case reflect.Uintptr: + if typeName != "uintptr" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*uintptr)(nil)).Elem()) + } + if ptrSize == 32 { + return &uint32Codec{} + } + return &uint64Codec{} + case reflect.Uint64: + if typeName != "uint64" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*uint64)(nil)).Elem()) + } + return &uint64Codec{} + case reflect.Float32: + if typeName != "float32" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*float32)(nil)).Elem()) + } + return &float32Codec{} + case reflect.Float64: + if typeName != "float64" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*float64)(nil)).Elem()) + } + return &float64Codec{} + case reflect.Bool: + if typeName != "bool" { + return decoderOfType(ctx, reflect2.TypeOfPtr((*bool)(nil)).Elem()) + } + return &boolCodec{} + } + return nil +} + +type stringCodec struct { +} + +func (codec *stringCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { + *((*string)(ptr)) = iter.ReadString() +} + +func (codec *stringCodec) Encode(ptr unsafe.Pointer, stream *Stream) { + str := *((*string)(ptr)) + stream.WriteString(str) +} + +func (codec *stringCodec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*string)(ptr)) == "" +} + +type int8Codec struct { +} + +func (codec *int8Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*int8)(ptr)) = iter.ReadInt8() + } +} + +func (codec *int8Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteInt8(*((*int8)(ptr))) +} + +func (codec *int8Codec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*int8)(ptr)) == 0 +} + +type int16Codec struct { +} + +func (codec *int16Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*int16)(ptr)) = iter.ReadInt16() + } +} + +func (codec *int16Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteInt16(*((*int16)(ptr))) +} + +func (codec *int16Codec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*int16)(ptr)) == 0 +} + +type int32Codec struct { +} + +func (codec *int32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*int32)(ptr)) = iter.ReadInt32() + } +} + +func (codec *int32Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteInt32(*((*int32)(ptr))) +} + +func (codec *int32Codec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*int32)(ptr)) == 0 +} + +type int64Codec struct { +} + +func (codec *int64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*int64)(ptr)) = iter.ReadInt64() + } +} + +func (codec *int64Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteInt64(*((*int64)(ptr))) +} + +func (codec *int64Codec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*int64)(ptr)) == 0 +} + +type uint8Codec struct { +} + +func (codec *uint8Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*uint8)(ptr)) = iter.ReadUint8() + } +} + +func (codec *uint8Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteUint8(*((*uint8)(ptr))) +} + +func (codec *uint8Codec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*uint8)(ptr)) == 0 +} + +type uint16Codec struct { +} + +func (codec *uint16Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*uint16)(ptr)) = iter.ReadUint16() + } +} + +func (codec *uint16Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteUint16(*((*uint16)(ptr))) +} + +func (codec *uint16Codec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*uint16)(ptr)) == 0 +} + +type uint32Codec struct { +} + +func (codec *uint32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*uint32)(ptr)) = iter.ReadUint32() + } +} + +func (codec *uint32Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteUint32(*((*uint32)(ptr))) +} + +func (codec *uint32Codec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*uint32)(ptr)) == 0 +} + +type uint64Codec struct { +} + +func (codec *uint64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*uint64)(ptr)) = iter.ReadUint64() + } +} + +func (codec *uint64Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteUint64(*((*uint64)(ptr))) +} + +func (codec *uint64Codec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*uint64)(ptr)) == 0 +} + +type float32Codec struct { +} + +func (codec *float32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*float32)(ptr)) = iter.ReadFloat32() + } +} + +func (codec *float32Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteFloat32(*((*float32)(ptr))) +} + +func (codec *float32Codec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*float32)(ptr)) == 0 +} + +type float64Codec struct { +} + +func (codec *float64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*float64)(ptr)) = iter.ReadFloat64() + } +} + +func (codec *float64Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteFloat64(*((*float64)(ptr))) +} + +func (codec *float64Codec) IsEmpty(ptr unsafe.Pointer) bool { + return *((*float64)(ptr)) == 0 +} + +type boolCodec struct { +} + +func (codec *boolCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.ReadNil() { + *((*bool)(ptr)) = iter.ReadBool() + } +} + +func (codec *boolCodec) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteBool(*((*bool)(ptr))) +} + +func (codec *boolCodec) IsEmpty(ptr unsafe.Pointer) bool { + return !(*((*bool)(ptr))) +} + +type base64Codec struct { + sliceType *reflect2.UnsafeSliceType + sliceDecoder ValDecoder +} + +func (codec *base64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { + if iter.ReadNil() { + codec.sliceType.UnsafeSetNil(ptr) + return + } + switch iter.WhatIsNext() { + case StringValue: + src := iter.ReadString() + dst, err := base64.StdEncoding.DecodeString(src) + if err != nil { + iter.ReportError("decode base64", err.Error()) + } else { + codec.sliceType.UnsafeSet(ptr, unsafe.Pointer(&dst)) + } + case ArrayValue: + codec.sliceDecoder.Decode(ptr, iter) + default: + iter.ReportError("base64Codec", "invalid input") + } +} + +func (codec *base64Codec) Encode(ptr unsafe.Pointer, stream *Stream) { + if codec.sliceType.UnsafeIsNil(ptr) { + stream.WriteNil() + return + } + src := *((*[]byte)(ptr)) + encoding := base64.StdEncoding + stream.writeByte('"') + if len(src) != 0 { + size := encoding.EncodedLen(len(src)) + buf := make([]byte, size) + encoding.Encode(buf, src) + stream.buf = append(stream.buf, buf...) + } + stream.writeByte('"') +} + +func (codec *base64Codec) IsEmpty(ptr unsafe.Pointer) bool { + return len(*((*[]byte)(ptr))) == 0 +} diff --git a/vendor/github.com/json-iterator/go/reflect_optional.go b/vendor/github.com/json-iterator/go/reflect_optional.go new file mode 100644 index 0000000..fa71f47 --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_optional.go @@ -0,0 +1,129 @@ +package jsoniter + +import ( + "github.com/modern-go/reflect2" + "unsafe" +) + +func decoderOfOptional(ctx *ctx, typ reflect2.Type) ValDecoder { + ptrType := typ.(*reflect2.UnsafePtrType) + elemType := ptrType.Elem() + decoder := decoderOfType(ctx, elemType) + return &OptionalDecoder{elemType, decoder} +} + +func encoderOfOptional(ctx *ctx, typ reflect2.Type) ValEncoder { + ptrType := typ.(*reflect2.UnsafePtrType) + elemType := ptrType.Elem() + elemEncoder := encoderOfType(ctx, elemType) + encoder := &OptionalEncoder{elemEncoder} + return encoder +} + +type OptionalDecoder struct { + ValueType reflect2.Type + ValueDecoder ValDecoder +} + +func (decoder *OptionalDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if iter.ReadNil() { + *((*unsafe.Pointer)(ptr)) = nil + } else { + if *((*unsafe.Pointer)(ptr)) == nil { + //pointer to null, we have to allocate memory to hold the value + newPtr := decoder.ValueType.UnsafeNew() + decoder.ValueDecoder.Decode(newPtr, iter) + *((*unsafe.Pointer)(ptr)) = newPtr + } else { + //reuse existing instance + decoder.ValueDecoder.Decode(*((*unsafe.Pointer)(ptr)), iter) + } + } +} + +type dereferenceDecoder struct { + // only to deference a pointer + valueType reflect2.Type + valueDecoder ValDecoder +} + +func (decoder *dereferenceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if *((*unsafe.Pointer)(ptr)) == nil { + //pointer to null, we have to allocate memory to hold the value + newPtr := decoder.valueType.UnsafeNew() + decoder.valueDecoder.Decode(newPtr, iter) + *((*unsafe.Pointer)(ptr)) = newPtr + } else { + //reuse existing instance + decoder.valueDecoder.Decode(*((*unsafe.Pointer)(ptr)), iter) + } +} + +type OptionalEncoder struct { + ValueEncoder ValEncoder +} + +func (encoder *OptionalEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + if *((*unsafe.Pointer)(ptr)) == nil { + stream.WriteNil() + } else { + encoder.ValueEncoder.Encode(*((*unsafe.Pointer)(ptr)), stream) + } +} + +func (encoder *OptionalEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return *((*unsafe.Pointer)(ptr)) == nil +} + +type dereferenceEncoder struct { + ValueEncoder ValEncoder +} + +func (encoder *dereferenceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + if *((*unsafe.Pointer)(ptr)) == nil { + stream.WriteNil() + } else { + encoder.ValueEncoder.Encode(*((*unsafe.Pointer)(ptr)), stream) + } +} + +func (encoder *dereferenceEncoder) IsEmpty(ptr unsafe.Pointer) bool { + dePtr := *((*unsafe.Pointer)(ptr)) + if dePtr == nil { + return true + } + return encoder.ValueEncoder.IsEmpty(dePtr) +} + +func (encoder *dereferenceEncoder) IsEmbeddedPtrNil(ptr unsafe.Pointer) bool { + deReferenced := *((*unsafe.Pointer)(ptr)) + if deReferenced == nil { + return true + } + isEmbeddedPtrNil, converted := encoder.ValueEncoder.(IsEmbeddedPtrNil) + if !converted { + return false + } + fieldPtr := unsafe.Pointer(deReferenced) + return isEmbeddedPtrNil.IsEmbeddedPtrNil(fieldPtr) +} + +type referenceEncoder struct { + encoder ValEncoder +} + +func (encoder *referenceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + encoder.encoder.Encode(unsafe.Pointer(&ptr), stream) +} + +func (encoder *referenceEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.encoder.IsEmpty(unsafe.Pointer(&ptr)) +} + +type referenceDecoder struct { + decoder ValDecoder +} + +func (decoder *referenceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + decoder.decoder.Decode(unsafe.Pointer(&ptr), iter) +} diff --git a/vendor/github.com/json-iterator/go/reflect_slice.go b/vendor/github.com/json-iterator/go/reflect_slice.go new file mode 100644 index 0000000..9441d79 --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_slice.go @@ -0,0 +1,99 @@ +package jsoniter + +import ( + "fmt" + "github.com/modern-go/reflect2" + "io" + "unsafe" +) + +func decoderOfSlice(ctx *ctx, typ reflect2.Type) ValDecoder { + sliceType := typ.(*reflect2.UnsafeSliceType) + decoder := decoderOfType(ctx.append("[sliceElem]"), sliceType.Elem()) + return &sliceDecoder{sliceType, decoder} +} + +func encoderOfSlice(ctx *ctx, typ reflect2.Type) ValEncoder { + sliceType := typ.(*reflect2.UnsafeSliceType) + encoder := encoderOfType(ctx.append("[sliceElem]"), sliceType.Elem()) + return &sliceEncoder{sliceType, encoder} +} + +type sliceEncoder struct { + sliceType *reflect2.UnsafeSliceType + elemEncoder ValEncoder +} + +func (encoder *sliceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + if encoder.sliceType.UnsafeIsNil(ptr) { + stream.WriteNil() + return + } + length := encoder.sliceType.UnsafeLengthOf(ptr) + if length == 0 { + stream.WriteEmptyArray() + return + } + stream.WriteArrayStart() + encoder.elemEncoder.Encode(encoder.sliceType.UnsafeGetIndex(ptr, 0), stream) + for i := 1; i < length; i++ { + stream.WriteMore() + elemPtr := encoder.sliceType.UnsafeGetIndex(ptr, i) + encoder.elemEncoder.Encode(elemPtr, stream) + } + stream.WriteArrayEnd() + if stream.Error != nil && stream.Error != io.EOF { + stream.Error = fmt.Errorf("%v: %s", encoder.sliceType, stream.Error.Error()) + } +} + +func (encoder *sliceEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.sliceType.UnsafeLengthOf(ptr) == 0 +} + +type sliceDecoder struct { + sliceType *reflect2.UnsafeSliceType + elemDecoder ValDecoder +} + +func (decoder *sliceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + decoder.doDecode(ptr, iter) + if iter.Error != nil && iter.Error != io.EOF { + iter.Error = fmt.Errorf("%v: %s", decoder.sliceType, iter.Error.Error()) + } +} + +func (decoder *sliceDecoder) doDecode(ptr unsafe.Pointer, iter *Iterator) { + c := iter.nextToken() + sliceType := decoder.sliceType + if c == 'n' { + iter.skipThreeBytes('u', 'l', 'l') + sliceType.UnsafeSetNil(ptr) + return + } + if c != '[' { + iter.ReportError("decode slice", "expect [ or n, but found "+string([]byte{c})) + return + } + c = iter.nextToken() + if c == ']' { + sliceType.UnsafeSet(ptr, sliceType.UnsafeMakeSlice(0, 0)) + return + } + iter.unreadByte() + sliceType.UnsafeGrow(ptr, 1) + elemPtr := sliceType.UnsafeGetIndex(ptr, 0) + decoder.elemDecoder.Decode(elemPtr, iter) + length := 1 + for c = iter.nextToken(); c == ','; c = iter.nextToken() { + idx := length + length += 1 + sliceType.UnsafeGrow(ptr, length) + elemPtr = sliceType.UnsafeGetIndex(ptr, idx) + decoder.elemDecoder.Decode(elemPtr, iter) + } + if c != ']' { + iter.ReportError("decode slice", "expect ], but found "+string([]byte{c})) + return + } +} diff --git a/vendor/github.com/json-iterator/go/reflect_struct_decoder.go b/vendor/github.com/json-iterator/go/reflect_struct_decoder.go new file mode 100644 index 0000000..d7eb0eb --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_struct_decoder.go @@ -0,0 +1,1092 @@ +package jsoniter + +import ( + "fmt" + "io" + "strings" + "unsafe" + + "github.com/modern-go/reflect2" +) + +func decoderOfStruct(ctx *ctx, typ reflect2.Type) ValDecoder { + bindings := map[string]*Binding{} + structDescriptor := describeStruct(ctx, typ) + for _, binding := range structDescriptor.Fields { + for _, fromName := range binding.FromNames { + old := bindings[fromName] + if old == nil { + bindings[fromName] = binding + continue + } + ignoreOld, ignoreNew := resolveConflictBinding(ctx.frozenConfig, old, binding) + if ignoreOld { + delete(bindings, fromName) + } + if !ignoreNew { + bindings[fromName] = binding + } + } + } + fields := map[string]*structFieldDecoder{} + for k, binding := range bindings { + fields[k] = binding.Decoder.(*structFieldDecoder) + } + + if !ctx.caseSensitive() { + for k, binding := range bindings { + if _, found := fields[strings.ToLower(k)]; !found { + fields[strings.ToLower(k)] = binding.Decoder.(*structFieldDecoder) + } + } + } + + return createStructDecoder(ctx, typ, fields) +} + +func createStructDecoder(ctx *ctx, typ reflect2.Type, fields map[string]*structFieldDecoder) ValDecoder { + if ctx.disallowUnknownFields { + return &generalStructDecoder{typ: typ, fields: fields, disallowUnknownFields: true} + } + knownHash := map[int64]struct{}{ + 0: {}, + } + + switch len(fields) { + case 0: + return &skipObjectDecoder{typ} + case 1: + for fieldName, fieldDecoder := range fields { + fieldHash := calcHash(fieldName, ctx.caseSensitive()) + _, known := knownHash[fieldHash] + if known { + return &generalStructDecoder{typ, fields, false} + } + knownHash[fieldHash] = struct{}{} + return &oneFieldStructDecoder{typ, fieldHash, fieldDecoder} + } + case 2: + var fieldHash1 int64 + var fieldHash2 int64 + var fieldDecoder1 *structFieldDecoder + var fieldDecoder2 *structFieldDecoder + for fieldName, fieldDecoder := range fields { + fieldHash := calcHash(fieldName, ctx.caseSensitive()) + _, known := knownHash[fieldHash] + if known { + return &generalStructDecoder{typ, fields, false} + } + knownHash[fieldHash] = struct{}{} + if fieldHash1 == 0 { + fieldHash1 = fieldHash + fieldDecoder1 = fieldDecoder + } else { + fieldHash2 = fieldHash + fieldDecoder2 = fieldDecoder + } + } + return &twoFieldsStructDecoder{typ, fieldHash1, fieldDecoder1, fieldHash2, fieldDecoder2} + case 3: + var fieldName1 int64 + var fieldName2 int64 + var fieldName3 int64 + var fieldDecoder1 *structFieldDecoder + var fieldDecoder2 *structFieldDecoder + var fieldDecoder3 *structFieldDecoder + for fieldName, fieldDecoder := range fields { + fieldHash := calcHash(fieldName, ctx.caseSensitive()) + _, known := knownHash[fieldHash] + if known { + return &generalStructDecoder{typ, fields, false} + } + knownHash[fieldHash] = struct{}{} + if fieldName1 == 0 { + fieldName1 = fieldHash + fieldDecoder1 = fieldDecoder + } else if fieldName2 == 0 { + fieldName2 = fieldHash + fieldDecoder2 = fieldDecoder + } else { + fieldName3 = fieldHash + fieldDecoder3 = fieldDecoder + } + } + return &threeFieldsStructDecoder{typ, + fieldName1, fieldDecoder1, + fieldName2, fieldDecoder2, + fieldName3, fieldDecoder3} + case 4: + var fieldName1 int64 + var fieldName2 int64 + var fieldName3 int64 + var fieldName4 int64 + var fieldDecoder1 *structFieldDecoder + var fieldDecoder2 *structFieldDecoder + var fieldDecoder3 *structFieldDecoder + var fieldDecoder4 *structFieldDecoder + for fieldName, fieldDecoder := range fields { + fieldHash := calcHash(fieldName, ctx.caseSensitive()) + _, known := knownHash[fieldHash] + if known { + return &generalStructDecoder{typ, fields, false} + } + knownHash[fieldHash] = struct{}{} + if fieldName1 == 0 { + fieldName1 = fieldHash + fieldDecoder1 = fieldDecoder + } else if fieldName2 == 0 { + fieldName2 = fieldHash + fieldDecoder2 = fieldDecoder + } else if fieldName3 == 0 { + fieldName3 = fieldHash + fieldDecoder3 = fieldDecoder + } else { + fieldName4 = fieldHash + fieldDecoder4 = fieldDecoder + } + } + return &fourFieldsStructDecoder{typ, + fieldName1, fieldDecoder1, + fieldName2, fieldDecoder2, + fieldName3, fieldDecoder3, + fieldName4, fieldDecoder4} + case 5: + var fieldName1 int64 + var fieldName2 int64 + var fieldName3 int64 + var fieldName4 int64 + var fieldName5 int64 + var fieldDecoder1 *structFieldDecoder + var fieldDecoder2 *structFieldDecoder + var fieldDecoder3 *structFieldDecoder + var fieldDecoder4 *structFieldDecoder + var fieldDecoder5 *structFieldDecoder + for fieldName, fieldDecoder := range fields { + fieldHash := calcHash(fieldName, ctx.caseSensitive()) + _, known := knownHash[fieldHash] + if known { + return &generalStructDecoder{typ, fields, false} + } + knownHash[fieldHash] = struct{}{} + if fieldName1 == 0 { + fieldName1 = fieldHash + fieldDecoder1 = fieldDecoder + } else if fieldName2 == 0 { + fieldName2 = fieldHash + fieldDecoder2 = fieldDecoder + } else if fieldName3 == 0 { + fieldName3 = fieldHash + fieldDecoder3 = fieldDecoder + } else if fieldName4 == 0 { + fieldName4 = fieldHash + fieldDecoder4 = fieldDecoder + } else { + fieldName5 = fieldHash + fieldDecoder5 = fieldDecoder + } + } + return &fiveFieldsStructDecoder{typ, + fieldName1, fieldDecoder1, + fieldName2, fieldDecoder2, + fieldName3, fieldDecoder3, + fieldName4, fieldDecoder4, + fieldName5, fieldDecoder5} + case 6: + var fieldName1 int64 + var fieldName2 int64 + var fieldName3 int64 + var fieldName4 int64 + var fieldName5 int64 + var fieldName6 int64 + var fieldDecoder1 *structFieldDecoder + var fieldDecoder2 *structFieldDecoder + var fieldDecoder3 *structFieldDecoder + var fieldDecoder4 *structFieldDecoder + var fieldDecoder5 *structFieldDecoder + var fieldDecoder6 *structFieldDecoder + for fieldName, fieldDecoder := range fields { + fieldHash := calcHash(fieldName, ctx.caseSensitive()) + _, known := knownHash[fieldHash] + if known { + return &generalStructDecoder{typ, fields, false} + } + knownHash[fieldHash] = struct{}{} + if fieldName1 == 0 { + fieldName1 = fieldHash + fieldDecoder1 = fieldDecoder + } else if fieldName2 == 0 { + fieldName2 = fieldHash + fieldDecoder2 = fieldDecoder + } else if fieldName3 == 0 { + fieldName3 = fieldHash + fieldDecoder3 = fieldDecoder + } else if fieldName4 == 0 { + fieldName4 = fieldHash + fieldDecoder4 = fieldDecoder + } else if fieldName5 == 0 { + fieldName5 = fieldHash + fieldDecoder5 = fieldDecoder + } else { + fieldName6 = fieldHash + fieldDecoder6 = fieldDecoder + } + } + return &sixFieldsStructDecoder{typ, + fieldName1, fieldDecoder1, + fieldName2, fieldDecoder2, + fieldName3, fieldDecoder3, + fieldName4, fieldDecoder4, + fieldName5, fieldDecoder5, + fieldName6, fieldDecoder6} + case 7: + var fieldName1 int64 + var fieldName2 int64 + var fieldName3 int64 + var fieldName4 int64 + var fieldName5 int64 + var fieldName6 int64 + var fieldName7 int64 + var fieldDecoder1 *structFieldDecoder + var fieldDecoder2 *structFieldDecoder + var fieldDecoder3 *structFieldDecoder + var fieldDecoder4 *structFieldDecoder + var fieldDecoder5 *structFieldDecoder + var fieldDecoder6 *structFieldDecoder + var fieldDecoder7 *structFieldDecoder + for fieldName, fieldDecoder := range fields { + fieldHash := calcHash(fieldName, ctx.caseSensitive()) + _, known := knownHash[fieldHash] + if known { + return &generalStructDecoder{typ, fields, false} + } + knownHash[fieldHash] = struct{}{} + if fieldName1 == 0 { + fieldName1 = fieldHash + fieldDecoder1 = fieldDecoder + } else if fieldName2 == 0 { + fieldName2 = fieldHash + fieldDecoder2 = fieldDecoder + } else if fieldName3 == 0 { + fieldName3 = fieldHash + fieldDecoder3 = fieldDecoder + } else if fieldName4 == 0 { + fieldName4 = fieldHash + fieldDecoder4 = fieldDecoder + } else if fieldName5 == 0 { + fieldName5 = fieldHash + fieldDecoder5 = fieldDecoder + } else if fieldName6 == 0 { + fieldName6 = fieldHash + fieldDecoder6 = fieldDecoder + } else { + fieldName7 = fieldHash + fieldDecoder7 = fieldDecoder + } + } + return &sevenFieldsStructDecoder{typ, + fieldName1, fieldDecoder1, + fieldName2, fieldDecoder2, + fieldName3, fieldDecoder3, + fieldName4, fieldDecoder4, + fieldName5, fieldDecoder5, + fieldName6, fieldDecoder6, + fieldName7, fieldDecoder7} + case 8: + var fieldName1 int64 + var fieldName2 int64 + var fieldName3 int64 + var fieldName4 int64 + var fieldName5 int64 + var fieldName6 int64 + var fieldName7 int64 + var fieldName8 int64 + var fieldDecoder1 *structFieldDecoder + var fieldDecoder2 *structFieldDecoder + var fieldDecoder3 *structFieldDecoder + var fieldDecoder4 *structFieldDecoder + var fieldDecoder5 *structFieldDecoder + var fieldDecoder6 *structFieldDecoder + var fieldDecoder7 *structFieldDecoder + var fieldDecoder8 *structFieldDecoder + for fieldName, fieldDecoder := range fields { + fieldHash := calcHash(fieldName, ctx.caseSensitive()) + _, known := knownHash[fieldHash] + if known { + return &generalStructDecoder{typ, fields, false} + } + knownHash[fieldHash] = struct{}{} + if fieldName1 == 0 { + fieldName1 = fieldHash + fieldDecoder1 = fieldDecoder + } else if fieldName2 == 0 { + fieldName2 = fieldHash + fieldDecoder2 = fieldDecoder + } else if fieldName3 == 0 { + fieldName3 = fieldHash + fieldDecoder3 = fieldDecoder + } else if fieldName4 == 0 { + fieldName4 = fieldHash + fieldDecoder4 = fieldDecoder + } else if fieldName5 == 0 { + fieldName5 = fieldHash + fieldDecoder5 = fieldDecoder + } else if fieldName6 == 0 { + fieldName6 = fieldHash + fieldDecoder6 = fieldDecoder + } else if fieldName7 == 0 { + fieldName7 = fieldHash + fieldDecoder7 = fieldDecoder + } else { + fieldName8 = fieldHash + fieldDecoder8 = fieldDecoder + } + } + return &eightFieldsStructDecoder{typ, + fieldName1, fieldDecoder1, + fieldName2, fieldDecoder2, + fieldName3, fieldDecoder3, + fieldName4, fieldDecoder4, + fieldName5, fieldDecoder5, + fieldName6, fieldDecoder6, + fieldName7, fieldDecoder7, + fieldName8, fieldDecoder8} + case 9: + var fieldName1 int64 + var fieldName2 int64 + var fieldName3 int64 + var fieldName4 int64 + var fieldName5 int64 + var fieldName6 int64 + var fieldName7 int64 + var fieldName8 int64 + var fieldName9 int64 + var fieldDecoder1 *structFieldDecoder + var fieldDecoder2 *structFieldDecoder + var fieldDecoder3 *structFieldDecoder + var fieldDecoder4 *structFieldDecoder + var fieldDecoder5 *structFieldDecoder + var fieldDecoder6 *structFieldDecoder + var fieldDecoder7 *structFieldDecoder + var fieldDecoder8 *structFieldDecoder + var fieldDecoder9 *structFieldDecoder + for fieldName, fieldDecoder := range fields { + fieldHash := calcHash(fieldName, ctx.caseSensitive()) + _, known := knownHash[fieldHash] + if known { + return &generalStructDecoder{typ, fields, false} + } + knownHash[fieldHash] = struct{}{} + if fieldName1 == 0 { + fieldName1 = fieldHash + fieldDecoder1 = fieldDecoder + } else if fieldName2 == 0 { + fieldName2 = fieldHash + fieldDecoder2 = fieldDecoder + } else if fieldName3 == 0 { + fieldName3 = fieldHash + fieldDecoder3 = fieldDecoder + } else if fieldName4 == 0 { + fieldName4 = fieldHash + fieldDecoder4 = fieldDecoder + } else if fieldName5 == 0 { + fieldName5 = fieldHash + fieldDecoder5 = fieldDecoder + } else if fieldName6 == 0 { + fieldName6 = fieldHash + fieldDecoder6 = fieldDecoder + } else if fieldName7 == 0 { + fieldName7 = fieldHash + fieldDecoder7 = fieldDecoder + } else if fieldName8 == 0 { + fieldName8 = fieldHash + fieldDecoder8 = fieldDecoder + } else { + fieldName9 = fieldHash + fieldDecoder9 = fieldDecoder + } + } + return &nineFieldsStructDecoder{typ, + fieldName1, fieldDecoder1, + fieldName2, fieldDecoder2, + fieldName3, fieldDecoder3, + fieldName4, fieldDecoder4, + fieldName5, fieldDecoder5, + fieldName6, fieldDecoder6, + fieldName7, fieldDecoder7, + fieldName8, fieldDecoder8, + fieldName9, fieldDecoder9} + case 10: + var fieldName1 int64 + var fieldName2 int64 + var fieldName3 int64 + var fieldName4 int64 + var fieldName5 int64 + var fieldName6 int64 + var fieldName7 int64 + var fieldName8 int64 + var fieldName9 int64 + var fieldName10 int64 + var fieldDecoder1 *structFieldDecoder + var fieldDecoder2 *structFieldDecoder + var fieldDecoder3 *structFieldDecoder + var fieldDecoder4 *structFieldDecoder + var fieldDecoder5 *structFieldDecoder + var fieldDecoder6 *structFieldDecoder + var fieldDecoder7 *structFieldDecoder + var fieldDecoder8 *structFieldDecoder + var fieldDecoder9 *structFieldDecoder + var fieldDecoder10 *structFieldDecoder + for fieldName, fieldDecoder := range fields { + fieldHash := calcHash(fieldName, ctx.caseSensitive()) + _, known := knownHash[fieldHash] + if known { + return &generalStructDecoder{typ, fields, false} + } + knownHash[fieldHash] = struct{}{} + if fieldName1 == 0 { + fieldName1 = fieldHash + fieldDecoder1 = fieldDecoder + } else if fieldName2 == 0 { + fieldName2 = fieldHash + fieldDecoder2 = fieldDecoder + } else if fieldName3 == 0 { + fieldName3 = fieldHash + fieldDecoder3 = fieldDecoder + } else if fieldName4 == 0 { + fieldName4 = fieldHash + fieldDecoder4 = fieldDecoder + } else if fieldName5 == 0 { + fieldName5 = fieldHash + fieldDecoder5 = fieldDecoder + } else if fieldName6 == 0 { + fieldName6 = fieldHash + fieldDecoder6 = fieldDecoder + } else if fieldName7 == 0 { + fieldName7 = fieldHash + fieldDecoder7 = fieldDecoder + } else if fieldName8 == 0 { + fieldName8 = fieldHash + fieldDecoder8 = fieldDecoder + } else if fieldName9 == 0 { + fieldName9 = fieldHash + fieldDecoder9 = fieldDecoder + } else { + fieldName10 = fieldHash + fieldDecoder10 = fieldDecoder + } + } + return &tenFieldsStructDecoder{typ, + fieldName1, fieldDecoder1, + fieldName2, fieldDecoder2, + fieldName3, fieldDecoder3, + fieldName4, fieldDecoder4, + fieldName5, fieldDecoder5, + fieldName6, fieldDecoder6, + fieldName7, fieldDecoder7, + fieldName8, fieldDecoder8, + fieldName9, fieldDecoder9, + fieldName10, fieldDecoder10} + } + return &generalStructDecoder{typ, fields, false} +} + +type generalStructDecoder struct { + typ reflect2.Type + fields map[string]*structFieldDecoder + disallowUnknownFields bool +} + +func (decoder *generalStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + var c byte + for c = ','; c == ','; c = iter.nextToken() { + decoder.decodeOneField(ptr, iter) + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + if c != '}' { + iter.ReportError("struct Decode", `expect }, but found `+string([]byte{c})) + } + iter.decrementDepth() +} + +func (decoder *generalStructDecoder) decodeOneField(ptr unsafe.Pointer, iter *Iterator) { + var field string + var fieldDecoder *structFieldDecoder + if iter.cfg.objectFieldMustBeSimpleString { + fieldBytes := iter.ReadStringAsSlice() + field = *(*string)(unsafe.Pointer(&fieldBytes)) + fieldDecoder = decoder.fields[field] + if fieldDecoder == nil && !iter.cfg.caseSensitive { + fieldDecoder = decoder.fields[strings.ToLower(field)] + } + } else { + field = iter.ReadString() + fieldDecoder = decoder.fields[field] + if fieldDecoder == nil && !iter.cfg.caseSensitive { + fieldDecoder = decoder.fields[strings.ToLower(field)] + } + } + if fieldDecoder == nil { + if decoder.disallowUnknownFields { + msg := "found unknown field: " + field + iter.ReportError("ReadObject", msg) + } + c := iter.nextToken() + if c != ':' { + iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) + } + iter.Skip() + return + } + c := iter.nextToken() + if c != ':' { + iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) + } + fieldDecoder.Decode(ptr, iter) +} + +type skipObjectDecoder struct { + typ reflect2.Type +} + +func (decoder *skipObjectDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + valueType := iter.WhatIsNext() + if valueType != ObjectValue && valueType != NilValue { + iter.ReportError("skipObjectDecoder", "expect object or null") + return + } + iter.Skip() +} + +type oneFieldStructDecoder struct { + typ reflect2.Type + fieldHash int64 + fieldDecoder *structFieldDecoder +} + +func (decoder *oneFieldStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + for { + if iter.readFieldHash() == decoder.fieldHash { + decoder.fieldDecoder.Decode(ptr, iter) + } else { + iter.Skip() + } + if iter.isObjectEnd() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + iter.decrementDepth() +} + +type twoFieldsStructDecoder struct { + typ reflect2.Type + fieldHash1 int64 + fieldDecoder1 *structFieldDecoder + fieldHash2 int64 + fieldDecoder2 *structFieldDecoder +} + +func (decoder *twoFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + for { + switch iter.readFieldHash() { + case decoder.fieldHash1: + decoder.fieldDecoder1.Decode(ptr, iter) + case decoder.fieldHash2: + decoder.fieldDecoder2.Decode(ptr, iter) + default: + iter.Skip() + } + if iter.isObjectEnd() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + iter.decrementDepth() +} + +type threeFieldsStructDecoder struct { + typ reflect2.Type + fieldHash1 int64 + fieldDecoder1 *structFieldDecoder + fieldHash2 int64 + fieldDecoder2 *structFieldDecoder + fieldHash3 int64 + fieldDecoder3 *structFieldDecoder +} + +func (decoder *threeFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + for { + switch iter.readFieldHash() { + case decoder.fieldHash1: + decoder.fieldDecoder1.Decode(ptr, iter) + case decoder.fieldHash2: + decoder.fieldDecoder2.Decode(ptr, iter) + case decoder.fieldHash3: + decoder.fieldDecoder3.Decode(ptr, iter) + default: + iter.Skip() + } + if iter.isObjectEnd() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + iter.decrementDepth() +} + +type fourFieldsStructDecoder struct { + typ reflect2.Type + fieldHash1 int64 + fieldDecoder1 *structFieldDecoder + fieldHash2 int64 + fieldDecoder2 *structFieldDecoder + fieldHash3 int64 + fieldDecoder3 *structFieldDecoder + fieldHash4 int64 + fieldDecoder4 *structFieldDecoder +} + +func (decoder *fourFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + for { + switch iter.readFieldHash() { + case decoder.fieldHash1: + decoder.fieldDecoder1.Decode(ptr, iter) + case decoder.fieldHash2: + decoder.fieldDecoder2.Decode(ptr, iter) + case decoder.fieldHash3: + decoder.fieldDecoder3.Decode(ptr, iter) + case decoder.fieldHash4: + decoder.fieldDecoder4.Decode(ptr, iter) + default: + iter.Skip() + } + if iter.isObjectEnd() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + iter.decrementDepth() +} + +type fiveFieldsStructDecoder struct { + typ reflect2.Type + fieldHash1 int64 + fieldDecoder1 *structFieldDecoder + fieldHash2 int64 + fieldDecoder2 *structFieldDecoder + fieldHash3 int64 + fieldDecoder3 *structFieldDecoder + fieldHash4 int64 + fieldDecoder4 *structFieldDecoder + fieldHash5 int64 + fieldDecoder5 *structFieldDecoder +} + +func (decoder *fiveFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + for { + switch iter.readFieldHash() { + case decoder.fieldHash1: + decoder.fieldDecoder1.Decode(ptr, iter) + case decoder.fieldHash2: + decoder.fieldDecoder2.Decode(ptr, iter) + case decoder.fieldHash3: + decoder.fieldDecoder3.Decode(ptr, iter) + case decoder.fieldHash4: + decoder.fieldDecoder4.Decode(ptr, iter) + case decoder.fieldHash5: + decoder.fieldDecoder5.Decode(ptr, iter) + default: + iter.Skip() + } + if iter.isObjectEnd() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + iter.decrementDepth() +} + +type sixFieldsStructDecoder struct { + typ reflect2.Type + fieldHash1 int64 + fieldDecoder1 *structFieldDecoder + fieldHash2 int64 + fieldDecoder2 *structFieldDecoder + fieldHash3 int64 + fieldDecoder3 *structFieldDecoder + fieldHash4 int64 + fieldDecoder4 *structFieldDecoder + fieldHash5 int64 + fieldDecoder5 *structFieldDecoder + fieldHash6 int64 + fieldDecoder6 *structFieldDecoder +} + +func (decoder *sixFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + for { + switch iter.readFieldHash() { + case decoder.fieldHash1: + decoder.fieldDecoder1.Decode(ptr, iter) + case decoder.fieldHash2: + decoder.fieldDecoder2.Decode(ptr, iter) + case decoder.fieldHash3: + decoder.fieldDecoder3.Decode(ptr, iter) + case decoder.fieldHash4: + decoder.fieldDecoder4.Decode(ptr, iter) + case decoder.fieldHash5: + decoder.fieldDecoder5.Decode(ptr, iter) + case decoder.fieldHash6: + decoder.fieldDecoder6.Decode(ptr, iter) + default: + iter.Skip() + } + if iter.isObjectEnd() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + iter.decrementDepth() +} + +type sevenFieldsStructDecoder struct { + typ reflect2.Type + fieldHash1 int64 + fieldDecoder1 *structFieldDecoder + fieldHash2 int64 + fieldDecoder2 *structFieldDecoder + fieldHash3 int64 + fieldDecoder3 *structFieldDecoder + fieldHash4 int64 + fieldDecoder4 *structFieldDecoder + fieldHash5 int64 + fieldDecoder5 *structFieldDecoder + fieldHash6 int64 + fieldDecoder6 *structFieldDecoder + fieldHash7 int64 + fieldDecoder7 *structFieldDecoder +} + +func (decoder *sevenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + for { + switch iter.readFieldHash() { + case decoder.fieldHash1: + decoder.fieldDecoder1.Decode(ptr, iter) + case decoder.fieldHash2: + decoder.fieldDecoder2.Decode(ptr, iter) + case decoder.fieldHash3: + decoder.fieldDecoder3.Decode(ptr, iter) + case decoder.fieldHash4: + decoder.fieldDecoder4.Decode(ptr, iter) + case decoder.fieldHash5: + decoder.fieldDecoder5.Decode(ptr, iter) + case decoder.fieldHash6: + decoder.fieldDecoder6.Decode(ptr, iter) + case decoder.fieldHash7: + decoder.fieldDecoder7.Decode(ptr, iter) + default: + iter.Skip() + } + if iter.isObjectEnd() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + iter.decrementDepth() +} + +type eightFieldsStructDecoder struct { + typ reflect2.Type + fieldHash1 int64 + fieldDecoder1 *structFieldDecoder + fieldHash2 int64 + fieldDecoder2 *structFieldDecoder + fieldHash3 int64 + fieldDecoder3 *structFieldDecoder + fieldHash4 int64 + fieldDecoder4 *structFieldDecoder + fieldHash5 int64 + fieldDecoder5 *structFieldDecoder + fieldHash6 int64 + fieldDecoder6 *structFieldDecoder + fieldHash7 int64 + fieldDecoder7 *structFieldDecoder + fieldHash8 int64 + fieldDecoder8 *structFieldDecoder +} + +func (decoder *eightFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + for { + switch iter.readFieldHash() { + case decoder.fieldHash1: + decoder.fieldDecoder1.Decode(ptr, iter) + case decoder.fieldHash2: + decoder.fieldDecoder2.Decode(ptr, iter) + case decoder.fieldHash3: + decoder.fieldDecoder3.Decode(ptr, iter) + case decoder.fieldHash4: + decoder.fieldDecoder4.Decode(ptr, iter) + case decoder.fieldHash5: + decoder.fieldDecoder5.Decode(ptr, iter) + case decoder.fieldHash6: + decoder.fieldDecoder6.Decode(ptr, iter) + case decoder.fieldHash7: + decoder.fieldDecoder7.Decode(ptr, iter) + case decoder.fieldHash8: + decoder.fieldDecoder8.Decode(ptr, iter) + default: + iter.Skip() + } + if iter.isObjectEnd() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + iter.decrementDepth() +} + +type nineFieldsStructDecoder struct { + typ reflect2.Type + fieldHash1 int64 + fieldDecoder1 *structFieldDecoder + fieldHash2 int64 + fieldDecoder2 *structFieldDecoder + fieldHash3 int64 + fieldDecoder3 *structFieldDecoder + fieldHash4 int64 + fieldDecoder4 *structFieldDecoder + fieldHash5 int64 + fieldDecoder5 *structFieldDecoder + fieldHash6 int64 + fieldDecoder6 *structFieldDecoder + fieldHash7 int64 + fieldDecoder7 *structFieldDecoder + fieldHash8 int64 + fieldDecoder8 *structFieldDecoder + fieldHash9 int64 + fieldDecoder9 *structFieldDecoder +} + +func (decoder *nineFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + for { + switch iter.readFieldHash() { + case decoder.fieldHash1: + decoder.fieldDecoder1.Decode(ptr, iter) + case decoder.fieldHash2: + decoder.fieldDecoder2.Decode(ptr, iter) + case decoder.fieldHash3: + decoder.fieldDecoder3.Decode(ptr, iter) + case decoder.fieldHash4: + decoder.fieldDecoder4.Decode(ptr, iter) + case decoder.fieldHash5: + decoder.fieldDecoder5.Decode(ptr, iter) + case decoder.fieldHash6: + decoder.fieldDecoder6.Decode(ptr, iter) + case decoder.fieldHash7: + decoder.fieldDecoder7.Decode(ptr, iter) + case decoder.fieldHash8: + decoder.fieldDecoder8.Decode(ptr, iter) + case decoder.fieldHash9: + decoder.fieldDecoder9.Decode(ptr, iter) + default: + iter.Skip() + } + if iter.isObjectEnd() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + iter.decrementDepth() +} + +type tenFieldsStructDecoder struct { + typ reflect2.Type + fieldHash1 int64 + fieldDecoder1 *structFieldDecoder + fieldHash2 int64 + fieldDecoder2 *structFieldDecoder + fieldHash3 int64 + fieldDecoder3 *structFieldDecoder + fieldHash4 int64 + fieldDecoder4 *structFieldDecoder + fieldHash5 int64 + fieldDecoder5 *structFieldDecoder + fieldHash6 int64 + fieldDecoder6 *structFieldDecoder + fieldHash7 int64 + fieldDecoder7 *structFieldDecoder + fieldHash8 int64 + fieldDecoder8 *structFieldDecoder + fieldHash9 int64 + fieldDecoder9 *structFieldDecoder + fieldHash10 int64 + fieldDecoder10 *structFieldDecoder +} + +func (decoder *tenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if !iter.readObjectStart() { + return + } + if !iter.incrementDepth() { + return + } + for { + switch iter.readFieldHash() { + case decoder.fieldHash1: + decoder.fieldDecoder1.Decode(ptr, iter) + case decoder.fieldHash2: + decoder.fieldDecoder2.Decode(ptr, iter) + case decoder.fieldHash3: + decoder.fieldDecoder3.Decode(ptr, iter) + case decoder.fieldHash4: + decoder.fieldDecoder4.Decode(ptr, iter) + case decoder.fieldHash5: + decoder.fieldDecoder5.Decode(ptr, iter) + case decoder.fieldHash6: + decoder.fieldDecoder6.Decode(ptr, iter) + case decoder.fieldHash7: + decoder.fieldDecoder7.Decode(ptr, iter) + case decoder.fieldHash8: + decoder.fieldDecoder8.Decode(ptr, iter) + case decoder.fieldHash9: + decoder.fieldDecoder9.Decode(ptr, iter) + case decoder.fieldHash10: + decoder.fieldDecoder10.Decode(ptr, iter) + default: + iter.Skip() + } + if iter.isObjectEnd() { + break + } + } + if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 { + iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) + } + iter.decrementDepth() +} + +type structFieldDecoder struct { + field reflect2.StructField + fieldDecoder ValDecoder +} + +func (decoder *structFieldDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + fieldPtr := decoder.field.UnsafeGet(ptr) + decoder.fieldDecoder.Decode(fieldPtr, iter) + if iter.Error != nil && iter.Error != io.EOF { + iter.Error = fmt.Errorf("%s: %s", decoder.field.Name(), iter.Error.Error()) + } +} + +type stringModeStringDecoder struct { + elemDecoder ValDecoder + cfg *frozenConfig +} + +func (decoder *stringModeStringDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + decoder.elemDecoder.Decode(ptr, iter) + str := *((*string)(ptr)) + tempIter := decoder.cfg.BorrowIterator([]byte(str)) + defer decoder.cfg.ReturnIterator(tempIter) + *((*string)(ptr)) = tempIter.ReadString() +} + +type stringModeNumberDecoder struct { + elemDecoder ValDecoder +} + +func (decoder *stringModeNumberDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + c := iter.nextToken() + if c != '"' { + iter.ReportError("stringModeNumberDecoder", `expect ", but found `+string([]byte{c})) + return + } + decoder.elemDecoder.Decode(ptr, iter) + if iter.Error != nil { + return + } + c = iter.readByte() + if c != '"' { + iter.ReportError("stringModeNumberDecoder", `expect ", but found `+string([]byte{c})) + return + } +} diff --git a/vendor/github.com/json-iterator/go/reflect_struct_encoder.go b/vendor/github.com/json-iterator/go/reflect_struct_encoder.go new file mode 100644 index 0000000..152e3ef --- /dev/null +++ b/vendor/github.com/json-iterator/go/reflect_struct_encoder.go @@ -0,0 +1,211 @@ +package jsoniter + +import ( + "fmt" + "github.com/modern-go/reflect2" + "io" + "reflect" + "unsafe" +) + +func encoderOfStruct(ctx *ctx, typ reflect2.Type) ValEncoder { + type bindingTo struct { + binding *Binding + toName string + ignored bool + } + orderedBindings := []*bindingTo{} + structDescriptor := describeStruct(ctx, typ) + for _, binding := range structDescriptor.Fields { + for _, toName := range binding.ToNames { + new := &bindingTo{ + binding: binding, + toName: toName, + } + for _, old := range orderedBindings { + if old.toName != toName { + continue + } + old.ignored, new.ignored = resolveConflictBinding(ctx.frozenConfig, old.binding, new.binding) + } + orderedBindings = append(orderedBindings, new) + } + } + if len(orderedBindings) == 0 { + return &emptyStructEncoder{} + } + finalOrderedFields := []structFieldTo{} + for _, bindingTo := range orderedBindings { + if !bindingTo.ignored { + finalOrderedFields = append(finalOrderedFields, structFieldTo{ + encoder: bindingTo.binding.Encoder.(*structFieldEncoder), + toName: bindingTo.toName, + }) + } + } + return &structEncoder{typ, finalOrderedFields} +} + +func createCheckIsEmpty(ctx *ctx, typ reflect2.Type) checkIsEmpty { + encoder := createEncoderOfNative(ctx, typ) + if encoder != nil { + return encoder + } + kind := typ.Kind() + switch kind { + case reflect.Interface: + return &dynamicEncoder{typ} + case reflect.Struct: + return &structEncoder{typ: typ} + case reflect.Array: + return &arrayEncoder{} + case reflect.Slice: + return &sliceEncoder{} + case reflect.Map: + return encoderOfMap(ctx, typ) + case reflect.Ptr: + return &OptionalEncoder{} + default: + return &lazyErrorEncoder{err: fmt.Errorf("unsupported type: %v", typ)} + } +} + +func resolveConflictBinding(cfg *frozenConfig, old, new *Binding) (ignoreOld, ignoreNew bool) { + newTagged := new.Field.Tag().Get(cfg.getTagKey()) != "" + oldTagged := old.Field.Tag().Get(cfg.getTagKey()) != "" + if newTagged { + if oldTagged { + if len(old.levels) > len(new.levels) { + return true, false + } else if len(new.levels) > len(old.levels) { + return false, true + } else { + return true, true + } + } else { + return true, false + } + } else { + if oldTagged { + return true, false + } + if len(old.levels) > len(new.levels) { + return true, false + } else if len(new.levels) > len(old.levels) { + return false, true + } else { + return true, true + } + } +} + +type structFieldEncoder struct { + field reflect2.StructField + fieldEncoder ValEncoder + omitempty bool +} + +func (encoder *structFieldEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + fieldPtr := encoder.field.UnsafeGet(ptr) + encoder.fieldEncoder.Encode(fieldPtr, stream) + if stream.Error != nil && stream.Error != io.EOF { + stream.Error = fmt.Errorf("%s: %s", encoder.field.Name(), stream.Error.Error()) + } +} + +func (encoder *structFieldEncoder) IsEmpty(ptr unsafe.Pointer) bool { + fieldPtr := encoder.field.UnsafeGet(ptr) + return encoder.fieldEncoder.IsEmpty(fieldPtr) +} + +func (encoder *structFieldEncoder) IsEmbeddedPtrNil(ptr unsafe.Pointer) bool { + isEmbeddedPtrNil, converted := encoder.fieldEncoder.(IsEmbeddedPtrNil) + if !converted { + return false + } + fieldPtr := encoder.field.UnsafeGet(ptr) + return isEmbeddedPtrNil.IsEmbeddedPtrNil(fieldPtr) +} + +type IsEmbeddedPtrNil interface { + IsEmbeddedPtrNil(ptr unsafe.Pointer) bool +} + +type structEncoder struct { + typ reflect2.Type + fields []structFieldTo +} + +type structFieldTo struct { + encoder *structFieldEncoder + toName string +} + +func (encoder *structEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteObjectStart() + isNotFirst := false + for _, field := range encoder.fields { + if field.encoder.omitempty && field.encoder.IsEmpty(ptr) { + continue + } + if field.encoder.IsEmbeddedPtrNil(ptr) { + continue + } + if isNotFirst { + stream.WriteMore() + } + stream.WriteObjectField(field.toName) + field.encoder.Encode(ptr, stream) + isNotFirst = true + } + stream.WriteObjectEnd() + if stream.Error != nil && stream.Error != io.EOF { + stream.Error = fmt.Errorf("%v.%s", encoder.typ, stream.Error.Error()) + } +} + +func (encoder *structEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return false +} + +type emptyStructEncoder struct { +} + +func (encoder *emptyStructEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.WriteEmptyObject() +} + +func (encoder *emptyStructEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return false +} + +type stringModeNumberEncoder struct { + elemEncoder ValEncoder +} + +func (encoder *stringModeNumberEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + stream.writeByte('"') + encoder.elemEncoder.Encode(ptr, stream) + stream.writeByte('"') +} + +func (encoder *stringModeNumberEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.elemEncoder.IsEmpty(ptr) +} + +type stringModeStringEncoder struct { + elemEncoder ValEncoder + cfg *frozenConfig +} + +func (encoder *stringModeStringEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { + tempStream := encoder.cfg.BorrowStream(nil) + tempStream.Attachment = stream.Attachment + defer encoder.cfg.ReturnStream(tempStream) + encoder.elemEncoder.Encode(ptr, tempStream) + stream.WriteString(string(tempStream.Buffer())) +} + +func (encoder *stringModeStringEncoder) IsEmpty(ptr unsafe.Pointer) bool { + return encoder.elemEncoder.IsEmpty(ptr) +} diff --git a/vendor/github.com/json-iterator/go/stream.go b/vendor/github.com/json-iterator/go/stream.go new file mode 100644 index 0000000..23d8a3a --- /dev/null +++ b/vendor/github.com/json-iterator/go/stream.go @@ -0,0 +1,210 @@ +package jsoniter + +import ( + "io" +) + +// stream is a io.Writer like object, with JSON specific write functions. +// Error is not returned as return value, but stored as Error member on this stream instance. +type Stream struct { + cfg *frozenConfig + out io.Writer + buf []byte + Error error + indention int + Attachment interface{} // open for customized encoder +} + +// NewStream create new stream instance. +// cfg can be jsoniter.ConfigDefault. +// out can be nil if write to internal buffer. +// bufSize is the initial size for the internal buffer in bytes. +func NewStream(cfg API, out io.Writer, bufSize int) *Stream { + return &Stream{ + cfg: cfg.(*frozenConfig), + out: out, + buf: make([]byte, 0, bufSize), + Error: nil, + indention: 0, + } +} + +// Pool returns a pool can provide more stream with same configuration +func (stream *Stream) Pool() StreamPool { + return stream.cfg +} + +// Reset reuse this stream instance by assign a new writer +func (stream *Stream) Reset(out io.Writer) { + stream.out = out + stream.buf = stream.buf[:0] +} + +// Available returns how many bytes are unused in the buffer. +func (stream *Stream) Available() int { + return cap(stream.buf) - len(stream.buf) +} + +// Buffered returns the number of bytes that have been written into the current buffer. +func (stream *Stream) Buffered() int { + return len(stream.buf) +} + +// Buffer if writer is nil, use this method to take the result +func (stream *Stream) Buffer() []byte { + return stream.buf +} + +// SetBuffer allows to append to the internal buffer directly +func (stream *Stream) SetBuffer(buf []byte) { + stream.buf = buf +} + +// Write writes the contents of p into the buffer. +// It returns the number of bytes written. +// If nn < len(p), it also returns an error explaining +// why the write is short. +func (stream *Stream) Write(p []byte) (nn int, err error) { + stream.buf = append(stream.buf, p...) + if stream.out != nil { + nn, err = stream.out.Write(stream.buf) + stream.buf = stream.buf[nn:] + return + } + return len(p), nil +} + +// WriteByte writes a single byte. +func (stream *Stream) writeByte(c byte) { + stream.buf = append(stream.buf, c) +} + +func (stream *Stream) writeTwoBytes(c1 byte, c2 byte) { + stream.buf = append(stream.buf, c1, c2) +} + +func (stream *Stream) writeThreeBytes(c1 byte, c2 byte, c3 byte) { + stream.buf = append(stream.buf, c1, c2, c3) +} + +func (stream *Stream) writeFourBytes(c1 byte, c2 byte, c3 byte, c4 byte) { + stream.buf = append(stream.buf, c1, c2, c3, c4) +} + +func (stream *Stream) writeFiveBytes(c1 byte, c2 byte, c3 byte, c4 byte, c5 byte) { + stream.buf = append(stream.buf, c1, c2, c3, c4, c5) +} + +// Flush writes any buffered data to the underlying io.Writer. +func (stream *Stream) Flush() error { + if stream.out == nil { + return nil + } + if stream.Error != nil { + return stream.Error + } + _, err := stream.out.Write(stream.buf) + if err != nil { + if stream.Error == nil { + stream.Error = err + } + return err + } + stream.buf = stream.buf[:0] + return nil +} + +// WriteRaw write string out without quotes, just like []byte +func (stream *Stream) WriteRaw(s string) { + stream.buf = append(stream.buf, s...) +} + +// WriteNil write null to stream +func (stream *Stream) WriteNil() { + stream.writeFourBytes('n', 'u', 'l', 'l') +} + +// WriteTrue write true to stream +func (stream *Stream) WriteTrue() { + stream.writeFourBytes('t', 'r', 'u', 'e') +} + +// WriteFalse write false to stream +func (stream *Stream) WriteFalse() { + stream.writeFiveBytes('f', 'a', 'l', 's', 'e') +} + +// WriteBool write true or false into stream +func (stream *Stream) WriteBool(val bool) { + if val { + stream.WriteTrue() + } else { + stream.WriteFalse() + } +} + +// WriteObjectStart write { with possible indention +func (stream *Stream) WriteObjectStart() { + stream.indention += stream.cfg.indentionStep + stream.writeByte('{') + stream.writeIndention(0) +} + +// WriteObjectField write "field": with possible indention +func (stream *Stream) WriteObjectField(field string) { + stream.WriteString(field) + if stream.indention > 0 { + stream.writeTwoBytes(':', ' ') + } else { + stream.writeByte(':') + } +} + +// WriteObjectEnd write } with possible indention +func (stream *Stream) WriteObjectEnd() { + stream.writeIndention(stream.cfg.indentionStep) + stream.indention -= stream.cfg.indentionStep + stream.writeByte('}') +} + +// WriteEmptyObject write {} +func (stream *Stream) WriteEmptyObject() { + stream.writeByte('{') + stream.writeByte('}') +} + +// WriteMore write , with possible indention +func (stream *Stream) WriteMore() { + stream.writeByte(',') + stream.writeIndention(0) +} + +// WriteArrayStart write [ with possible indention +func (stream *Stream) WriteArrayStart() { + stream.indention += stream.cfg.indentionStep + stream.writeByte('[') + stream.writeIndention(0) +} + +// WriteEmptyArray write [] +func (stream *Stream) WriteEmptyArray() { + stream.writeTwoBytes('[', ']') +} + +// WriteArrayEnd write ] with possible indention +func (stream *Stream) WriteArrayEnd() { + stream.writeIndention(stream.cfg.indentionStep) + stream.indention -= stream.cfg.indentionStep + stream.writeByte(']') +} + +func (stream *Stream) writeIndention(delta int) { + if stream.indention == 0 { + return + } + stream.writeByte('\n') + toWrite := stream.indention - delta + for i := 0; i < toWrite; i++ { + stream.buf = append(stream.buf, ' ') + } +} diff --git a/vendor/github.com/json-iterator/go/stream_float.go b/vendor/github.com/json-iterator/go/stream_float.go new file mode 100644 index 0000000..826aa59 --- /dev/null +++ b/vendor/github.com/json-iterator/go/stream_float.go @@ -0,0 +1,111 @@ +package jsoniter + +import ( + "fmt" + "math" + "strconv" +) + +var pow10 []uint64 + +func init() { + pow10 = []uint64{1, 10, 100, 1000, 10000, 100000, 1000000} +} + +// WriteFloat32 write float32 to stream +func (stream *Stream) WriteFloat32(val float32) { + if math.IsInf(float64(val), 0) || math.IsNaN(float64(val)) { + stream.Error = fmt.Errorf("unsupported value: %f", val) + return + } + abs := math.Abs(float64(val)) + fmt := byte('f') + // Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right. + if abs != 0 { + if float32(abs) < 1e-6 || float32(abs) >= 1e21 { + fmt = 'e' + } + } + stream.buf = strconv.AppendFloat(stream.buf, float64(val), fmt, -1, 32) +} + +// WriteFloat32Lossy write float32 to stream with ONLY 6 digits precision although much much faster +func (stream *Stream) WriteFloat32Lossy(val float32) { + if math.IsInf(float64(val), 0) || math.IsNaN(float64(val)) { + stream.Error = fmt.Errorf("unsupported value: %f", val) + return + } + if val < 0 { + stream.writeByte('-') + val = -val + } + if val > 0x4ffffff { + stream.WriteFloat32(val) + return + } + precision := 6 + exp := uint64(1000000) // 6 + lval := uint64(float64(val)*float64(exp) + 0.5) + stream.WriteUint64(lval / exp) + fval := lval % exp + if fval == 0 { + return + } + stream.writeByte('.') + for p := precision - 1; p > 0 && fval < pow10[p]; p-- { + stream.writeByte('0') + } + stream.WriteUint64(fval) + for stream.buf[len(stream.buf)-1] == '0' { + stream.buf = stream.buf[:len(stream.buf)-1] + } +} + +// WriteFloat64 write float64 to stream +func (stream *Stream) WriteFloat64(val float64) { + if math.IsInf(val, 0) || math.IsNaN(val) { + stream.Error = fmt.Errorf("unsupported value: %f", val) + return + } + abs := math.Abs(val) + fmt := byte('f') + // Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right. + if abs != 0 { + if abs < 1e-6 || abs >= 1e21 { + fmt = 'e' + } + } + stream.buf = strconv.AppendFloat(stream.buf, float64(val), fmt, -1, 64) +} + +// WriteFloat64Lossy write float64 to stream with ONLY 6 digits precision although much much faster +func (stream *Stream) WriteFloat64Lossy(val float64) { + if math.IsInf(val, 0) || math.IsNaN(val) { + stream.Error = fmt.Errorf("unsupported value: %f", val) + return + } + if val < 0 { + stream.writeByte('-') + val = -val + } + if val > 0x4ffffff { + stream.WriteFloat64(val) + return + } + precision := 6 + exp := uint64(1000000) // 6 + lval := uint64(val*float64(exp) + 0.5) + stream.WriteUint64(lval / exp) + fval := lval % exp + if fval == 0 { + return + } + stream.writeByte('.') + for p := precision - 1; p > 0 && fval < pow10[p]; p-- { + stream.writeByte('0') + } + stream.WriteUint64(fval) + for stream.buf[len(stream.buf)-1] == '0' { + stream.buf = stream.buf[:len(stream.buf)-1] + } +} diff --git a/vendor/github.com/json-iterator/go/stream_int.go b/vendor/github.com/json-iterator/go/stream_int.go new file mode 100644 index 0000000..d1059ee --- /dev/null +++ b/vendor/github.com/json-iterator/go/stream_int.go @@ -0,0 +1,190 @@ +package jsoniter + +var digits []uint32 + +func init() { + digits = make([]uint32, 1000) + for i := uint32(0); i < 1000; i++ { + digits[i] = (((i / 100) + '0') << 16) + ((((i / 10) % 10) + '0') << 8) + i%10 + '0' + if i < 10 { + digits[i] += 2 << 24 + } else if i < 100 { + digits[i] += 1 << 24 + } + } +} + +func writeFirstBuf(space []byte, v uint32) []byte { + start := v >> 24 + if start == 0 { + space = append(space, byte(v>>16), byte(v>>8)) + } else if start == 1 { + space = append(space, byte(v>>8)) + } + space = append(space, byte(v)) + return space +} + +func writeBuf(buf []byte, v uint32) []byte { + return append(buf, byte(v>>16), byte(v>>8), byte(v)) +} + +// WriteUint8 write uint8 to stream +func (stream *Stream) WriteUint8(val uint8) { + stream.buf = writeFirstBuf(stream.buf, digits[val]) +} + +// WriteInt8 write int8 to stream +func (stream *Stream) WriteInt8(nval int8) { + var val uint8 + if nval < 0 { + val = uint8(-nval) + stream.buf = append(stream.buf, '-') + } else { + val = uint8(nval) + } + stream.buf = writeFirstBuf(stream.buf, digits[val]) +} + +// WriteUint16 write uint16 to stream +func (stream *Stream) WriteUint16(val uint16) { + q1 := val / 1000 + if q1 == 0 { + stream.buf = writeFirstBuf(stream.buf, digits[val]) + return + } + r1 := val - q1*1000 + stream.buf = writeFirstBuf(stream.buf, digits[q1]) + stream.buf = writeBuf(stream.buf, digits[r1]) + return +} + +// WriteInt16 write int16 to stream +func (stream *Stream) WriteInt16(nval int16) { + var val uint16 + if nval < 0 { + val = uint16(-nval) + stream.buf = append(stream.buf, '-') + } else { + val = uint16(nval) + } + stream.WriteUint16(val) +} + +// WriteUint32 write uint32 to stream +func (stream *Stream) WriteUint32(val uint32) { + q1 := val / 1000 + if q1 == 0 { + stream.buf = writeFirstBuf(stream.buf, digits[val]) + return + } + r1 := val - q1*1000 + q2 := q1 / 1000 + if q2 == 0 { + stream.buf = writeFirstBuf(stream.buf, digits[q1]) + stream.buf = writeBuf(stream.buf, digits[r1]) + return + } + r2 := q1 - q2*1000 + q3 := q2 / 1000 + if q3 == 0 { + stream.buf = writeFirstBuf(stream.buf, digits[q2]) + } else { + r3 := q2 - q3*1000 + stream.buf = append(stream.buf, byte(q3+'0')) + stream.buf = writeBuf(stream.buf, digits[r3]) + } + stream.buf = writeBuf(stream.buf, digits[r2]) + stream.buf = writeBuf(stream.buf, digits[r1]) +} + +// WriteInt32 write int32 to stream +func (stream *Stream) WriteInt32(nval int32) { + var val uint32 + if nval < 0 { + val = uint32(-nval) + stream.buf = append(stream.buf, '-') + } else { + val = uint32(nval) + } + stream.WriteUint32(val) +} + +// WriteUint64 write uint64 to stream +func (stream *Stream) WriteUint64(val uint64) { + q1 := val / 1000 + if q1 == 0 { + stream.buf = writeFirstBuf(stream.buf, digits[val]) + return + } + r1 := val - q1*1000 + q2 := q1 / 1000 + if q2 == 0 { + stream.buf = writeFirstBuf(stream.buf, digits[q1]) + stream.buf = writeBuf(stream.buf, digits[r1]) + return + } + r2 := q1 - q2*1000 + q3 := q2 / 1000 + if q3 == 0 { + stream.buf = writeFirstBuf(stream.buf, digits[q2]) + stream.buf = writeBuf(stream.buf, digits[r2]) + stream.buf = writeBuf(stream.buf, digits[r1]) + return + } + r3 := q2 - q3*1000 + q4 := q3 / 1000 + if q4 == 0 { + stream.buf = writeFirstBuf(stream.buf, digits[q3]) + stream.buf = writeBuf(stream.buf, digits[r3]) + stream.buf = writeBuf(stream.buf, digits[r2]) + stream.buf = writeBuf(stream.buf, digits[r1]) + return + } + r4 := q3 - q4*1000 + q5 := q4 / 1000 + if q5 == 0 { + stream.buf = writeFirstBuf(stream.buf, digits[q4]) + stream.buf = writeBuf(stream.buf, digits[r4]) + stream.buf = writeBuf(stream.buf, digits[r3]) + stream.buf = writeBuf(stream.buf, digits[r2]) + stream.buf = writeBuf(stream.buf, digits[r1]) + return + } + r5 := q4 - q5*1000 + q6 := q5 / 1000 + if q6 == 0 { + stream.buf = writeFirstBuf(stream.buf, digits[q5]) + } else { + stream.buf = writeFirstBuf(stream.buf, digits[q6]) + r6 := q5 - q6*1000 + stream.buf = writeBuf(stream.buf, digits[r6]) + } + stream.buf = writeBuf(stream.buf, digits[r5]) + stream.buf = writeBuf(stream.buf, digits[r4]) + stream.buf = writeBuf(stream.buf, digits[r3]) + stream.buf = writeBuf(stream.buf, digits[r2]) + stream.buf = writeBuf(stream.buf, digits[r1]) +} + +// WriteInt64 write int64 to stream +func (stream *Stream) WriteInt64(nval int64) { + var val uint64 + if nval < 0 { + val = uint64(-nval) + stream.buf = append(stream.buf, '-') + } else { + val = uint64(nval) + } + stream.WriteUint64(val) +} + +// WriteInt write int to stream +func (stream *Stream) WriteInt(val int) { + stream.WriteInt64(int64(val)) +} + +// WriteUint write uint to stream +func (stream *Stream) WriteUint(val uint) { + stream.WriteUint64(uint64(val)) +} diff --git a/vendor/github.com/json-iterator/go/stream_str.go b/vendor/github.com/json-iterator/go/stream_str.go new file mode 100644 index 0000000..54c2ba0 --- /dev/null +++ b/vendor/github.com/json-iterator/go/stream_str.go @@ -0,0 +1,372 @@ +package jsoniter + +import ( + "unicode/utf8" +) + +// htmlSafeSet holds the value true if the ASCII character with the given +// array position can be safely represented inside a JSON string, embedded +// inside of HTML - -`) - w.WriteString("") - w.WriteString("

") - w.WriteString(html.EscapeString(name)) - w.WriteString("

") - w.WriteString(` -help -
- -

-Click on a value or block to toggle highlighting of that value/block -and its uses. (Values and blocks are highlighted by ID, and IDs of -dead items may be reused, so not all highlights necessarily correspond -to the clicked item.) -

- -

-Faded out values and blocks are dead code that has not been eliminated. -

- -

-Values printed in italics have a dependency cycle. -

- -

-CFG: Dashed edge is for unlikely branches. Blue color is for backward edges. -Edge with a dot means that this edge follows the order in which blocks were laidout. -

- -
-`) - w.WriteString("") - w.WriteString("") -} - -func (w *HTMLWriter) Close() { - if w == nil { - return - } - io.WriteString(w.w, "") - io.WriteString(w.w, "
") - io.WriteString(w.w, "") - io.WriteString(w.w, "") - w.w.Close() - fmt.Printf("dumped IR to %v\n", w.path) -} - -// WriteFunc writes f in a column headed by title. -// phase is used for collapsing columns and should be unique across the table. -func (w *HTMLWriter) WriteFunc(phase, title string, f *Function) { - if w == nil { - return - } - w.WriteColumn(phase, title, "", funcHTML(f, phase, w.dot)) -} - -// WriteColumn writes raw HTML in a column headed by title. -// It is intended for pre- and post-compilation log output. -func (w *HTMLWriter) WriteColumn(phase, title, class, html string) { - if w == nil { - return - } - id := strings.Replace(phase, " ", "-", -1) - // collapsed column - w.Printf("
%v
", id, phase) - - if class == "" { - w.Printf("", id) - } else { - w.Printf("", id, class) - } - w.WriteString("

" + title + "

") - w.WriteString(html) - w.WriteString("") -} - -func (w *HTMLWriter) Printf(msg string, v ...interface{}) { - if _, err := fmt.Fprintf(w.w, msg, v...); err != nil { - log.Fatalf("%v", err) - } -} - -func (w *HTMLWriter) WriteString(s string) { - if _, err := io.WriteString(w.w, s); err != nil { - log.Fatalf("%v", err) - } -} - -func valueHTML(v Node) string { - if v == nil { - return "<nil>" - } - // TODO: Using the value ID as the class ignores the fact - // that value IDs get recycled and that some values - // are transmuted into other values. - class := fmt.Sprintf("t%d", v.ID()) - var label string - switch v := v.(type) { - case *Function: - label = v.RelString(nil) - case *Builtin: - label = v.Name() - default: - label = class - } - return fmt.Sprintf("%s", class, label) -} - -func valueLongHTML(v Node) string { - // TODO: Any intra-value formatting? - // I'm wary of adding too much visual noise, - // but a little bit might be valuable. - // We already have visual noise in the form of punctuation - // maybe we could replace some of that with formatting. - s := fmt.Sprintf("", v.ID()) - - linenumber := "(?)" - if v.Pos().IsValid() { - line := v.Parent().Prog.Fset.Position(v.Pos()).Line - linenumber = fmt.Sprintf("(%d)", line, line) - } - - s += fmt.Sprintf("%s %s = %s", valueHTML(v), linenumber, opName(v)) - - if v, ok := v.(Value); ok { - s += " <" + html.EscapeString(v.Type().String()) + ">" - } - - switch v := v.(type) { - case *Parameter: - s += fmt.Sprintf(" {%s}", html.EscapeString(v.name)) - case *BinOp: - s += fmt.Sprintf(" {%s}", html.EscapeString(v.Op.String())) - case *UnOp: - s += fmt.Sprintf(" {%s}", html.EscapeString(v.Op.String())) - case *Extract: - name := v.Tuple.Type().(*types.Tuple).At(v.Index).Name() - s += fmt.Sprintf(" [%d] (%s)", v.Index, name) - case *Field: - st := v.X.Type().Underlying().(*types.Struct) - // Be robust against a bad index. - name := "?" - if 0 <= v.Field && v.Field < st.NumFields() { - name = st.Field(v.Field).Name() - } - s += fmt.Sprintf(" [%d] (%s)", v.Field, name) - case *FieldAddr: - st := deref(v.X.Type()).Underlying().(*types.Struct) - // Be robust against a bad index. - name := "?" - if 0 <= v.Field && v.Field < st.NumFields() { - name = st.Field(v.Field).Name() - } - - s += fmt.Sprintf(" [%d] (%s)", v.Field, name) - case *Recv: - s += fmt.Sprintf(" {%t}", v.CommaOk) - case *Call: - if v.Common().IsInvoke() { - s += fmt.Sprintf(" {%s}", html.EscapeString(v.Common().Method.FullName())) - } - case *Const: - if v.Value == nil { - s += " {<nil>}" - } else { - s += fmt.Sprintf(" {%s}", html.EscapeString(v.Value.String())) - } - case *Sigma: - s += fmt.Sprintf(" [#%s]", v.From) - } - for _, a := range v.Operands(nil) { - s += fmt.Sprintf(" %s", valueHTML(*a)) - } - - // OPT(dh): we're calling namedValues many times on the same function. - allNames := namedValues(v.Parent()) - var names []string - for name, values := range allNames { - for _, value := range values { - if v == value { - names = append(names, name.Name()) - break - } - } - } - if len(names) != 0 { - s += " (" + strings.Join(names, ", ") + ")" - } - - s += "" - return s -} - -func blockHTML(b *BasicBlock) string { - // TODO: Using the value ID as the class ignores the fact - // that value IDs get recycled and that some values - // are transmuted into other values. - s := html.EscapeString(b.String()) - return fmt.Sprintf("%s", s, s) -} - -func blockLongHTML(b *BasicBlock) string { - var kind string - var term Instruction - if len(b.Instrs) > 0 { - term = b.Control() - kind = opName(term) - } - // TODO: improve this for HTML? - s := fmt.Sprintf("%s", b.Index, kind) - - if term != nil { - ops := term.Operands(nil) - if len(ops) > 0 { - var ss []string - for _, op := range ops { - ss = append(ss, valueHTML(*op)) - } - s += " " + strings.Join(ss, ", ") - } - } - if len(b.Succs) > 0 { - s += " →" // right arrow - for _, c := range b.Succs { - s += " " + blockHTML(c) - } - } - return s -} - -func funcHTML(f *Function, phase string, dot *dotWriter) string { - buf := new(bytes.Buffer) - if dot != nil { - dot.writeFuncSVG(buf, phase, f) - } - fmt.Fprint(buf, "") - p := htmlFuncPrinter{w: buf} - fprintFunc(p, f) - - // fprintFunc(&buf, f) // TODO: HTML, not text,
for line breaks, etc. - fmt.Fprint(buf, "
") - return buf.String() -} - -type htmlFuncPrinter struct { - w io.Writer -} - -func (p htmlFuncPrinter) startBlock(b *BasicBlock, reachable bool) { - var dead string - if !reachable { - dead = "dead-block" - } - fmt.Fprintf(p.w, "
    ", b, dead) - fmt.Fprintf(p.w, "
  • %s:", blockHTML(b)) - if len(b.Preds) > 0 { - io.WriteString(p.w, " ←") // left arrow - for _, pred := range b.Preds { - fmt.Fprintf(p.w, " %s", blockHTML(pred)) - } - } - if len(b.Instrs) > 0 { - io.WriteString(p.w, ``) - } - io.WriteString(p.w, "
  • ") - if len(b.Instrs) > 0 { // start list of values - io.WriteString(p.w, "
  • ") - io.WriteString(p.w, "
      ") - } -} - -func (p htmlFuncPrinter) endBlock(b *BasicBlock) { - if len(b.Instrs) > 0 { // end list of values - io.WriteString(p.w, "
    ") - io.WriteString(p.w, "
  • ") - } - io.WriteString(p.w, "
  • ") - fmt.Fprint(p.w, blockLongHTML(b)) - io.WriteString(p.w, "
  • ") - io.WriteString(p.w, "
") -} - -func (p htmlFuncPrinter) value(v Node, live bool) { - var dead string - if !live { - dead = "dead-value" - } - fmt.Fprintf(p.w, "
  • ", dead) - fmt.Fprint(p.w, valueLongHTML(v)) - io.WriteString(p.w, "
  • ") -} - -func (p htmlFuncPrinter) startDepCycle() { - fmt.Fprintln(p.w, "") -} - -func (p htmlFuncPrinter) endDepCycle() { - fmt.Fprintln(p.w, "") -} - -func (p htmlFuncPrinter) named(n string, vals []Value) { - fmt.Fprintf(p.w, "
  • name %s: ", n) - for _, val := range vals { - fmt.Fprintf(p.w, "%s ", valueHTML(val)) - } - fmt.Fprintf(p.w, "
  • ") -} - -type dotWriter struct { - path string - broken bool -} - -// newDotWriter returns non-nil value when mask is valid. -// dotWriter will generate SVGs only for the phases specified in the mask. -// mask can contain following patterns and combinations of them: -// * - all of them; -// x-y - x through y, inclusive; -// x,y - x and y, but not the passes between. -func newDotWriter() *dotWriter { - path, err := exec.LookPath("dot") - if err != nil { - fmt.Println(err) - return nil - } - return &dotWriter{path: path} -} - -func (d *dotWriter) writeFuncSVG(w io.Writer, phase string, f *Function) { - if d.broken { - return - } - cmd := exec.Command(d.path, "-Tsvg") - pipe, err := cmd.StdinPipe() - if err != nil { - d.broken = true - fmt.Println(err) - return - } - buf := new(bytes.Buffer) - cmd.Stdout = buf - bufErr := new(bytes.Buffer) - cmd.Stderr = bufErr - err = cmd.Start() - if err != nil { - d.broken = true - fmt.Println(err) - return - } - fmt.Fprint(pipe, `digraph "" { margin=0; size="4,40"; ranksep=.2; `) - id := strings.Replace(phase, " ", "-", -1) - fmt.Fprintf(pipe, `id="g_graph_%s";`, id) - fmt.Fprintf(pipe, `node [style=filled,fillcolor=white,fontsize=16,fontname="Menlo,Times,serif",margin="0.01,0.03"];`) - fmt.Fprintf(pipe, `edge [fontsize=16,fontname="Menlo,Times,serif"];`) - for _, b := range f.Blocks { - layout := "" - fmt.Fprintf(pipe, `%v [label="%v%s\n%v",id="graph_node_%v_%v"];`, b, b, layout, b.Control().String(), id, b) - } - indexOf := make([]int, len(f.Blocks)) - for i, b := range f.Blocks { - indexOf[b.Index] = i - } - - // XXX - /* - ponums := make([]int32, len(f.Blocks)) - _ = postorderWithNumbering(f, ponums) - isBackEdge := func(from, to int) bool { - return ponums[from] <= ponums[to] - } - */ - isBackEdge := func(from, to int) bool { return false } - - for _, b := range f.Blocks { - for i, s := range b.Succs { - style := "solid" - color := "black" - arrow := "vee" - if isBackEdge(b.Index, s.Index) { - color = "blue" - } - fmt.Fprintf(pipe, `%v -> %v [label=" %d ",style="%s",color="%s",arrowhead="%s"];`, b, s, i, style, color, arrow) - } - } - fmt.Fprint(pipe, "}") - pipe.Close() - err = cmd.Wait() - if err != nil { - d.broken = true - fmt.Printf("dot: %v\n%v\n", err, bufErr.String()) - return - } - - svgID := "svg_graph_" + id - fmt.Fprintf(w, `
    `, svgID, svgID) - // For now, an awful hack: edit the html as it passes through - // our fingers, finding ' 0 { - fset = initial[0].Fset - } - - prog := ir.NewProgram(fset, mode) - if opts != nil { - prog.PrintFunc = opts.PrintFunc - } - - isInitial := make(map[*packages.Package]bool, len(initial)) - for _, p := range initial { - isInitial[p] = true - } - - irmap := make(map[*packages.Package]*ir.Package) - packages.Visit(initial, nil, func(p *packages.Package) { - if p.Types != nil && !p.IllTyped { - var files []*ast.File - if deps || isInitial[p] { - files = p.Syntax - } - irmap[p] = prog.CreatePackage(p.Types, files, p.TypesInfo, true) - } - }) - - var irpkgs []*ir.Package - for _, p := range initial { - irpkgs = append(irpkgs, irmap[p]) // may be nil - } - return prog, irpkgs -} - -// CreateProgram returns a new program in IR form, given a program -// loaded from source. An IR package is created for each transitively -// error-free package of lprog. -// -// Code for bodies of functions is not built until Build is called -// on the result. -// -// The mode parameter controls diagnostics and checking during IR construction. -// -// Deprecated: use golang.org/x/tools/go/packages and the Packages -// function instead; see ir.ExampleLoadPackages. -// -func CreateProgram(lprog *loader.Program, mode ir.BuilderMode) *ir.Program { - prog := ir.NewProgram(lprog.Fset, mode) - - for _, info := range lprog.AllPackages { - if info.TransitivelyErrorFree { - prog.CreatePackage(info.Pkg, info.Files, &info.Info, info.Importable) - } - } - - return prog -} - -// BuildPackage builds an IR program with IR for a single package. -// -// It populates pkg by type-checking the specified file ASTs. All -// dependencies are loaded using the importer specified by tc, which -// typically loads compiler export data; IR code cannot be built for -// those packages. BuildPackage then constructs an ir.Program with all -// dependency packages created, and builds and returns the IR package -// corresponding to pkg. -// -// The caller must have set pkg.Path() to the import path. -// -// The operation fails if there were any type-checking or import errors. -// -// See ../ir/example_test.go for an example. -// -func BuildPackage(tc *types.Config, fset *token.FileSet, pkg *types.Package, files []*ast.File, mode ir.BuilderMode) (*ir.Package, *types.Info, error) { - if fset == nil { - panic("no token.FileSet") - } - if pkg.Path() == "" { - panic("package has no import path") - } - - info := &types.Info{ - Types: make(map[ast.Expr]types.TypeAndValue), - Defs: make(map[*ast.Ident]types.Object), - Uses: make(map[*ast.Ident]types.Object), - Implicits: make(map[ast.Node]types.Object), - Scopes: make(map[ast.Node]*types.Scope), - Selections: make(map[*ast.SelectorExpr]*types.Selection), - } - if err := types.NewChecker(tc, fset, pkg, info).Files(files); err != nil { - return nil, nil, err - } - - prog := ir.NewProgram(fset, mode) - - // Create IR packages for all imports. - // Order is not significant. - created := make(map[*types.Package]bool) - var createAll func(pkgs []*types.Package) - createAll = func(pkgs []*types.Package) { - for _, p := range pkgs { - if !created[p] { - created[p] = true - prog.CreatePackage(p, nil, nil, true) - createAll(p.Imports()) - } - } - } - createAll(pkg.Imports()) - - // Create and build the primary package. - irpkg := prog.CreatePackage(pkg, files, info, false) - irpkg.Build() - return irpkg, info, nil -} diff --git a/vendor/honnef.co/go/tools/ir/irutil/switch.go b/vendor/honnef.co/go/tools/ir/irutil/switch.go deleted file mode 100644 index f44cbca..0000000 --- a/vendor/honnef.co/go/tools/ir/irutil/switch.go +++ /dev/null @@ -1,264 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package irutil - -// This file implements discovery of switch and type-switch constructs -// from low-level control flow. -// -// Many techniques exist for compiling a high-level switch with -// constant cases to efficient machine code. The optimal choice will -// depend on the data type, the specific case values, the code in the -// body of each case, and the hardware. -// Some examples: -// - a lookup table (for a switch that maps constants to constants) -// - a computed goto -// - a binary tree -// - a perfect hash -// - a two-level switch (to partition constant strings by their first byte). - -import ( - "bytes" - "fmt" - "go/token" - "go/types" - - "honnef.co/go/tools/ir" -) - -// A ConstCase represents a single constant comparison. -// It is part of a Switch. -type ConstCase struct { - Block *ir.BasicBlock // block performing the comparison - Body *ir.BasicBlock // body of the case - Value *ir.Const // case comparand -} - -// A TypeCase represents a single type assertion. -// It is part of a Switch. -type TypeCase struct { - Block *ir.BasicBlock // block performing the type assert - Body *ir.BasicBlock // body of the case - Type types.Type // case type - Binding ir.Value // value bound by this case -} - -// A Switch is a logical high-level control flow operation -// (a multiway branch) discovered by analysis of a CFG containing -// only if/else chains. It is not part of the ir.Instruction set. -// -// One of ConstCases and TypeCases has length >= 2; -// the other is nil. -// -// In a value switch, the list of cases may contain duplicate constants. -// A type switch may contain duplicate types, or types assignable -// to an interface type also in the list. -// TODO(adonovan): eliminate such duplicates. -// -type Switch struct { - Start *ir.BasicBlock // block containing start of if/else chain - X ir.Value // the switch operand - ConstCases []ConstCase // ordered list of constant comparisons - TypeCases []TypeCase // ordered list of type assertions - Default *ir.BasicBlock // successor if all comparisons fail -} - -func (sw *Switch) String() string { - // We represent each block by the String() of its - // first Instruction, e.g. "print(42:int)". - var buf bytes.Buffer - if sw.ConstCases != nil { - fmt.Fprintf(&buf, "switch %s {\n", sw.X.Name()) - for _, c := range sw.ConstCases { - fmt.Fprintf(&buf, "case %s: %s\n", c.Value.Name(), c.Body.Instrs[0]) - } - } else { - fmt.Fprintf(&buf, "switch %s.(type) {\n", sw.X.Name()) - for _, c := range sw.TypeCases { - fmt.Fprintf(&buf, "case %s %s: %s\n", - c.Binding.Name(), c.Type, c.Body.Instrs[0]) - } - } - if sw.Default != nil { - fmt.Fprintf(&buf, "default: %s\n", sw.Default.Instrs[0]) - } - fmt.Fprintf(&buf, "}") - return buf.String() -} - -// Switches examines the control-flow graph of fn and returns the -// set of inferred value and type switches. A value switch tests an -// ir.Value for equality against two or more compile-time constant -// values. Switches involving link-time constants (addresses) are -// ignored. A type switch type-asserts an ir.Value against two or -// more types. -// -// The switches are returned in dominance order. -// -// The resulting switches do not necessarily correspond to uses of the -// 'switch' keyword in the source: for example, a single source-level -// switch statement with non-constant cases may result in zero, one or -// many Switches, one per plural sequence of constant cases. -// Switches may even be inferred from if/else- or goto-based control flow. -// (In general, the control flow constructs of the source program -// cannot be faithfully reproduced from the IR.) -// -func Switches(fn *ir.Function) []Switch { - // Traverse the CFG in dominance order, so we don't - // enter an if/else-chain in the middle. - var switches []Switch - seen := make(map[*ir.BasicBlock]bool) // TODO(adonovan): opt: use ir.blockSet - for _, b := range fn.DomPreorder() { - if x, k := isComparisonBlock(b); x != nil { - // Block b starts a switch. - sw := Switch{Start: b, X: x} - valueSwitch(&sw, k, seen) - if len(sw.ConstCases) > 1 { - switches = append(switches, sw) - } - } - - if y, x, T := isTypeAssertBlock(b); y != nil { - // Block b starts a type switch. - sw := Switch{Start: b, X: x} - typeSwitch(&sw, y, T, seen) - if len(sw.TypeCases) > 1 { - switches = append(switches, sw) - } - } - } - return switches -} - -func isSameX(x1 ir.Value, x2 ir.Value) bool { - if x1 == x2 { - return true - } - if x2, ok := x2.(*ir.Sigma); ok { - return isSameX(x1, x2.X) - } - return false -} - -func valueSwitch(sw *Switch, k *ir.Const, seen map[*ir.BasicBlock]bool) { - b := sw.Start - x := sw.X - for isSameX(sw.X, x) { - if seen[b] { - break - } - seen[b] = true - - sw.ConstCases = append(sw.ConstCases, ConstCase{ - Block: b, - Body: b.Succs[0], - Value: k, - }) - b = b.Succs[1] - n := 0 - for _, instr := range b.Instrs { - switch instr.(type) { - case *ir.If, *ir.BinOp: - n++ - case *ir.Sigma, *ir.Phi, *ir.DebugRef: - default: - n += 1000 - } - } - if n != 2 { - // Block b contains not just 'if x == k' and σ/ϕ nodes, - // so it may have side effects that - // make it unsafe to elide. - break - } - if len(b.Preds) != 1 { - // Block b has multiple predecessors, - // so it cannot be treated as a case. - break - } - x, k = isComparisonBlock(b) - } - sw.Default = b -} - -func typeSwitch(sw *Switch, y ir.Value, T types.Type, seen map[*ir.BasicBlock]bool) { - b := sw.Start - x := sw.X - for isSameX(sw.X, x) { - if seen[b] { - break - } - seen[b] = true - - sw.TypeCases = append(sw.TypeCases, TypeCase{ - Block: b, - Body: b.Succs[0], - Type: T, - Binding: y, - }) - b = b.Succs[1] - n := 0 - for _, instr := range b.Instrs { - switch instr.(type) { - case *ir.TypeAssert, *ir.Extract, *ir.If: - n++ - case *ir.Sigma, *ir.Phi: - default: - n += 1000 - } - } - if n != 4 { - // Block b contains not just - // {TypeAssert; Extract #0; Extract #1; If} - // so it may have side effects that - // make it unsafe to elide. - break - } - if len(b.Preds) != 1 { - // Block b has multiple predecessors, - // so it cannot be treated as a case. - break - } - y, x, T = isTypeAssertBlock(b) - } - sw.Default = b -} - -// isComparisonBlock returns the operands (v, k) if a block ends with -// a comparison v==k, where k is a compile-time constant. -// -func isComparisonBlock(b *ir.BasicBlock) (v ir.Value, k *ir.Const) { - if n := len(b.Instrs); n >= 2 { - if i, ok := b.Instrs[n-1].(*ir.If); ok { - if binop, ok := i.Cond.(*ir.BinOp); ok && binop.Block() == b && binop.Op == token.EQL { - if k, ok := binop.Y.(*ir.Const); ok { - return binop.X, k - } - if k, ok := binop.X.(*ir.Const); ok { - return binop.Y, k - } - } - } - } - return -} - -// isTypeAssertBlock returns the operands (y, x, T) if a block ends with -// a type assertion "if y, ok := x.(T); ok {". -// -func isTypeAssertBlock(b *ir.BasicBlock) (y, x ir.Value, T types.Type) { - if n := len(b.Instrs); n >= 4 { - if i, ok := b.Instrs[n-1].(*ir.If); ok { - if ext1, ok := i.Cond.(*ir.Extract); ok && ext1.Block() == b && ext1.Index == 1 { - if ta, ok := ext1.Tuple.(*ir.TypeAssert); ok && ta.Block() == b { - // hack: relies upon instruction ordering. - if ext0, ok := b.Instrs[n-3].(*ir.Extract); ok { - return ext0, ta.X, ta.AssertedType - } - } - } - } - } - return -} diff --git a/vendor/honnef.co/go/tools/ir/irutil/util.go b/vendor/honnef.co/go/tools/ir/irutil/util.go deleted file mode 100644 index 04b25f5..0000000 --- a/vendor/honnef.co/go/tools/ir/irutil/util.go +++ /dev/null @@ -1,70 +0,0 @@ -package irutil - -import ( - "honnef.co/go/tools/ir" -) - -func Reachable(from, to *ir.BasicBlock) bool { - if from == to { - return true - } - if from.Dominates(to) { - return true - } - - found := false - Walk(from, func(b *ir.BasicBlock) bool { - if b == to { - found = true - return false - } - return true - }) - return found -} - -func Walk(b *ir.BasicBlock, fn func(*ir.BasicBlock) bool) { - seen := map[*ir.BasicBlock]bool{} - wl := []*ir.BasicBlock{b} - for len(wl) > 0 { - b := wl[len(wl)-1] - wl = wl[:len(wl)-1] - if seen[b] { - continue - } - seen[b] = true - if !fn(b) { - continue - } - wl = append(wl, b.Succs...) - } -} - -func Vararg(x *ir.Slice) ([]ir.Value, bool) { - var out []ir.Value - slice, ok := x.X.(*ir.Alloc) - if !ok { - return nil, false - } - for _, ref := range *slice.Referrers() { - if ref == x { - continue - } - if ref.Block() != x.Block() { - return nil, false - } - idx, ok := ref.(*ir.IndexAddr) - if !ok { - return nil, false - } - if len(*idx.Referrers()) != 1 { - return nil, false - } - store, ok := (*idx.Referrers())[0].(*ir.Store) - if !ok { - return nil, false - } - out = append(out, store.Val) - } - return out, true -} diff --git a/vendor/honnef.co/go/tools/ir/irutil/visit.go b/vendor/honnef.co/go/tools/ir/irutil/visit.go deleted file mode 100644 index 657c9cd..0000000 --- a/vendor/honnef.co/go/tools/ir/irutil/visit.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package irutil // import "honnef.co/go/tools/ir/irutil" - -import "honnef.co/go/tools/ir" - -// This file defines utilities for visiting the IR of -// a Program. -// -// TODO(adonovan): test coverage. - -// AllFunctions finds and returns the set of functions potentially -// needed by program prog, as determined by a simple linker-style -// reachability algorithm starting from the members and method-sets of -// each package. The result may include anonymous functions and -// synthetic wrappers. -// -// Precondition: all packages are built. -// -func AllFunctions(prog *ir.Program) map[*ir.Function]bool { - visit := visitor{ - prog: prog, - seen: make(map[*ir.Function]bool), - } - visit.program() - return visit.seen -} - -type visitor struct { - prog *ir.Program - seen map[*ir.Function]bool -} - -func (visit *visitor) program() { - for _, pkg := range visit.prog.AllPackages() { - for _, mem := range pkg.Members { - if fn, ok := mem.(*ir.Function); ok { - visit.function(fn) - } - } - } - for _, T := range visit.prog.RuntimeTypes() { - mset := visit.prog.MethodSets.MethodSet(T) - for i, n := 0, mset.Len(); i < n; i++ { - visit.function(visit.prog.MethodValue(mset.At(i))) - } - } -} - -func (visit *visitor) function(fn *ir.Function) { - if !visit.seen[fn] { - visit.seen[fn] = true - var buf [10]*ir.Value // avoid alloc in common case - for _, b := range fn.Blocks { - for _, instr := range b.Instrs { - for _, op := range instr.Operands(buf[:0]) { - if fn, ok := (*op).(*ir.Function); ok { - visit.function(fn) - } - } - } - } - } -} - -// MainPackages returns the subset of the specified packages -// named "main" that define a main function. -// The result may include synthetic "testmain" packages. -func MainPackages(pkgs []*ir.Package) []*ir.Package { - var mains []*ir.Package - for _, pkg := range pkgs { - if pkg.Pkg.Name() == "main" && pkg.Func("main") != nil { - mains = append(mains, pkg) - } - } - return mains -} diff --git a/vendor/honnef.co/go/tools/ir/lift.go b/vendor/honnef.co/go/tools/ir/lift.go deleted file mode 100644 index 71d5c8c..0000000 --- a/vendor/honnef.co/go/tools/ir/lift.go +++ /dev/null @@ -1,1063 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines the lifting pass which tries to "lift" Alloc -// cells (new/local variables) into SSA registers, replacing loads -// with the dominating stored value, eliminating loads and stores, and -// inserting φ- and σ-nodes as needed. - -// Cited papers and resources: -// -// Ron Cytron et al. 1991. Efficiently computing SSA form... -// http://doi.acm.org/10.1145/115372.115320 -// -// Cooper, Harvey, Kennedy. 2001. A Simple, Fast Dominance Algorithm. -// Software Practice and Experience 2001, 4:1-10. -// http://www.hipersoft.rice.edu/grads/publications/dom14.pdf -// -// Daniel Berlin, llvmdev mailing list, 2012. -// http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-January/046638.html -// (Be sure to expand the whole thread.) -// -// C. Scott Ananian. 1997. The static single information form. -// -// Jeremy Singer. 2006. Static program analysis based on virtual register renaming. - -// TODO(adonovan): opt: there are many optimizations worth evaluating, and -// the conventional wisdom for SSA construction is that a simple -// algorithm well engineered often beats those of better asymptotic -// complexity on all but the most egregious inputs. -// -// Danny Berlin suggests that the Cooper et al. algorithm for -// computing the dominance frontier is superior to Cytron et al. -// Furthermore he recommends that rather than computing the DF for the -// whole function then renaming all alloc cells, it may be cheaper to -// compute the DF for each alloc cell separately and throw it away. -// -// Consider exploiting liveness information to avoid creating dead -// φ-nodes which we then immediately remove. -// -// Also see many other "TODO: opt" suggestions in the code. - -import ( - "fmt" - "go/types" - "os" -) - -// If true, show diagnostic information at each step of lifting. -// Very verbose. -const debugLifting = false - -// domFrontier maps each block to the set of blocks in its dominance -// frontier. The outer slice is conceptually a map keyed by -// Block.Index. The inner slice is conceptually a set, possibly -// containing duplicates. -// -// TODO(adonovan): opt: measure impact of dups; consider a packed bit -// representation, e.g. big.Int, and bitwise parallel operations for -// the union step in the Children loop. -// -// domFrontier's methods mutate the slice's elements but not its -// length, so their receivers needn't be pointers. -// -type domFrontier [][]*BasicBlock - -func (df domFrontier) add(u, v *BasicBlock) { - df[u.Index] = append(df[u.Index], v) -} - -// build builds the dominance frontier df for the dominator tree of -// fn, using the algorithm found in A Simple, Fast Dominance -// Algorithm, Figure 5. -// -// TODO(adonovan): opt: consider Berlin approach, computing pruned SSA -// by pruning the entire IDF computation, rather than merely pruning -// the DF -> IDF step. -func (df domFrontier) build(fn *Function) { - for _, b := range fn.Blocks { - if len(b.Preds) >= 2 { - for _, p := range b.Preds { - runner := p - for runner != b.dom.idom { - df.add(runner, b) - runner = runner.dom.idom - } - } - } - } -} - -func buildDomFrontier(fn *Function) domFrontier { - df := make(domFrontier, len(fn.Blocks)) - df.build(fn) - return df -} - -type postDomFrontier [][]*BasicBlock - -func (rdf postDomFrontier) add(u, v *BasicBlock) { - rdf[u.Index] = append(rdf[u.Index], v) -} - -func (rdf postDomFrontier) build(fn *Function) { - for _, b := range fn.Blocks { - if len(b.Succs) >= 2 { - for _, s := range b.Succs { - runner := s - for runner != b.pdom.idom { - rdf.add(runner, b) - runner = runner.pdom.idom - } - } - } - } -} - -func buildPostDomFrontier(fn *Function) postDomFrontier { - rdf := make(postDomFrontier, len(fn.Blocks)) - rdf.build(fn) - return rdf -} - -func removeInstr(refs []Instruction, instr Instruction) []Instruction { - i := 0 - for _, ref := range refs { - if ref == instr { - continue - } - refs[i] = ref - i++ - } - for j := i; j != len(refs); j++ { - refs[j] = nil // aid GC - } - return refs[:i] -} - -func clearInstrs(instrs []Instruction) { - for i := range instrs { - instrs[i] = nil - } -} - -// lift replaces local and new Allocs accessed only with -// load/store by IR registers, inserting φ- and σ-nodes where necessary. -// The result is a program in pruned SSI form. -// -// Preconditions: -// - fn has no dead blocks (blockopt has run). -// - Def/use info (Operands and Referrers) is up-to-date. -// - The dominator tree is up-to-date. -// -func lift(fn *Function) { - // TODO(adonovan): opt: lots of little optimizations may be - // worthwhile here, especially if they cause us to avoid - // buildDomFrontier. For example: - // - // - Alloc never loaded? Eliminate. - // - Alloc never stored? Replace all loads with a zero constant. - // - Alloc stored once? Replace loads with dominating store; - // don't forget that an Alloc is itself an effective store - // of zero. - // - Alloc used only within a single block? - // Use degenerate algorithm avoiding φ-nodes. - // - Consider synergy with scalar replacement of aggregates (SRA). - // e.g. *(&x.f) where x is an Alloc. - // Perhaps we'd get better results if we generated this as x.f - // i.e. Field(x, .f) instead of Load(FieldIndex(x, .f)). - // Unclear. - // - // But we will start with the simplest correct code. - var df domFrontier - var rdf postDomFrontier - var closure *closure - var newPhis newPhiMap - var newSigmas newSigmaMap - - // During this pass we will replace some BasicBlock.Instrs - // (allocs, loads and stores) with nil, keeping a count in - // BasicBlock.gaps. At the end we will reset Instrs to the - // concatenation of all non-dead newPhis and non-nil Instrs - // for the block, reusing the original array if space permits. - - // While we're here, we also eliminate 'rundefers' - // instructions in functions that contain no 'defer' - // instructions. - usesDefer := false - - // Determine which allocs we can lift and number them densely. - // The renaming phase uses this numbering for compact maps. - numAllocs := 0 - for _, b := range fn.Blocks { - b.gaps = 0 - b.rundefers = 0 - for _, instr := range b.Instrs { - switch instr := instr.(type) { - case *Alloc: - if !liftable(instr) { - instr.index = -1 - continue - } - index := -1 - if numAllocs == 0 { - df = buildDomFrontier(fn) - rdf = buildPostDomFrontier(fn) - if len(fn.Blocks) > 2 { - closure = transitiveClosure(fn) - } - newPhis = make(newPhiMap, len(fn.Blocks)) - newSigmas = make(newSigmaMap, len(fn.Blocks)) - - if debugLifting { - title := false - for i, blocks := range df { - if blocks != nil { - if !title { - fmt.Fprintf(os.Stderr, "Dominance frontier of %s:\n", fn) - title = true - } - fmt.Fprintf(os.Stderr, "\t%s: %s\n", fn.Blocks[i], blocks) - } - } - } - } - liftAlloc(closure, df, rdf, instr, newPhis, newSigmas) - index = numAllocs - numAllocs++ - instr.index = index - case *Defer: - usesDefer = true - case *RunDefers: - b.rundefers++ - } - } - } - - if numAllocs > 0 { - // renaming maps an alloc (keyed by index) to its replacement - // value. Initially the renaming contains nil, signifying the - // zero constant of the appropriate type; we construct the - // Const lazily at most once on each path through the domtree. - // TODO(adonovan): opt: cache per-function not per subtree. - renaming := make([]Value, numAllocs) - - // Renaming. - rename(fn.Blocks[0], renaming, newPhis, newSigmas) - - simplifyPhis(newPhis) - - // Eliminate dead φ- and σ-nodes. - markLiveNodes(fn.Blocks, newPhis, newSigmas) - } - - // Prepend remaining live φ-nodes to each block and possibly kill rundefers. - for _, b := range fn.Blocks { - var head []Instruction - if numAllocs > 0 { - nps := newPhis[b.Index] - head = make([]Instruction, 0, len(nps)) - for _, pred := range b.Preds { - nss := newSigmas[pred.Index] - idx := pred.succIndex(b) - for _, newSigma := range nss { - if sigma := newSigma.sigmas[idx]; sigma != nil && sigma.live { - head = append(head, sigma) - - // we didn't populate referrers before, as most - // sigma nodes will be killed - if refs := sigma.X.Referrers(); refs != nil { - *refs = append(*refs, sigma) - } - } else if sigma != nil { - sigma.block = nil - } - } - } - for _, np := range nps { - if np.phi.live { - head = append(head, np.phi) - } else { - for _, edge := range np.phi.Edges { - if refs := edge.Referrers(); refs != nil { - *refs = removeInstr(*refs, np.phi) - } - } - np.phi.block = nil - } - } - } - - rundefersToKill := b.rundefers - if usesDefer { - rundefersToKill = 0 - } - - j := len(head) - if j+b.gaps+rundefersToKill == 0 { - continue // fast path: no new phis or gaps - } - - // We could do straight copies instead of element-wise copies - // when both b.gaps and rundefersToKill are zero. However, - // that seems to only be the case ~1% of the time, which - // doesn't seem worth the extra branch. - - // Remove dead instructions, add phis and sigmas - ns := len(b.Instrs) + j - b.gaps - rundefersToKill - if ns <= cap(b.Instrs) { - // b.Instrs has enough capacity to store all instructions - - // OPT(dh): check cap vs the actually required space; if - // there is a big enough difference, it may be worth - // allocating a new slice, to avoid pinning memory. - dst := b.Instrs[:cap(b.Instrs)] - i := len(dst) - 1 - for n := len(b.Instrs) - 1; n >= 0; n-- { - instr := dst[n] - if instr == nil { - continue - } - if !usesDefer { - if _, ok := instr.(*RunDefers); ok { - continue - } - } - dst[i] = instr - i-- - } - off := i + 1 - len(head) - // aid GC - clearInstrs(dst[:off]) - dst = dst[off:] - copy(dst, head) - b.Instrs = dst - } else { - // not enough space, so allocate a new slice and copy - // over. - dst := make([]Instruction, ns) - copy(dst, head) - - for _, instr := range b.Instrs { - if instr == nil { - continue - } - if !usesDefer { - if _, ok := instr.(*RunDefers); ok { - continue - } - } - dst[j] = instr - j++ - } - b.Instrs = dst - } - } - - // Remove any fn.Locals that were lifted. - j := 0 - for _, l := range fn.Locals { - if l.index < 0 { - fn.Locals[j] = l - j++ - } - } - // Nil out fn.Locals[j:] to aid GC. - for i := j; i < len(fn.Locals); i++ { - fn.Locals[i] = nil - } - fn.Locals = fn.Locals[:j] -} - -func hasDirectReferrer(instr Instruction) bool { - for _, instr := range *instr.Referrers() { - switch instr.(type) { - case *Phi, *Sigma: - // ignore - default: - return true - } - } - return false -} - -func markLiveNodes(blocks []*BasicBlock, newPhis newPhiMap, newSigmas newSigmaMap) { - // Phi and sigma nodes are considered live if a non-phi, non-sigma - // node uses them. Once we find a node that is live, we mark all - // of its operands as used, too. - for _, npList := range newPhis { - for _, np := range npList { - phi := np.phi - if !phi.live && hasDirectReferrer(phi) { - markLivePhi(phi) - } - } - } - for _, npList := range newSigmas { - for _, np := range npList { - for _, sigma := range np.sigmas { - if sigma != nil && !sigma.live && hasDirectReferrer(sigma) { - markLiveSigma(sigma) - } - } - } - } - // Existing φ-nodes due to && and || operators - // are all considered live (see Go issue 19622). - for _, b := range blocks { - for _, phi := range b.phis() { - markLivePhi(phi.(*Phi)) - } - } -} - -func markLivePhi(phi *Phi) { - phi.live = true - for _, rand := range phi.Edges { - switch rand := rand.(type) { - case *Phi: - if !rand.live { - markLivePhi(rand) - } - case *Sigma: - if !rand.live { - markLiveSigma(rand) - } - } - } -} - -func markLiveSigma(sigma *Sigma) { - sigma.live = true - switch rand := sigma.X.(type) { - case *Phi: - if !rand.live { - markLivePhi(rand) - } - case *Sigma: - if !rand.live { - markLiveSigma(rand) - } - } -} - -// simplifyPhis replaces trivial phis with non-phi alternatives. Phi -// nodes where all edges are identical, or consist of only the phi -// itself and one other value, may be replaced with the value. -func simplifyPhis(newPhis newPhiMap) { - // find all phis that are trivial and can be replaced with a - // non-phi value. run until we reach a fixpoint, because replacing - // a phi may make other phis trivial. - for changed := true; changed; { - changed = false - for _, npList := range newPhis { - for _, np := range npList { - if np.phi.live { - // we're reusing 'live' to mean 'dead' in the context of simplifyPhis - continue - } - if r, ok := isUselessPhi(np.phi); ok { - // useless phi, replace its uses with the - // replacement value. the dead phi pass will clean - // up the phi afterwards. - replaceAll(np.phi, r) - np.phi.live = true - changed = true - } - } - } - } - - for _, npList := range newPhis { - for _, np := range npList { - np.phi.live = false - } - } -} - -type BlockSet struct { - idx int - values []bool - count int -} - -func NewBlockSet(size int) *BlockSet { - return &BlockSet{values: make([]bool, size)} -} - -func (s *BlockSet) Set(s2 *BlockSet) { - copy(s.values, s2.values) - s.count = 0 - for _, v := range s.values { - if v { - s.count++ - } - } -} - -func (s *BlockSet) Num() int { - return s.count -} - -func (s *BlockSet) Has(b *BasicBlock) bool { - if b.Index >= len(s.values) { - return false - } - return s.values[b.Index] -} - -// add adds b to the set and returns true if the set changed. -func (s *BlockSet) Add(b *BasicBlock) bool { - if s.values[b.Index] { - return false - } - s.count++ - s.values[b.Index] = true - s.idx = b.Index - - return true -} - -func (s *BlockSet) Clear() { - for j := range s.values { - s.values[j] = false - } - s.count = 0 -} - -// take removes an arbitrary element from a set s and -// returns its index, or returns -1 if empty. -func (s *BlockSet) Take() int { - // [i, end] - for i := s.idx; i < len(s.values); i++ { - if s.values[i] { - s.values[i] = false - s.idx = i - s.count-- - return i - } - } - - // [start, i) - for i := 0; i < s.idx; i++ { - if s.values[i] { - s.values[i] = false - s.idx = i - s.count-- - return i - } - } - - return -1 -} - -type closure struct { - span []uint32 - reachables []interval -} - -type interval uint32 - -const ( - flagMask = 1 << 31 - numBits = 20 - lengthBits = 32 - numBits - 1 - lengthMask = (1<>numBits - } else { - // large interval - i++ - start = uint32(inv & numMask) - end = uint32(r[i]) - } - if idx >= start && idx <= end { - return true - } - } - return false -} - -func (c closure) reachable(id int) []interval { - return c.reachables[c.span[id]:c.span[id+1]] -} - -func (c closure) walk(current *BasicBlock, b *BasicBlock, visited []bool) { - visited[b.Index] = true - for _, succ := range b.Succs { - if visited[succ.Index] { - continue - } - visited[succ.Index] = true - c.walk(current, succ, visited) - } -} - -func transitiveClosure(fn *Function) *closure { - reachable := make([]bool, len(fn.Blocks)) - c := &closure{} - c.span = make([]uint32, len(fn.Blocks)+1) - - addInterval := func(start, end uint32) { - if l := end - start; l <= 1<= 0 { // store of zero to Alloc cell - // Replace dominated loads by the zero value. - renaming[instr.index] = nil - if debugLifting { - fmt.Fprintf(os.Stderr, "\tkill alloc %s\n", instr) - } - // Delete the Alloc. - u.Instrs[i] = nil - u.gaps++ - } - - case *Store: - if alloc, ok := instr.Addr.(*Alloc); ok && alloc.index >= 0 { // store to Alloc cell - // Replace dominated loads by the stored value. - renaming[alloc.index] = instr.Val - if debugLifting { - fmt.Fprintf(os.Stderr, "\tkill store %s; new value: %s\n", - instr, instr.Val.Name()) - } - if refs := instr.Addr.Referrers(); refs != nil { - *refs = removeInstr(*refs, instr) - } - if refs := instr.Val.Referrers(); refs != nil { - *refs = removeInstr(*refs, instr) - } - // Delete the Store. - u.Instrs[i] = nil - u.gaps++ - } - - case *Load: - if alloc, ok := instr.X.(*Alloc); ok && alloc.index >= 0 { // load of Alloc cell - // In theory, we wouldn't be able to replace loads - // directly, because a loaded value could be used in - // different branches, in which case it should be - // replaced with different sigma nodes. But we can't - // simply defer replacement, either, because then - // later stores might incorrectly affect this load. - // - // To avoid doing renaming on _all_ values (instead of - // just loads and stores like we're doing), we make - // sure during code generation that each load is only - // used in one block. For example, in constant switch - // statements, where the tag is only evaluated once, - // we store it in a temporary and load it for each - // comparison, so that we have individual loads to - // replace. - newval := renamed(u.Parent(), renaming, alloc) - if debugLifting { - fmt.Fprintf(os.Stderr, "\tupdate load %s = %s with %s\n", - instr.Name(), instr, newval) - } - replaceAll(instr, newval) - u.Instrs[i] = nil - u.gaps++ - } - - case *DebugRef: - if x, ok := instr.X.(*Alloc); ok && x.index >= 0 { - if instr.IsAddr { - instr.X = renamed(u.Parent(), renaming, x) - instr.IsAddr = false - - // Add DebugRef to instr.X's referrers. - if refs := instr.X.Referrers(); refs != nil { - *refs = append(*refs, instr) - } - } else { - // A source expression denotes the address - // of an Alloc that was optimized away. - instr.X = nil - - // Delete the DebugRef. - u.Instrs[i] = nil - u.gaps++ - } - } - } - } - - // update all outgoing sigma nodes with the dominating store - for _, sigmas := range newSigmas[u.Index] { - for _, sigma := range sigmas.sigmas { - if sigma == nil { - continue - } - sigma.X = renamed(u.Parent(), renaming, sigmas.alloc) - } - } - - // For each φ-node in a CFG successor, rename the edge. - for succi, v := range u.Succs { - phis := newPhis[v.Index] - if len(phis) == 0 { - continue - } - i := v.predIndex(u) - for _, np := range phis { - phi := np.phi - alloc := np.alloc - // if there's a sigma node, use it, else use the dominating value - var newval Value - for _, sigmas := range newSigmas[u.Index] { - if sigmas.alloc == alloc && sigmas.sigmas[succi] != nil { - newval = sigmas.sigmas[succi] - break - } - } - if newval == nil { - newval = renamed(u.Parent(), renaming, alloc) - } - if debugLifting { - fmt.Fprintf(os.Stderr, "\tsetphi %s edge %s -> %s (#%d) (alloc=%s) := %s\n", - phi.Name(), u, v, i, alloc.Name(), newval.Name()) - } - phi.Edges[i] = newval - if prefs := newval.Referrers(); prefs != nil { - *prefs = append(*prefs, phi) - } - } - } - - // Continue depth-first recursion over domtree, pushing a - // fresh copy of the renaming map for each subtree. - r := make([]Value, len(renaming)) - for _, v := range u.dom.children { - // XXX add debugging - copy(r, renaming) - - // on entry to a block, the incoming sigma nodes become the new values for their alloc - if idx := u.succIndex(v); idx != -1 { - for _, sigma := range newSigmas[u.Index] { - if sigma.sigmas[idx] != nil { - r[sigma.alloc.index] = sigma.sigmas[idx] - } - } - } - rename(v, r, newPhis, newSigmas) - } - -} diff --git a/vendor/honnef.co/go/tools/ir/lvalue.go b/vendor/honnef.co/go/tools/ir/lvalue.go deleted file mode 100644 index f676a1f..0000000 --- a/vendor/honnef.co/go/tools/ir/lvalue.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// lvalues are the union of addressable expressions and map-index -// expressions. - -import ( - "go/ast" - "go/types" -) - -// An lvalue represents an assignable location that may appear on the -// left-hand side of an assignment. This is a generalization of a -// pointer to permit updates to elements of maps. -// -type lvalue interface { - store(fn *Function, v Value, source ast.Node) // stores v into the location - load(fn *Function, source ast.Node) Value // loads the contents of the location - address(fn *Function) Value // address of the location - typ() types.Type // returns the type of the location -} - -// An address is an lvalue represented by a true pointer. -type address struct { - addr Value - expr ast.Expr // source syntax of the value (not address) [debug mode] -} - -func (a *address) load(fn *Function, source ast.Node) Value { - return emitLoad(fn, a.addr, source) -} - -func (a *address) store(fn *Function, v Value, source ast.Node) { - store := emitStore(fn, a.addr, v, source) - if a.expr != nil { - // store.Val is v, converted for assignability. - emitDebugRef(fn, a.expr, store.Val, false) - } -} - -func (a *address) address(fn *Function) Value { - if a.expr != nil { - emitDebugRef(fn, a.expr, a.addr, true) - } - return a.addr -} - -func (a *address) typ() types.Type { - return deref(a.addr.Type()) -} - -// An element is an lvalue represented by m[k], the location of an -// element of a map. These locations are not addressable -// since pointers cannot be formed from them, but they do support -// load() and store(). -// -type element struct { - m, k Value // map - t types.Type // map element type -} - -func (e *element) load(fn *Function, source ast.Node) Value { - l := &MapLookup{ - X: e.m, - Index: e.k, - } - l.setType(e.t) - return fn.emit(l, source) -} - -func (e *element) store(fn *Function, v Value, source ast.Node) { - up := &MapUpdate{ - Map: e.m, - Key: e.k, - Value: emitConv(fn, v, e.t, source), - } - fn.emit(up, source) -} - -func (e *element) address(fn *Function) Value { - panic("map elements are not addressable") -} - -func (e *element) typ() types.Type { - return e.t -} - -// A blank is a dummy variable whose name is "_". -// It is not reified: loads are illegal and stores are ignored. -// -type blank struct{} - -func (bl blank) load(fn *Function, source ast.Node) Value { - panic("blank.load is illegal") -} - -func (bl blank) store(fn *Function, v Value, source ast.Node) { - s := &BlankStore{ - Val: v, - } - fn.emit(s, source) -} - -func (bl blank) address(fn *Function) Value { - panic("blank var is not addressable") -} - -func (bl blank) typ() types.Type { - // This should be the type of the blank Ident; the typechecker - // doesn't provide this yet, but fortunately, we don't need it - // yet either. - panic("blank.typ is unimplemented") -} diff --git a/vendor/honnef.co/go/tools/ir/methods.go b/vendor/honnef.co/go/tools/ir/methods.go deleted file mode 100644 index 517f448..0000000 --- a/vendor/honnef.co/go/tools/ir/methods.go +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines utilities for population of method sets. - -import ( - "fmt" - "go/types" -) - -// MethodValue returns the Function implementing method sel, building -// wrapper methods on demand. It returns nil if sel denotes an -// abstract (interface) method. -// -// Precondition: sel.Kind() == MethodVal. -// -// Thread-safe. -// -// EXCLUSIVE_LOCKS_ACQUIRED(prog.methodsMu) -// -func (prog *Program) MethodValue(sel *types.Selection) *Function { - if sel.Kind() != types.MethodVal { - panic(fmt.Sprintf("MethodValue(%s) kind != MethodVal", sel)) - } - T := sel.Recv() - if isInterface(T) { - return nil // abstract method - } - if prog.mode&LogSource != 0 { - defer logStack("MethodValue %s %v", T, sel)() - } - - prog.methodsMu.Lock() - defer prog.methodsMu.Unlock() - - return prog.addMethod(prog.createMethodSet(T), sel) -} - -// LookupMethod returns the implementation of the method of type T -// identified by (pkg, name). It returns nil if the method exists but -// is abstract, and panics if T has no such method. -// -func (prog *Program) LookupMethod(T types.Type, pkg *types.Package, name string) *Function { - sel := prog.MethodSets.MethodSet(T).Lookup(pkg, name) - if sel == nil { - panic(fmt.Sprintf("%s has no method %s", T, types.Id(pkg, name))) - } - return prog.MethodValue(sel) -} - -// methodSet contains the (concrete) methods of a non-interface type. -type methodSet struct { - mapping map[string]*Function // populated lazily - complete bool // mapping contains all methods -} - -// Precondition: !isInterface(T). -// EXCLUSIVE_LOCKS_REQUIRED(prog.methodsMu) -func (prog *Program) createMethodSet(T types.Type) *methodSet { - mset, ok := prog.methodSets.At(T).(*methodSet) - if !ok { - mset = &methodSet{mapping: make(map[string]*Function)} - prog.methodSets.Set(T, mset) - } - return mset -} - -// EXCLUSIVE_LOCKS_REQUIRED(prog.methodsMu) -func (prog *Program) addMethod(mset *methodSet, sel *types.Selection) *Function { - if sel.Kind() == types.MethodExpr { - panic(sel) - } - id := sel.Obj().Id() - fn := mset.mapping[id] - if fn == nil { - obj := sel.Obj().(*types.Func) - - needsPromotion := len(sel.Index()) > 1 - needsIndirection := !isPointer(recvType(obj)) && isPointer(sel.Recv()) - if needsPromotion || needsIndirection { - fn = makeWrapper(prog, sel) - } else { - fn = prog.declaredFunc(obj) - } - if fn.Signature.Recv() == nil { - panic(fn) // missing receiver - } - mset.mapping[id] = fn - } - return fn -} - -// RuntimeTypes returns a new unordered slice containing all -// concrete types in the program for which a complete (non-empty) -// method set is required at run-time. -// -// Thread-safe. -// -// EXCLUSIVE_LOCKS_ACQUIRED(prog.methodsMu) -// -func (prog *Program) RuntimeTypes() []types.Type { - prog.methodsMu.Lock() - defer prog.methodsMu.Unlock() - - var res []types.Type - prog.methodSets.Iterate(func(T types.Type, v interface{}) { - if v.(*methodSet).complete { - res = append(res, T) - } - }) - return res -} - -// declaredFunc returns the concrete function/method denoted by obj. -// Panic ensues if there is none. -// -func (prog *Program) declaredFunc(obj *types.Func) *Function { - if v := prog.packageLevelValue(obj); v != nil { - return v.(*Function) - } - panic("no concrete method: " + obj.String()) -} - -// needMethodsOf ensures that runtime type information (including the -// complete method set) is available for the specified type T and all -// its subcomponents. -// -// needMethodsOf must be called for at least every type that is an -// operand of some MakeInterface instruction, and for the type of -// every exported package member. -// -// Precondition: T is not a method signature (*Signature with Recv()!=nil). -// -// Thread-safe. (Called via emitConv from multiple builder goroutines.) -// -// TODO(adonovan): make this faster. It accounts for 20% of SSA build time. -// -// EXCLUSIVE_LOCKS_ACQUIRED(prog.methodsMu) -// -func (prog *Program) needMethodsOf(T types.Type) { - prog.methodsMu.Lock() - prog.needMethods(T, false) - prog.methodsMu.Unlock() -} - -// Precondition: T is not a method signature (*Signature with Recv()!=nil). -// Recursive case: skip => don't create methods for T. -// -// EXCLUSIVE_LOCKS_REQUIRED(prog.methodsMu) -// -func (prog *Program) needMethods(T types.Type, skip bool) { - // Each package maintains its own set of types it has visited. - if prevSkip, ok := prog.runtimeTypes.At(T).(bool); ok { - // needMethods(T) was previously called - if !prevSkip || skip { - return // already seen, with same or false 'skip' value - } - } - prog.runtimeTypes.Set(T, skip) - - tmset := prog.MethodSets.MethodSet(T) - - if !skip && !isInterface(T) && tmset.Len() > 0 { - // Create methods of T. - mset := prog.createMethodSet(T) - if !mset.complete { - mset.complete = true - n := tmset.Len() - for i := 0; i < n; i++ { - prog.addMethod(mset, tmset.At(i)) - } - } - } - - // Recursion over signatures of each method. - for i := 0; i < tmset.Len(); i++ { - sig := tmset.At(i).Type().(*types.Signature) - prog.needMethods(sig.Params(), false) - prog.needMethods(sig.Results(), false) - } - - switch t := T.(type) { - case *types.Basic: - // nop - - case *types.Interface: - // nop---handled by recursion over method set. - - case *types.Pointer: - prog.needMethods(t.Elem(), false) - - case *types.Slice: - prog.needMethods(t.Elem(), false) - - case *types.Chan: - prog.needMethods(t.Elem(), false) - - case *types.Map: - prog.needMethods(t.Key(), false) - prog.needMethods(t.Elem(), false) - - case *types.Signature: - if t.Recv() != nil { - panic(fmt.Sprintf("Signature %s has Recv %s", t, t.Recv())) - } - prog.needMethods(t.Params(), false) - prog.needMethods(t.Results(), false) - - case *types.Named: - // A pointer-to-named type can be derived from a named - // type via reflection. It may have methods too. - prog.needMethods(types.NewPointer(T), false) - - // Consider 'type T struct{S}' where S has methods. - // Reflection provides no way to get from T to struct{S}, - // only to S, so the method set of struct{S} is unwanted, - // so set 'skip' flag during recursion. - prog.needMethods(t.Underlying(), true) - - case *types.Array: - prog.needMethods(t.Elem(), false) - - case *types.Struct: - for i, n := 0, t.NumFields(); i < n; i++ { - prog.needMethods(t.Field(i).Type(), false) - } - - case *types.Tuple: - for i, n := 0, t.Len(); i < n; i++ { - prog.needMethods(t.At(i).Type(), false) - } - - default: - panic(T) - } -} diff --git a/vendor/honnef.co/go/tools/ir/mode.go b/vendor/honnef.co/go/tools/ir/mode.go deleted file mode 100644 index da548fd..0000000 --- a/vendor/honnef.co/go/tools/ir/mode.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines the BuilderMode type and its command-line flag. - -import ( - "bytes" - "fmt" -) - -// BuilderMode is a bitmask of options for diagnostics and checking. -// -// *BuilderMode satisfies the flag.Value interface. Example: -// -// var mode = ir.BuilderMode(0) -// func init() { flag.Var(&mode, "build", ir.BuilderModeDoc) } -// -type BuilderMode uint - -const ( - PrintPackages BuilderMode = 1 << iota // Print package inventory to stdout - PrintFunctions // Print function IR code to stdout - PrintSource // Print source code when printing function IR - LogSource // Log source locations as IR builder progresses - SanityCheckFunctions // Perform sanity checking of function bodies - NaiveForm // Build naïve IR form: don't replace local loads/stores with registers - GlobalDebug // Enable debug info for all packages -) - -const BuilderModeDoc = `Options controlling the IR builder. -The value is a sequence of zero or more of these letters: -C perform sanity [C]hecking of the IR form. -D include [D]ebug info for every function. -P print [P]ackage inventory. -F print [F]unction IR code. -A print [A]ST nodes responsible for IR instructions -S log [S]ource locations as IR builder progresses. -N build [N]aive IR form: don't replace local loads/stores with registers. -` - -func (m BuilderMode) String() string { - var buf bytes.Buffer - if m&GlobalDebug != 0 { - buf.WriteByte('D') - } - if m&PrintPackages != 0 { - buf.WriteByte('P') - } - if m&PrintFunctions != 0 { - buf.WriteByte('F') - } - if m&PrintSource != 0 { - buf.WriteByte('A') - } - if m&LogSource != 0 { - buf.WriteByte('S') - } - if m&SanityCheckFunctions != 0 { - buf.WriteByte('C') - } - if m&NaiveForm != 0 { - buf.WriteByte('N') - } - return buf.String() -} - -// Set parses the flag characters in s and updates *m. -func (m *BuilderMode) Set(s string) error { - var mode BuilderMode - for _, c := range s { - switch c { - case 'D': - mode |= GlobalDebug - case 'P': - mode |= PrintPackages - case 'F': - mode |= PrintFunctions - case 'A': - mode |= PrintSource - case 'S': - mode |= LogSource - case 'C': - mode |= SanityCheckFunctions - case 'N': - mode |= NaiveForm - default: - return fmt.Errorf("unknown BuilderMode option: %q", c) - } - } - *m = mode - return nil -} - -// Get returns m. -func (m BuilderMode) Get() interface{} { return m } diff --git a/vendor/honnef.co/go/tools/ir/print.go b/vendor/honnef.co/go/tools/ir/print.go deleted file mode 100644 index c16c08e..0000000 --- a/vendor/honnef.co/go/tools/ir/print.go +++ /dev/null @@ -1,472 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file implements the String() methods for all Value and -// Instruction types. - -import ( - "bytes" - "fmt" - "go/types" - "io" - "reflect" - "sort" - - "golang.org/x/tools/go/types/typeutil" -) - -// relName returns the name of v relative to i. -// In most cases, this is identical to v.Name(), but references to -// Functions (including methods) and Globals use RelString and -// all types are displayed with relType, so that only cross-package -// references are package-qualified. -// -func relName(v Value, i Instruction) string { - if v == nil { - return "" - } - var from *types.Package - if i != nil { - from = i.Parent().pkg() - } - switch v := v.(type) { - case Member: // *Function or *Global - return v.RelString(from) - } - return v.Name() -} - -func relType(t types.Type, from *types.Package) string { - return types.TypeString(t, types.RelativeTo(from)) -} - -func relString(m Member, from *types.Package) string { - // NB: not all globals have an Object (e.g. init$guard), - // so use Package().Object not Object.Package(). - if pkg := m.Package().Pkg; pkg != nil && pkg != from { - return fmt.Sprintf("%s.%s", pkg.Path(), m.Name()) - } - return m.Name() -} - -// Value.String() -// -// This method is provided only for debugging. -// It never appears in disassembly, which uses Value.Name(). - -func (v *Parameter) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("Parameter <%s> {%s}", relType(v.Type(), from), v.name) -} - -func (v *FreeVar) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("FreeVar <%s> %s", relType(v.Type(), from), v.Name()) -} - -func (v *Builtin) String() string { - return fmt.Sprintf("Builtin %s", v.Name()) -} - -// Instruction.String() - -func (v *Alloc) String() string { - from := v.Parent().pkg() - storage := "Stack" - if v.Heap { - storage = "Heap" - } - return fmt.Sprintf("%sAlloc <%s>", storage, relType(v.Type(), from)) -} - -func (v *Sigma) String() string { - from := v.Parent().pkg() - s := fmt.Sprintf("Sigma <%s> [b%d] %s", relType(v.Type(), from), v.From.Index, v.X.Name()) - return s -} - -func (v *Phi) String() string { - var b bytes.Buffer - fmt.Fprintf(&b, "Phi <%s>", v.Type()) - for i, edge := range v.Edges { - b.WriteString(" ") - // Be robust against malformed CFG. - if v.block == nil { - b.WriteString("??") - continue - } - block := -1 - if i < len(v.block.Preds) { - block = v.block.Preds[i].Index - } - fmt.Fprintf(&b, "%d:", block) - edgeVal := "" // be robust - if edge != nil { - edgeVal = relName(edge, v) - } - b.WriteString(edgeVal) - } - return b.String() -} - -func printCall(v *CallCommon, prefix string, instr Instruction) string { - var b bytes.Buffer - if !v.IsInvoke() { - if value, ok := instr.(Value); ok { - fmt.Fprintf(&b, "%s <%s> %s", prefix, relType(value.Type(), instr.Parent().pkg()), relName(v.Value, instr)) - } else { - fmt.Fprintf(&b, "%s %s", prefix, relName(v.Value, instr)) - } - } else { - if value, ok := instr.(Value); ok { - fmt.Fprintf(&b, "%sInvoke <%s> %s.%s", prefix, relType(value.Type(), instr.Parent().pkg()), relName(v.Value, instr), v.Method.Name()) - } else { - fmt.Fprintf(&b, "%sInvoke %s.%s", prefix, relName(v.Value, instr), v.Method.Name()) - } - } - for _, arg := range v.Args { - b.WriteString(" ") - b.WriteString(relName(arg, instr)) - } - return b.String() -} - -func (c *CallCommon) String() string { - return printCall(c, "", nil) -} - -func (v *Call) String() string { - return printCall(&v.Call, "Call", v) -} - -func (v *BinOp) String() string { - return fmt.Sprintf("BinOp <%s> {%s} %s %s", relType(v.Type(), v.Parent().pkg()), v.Op.String(), relName(v.X, v), relName(v.Y, v)) -} - -func (v *UnOp) String() string { - return fmt.Sprintf("UnOp <%s> {%s} %s", relType(v.Type(), v.Parent().pkg()), v.Op.String(), relName(v.X, v)) -} - -func (v *Load) String() string { - return fmt.Sprintf("Load <%s> %s", relType(v.Type(), v.Parent().pkg()), relName(v.X, v)) -} - -func printConv(prefix string, v, x Value) string { - from := v.Parent().pkg() - return fmt.Sprintf("%s <%s> %s", - prefix, - relType(v.Type(), from), - relName(x, v.(Instruction))) -} - -func (v *ChangeType) String() string { return printConv("ChangeType", v, v.X) } -func (v *Convert) String() string { return printConv("Convert", v, v.X) } -func (v *ChangeInterface) String() string { return printConv("ChangeInterface", v, v.X) } -func (v *MakeInterface) String() string { return printConv("MakeInterface", v, v.X) } - -func (v *MakeClosure) String() string { - from := v.Parent().pkg() - var b bytes.Buffer - fmt.Fprintf(&b, "MakeClosure <%s> %s", relType(v.Type(), from), relName(v.Fn, v)) - if v.Bindings != nil { - for _, c := range v.Bindings { - b.WriteString(" ") - b.WriteString(relName(c, v)) - } - } - return b.String() -} - -func (v *MakeSlice) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("MakeSlice <%s> %s %s", - relType(v.Type(), from), - relName(v.Len, v), - relName(v.Cap, v)) -} - -func (v *Slice) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("Slice <%s> %s %s %s %s", - relType(v.Type(), from), relName(v.X, v), relName(v.Low, v), relName(v.High, v), relName(v.Max, v)) -} - -func (v *MakeMap) String() string { - res := "" - if v.Reserve != nil { - res = relName(v.Reserve, v) - } - from := v.Parent().pkg() - return fmt.Sprintf("MakeMap <%s> %s", relType(v.Type(), from), res) -} - -func (v *MakeChan) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("MakeChan <%s> %s", relType(v.Type(), from), relName(v.Size, v)) -} - -func (v *FieldAddr) String() string { - from := v.Parent().pkg() - st := deref(v.X.Type()).Underlying().(*types.Struct) - // Be robust against a bad index. - name := "?" - if 0 <= v.Field && v.Field < st.NumFields() { - name = st.Field(v.Field).Name() - } - return fmt.Sprintf("FieldAddr <%s> [%d] (%s) %s", relType(v.Type(), from), v.Field, name, relName(v.X, v)) -} - -func (v *Field) String() string { - st := v.X.Type().Underlying().(*types.Struct) - // Be robust against a bad index. - name := "?" - if 0 <= v.Field && v.Field < st.NumFields() { - name = st.Field(v.Field).Name() - } - from := v.Parent().pkg() - return fmt.Sprintf("Field <%s> [%d] (%s) %s", relType(v.Type(), from), v.Field, name, relName(v.X, v)) -} - -func (v *IndexAddr) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("IndexAddr <%s> %s %s", relType(v.Type(), from), relName(v.X, v), relName(v.Index, v)) -} - -func (v *Index) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("Index <%s> %s %s", relType(v.Type(), from), relName(v.X, v), relName(v.Index, v)) -} - -func (v *MapLookup) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("MapLookup <%s> %s %s", relType(v.Type(), from), relName(v.X, v), relName(v.Index, v)) -} - -func (v *StringLookup) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("StringLookup <%s> %s %s", relType(v.Type(), from), relName(v.X, v), relName(v.Index, v)) -} - -func (v *Range) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("Range <%s> %s", relType(v.Type(), from), relName(v.X, v)) -} - -func (v *Next) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("Next <%s> %s", relType(v.Type(), from), relName(v.Iter, v)) -} - -func (v *TypeAssert) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("TypeAssert <%s> %s", relType(v.Type(), from), relName(v.X, v)) -} - -func (v *Extract) String() string { - from := v.Parent().pkg() - name := v.Tuple.Type().(*types.Tuple).At(v.Index).Name() - return fmt.Sprintf("Extract <%s> [%d] (%s) %s", relType(v.Type(), from), v.Index, name, relName(v.Tuple, v)) -} - -func (s *Jump) String() string { - // Be robust against malformed CFG. - block := -1 - if s.block != nil && len(s.block.Succs) == 1 { - block = s.block.Succs[0].Index - } - str := fmt.Sprintf("Jump → b%d", block) - if s.Comment != "" { - str = fmt.Sprintf("%s # %s", str, s.Comment) - } - return str -} - -func (s *Unreachable) String() string { - // Be robust against malformed CFG. - block := -1 - if s.block != nil && len(s.block.Succs) == 1 { - block = s.block.Succs[0].Index - } - return fmt.Sprintf("Unreachable → b%d", block) -} - -func (s *If) String() string { - // Be robust against malformed CFG. - tblock, fblock := -1, -1 - if s.block != nil && len(s.block.Succs) == 2 { - tblock = s.block.Succs[0].Index - fblock = s.block.Succs[1].Index - } - return fmt.Sprintf("If %s → b%d b%d", relName(s.Cond, s), tblock, fblock) -} - -func (s *ConstantSwitch) String() string { - var b bytes.Buffer - fmt.Fprintf(&b, "ConstantSwitch %s", relName(s.Tag, s)) - for _, cond := range s.Conds { - fmt.Fprintf(&b, " %s", relName(cond, s)) - } - fmt.Fprint(&b, " →") - for _, succ := range s.block.Succs { - fmt.Fprintf(&b, " b%d", succ.Index) - } - return b.String() -} - -func (s *TypeSwitch) String() string { - from := s.Parent().pkg() - var b bytes.Buffer - fmt.Fprintf(&b, "TypeSwitch <%s> %s", relType(s.typ, from), relName(s.Tag, s)) - for _, cond := range s.Conds { - fmt.Fprintf(&b, " %q", relType(cond, s.block.parent.pkg())) - } - return b.String() -} - -func (s *Go) String() string { - return printCall(&s.Call, "Go", s) -} - -func (s *Panic) String() string { - // Be robust against malformed CFG. - block := -1 - if s.block != nil && len(s.block.Succs) == 1 { - block = s.block.Succs[0].Index - } - return fmt.Sprintf("Panic %s → b%d", relName(s.X, s), block) -} - -func (s *Return) String() string { - var b bytes.Buffer - b.WriteString("Return") - for _, r := range s.Results { - b.WriteString(" ") - b.WriteString(relName(r, s)) - } - return b.String() -} - -func (*RunDefers) String() string { - return "RunDefers" -} - -func (s *Send) String() string { - return fmt.Sprintf("Send %s %s", relName(s.Chan, s), relName(s.X, s)) -} - -func (recv *Recv) String() string { - from := recv.Parent().pkg() - return fmt.Sprintf("Recv <%s> %s", relType(recv.Type(), from), relName(recv.Chan, recv)) -} - -func (s *Defer) String() string { - return printCall(&s.Call, "Defer", s) -} - -func (s *Select) String() string { - var b bytes.Buffer - for i, st := range s.States { - if i > 0 { - b.WriteString(", ") - } - if st.Dir == types.RecvOnly { - b.WriteString("<-") - b.WriteString(relName(st.Chan, s)) - } else { - b.WriteString(relName(st.Chan, s)) - b.WriteString("<-") - b.WriteString(relName(st.Send, s)) - } - } - non := "" - if !s.Blocking { - non = "Non" - } - from := s.Parent().pkg() - return fmt.Sprintf("Select%sBlocking <%s> [%s]", non, relType(s.Type(), from), b.String()) -} - -func (s *Store) String() string { - return fmt.Sprintf("Store {%s} %s %s", - s.Val.Type(), relName(s.Addr, s), relName(s.Val, s)) -} - -func (s *BlankStore) String() string { - return fmt.Sprintf("BlankStore %s", relName(s.Val, s)) -} - -func (s *MapUpdate) String() string { - return fmt.Sprintf("MapUpdate %s %s %s", relName(s.Map, s), relName(s.Key, s), relName(s.Value, s)) -} - -func (s *DebugRef) String() string { - p := s.Parent().Prog.Fset.Position(s.Pos()) - var descr interface{} - if s.object != nil { - descr = s.object // e.g. "var x int" - } else { - descr = reflect.TypeOf(s.Expr) // e.g. "*ast.CallExpr" - } - var addr string - if s.IsAddr { - addr = "address of " - } - return fmt.Sprintf("; %s%s @ %d:%d is %s", addr, descr, p.Line, p.Column, s.X.Name()) -} - -func (p *Package) String() string { - return "package " + p.Pkg.Path() -} - -var _ io.WriterTo = (*Package)(nil) // *Package implements io.Writer - -func (p *Package) WriteTo(w io.Writer) (int64, error) { - var buf bytes.Buffer - WritePackage(&buf, p) - n, err := w.Write(buf.Bytes()) - return int64(n), err -} - -// WritePackage writes to buf a human-readable summary of p. -func WritePackage(buf *bytes.Buffer, p *Package) { - fmt.Fprintf(buf, "%s:\n", p) - - var names []string - maxname := 0 - for name := range p.Members { - if l := len(name); l > maxname { - maxname = l - } - names = append(names, name) - } - - from := p.Pkg - sort.Strings(names) - for _, name := range names { - switch mem := p.Members[name].(type) { - case *NamedConst: - fmt.Fprintf(buf, " const %-*s %s = %s\n", - maxname, name, mem.Name(), mem.Value.RelString(from)) - - case *Function: - fmt.Fprintf(buf, " func %-*s %s\n", - maxname, name, relType(mem.Type(), from)) - - case *Type: - fmt.Fprintf(buf, " type %-*s %s\n", - maxname, name, relType(mem.Type().Underlying(), from)) - for _, meth := range typeutil.IntuitiveMethodSet(mem.Type(), &p.Prog.MethodSets) { - fmt.Fprintf(buf, " %s\n", types.SelectionString(meth, types.RelativeTo(from))) - } - - case *Global: - fmt.Fprintf(buf, " var %-*s %s\n", - maxname, name, relType(mem.Type().(*types.Pointer).Elem(), from)) - } - } - - fmt.Fprintf(buf, "\n") -} diff --git a/vendor/honnef.co/go/tools/ir/sanity.go b/vendor/honnef.co/go/tools/ir/sanity.go deleted file mode 100644 index ff9edbc..0000000 --- a/vendor/honnef.co/go/tools/ir/sanity.go +++ /dev/null @@ -1,555 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// An optional pass for sanity-checking invariants of the IR representation. -// Currently it checks CFG invariants but little at the instruction level. - -import ( - "fmt" - "go/types" - "io" - "os" - "strings" -) - -type sanity struct { - reporter io.Writer - fn *Function - block *BasicBlock - instrs map[Instruction]struct{} - insane bool -} - -// sanityCheck performs integrity checking of the IR representation -// of the function fn and returns true if it was valid. Diagnostics -// are written to reporter if non-nil, os.Stderr otherwise. Some -// diagnostics are only warnings and do not imply a negative result. -// -// Sanity-checking is intended to facilitate the debugging of code -// transformation passes. -// -func sanityCheck(fn *Function, reporter io.Writer) bool { - if reporter == nil { - reporter = os.Stderr - } - return (&sanity{reporter: reporter}).checkFunction(fn) -} - -// mustSanityCheck is like sanityCheck but panics instead of returning -// a negative result. -// -func mustSanityCheck(fn *Function, reporter io.Writer) { - if !sanityCheck(fn, reporter) { - fn.WriteTo(os.Stderr) - panic("SanityCheck failed") - } -} - -func (s *sanity) diagnostic(prefix, format string, args ...interface{}) { - fmt.Fprintf(s.reporter, "%s: function %s", prefix, s.fn) - if s.block != nil { - fmt.Fprintf(s.reporter, ", block %s", s.block) - } - io.WriteString(s.reporter, ": ") - fmt.Fprintf(s.reporter, format, args...) - io.WriteString(s.reporter, "\n") -} - -func (s *sanity) errorf(format string, args ...interface{}) { - s.insane = true - s.diagnostic("Error", format, args...) -} - -func (s *sanity) warnf(format string, args ...interface{}) { - s.diagnostic("Warning", format, args...) -} - -// findDuplicate returns an arbitrary basic block that appeared more -// than once in blocks, or nil if all were unique. -func findDuplicate(blocks []*BasicBlock) *BasicBlock { - if len(blocks) < 2 { - return nil - } - if blocks[0] == blocks[1] { - return blocks[0] - } - // Slow path: - m := make(map[*BasicBlock]bool) - for _, b := range blocks { - if m[b] { - return b - } - m[b] = true - } - return nil -} - -func (s *sanity) checkInstr(idx int, instr Instruction) { - switch instr := instr.(type) { - case *If, *Jump, *Return, *Panic, *Unreachable, *ConstantSwitch: - s.errorf("control flow instruction not at end of block") - case *Sigma: - if idx > 0 { - prev := s.block.Instrs[idx-1] - if _, ok := prev.(*Sigma); !ok { - s.errorf("Sigma instruction follows a non-Sigma: %T", prev) - } - } - case *Phi: - if idx == 0 { - // It suffices to apply this check to just the first phi node. - if dup := findDuplicate(s.block.Preds); dup != nil { - s.errorf("phi node in block with duplicate predecessor %s", dup) - } - } else { - prev := s.block.Instrs[idx-1] - switch prev.(type) { - case *Phi, *Sigma: - default: - s.errorf("Phi instruction follows a non-Phi, non-Sigma: %T", prev) - } - } - if ne, np := len(instr.Edges), len(s.block.Preds); ne != np { - s.errorf("phi node has %d edges but %d predecessors", ne, np) - - } else { - for i, e := range instr.Edges { - if e == nil { - s.errorf("phi node '%v' has no value for edge #%d from %s", instr, i, s.block.Preds[i]) - } - } - } - - case *Alloc: - if !instr.Heap { - found := false - for _, l := range s.fn.Locals { - if l == instr { - found = true - break - } - } - if !found { - s.errorf("local alloc %s = %s does not appear in Function.Locals", instr.Name(), instr) - } - } - - case *BinOp: - case *Call: - case *ChangeInterface: - case *ChangeType: - case *Convert: - if _, ok := instr.X.Type().Underlying().(*types.Basic); !ok { - if _, ok := instr.Type().Underlying().(*types.Basic); !ok { - s.errorf("convert %s -> %s: at least one type must be basic", instr.X.Type(), instr.Type()) - } - } - - case *Defer: - case *Extract: - case *Field: - case *FieldAddr: - case *Go: - case *Index: - case *IndexAddr: - case *MapLookup: - case *StringLookup: - case *MakeChan: - case *MakeClosure: - numFree := len(instr.Fn.(*Function).FreeVars) - numBind := len(instr.Bindings) - if numFree != numBind { - s.errorf("MakeClosure has %d Bindings for function %s with %d free vars", - numBind, instr.Fn, numFree) - - } - if recv := instr.Type().(*types.Signature).Recv(); recv != nil { - s.errorf("MakeClosure's type includes receiver %s", recv.Type()) - } - - case *MakeInterface: - case *MakeMap: - case *MakeSlice: - case *MapUpdate: - case *Next: - case *Range: - case *RunDefers: - case *Select: - case *Send: - case *Slice: - case *Store: - case *TypeAssert: - case *UnOp: - case *DebugRef: - case *BlankStore: - case *Load: - case *Parameter: - case *Const: - case *Recv: - case *TypeSwitch: - default: - panic(fmt.Sprintf("Unknown instruction type: %T", instr)) - } - - if call, ok := instr.(CallInstruction); ok { - if call.Common().Signature() == nil { - s.errorf("nil signature: %s", call) - } - } - - // Check that value-defining instructions have valid types - // and a valid referrer list. - if v, ok := instr.(Value); ok { - t := v.Type() - if t == nil { - s.errorf("no type: %s = %s", v.Name(), v) - } else if t == tRangeIter { - // not a proper type; ignore. - } else if b, ok := t.Underlying().(*types.Basic); ok && b.Info()&types.IsUntyped != 0 { - if _, ok := v.(*Const); !ok { - s.errorf("instruction has 'untyped' result: %s = %s : %s", v.Name(), v, t) - } - } - s.checkReferrerList(v) - } - - // Untyped constants are legal as instruction Operands(), - // for example: - // _ = "foo"[0] - // or: - // if wordsize==64 {...} - - // All other non-Instruction Values can be found via their - // enclosing Function or Package. -} - -func (s *sanity) checkFinalInstr(instr Instruction) { - switch instr := instr.(type) { - case *If: - if nsuccs := len(s.block.Succs); nsuccs != 2 { - s.errorf("If-terminated block has %d successors; expected 2", nsuccs) - return - } - if s.block.Succs[0] == s.block.Succs[1] { - s.errorf("If-instruction has same True, False target blocks: %s", s.block.Succs[0]) - return - } - - case *Jump: - if nsuccs := len(s.block.Succs); nsuccs != 1 { - s.errorf("Jump-terminated block has %d successors; expected 1", nsuccs) - return - } - - case *Return: - if nsuccs := len(s.block.Succs); nsuccs != 0 { - s.errorf("Return-terminated block has %d successors; expected none", nsuccs) - return - } - if na, nf := len(instr.Results), s.fn.Signature.Results().Len(); nf != na { - s.errorf("%d-ary return in %d-ary function", na, nf) - } - - case *Panic: - if nsuccs := len(s.block.Succs); nsuccs != 1 { - s.errorf("Panic-terminated block has %d successors; expected one", nsuccs) - return - } - - case *Unreachable: - if nsuccs := len(s.block.Succs); nsuccs != 1 { - s.errorf("Unreachable-terminated block has %d successors; expected one", nsuccs) - return - } - - case *ConstantSwitch: - - default: - s.errorf("non-control flow instruction at end of block") - } -} - -func (s *sanity) checkBlock(b *BasicBlock, index int) { - s.block = b - - if b.Index != index { - s.errorf("block has incorrect Index %d", b.Index) - } - if b.parent != s.fn { - s.errorf("block has incorrect parent %s", b.parent) - } - - // Check all blocks are reachable. - // (The entry block is always implicitly reachable, the exit block may be unreachable.) - if index > 1 && len(b.Preds) == 0 { - s.warnf("unreachable block") - if b.Instrs == nil { - // Since this block is about to be pruned, - // tolerating transient problems in it - // simplifies other optimizations. - return - } - } - - // Check predecessor and successor relations are dual, - // and that all blocks in CFG belong to same function. - for _, a := range b.Preds { - found := false - for _, bb := range a.Succs { - if bb == b { - found = true - break - } - } - if !found { - s.errorf("expected successor edge in predecessor %s; found only: %s", a, a.Succs) - } - if a.parent != s.fn { - s.errorf("predecessor %s belongs to different function %s", a, a.parent) - } - } - for _, c := range b.Succs { - found := false - for _, bb := range c.Preds { - if bb == b { - found = true - break - } - } - if !found { - s.errorf("expected predecessor edge in successor %s; found only: %s", c, c.Preds) - } - if c.parent != s.fn { - s.errorf("successor %s belongs to different function %s", c, c.parent) - } - } - - // Check each instruction is sane. - n := len(b.Instrs) - if n == 0 { - s.errorf("basic block contains no instructions") - } - var rands [10]*Value // reuse storage - for j, instr := range b.Instrs { - if instr == nil { - s.errorf("nil instruction at index %d", j) - continue - } - if b2 := instr.Block(); b2 == nil { - s.errorf("nil Block() for instruction at index %d", j) - continue - } else if b2 != b { - s.errorf("wrong Block() (%s) for instruction at index %d ", b2, j) - continue - } - if j < n-1 { - s.checkInstr(j, instr) - } else { - s.checkFinalInstr(instr) - } - - // Check Instruction.Operands. - operands: - for i, op := range instr.Operands(rands[:0]) { - if op == nil { - s.errorf("nil operand pointer %d of %s", i, instr) - continue - } - val := *op - if val == nil { - continue // a nil operand is ok - } - - // Check that "untyped" types only appear on constant operands. - if _, ok := (*op).(*Const); !ok { - if basic, ok := (*op).Type().(*types.Basic); ok { - if basic.Info()&types.IsUntyped != 0 { - s.errorf("operand #%d of %s is untyped: %s", i, instr, basic) - } - } - } - - // Check that Operands that are also Instructions belong to same function. - // TODO(adonovan): also check their block dominates block b. - if val, ok := val.(Instruction); ok { - if val.Block() == nil { - s.errorf("operand %d of %s is an instruction (%s) that belongs to no block", i, instr, val) - } else if val.Parent() != s.fn { - s.errorf("operand %d of %s is an instruction (%s) from function %s", i, instr, val, val.Parent()) - } - } - - // Check that each function-local operand of - // instr refers back to instr. (NB: quadratic) - switch val := val.(type) { - case *Const, *Global, *Builtin: - continue // not local - case *Function: - if val.parent == nil { - continue // only anon functions are local - } - } - - // TODO(adonovan): check val.Parent() != nil <=> val.Referrers() is defined. - - if refs := val.Referrers(); refs != nil { - for _, ref := range *refs { - if ref == instr { - continue operands - } - } - s.errorf("operand %d of %s (%s) does not refer to us", i, instr, val) - } else { - s.errorf("operand %d of %s (%s) has no referrers", i, instr, val) - } - } - } -} - -func (s *sanity) checkReferrerList(v Value) { - refs := v.Referrers() - if refs == nil { - s.errorf("%s has missing referrer list", v.Name()) - return - } - for i, ref := range *refs { - if _, ok := s.instrs[ref]; !ok { - if val, ok := ref.(Value); ok { - s.errorf("%s.Referrers()[%d] = %s = %s is not an instruction belonging to this function", v.Name(), i, val.Name(), val) - } else { - s.errorf("%s.Referrers()[%d] = %s is not an instruction belonging to this function", v.Name(), i, ref) - } - } - } -} - -func (s *sanity) checkFunction(fn *Function) bool { - // TODO(adonovan): check Function invariants: - // - check params match signature - // - check transient fields are nil - // - warn if any fn.Locals do not appear among block instructions. - s.fn = fn - if fn.Prog == nil { - s.errorf("nil Prog") - } - - _ = fn.String() // must not crash - _ = fn.RelString(fn.pkg()) // must not crash - - // All functions have a package, except delegates (which are - // shared across packages, or duplicated as weak symbols in a - // separate-compilation model), and error.Error. - if fn.Pkg == nil { - if strings.HasPrefix(fn.Synthetic, "wrapper ") || - strings.HasPrefix(fn.Synthetic, "bound ") || - strings.HasPrefix(fn.Synthetic, "thunk ") || - strings.HasSuffix(fn.name, "Error") { - // ok - } else { - s.errorf("nil Pkg") - } - } - if src, syn := fn.Synthetic == "", fn.source != nil; src != syn { - s.errorf("got fromSource=%t, hasSyntax=%t; want same values", src, syn) - } - for i, l := range fn.Locals { - if l.Parent() != fn { - s.errorf("Local %s at index %d has wrong parent", l.Name(), i) - } - if l.Heap { - s.errorf("Local %s at index %d has Heap flag set", l.Name(), i) - } - } - // Build the set of valid referrers. - s.instrs = make(map[Instruction]struct{}) - for _, b := range fn.Blocks { - for _, instr := range b.Instrs { - s.instrs[instr] = struct{}{} - } - } - for i, p := range fn.Params { - if p.Parent() != fn { - s.errorf("Param %s at index %d has wrong parent", p.Name(), i) - } - // Check common suffix of Signature and Params match type. - if sig := fn.Signature; sig != nil { - j := i - len(fn.Params) + sig.Params().Len() // index within sig.Params - if j < 0 { - continue - } - if !types.Identical(p.Type(), sig.Params().At(j).Type()) { - s.errorf("Param %s at index %d has wrong type (%s, versus %s in Signature)", p.Name(), i, p.Type(), sig.Params().At(j).Type()) - - } - } - - s.checkReferrerList(p) - } - for i, fv := range fn.FreeVars { - if fv.Parent() != fn { - s.errorf("FreeVar %s at index %d has wrong parent", fv.Name(), i) - } - s.checkReferrerList(fv) - } - - if fn.Blocks != nil && len(fn.Blocks) == 0 { - // Function _had_ blocks (so it's not external) but - // they were "optimized" away, even the entry block. - s.errorf("Blocks slice is non-nil but empty") - } - for i, b := range fn.Blocks { - if b == nil { - s.warnf("nil *BasicBlock at f.Blocks[%d]", i) - continue - } - s.checkBlock(b, i) - } - - s.block = nil - for i, anon := range fn.AnonFuncs { - if anon.Parent() != fn { - s.errorf("AnonFuncs[%d]=%s but %s.Parent()=%s", i, anon, anon, anon.Parent()) - } - } - s.fn = nil - return !s.insane -} - -// sanityCheckPackage checks invariants of packages upon creation. -// It does not require that the package is built. -// Unlike sanityCheck (for functions), it just panics at the first error. -func sanityCheckPackage(pkg *Package) { - if pkg.Pkg == nil { - panic(fmt.Sprintf("Package %s has no Object", pkg)) - } - _ = pkg.String() // must not crash - - for name, mem := range pkg.Members { - if name != mem.Name() { - panic(fmt.Sprintf("%s: %T.Name() = %s, want %s", - pkg.Pkg.Path(), mem, mem.Name(), name)) - } - obj := mem.Object() - if obj == nil { - // This check is sound because fields - // {Global,Function}.object have type - // types.Object. (If they were declared as - // *types.{Var,Func}, we'd have a non-empty - // interface containing a nil pointer.) - - continue // not all members have typechecker objects - } - if obj.Name() != name { - if obj.Name() == "init" && strings.HasPrefix(mem.Name(), "init#") { - // Ok. The name of a declared init function varies between - // its types.Func ("init") and its ir.Function ("init#%d"). - } else { - panic(fmt.Sprintf("%s: %T.Object().Name() = %s, want %s", - pkg.Pkg.Path(), mem, obj.Name(), name)) - } - } - } -} diff --git a/vendor/honnef.co/go/tools/ir/source.go b/vendor/honnef.co/go/tools/ir/source.go deleted file mode 100644 index 93d1ccb..0000000 --- a/vendor/honnef.co/go/tools/ir/source.go +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines utilities for working with source positions -// or source-level named entities ("objects"). - -// TODO(adonovan): test that {Value,Instruction}.Pos() positions match -// the originating syntax, as specified. - -import ( - "go/ast" - "go/token" - "go/types" -) - -// EnclosingFunction returns the function that contains the syntax -// node denoted by path. -// -// Syntax associated with package-level variable specifications is -// enclosed by the package's init() function. -// -// Returns nil if not found; reasons might include: -// - the node is not enclosed by any function. -// - the node is within an anonymous function (FuncLit) and -// its IR function has not been created yet -// (pkg.Build() has not yet been called). -// -func EnclosingFunction(pkg *Package, path []ast.Node) *Function { - // Start with package-level function... - fn := findEnclosingPackageLevelFunction(pkg, path) - if fn == nil { - return nil // not in any function - } - - // ...then walk down the nested anonymous functions. - n := len(path) -outer: - for i := range path { - if lit, ok := path[n-1-i].(*ast.FuncLit); ok { - for _, anon := range fn.AnonFuncs { - if anon.Pos() == lit.Type.Func { - fn = anon - continue outer - } - } - // IR function not found: - // - package not yet built, or maybe - // - builder skipped FuncLit in dead block - // (in principle; but currently the Builder - // generates even dead FuncLits). - return nil - } - } - return fn -} - -// HasEnclosingFunction returns true if the AST node denoted by path -// is contained within the declaration of some function or -// package-level variable. -// -// Unlike EnclosingFunction, the behaviour of this function does not -// depend on whether IR code for pkg has been built, so it can be -// used to quickly reject check inputs that will cause -// EnclosingFunction to fail, prior to IR building. -// -func HasEnclosingFunction(pkg *Package, path []ast.Node) bool { - return findEnclosingPackageLevelFunction(pkg, path) != nil -} - -// findEnclosingPackageLevelFunction returns the Function -// corresponding to the package-level function enclosing path. -// -func findEnclosingPackageLevelFunction(pkg *Package, path []ast.Node) *Function { - if n := len(path); n >= 2 { // [... {Gen,Func}Decl File] - switch decl := path[n-2].(type) { - case *ast.GenDecl: - if decl.Tok == token.VAR && n >= 3 { - // Package-level 'var' initializer. - return pkg.init - } - - case *ast.FuncDecl: - // Declared function/method. - fn := findNamedFunc(pkg, decl.Pos()) - if fn == nil && decl.Recv == nil && decl.Name.Name == "init" { - // Hack: return non-nil when IR is not yet - // built so that HasEnclosingFunction works. - return pkg.init - } - return fn - } - } - return nil // not in any function -} - -// findNamedFunc returns the named function whose FuncDecl.Ident is at -// position pos. -// -func findNamedFunc(pkg *Package, pos token.Pos) *Function { - for _, fn := range pkg.Functions { - if fn.Pos() == pos { - return fn - } - } - return nil -} - -// ValueForExpr returns the IR Value that corresponds to non-constant -// expression e. -// -// It returns nil if no value was found, e.g. -// - the expression is not lexically contained within f; -// - f was not built with debug information; or -// - e is a constant expression. (For efficiency, no debug -// information is stored for constants. Use -// go/types.Info.Types[e].Value instead.) -// - e is a reference to nil or a built-in function. -// - the value was optimised away. -// -// If e is an addressable expression used in an lvalue context, -// value is the address denoted by e, and isAddr is true. -// -// The types of e (or &e, if isAddr) and the result are equal -// (modulo "untyped" bools resulting from comparisons). -// -// (Tip: to find the ir.Value given a source position, use -// astutil.PathEnclosingInterval to locate the ast.Node, then -// EnclosingFunction to locate the Function, then ValueForExpr to find -// the ir.Value.) -// -func (f *Function) ValueForExpr(e ast.Expr) (value Value, isAddr bool) { - if f.debugInfo() { // (opt) - e = unparen(e) - for _, b := range f.Blocks { - for _, instr := range b.Instrs { - if ref, ok := instr.(*DebugRef); ok { - if ref.Expr == e { - return ref.X, ref.IsAddr - } - } - } - } - } - return -} - -// --- Lookup functions for source-level named entities (types.Objects) --- - -// Package returns the IR Package corresponding to the specified -// type-checker package object. -// It returns nil if no such IR package has been created. -// -func (prog *Program) Package(obj *types.Package) *Package { - return prog.packages[obj] -} - -// packageLevelValue returns the package-level value corresponding to -// the specified named object, which may be a package-level const -// (*Const), var (*Global) or func (*Function) of some package in -// prog. It returns nil if the object is not found. -// -func (prog *Program) packageLevelValue(obj types.Object) Value { - if pkg, ok := prog.packages[obj.Pkg()]; ok { - return pkg.values[obj] - } - return nil -} - -// FuncValue returns the concrete Function denoted by the source-level -// named function obj, or nil if obj denotes an interface method. -// -// TODO(adonovan): check the invariant that obj.Type() matches the -// result's Signature, both in the params/results and in the receiver. -// -func (prog *Program) FuncValue(obj *types.Func) *Function { - fn, _ := prog.packageLevelValue(obj).(*Function) - return fn -} - -// ConstValue returns the IR Value denoted by the source-level named -// constant obj. -// -func (prog *Program) ConstValue(obj *types.Const) *Const { - // TODO(adonovan): opt: share (don't reallocate) - // Consts for const objects and constant ast.Exprs. - - // Universal constant? {true,false,nil} - if obj.Parent() == types.Universe { - return NewConst(obj.Val(), obj.Type()) - } - // Package-level named constant? - if v := prog.packageLevelValue(obj); v != nil { - return v.(*Const) - } - return NewConst(obj.Val(), obj.Type()) -} - -// VarValue returns the IR Value that corresponds to a specific -// identifier denoting the source-level named variable obj. -// -// VarValue returns nil if a local variable was not found, perhaps -// because its package was not built, the debug information was not -// requested during IR construction, or the value was optimized away. -// -// ref is the path to an ast.Ident (e.g. from PathEnclosingInterval), -// and that ident must resolve to obj. -// -// pkg is the package enclosing the reference. (A reference to a var -// always occurs within a function, so we need to know where to find it.) -// -// If the identifier is a field selector and its base expression is -// non-addressable, then VarValue returns the value of that field. -// For example: -// func f() struct {x int} -// f().x // VarValue(x) returns a *Field instruction of type int -// -// All other identifiers denote addressable locations (variables). -// For them, VarValue may return either the variable's address or its -// value, even when the expression is evaluated only for its value; the -// situation is reported by isAddr, the second component of the result. -// -// If !isAddr, the returned value is the one associated with the -// specific identifier. For example, -// var x int // VarValue(x) returns Const 0 here -// x = 1 // VarValue(x) returns Const 1 here -// -// It is not specified whether the value or the address is returned in -// any particular case, as it may depend upon optimizations performed -// during IR code generation, such as registerization, constant -// folding, avoidance of materialization of subexpressions, etc. -// -func (prog *Program) VarValue(obj *types.Var, pkg *Package, ref []ast.Node) (value Value, isAddr bool) { - // All references to a var are local to some function, possibly init. - fn := EnclosingFunction(pkg, ref) - if fn == nil { - return // e.g. def of struct field; IR not built? - } - - id := ref[0].(*ast.Ident) - - // Defining ident of a parameter? - if id.Pos() == obj.Pos() { - for _, param := range fn.Params { - if param.Object() == obj { - return param, false - } - } - } - - // Other ident? - for _, b := range fn.Blocks { - for _, instr := range b.Instrs { - if dr, ok := instr.(*DebugRef); ok { - if dr.Pos() == id.Pos() { - return dr.X, dr.IsAddr - } - } - } - } - - // Defining ident of package-level var? - if v := prog.packageLevelValue(obj); v != nil { - return v.(*Global), true - } - - return // e.g. debug info not requested, or var optimized away -} diff --git a/vendor/honnef.co/go/tools/ir/ssa.go b/vendor/honnef.co/go/tools/ir/ssa.go deleted file mode 100644 index 4969304..0000000 --- a/vendor/honnef.co/go/tools/ir/ssa.go +++ /dev/null @@ -1,1856 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This package defines a high-level intermediate representation for -// Go programs using static single-information (SSI) form. - -import ( - "fmt" - "go/ast" - "go/constant" - "go/token" - "go/types" - "sync" - - "golang.org/x/tools/go/types/typeutil" -) - -type ID int - -// A Program is a partial or complete Go program converted to IR form. -type Program struct { - Fset *token.FileSet // position information for the files of this Program - PrintFunc string // create ir.html for function specified in PrintFunc - imported map[string]*Package // all importable Packages, keyed by import path - packages map[*types.Package]*Package // all loaded Packages, keyed by object - mode BuilderMode // set of mode bits for IR construction - MethodSets typeutil.MethodSetCache // cache of type-checker's method-sets - - methodsMu sync.Mutex // guards the following maps: - methodSets typeutil.Map // maps type to its concrete methodSet - runtimeTypes typeutil.Map // types for which rtypes are needed - canon typeutil.Map // type canonicalization map - bounds map[*types.Func]*Function // bounds for curried x.Method closures - thunks map[selectionKey]*Function // thunks for T.Method expressions -} - -// A Package is a single analyzed Go package containing Members for -// all package-level functions, variables, constants and types it -// declares. These may be accessed directly via Members, or via the -// type-specific accessor methods Func, Type, Var and Const. -// -// Members also contains entries for "init" (the synthetic package -// initializer) and "init#%d", the nth declared init function, -// and unspecified other things too. -// -type Package struct { - Prog *Program // the owning program - Pkg *types.Package // the corresponding go/types.Package - Members map[string]Member // all package members keyed by name (incl. init and init#%d) - Functions []*Function // all functions, excluding anonymous ones - values map[types.Object]Value // package members (incl. types and methods), keyed by object - init *Function // Func("init"); the package's init function - debug bool // include full debug info in this package - printFunc string // which function to print in HTML form - - // The following fields are set transiently, then cleared - // after building. - buildOnce sync.Once // ensures package building occurs once - ninit int32 // number of init functions - info *types.Info // package type information - files []*ast.File // package ASTs -} - -// A Member is a member of a Go package, implemented by *NamedConst, -// *Global, *Function, or *Type; they are created by package-level -// const, var, func and type declarations respectively. -// -type Member interface { - Name() string // declared name of the package member - String() string // package-qualified name of the package member - RelString(*types.Package) string // like String, but relative refs are unqualified - Object() types.Object // typechecker's object for this member, if any - Type() types.Type // type of the package member - Token() token.Token // token.{VAR,FUNC,CONST,TYPE} - Package() *Package // the containing package -} - -// A Type is a Member of a Package representing a package-level named type. -type Type struct { - object *types.TypeName - pkg *Package -} - -// A NamedConst is a Member of a Package representing a package-level -// named constant. -// -// Pos() returns the position of the declaring ast.ValueSpec.Names[*] -// identifier. -// -// NB: a NamedConst is not a Value; it contains a constant Value, which -// it augments with the name and position of its 'const' declaration. -// -type NamedConst struct { - object *types.Const - Value *Const - pkg *Package -} - -// A Value is an IR value that can be referenced by an instruction. -type Value interface { - setID(ID) - - // Name returns the name of this value, and determines how - // this Value appears when used as an operand of an - // Instruction. - // - // This is the same as the source name for Parameters, - // Builtins, Functions, FreeVars, Globals. - // For constants, it is a representation of the constant's value - // and type. For all other Values this is the name of the - // virtual register defined by the instruction. - // - // The name of an IR Value is not semantically significant, - // and may not even be unique within a function. - Name() string - - // ID returns the ID of this value. IDs are unique within a single - // function and are densely numbered, but may contain gaps. - // Values and other Instructions share the same ID space. - // Globally, values are identified by their addresses. However, - // IDs exist to facilitate efficient storage of mappings between - // values and data when analysing functions. - // - // NB: IDs are allocated late in the IR construction process and - // are not available to early stages of said process. - ID() ID - - // If this value is an Instruction, String returns its - // disassembled form; otherwise it returns unspecified - // human-readable information about the Value, such as its - // kind, name and type. - String() string - - // Type returns the type of this value. Many instructions - // (e.g. IndexAddr) change their behaviour depending on the - // types of their operands. - Type() types.Type - - // Parent returns the function to which this Value belongs. - // It returns nil for named Functions, Builtin and Global. - Parent() *Function - - // Referrers returns the list of instructions that have this - // value as one of their operands; it may contain duplicates - // if an instruction has a repeated operand. - // - // Referrers actually returns a pointer through which the - // caller may perform mutations to the object's state. - // - // Referrers is currently only defined if Parent()!=nil, - // i.e. for the function-local values FreeVar, Parameter, - // Functions (iff anonymous) and all value-defining instructions. - // It returns nil for named Functions, Builtin and Global. - // - // Instruction.Operands contains the inverse of this relation. - Referrers() *[]Instruction - - Operands(rands []*Value) []*Value // nil for non-Instructions - - // Source returns the AST node responsible for creating this - // value. A single AST node may be responsible for more than one - // value, and not all values have an associated AST node. - // - // Do not use this method to find a Value given an ast.Expr; use - // ValueForExpr instead. - Source() ast.Node - - // Pos returns Source().Pos() if Source is not nil, else it - // returns token.NoPos. - Pos() token.Pos -} - -// An Instruction is an IR instruction that computes a new Value or -// has some effect. -// -// An Instruction that defines a value (e.g. BinOp) also implements -// the Value interface; an Instruction that only has an effect (e.g. Store) -// does not. -// -type Instruction interface { - setSource(ast.Node) - setID(ID) - - // String returns the disassembled form of this value. - // - // Examples of Instructions that are Values: - // "BinOp {+} t1 t2" (BinOp) - // "Call len t1" (Call) - // Note that the name of the Value is not printed. - // - // Examples of Instructions that are not Values: - // "Return t1" (Return) - // "Store {int} t2 t1" (Store) - // - // (The separation of Value.Name() from Value.String() is useful - // for some analyses which distinguish the operation from the - // value it defines, e.g., 'y = local int' is both an allocation - // of memory 'local int' and a definition of a pointer y.) - String() string - - // ID returns the ID of this instruction. IDs are unique within a single - // function and are densely numbered, but may contain gaps. - // Globally, instructions are identified by their addresses. However, - // IDs exist to facilitate efficient storage of mappings between - // instructions and data when analysing functions. - // - // NB: IDs are allocated late in the IR construction process and - // are not available to early stages of said process. - ID() ID - - // Parent returns the function to which this instruction - // belongs. - Parent() *Function - - // Block returns the basic block to which this instruction - // belongs. - Block() *BasicBlock - - // setBlock sets the basic block to which this instruction belongs. - setBlock(*BasicBlock) - - // Operands returns the operands of this instruction: the - // set of Values it references. - // - // Specifically, it appends their addresses to rands, a - // user-provided slice, and returns the resulting slice, - // permitting avoidance of memory allocation. - // - // The operands are appended in undefined order, but the order - // is consistent for a given Instruction; the addresses are - // always non-nil but may point to a nil Value. Clients may - // store through the pointers, e.g. to effect a value - // renaming. - // - // Value.Referrers is a subset of the inverse of this - // relation. (Referrers are not tracked for all types of - // Values.) - Operands(rands []*Value) []*Value - - Referrers() *[]Instruction // nil for non-Values - - // Source returns the AST node responsible for creating this - // instruction. A single AST node may be responsible for more than - // one instruction, and not all instructions have an associated - // AST node. - Source() ast.Node - - // Pos returns Source().Pos() if Source is not nil, else it - // returns token.NoPos. - Pos() token.Pos -} - -// A Node is a node in the IR value graph. Every concrete type that -// implements Node is also either a Value, an Instruction, or both. -// -// Node contains the methods common to Value and Instruction, plus the -// Operands and Referrers methods generalized to return nil for -// non-Instructions and non-Values, respectively. -// -// Node is provided to simplify IR graph algorithms. Clients should -// use the more specific and informative Value or Instruction -// interfaces where appropriate. -// -type Node interface { - setID(ID) - - // Common methods: - ID() ID - String() string - Source() ast.Node - Pos() token.Pos - Parent() *Function - - // Partial methods: - Operands(rands []*Value) []*Value // nil for non-Instructions - Referrers() *[]Instruction // nil for non-Values -} - -// Function represents the parameters, results, and code of a function -// or method. -// -// If Blocks is nil, this indicates an external function for which no -// Go source code is available. In this case, FreeVars and Locals -// are nil too. Clients performing whole-program analysis must -// handle external functions specially. -// -// Blocks contains the function's control-flow graph (CFG). -// Blocks[0] is the function entry point; block order is not otherwise -// semantically significant, though it may affect the readability of -// the disassembly. -// To iterate over the blocks in dominance order, use DomPreorder(). -// -// A nested function (Parent()!=nil) that refers to one or more -// lexically enclosing local variables ("free variables") has FreeVars. -// Such functions cannot be called directly but require a -// value created by MakeClosure which, via its Bindings, supplies -// values for these parameters. -// -// If the function is a method (Signature.Recv() != nil) then the first -// element of Params is the receiver parameter. -// -// A Go package may declare many functions called "init". -// For each one, Object().Name() returns "init" but Name() returns -// "init#1", etc, in declaration order. -// -// Pos() returns the declaring ast.FuncLit.Type.Func or the position -// of the ast.FuncDecl.Name, if the function was explicit in the -// source. Synthetic wrappers, for which Synthetic != "", may share -// the same position as the function they wrap. -// Syntax.Pos() always returns the position of the declaring "func" token. -// -// Type() returns the function's Signature. -// -type Function struct { - node - - name string - object types.Object // a declared *types.Func or one of its wrappers - method *types.Selection // info about provenance of synthetic methods - Signature *types.Signature - - Synthetic string // provenance of synthetic function; "" for true source functions - parent *Function // enclosing function if anon; nil if global - Pkg *Package // enclosing package; nil for shared funcs (wrappers and error.Error) - Prog *Program // enclosing program - Params []*Parameter // function parameters; for methods, includes receiver - FreeVars []*FreeVar // free variables whose values must be supplied by closure - Locals []*Alloc // local variables of this function - Blocks []*BasicBlock // basic blocks of the function; nil => external - Exit *BasicBlock // The function's exit block - AnonFuncs []*Function // anonymous functions directly beneath this one - referrers []Instruction // referring instructions (iff Parent() != nil) - WillExit bool // Calling this function will always terminate the process - WillUnwind bool // Calling this function will always unwind (it will call runtime.Goexit or panic) - - *functionBody -} - -type functionBody struct { - // The following fields are set transiently during building, - // then cleared. - currentBlock *BasicBlock // where to emit code - objects map[types.Object]Value // addresses of local variables - namedResults []*Alloc // tuple of named results - implicitResults []*Alloc // tuple of results - targets *targets // linked stack of branch targets - lblocks map[*ast.Object]*lblock // labelled blocks - consts []*Const - wr *HTMLWriter - fakeExits BlockSet - blocksets [5]BlockSet - hasDefer bool -} - -func (fn *Function) results() []*Alloc { - if len(fn.namedResults) > 0 { - return fn.namedResults - } - return fn.implicitResults -} - -// BasicBlock represents an IR basic block. -// -// The final element of Instrs is always an explicit transfer of -// control (If, Jump, Return, Panic, or Unreachable). -// -// A block may contain no Instructions only if it is unreachable, -// i.e., Preds is nil. Empty blocks are typically pruned. -// -// BasicBlocks and their Preds/Succs relation form a (possibly cyclic) -// graph independent of the IR Value graph: the control-flow graph or -// CFG. It is illegal for multiple edges to exist between the same -// pair of blocks. -// -// Each BasicBlock is also a node in the dominator tree of the CFG. -// The tree may be navigated using Idom()/Dominees() and queried using -// Dominates(). -// -// The order of Preds and Succs is significant (to Phi and If -// instructions, respectively). -// -type BasicBlock struct { - Index int // index of this block within Parent().Blocks - Comment string // optional label; no semantic significance - parent *Function // parent function - Instrs []Instruction // instructions in order - Preds, Succs []*BasicBlock // predecessors and successors - succs2 [2]*BasicBlock // initial space for Succs - dom domInfo // dominator tree info - pdom domInfo // post-dominator tree info - post int - gaps int // number of nil Instrs (transient) - rundefers int // number of rundefers (transient) -} - -// Pure values ---------------------------------------- - -// A FreeVar represents a free variable of the function to which it -// belongs. -// -// FreeVars are used to implement anonymous functions, whose free -// variables are lexically captured in a closure formed by -// MakeClosure. The value of such a free var is an Alloc or another -// FreeVar and is considered a potentially escaping heap address, with -// pointer type. -// -// FreeVars are also used to implement bound method closures. Such a -// free var represents the receiver value and may be of any type that -// has concrete methods. -// -// Pos() returns the position of the value that was captured, which -// belongs to an enclosing function. -// -type FreeVar struct { - node - - name string - typ types.Type - parent *Function - referrers []Instruction - - // Transiently needed during building. - outer Value // the Value captured from the enclosing context. -} - -// A Parameter represents an input parameter of a function. -// -type Parameter struct { - register - - name string - object types.Object // a *types.Var; nil for non-source locals -} - -// A Const represents the value of a constant expression. -// -// The underlying type of a constant may be any boolean, numeric, or -// string type. In addition, a Const may represent the nil value of -// any reference type---interface, map, channel, pointer, slice, or -// function---but not "untyped nil". -// -// All source-level constant expressions are represented by a Const -// of the same type and value. -// -// Value holds the exact value of the constant, independent of its -// Type(), using the same representation as package go/constant uses for -// constants, or nil for a typed nil value. -// -// Pos() returns token.NoPos. -// -// Example printed form: -// Const {42} -// Const {"test"} -// Const {(3 + 4i)} -// -type Const struct { - register - - Value constant.Value -} - -// A Global is a named Value holding the address of a package-level -// variable. -// -// Pos() returns the position of the ast.ValueSpec.Names[*] -// identifier. -// -type Global struct { - node - - name string - object types.Object // a *types.Var; may be nil for synthetics e.g. init$guard - typ types.Type - - Pkg *Package -} - -// A Builtin represents a specific use of a built-in function, e.g. len. -// -// Builtins are immutable values. Builtins do not have addresses. -// Builtins can only appear in CallCommon.Func. -// -// Name() indicates the function: one of the built-in functions from the -// Go spec (excluding "make" and "new") or one of these ir-defined -// intrinsics: -// -// // wrapnilchk returns ptr if non-nil, panics otherwise. -// // (For use in indirection wrappers.) -// func ir:wrapnilchk(ptr *T, recvType, methodName string) *T -// -// Object() returns a *types.Builtin for built-ins defined by the spec, -// nil for others. -// -// Type() returns a *types.Signature representing the effective -// signature of the built-in for this call. -// -type Builtin struct { - node - - name string - sig *types.Signature -} - -// Value-defining instructions ---------------------------------------- - -// The Alloc instruction reserves space for a variable of the given type, -// zero-initializes it, and yields its address. -// -// Alloc values are always addresses, and have pointer types, so the -// type of the allocated variable is actually -// Type().Underlying().(*types.Pointer).Elem(). -// -// If Heap is false, Alloc allocates space in the function's -// activation record (frame); we refer to an Alloc(Heap=false) as a -// "stack" alloc. Each stack Alloc returns the same address each time -// it is executed within the same activation; the space is -// re-initialized to zero. -// -// If Heap is true, Alloc allocates space in the heap; we -// refer to an Alloc(Heap=true) as a "heap" alloc. Each heap Alloc -// returns a different address each time it is executed. -// -// When Alloc is applied to a channel, map or slice type, it returns -// the address of an uninitialized (nil) reference of that kind; store -// the result of MakeSlice, MakeMap or MakeChan in that location to -// instantiate these types. -// -// Pos() returns the ast.CompositeLit.Lbrace for a composite literal, -// or the ast.CallExpr.Rparen for a call to new() or for a call that -// allocates a varargs slice. -// -// Example printed form: -// t1 = StackAlloc <*int> -// t2 = HeapAlloc <*int> (new) -// -type Alloc struct { - register - Heap bool - index int // dense numbering; for lifting -} - -var _ Instruction = (*Sigma)(nil) -var _ Value = (*Sigma)(nil) - -// The Sigma instruction represents an SSI σ-node, which splits values -// at branches in the control flow. -// -// Conceptually, σ-nodes exist at the end of blocks that branch and -// constitute parallel assignments to one value per destination block. -// However, such a representation would be awkward to work with, so -// instead we place σ-nodes at the beginning of branch targets. The -// From field denotes to which incoming edge the node applies. -// -// Within a block, all σ-nodes must appear before all non-σ nodes. -// -// Example printed form: -// t2 = Sigma [#0] t1 (x) -// -type Sigma struct { - register - From *BasicBlock - X Value - - live bool // used during lifting -} - -// The Phi instruction represents an SSA φ-node, which combines values -// that differ across incoming control-flow edges and yields a new -// value. Within a block, all φ-nodes must appear before all non-φ, non-σ -// nodes. -// -// Pos() returns the position of the && or || for short-circuit -// control-flow joins, or that of the *Alloc for φ-nodes inserted -// during SSA renaming. -// -// Example printed form: -// t3 = Phi 2:t1 4:t2 (x) -// -type Phi struct { - register - Edges []Value // Edges[i] is value for Block().Preds[i] - - live bool // used during lifting -} - -// The Call instruction represents a function or method call. -// -// The Call instruction yields the function result if there is exactly -// one. Otherwise it returns a tuple, the components of which are -// accessed via Extract. -// -// See CallCommon for generic function call documentation. -// -// Pos() returns the ast.CallExpr.Lparen, if explicit in the source. -// -// Example printed form: -// t3 = Call <()> println t1 t2 -// t4 = Call <()> foo$1 -// t6 = Invoke t5.String -// -type Call struct { - register - Call CallCommon -} - -// The BinOp instruction yields the result of binary operation X Op Y. -// -// Pos() returns the ast.BinaryExpr.OpPos, if explicit in the source. -// -// Example printed form: -// t3 = BinOp {+} t2 t1 -// -type BinOp struct { - register - // One of: - // ADD SUB MUL QUO REM + - * / % - // AND OR XOR SHL SHR AND_NOT & | ^ << >> &^ - // EQL NEQ LSS LEQ GTR GEQ == != < <= < >= - Op token.Token - X, Y Value -} - -// The UnOp instruction yields the result of Op X. -// XOR is bitwise complement. -// SUB is negation. -// NOT is logical negation. -// -// -// Example printed form: -// t2 = UnOp {^} t1 -// -type UnOp struct { - register - Op token.Token // One of: NOT SUB XOR ! - ^ - X Value -} - -// The Load instruction loads a value from a memory address. -// -// For implicit memory loads, Pos() returns the position of the -// most closely associated source-level construct; the details are not -// specified. -// -// Example printed form: -// t2 = Load t1 -// -type Load struct { - register - X Value -} - -// The ChangeType instruction applies to X a value-preserving type -// change to Type(). -// -// Type changes are permitted: -// - between a named type and its underlying type. -// - between two named types of the same underlying type. -// - between (possibly named) pointers to identical base types. -// - from a bidirectional channel to a read- or write-channel, -// optionally adding/removing a name. -// -// This operation cannot fail dynamically. -// -// Pos() returns the ast.CallExpr.Lparen, if the instruction arose -// from an explicit conversion in the source. -// -// Example printed form: -// t2 = ChangeType <*T> t1 -// -type ChangeType struct { - register - X Value -} - -// The Convert instruction yields the conversion of value X to type -// Type(). One or both of those types is basic (but possibly named). -// -// A conversion may change the value and representation of its operand. -// Conversions are permitted: -// - between real numeric types. -// - between complex numeric types. -// - between string and []byte or []rune. -// - between pointers and unsafe.Pointer. -// - between unsafe.Pointer and uintptr. -// - from (Unicode) integer to (UTF-8) string. -// A conversion may imply a type name change also. -// -// This operation cannot fail dynamically. -// -// Conversions of untyped string/number/bool constants to a specific -// representation are eliminated during IR construction. -// -// Pos() returns the ast.CallExpr.Lparen, if the instruction arose -// from an explicit conversion in the source. -// -// Example printed form: -// t2 = Convert <[]byte> t1 -// -type Convert struct { - register - X Value -} - -// ChangeInterface constructs a value of one interface type from a -// value of another interface type known to be assignable to it. -// This operation cannot fail. -// -// Pos() returns the ast.CallExpr.Lparen if the instruction arose from -// an explicit T(e) conversion; the ast.TypeAssertExpr.Lparen if the -// instruction arose from an explicit e.(T) operation; or token.NoPos -// otherwise. -// -// Example printed form: -// t2 = ChangeInterface t1 -// -type ChangeInterface struct { - register - X Value -} - -// MakeInterface constructs an instance of an interface type from a -// value of a concrete type. -// -// Use Program.MethodSets.MethodSet(X.Type()) to find the method-set -// of X, and Program.MethodValue(m) to find the implementation of a method. -// -// To construct the zero value of an interface type T, use: -// NewConst(constant.MakeNil(), T, pos) -// -// Pos() returns the ast.CallExpr.Lparen, if the instruction arose -// from an explicit conversion in the source. -// -// Example printed form: -// t2 = MakeInterface t1 -// -type MakeInterface struct { - register - X Value -} - -// The MakeClosure instruction yields a closure value whose code is -// Fn and whose free variables' values are supplied by Bindings. -// -// Type() returns a (possibly named) *types.Signature. -// -// Pos() returns the ast.FuncLit.Type.Func for a function literal -// closure or the ast.SelectorExpr.Sel for a bound method closure. -// -// Example printed form: -// t1 = MakeClosure foo$1 t1 t2 -// t5 = MakeClosure (T).foo$bound t4 -// -type MakeClosure struct { - register - Fn Value // always a *Function - Bindings []Value // values for each free variable in Fn.FreeVars -} - -// The MakeMap instruction creates a new hash-table-based map object -// and yields a value of kind map. -// -// Type() returns a (possibly named) *types.Map. -// -// Pos() returns the ast.CallExpr.Lparen, if created by make(map), or -// the ast.CompositeLit.Lbrack if created by a literal. -// -// Example printed form: -// t1 = MakeMap -// t2 = MakeMap t1 -// -type MakeMap struct { - register - Reserve Value // initial space reservation; nil => default -} - -// The MakeChan instruction creates a new channel object and yields a -// value of kind chan. -// -// Type() returns a (possibly named) *types.Chan. -// -// Pos() returns the ast.CallExpr.Lparen for the make(chan) that -// created it. -// -// Example printed form: -// t3 = MakeChan t1 -// t4 = MakeChan t2 -// -type MakeChan struct { - register - Size Value // int; size of buffer; zero => synchronous. -} - -// The MakeSlice instruction yields a slice of length Len backed by a -// newly allocated array of length Cap. -// -// Both Len and Cap must be non-nil Values of integer type. -// -// (Alloc(types.Array) followed by Slice will not suffice because -// Alloc can only create arrays of constant length.) -// -// Type() returns a (possibly named) *types.Slice. -// -// Pos() returns the ast.CallExpr.Lparen for the make([]T) that -// created it. -// -// Example printed form: -// t3 = MakeSlice <[]string> t1 t2 -// t4 = MakeSlice t1 t2 -// -type MakeSlice struct { - register - Len Value - Cap Value -} - -// The Slice instruction yields a slice of an existing string, slice -// or *array X between optional integer bounds Low and High. -// -// Dynamically, this instruction panics if X evaluates to a nil *array -// pointer. -// -// Type() returns string if the type of X was string, otherwise a -// *types.Slice with the same element type as X. -// -// Pos() returns the ast.SliceExpr.Lbrack if created by a x[:] slice -// operation, the ast.CompositeLit.Lbrace if created by a literal, or -// NoPos if not explicit in the source (e.g. a variadic argument slice). -// -// Example printed form: -// t4 = Slice <[]int> t3 t2 t1 -// -type Slice struct { - register - X Value // slice, string, or *array - Low, High, Max Value // each may be nil -} - -// The FieldAddr instruction yields the address of Field of *struct X. -// -// The field is identified by its index within the field list of the -// struct type of X. -// -// Dynamically, this instruction panics if X evaluates to a nil -// pointer. -// -// Type() returns a (possibly named) *types.Pointer. -// -// Pos() returns the position of the ast.SelectorExpr.Sel for the -// field, if explicit in the source. -// -// Example printed form: -// t2 = FieldAddr <*int> [0] (X) t1 -// -type FieldAddr struct { - register - X Value // *struct - Field int // field is X.Type().Underlying().(*types.Pointer).Elem().Underlying().(*types.Struct).Field(Field) -} - -// The Field instruction yields the Field of struct X. -// -// The field is identified by its index within the field list of the -// struct type of X; by using numeric indices we avoid ambiguity of -// package-local identifiers and permit compact representations. -// -// Pos() returns the position of the ast.SelectorExpr.Sel for the -// field, if explicit in the source. -// -// Example printed form: -// t2 = FieldAddr [0] (X) t1 -// -type Field struct { - register - X Value // struct - Field int // index into X.Type().(*types.Struct).Fields -} - -// The IndexAddr instruction yields the address of the element at -// index Index of collection X. Index is an integer expression. -// -// The elements of maps and strings are not addressable; use StringLookup, MapLookup or -// MapUpdate instead. -// -// Dynamically, this instruction panics if X evaluates to a nil *array -// pointer. -// -// Type() returns a (possibly named) *types.Pointer. -// -// Pos() returns the ast.IndexExpr.Lbrack for the index operation, if -// explicit in the source. -// -// Example printed form: -// t3 = IndexAddr <*int> t2 t1 -// -type IndexAddr struct { - register - X Value // slice or *array, - Index Value // numeric index -} - -// The Index instruction yields element Index of array X. -// -// Pos() returns the ast.IndexExpr.Lbrack for the index operation, if -// explicit in the source. -// -// Example printed form: -// t3 = Index t2 t1 -// -type Index struct { - register - X Value // array - Index Value // integer index -} - -// The MapLookup instruction yields element Index of collection X, a map. -// -// If CommaOk, the result is a 2-tuple of the value above and a -// boolean indicating the result of a map membership test for the key. -// The components of the tuple are accessed using Extract. -// -// Pos() returns the ast.IndexExpr.Lbrack, if explicit in the source. -// -// Example printed form: -// t4 = MapLookup t3 t1 -// t6 = MapLookup <(string, bool)> t3 t2 -// -type MapLookup struct { - register - X Value // map - Index Value // key-typed index - CommaOk bool // return a value,ok pair -} - -// The StringLookup instruction yields element Index of collection X, a string. -// Index is an integer expression. -// -// Pos() returns the ast.IndexExpr.Lbrack, if explicit in the source. -// -// Example printed form: -// t3 = StringLookup t2 t1 -// -type StringLookup struct { - register - X Value // string - Index Value // numeric index -} - -// SelectState is a helper for Select. -// It represents one goal state and its corresponding communication. -// -type SelectState struct { - Dir types.ChanDir // direction of case (SendOnly or RecvOnly) - Chan Value // channel to use (for send or receive) - Send Value // value to send (for send) - Pos token.Pos // position of token.ARROW - DebugNode ast.Node // ast.SendStmt or ast.UnaryExpr(<-) [debug mode] -} - -// The Select instruction tests whether (or blocks until) one -// of the specified sent or received states is entered. -// -// Let n be the number of States for which Dir==RECV and Tᵢ (0 ≤ i < n) -// be the element type of each such state's Chan. -// Select returns an n+2-tuple -// (index int, recvOk bool, r₀ T₀, ... rₙ-1 Tₙ-1) -// The tuple's components, described below, must be accessed via the -// Extract instruction. -// -// If Blocking, select waits until exactly one state holds, i.e. a -// channel becomes ready for the designated operation of sending or -// receiving; select chooses one among the ready states -// pseudorandomly, performs the send or receive operation, and sets -// 'index' to the index of the chosen channel. -// -// If !Blocking, select doesn't block if no states hold; instead it -// returns immediately with index equal to -1. -// -// If the chosen channel was used for a receive, the rᵢ component is -// set to the received value, where i is the index of that state among -// all n receive states; otherwise rᵢ has the zero value of type Tᵢ. -// Note that the receive index i is not the same as the state -// index index. -// -// The second component of the triple, recvOk, is a boolean whose value -// is true iff the selected operation was a receive and the receive -// successfully yielded a value. -// -// Pos() returns the ast.SelectStmt.Select. -// -// Example printed form: -// t6 = SelectNonBlocking <(index int, ok bool, int)> [<-t4, t5<-t1] -// t11 = SelectBlocking <(index int, ok bool)> [] -// -type Select struct { - register - States []*SelectState - Blocking bool -} - -// The Range instruction yields an iterator over the domain and range -// of X, which must be a string or map. -// -// Elements are accessed via Next. -// -// Type() returns an opaque and degenerate "rangeIter" type. -// -// Pos() returns the ast.RangeStmt.For. -// -// Example printed form: -// t2 = Range t1 -// -type Range struct { - register - X Value // string or map -} - -// The Next instruction reads and advances the (map or string) -// iterator Iter and returns a 3-tuple value (ok, k, v). If the -// iterator is not exhausted, ok is true and k and v are the next -// elements of the domain and range, respectively. Otherwise ok is -// false and k and v are undefined. -// -// Components of the tuple are accessed using Extract. -// -// The IsString field distinguishes iterators over strings from those -// over maps, as the Type() alone is insufficient: consider -// map[int]rune. -// -// Type() returns a *types.Tuple for the triple (ok, k, v). -// The types of k and/or v may be types.Invalid. -// -// Example printed form: -// t5 = Next <(ok bool, k int, v rune)> t2 -// t5 = Next <(ok bool, k invalid type, v invalid type)> t2 -// -type Next struct { - register - Iter Value - IsString bool // true => string iterator; false => map iterator. -} - -// The TypeAssert instruction tests whether interface value X has type -// AssertedType. -// -// If !CommaOk, on success it returns v, the result of the conversion -// (defined below); on failure it panics. -// -// If CommaOk: on success it returns a pair (v, true) where v is the -// result of the conversion; on failure it returns (z, false) where z -// is AssertedType's zero value. The components of the pair must be -// accessed using the Extract instruction. -// -// If AssertedType is a concrete type, TypeAssert checks whether the -// dynamic type in interface X is equal to it, and if so, the result -// of the conversion is a copy of the value in the interface. -// -// If AssertedType is an interface, TypeAssert checks whether the -// dynamic type of the interface is assignable to it, and if so, the -// result of the conversion is a copy of the interface value X. -// If AssertedType is a superinterface of X.Type(), the operation will -// fail iff the operand is nil. (Contrast with ChangeInterface, which -// performs no nil-check.) -// -// Type() reflects the actual type of the result, possibly a -// 2-types.Tuple; AssertedType is the asserted type. -// -// Pos() returns the ast.CallExpr.Lparen if the instruction arose from -// an explicit T(e) conversion; the ast.TypeAssertExpr.Lparen if the -// instruction arose from an explicit e.(T) operation; or the -// ast.CaseClause.Case if the instruction arose from a case of a -// type-switch statement. -// -// Example printed form: -// t2 = TypeAssert t1 -// t4 = TypeAssert <(value fmt.Stringer, ok bool)> t1 -// -type TypeAssert struct { - register - X Value - AssertedType types.Type - CommaOk bool -} - -// The Extract instruction yields component Index of Tuple. -// -// This is used to access the results of instructions with multiple -// return values, such as Call, TypeAssert, Next, Recv, -// MapLookup and others. -// -// Example printed form: -// t7 = Extract [1] (ok) t4 -// -type Extract struct { - register - Tuple Value - Index int -} - -// Instructions executed for effect. They do not yield a value. -------------------- - -// The Jump instruction transfers control to the sole successor of its -// owning block. -// -// A Jump must be the last instruction of its containing BasicBlock. -// -// Pos() returns NoPos. -// -// Example printed form: -// Jump → b1 -// -type Jump struct { - anInstruction - Comment string -} - -// The Unreachable pseudo-instruction signals that execution cannot -// continue after the preceding function call because it terminates -// the process. -// -// The instruction acts as a control instruction, jumping to the exit -// block. However, this jump will never execute. -// -// An Unreachable instruction must be the last instruction of its -// containing BasicBlock. -// -// Example printed form: -// Unreachable → b1 -// -type Unreachable struct { - anInstruction -} - -// The If instruction transfers control to one of the two successors -// of its owning block, depending on the boolean Cond: the first if -// true, the second if false. -// -// An If instruction must be the last instruction of its containing -// BasicBlock. -// -// Pos() returns the *ast.IfStmt, if explicit in the source. -// -// Example printed form: -// If t2 → b1 b2 -// -type If struct { - anInstruction - Cond Value -} - -type ConstantSwitch struct { - anInstruction - Tag Value - // Constant branch conditions. A nil Value denotes the (implicit - // or explicit) default branch. - Conds []Value -} - -type TypeSwitch struct { - register - Tag Value - Conds []types.Type -} - -// The Return instruction returns values and control back to the calling -// function. -// -// len(Results) is always equal to the number of results in the -// function's signature. -// -// If len(Results) > 1, Return returns a tuple value with the specified -// components which the caller must access using Extract instructions. -// -// There is no instruction to return a ready-made tuple like those -// returned by a "value,ok"-mode TypeAssert, MapLookup or Recv or -// a tail-call to a function with multiple result parameters. -// -// Return must be the last instruction of its containing BasicBlock. -// Such a block has no successors. -// -// Pos() returns the ast.ReturnStmt.Return, if explicit in the source. -// -// Example printed form: -// Return -// Return t1 t2 -// -type Return struct { - anInstruction - Results []Value -} - -// The RunDefers instruction pops and invokes the entire stack of -// procedure calls pushed by Defer instructions in this function. -// -// It is legal to encounter multiple 'rundefers' instructions in a -// single control-flow path through a function; this is useful in -// the combined init() function, for example. -// -// Pos() returns NoPos. -// -// Example printed form: -// RunDefers -// -type RunDefers struct { - anInstruction -} - -// The Panic instruction initiates a panic with value X. -// -// A Panic instruction must be the last instruction of its containing -// BasicBlock, which must have one successor, the exit block. -// -// NB: 'go panic(x)' and 'defer panic(x)' do not use this instruction; -// they are treated as calls to a built-in function. -// -// Pos() returns the ast.CallExpr.Lparen if this panic was explicit -// in the source. -// -// Example printed form: -// Panic t1 -// -type Panic struct { - anInstruction - X Value // an interface{} -} - -// The Go instruction creates a new goroutine and calls the specified -// function within it. -// -// See CallCommon for generic function call documentation. -// -// Pos() returns the ast.GoStmt.Go. -// -// Example printed form: -// Go println t1 -// Go t3 -// GoInvoke t4.Bar t2 -// -type Go struct { - anInstruction - Call CallCommon -} - -// The Defer instruction pushes the specified call onto a stack of -// functions to be called by a RunDefers instruction or by a panic. -// -// See CallCommon for generic function call documentation. -// -// Pos() returns the ast.DeferStmt.Defer. -// -// Example printed form: -// Defer println t1 -// Defer t3 -// DeferInvoke t4.Bar t2 -// -type Defer struct { - anInstruction - Call CallCommon -} - -// The Send instruction sends X on channel Chan. -// -// Pos() returns the ast.SendStmt.Arrow, if explicit in the source. -// -// Example printed form: -// Send t2 t1 -// -type Send struct { - anInstruction - Chan, X Value -} - -// The Recv instruction receives from channel Chan. -// -// If CommaOk, the result is a 2-tuple of the value above -// and a boolean indicating the success of the receive. The -// components of the tuple are accessed using Extract. -// -// Pos() returns the ast.UnaryExpr.OpPos, if explicit in the source. -// For receive operations implicit in ranging over a channel, -// Pos() returns the ast.RangeStmt.For. -// -// Example printed form: -// t2 = Recv t1 -// t3 = Recv <(int, bool)> t1 -type Recv struct { - register - Chan Value - CommaOk bool -} - -// The Store instruction stores Val at address Addr. -// Stores can be of arbitrary types. -// -// Pos() returns the position of the source-level construct most closely -// associated with the memory store operation. -// Since implicit memory stores are numerous and varied and depend upon -// implementation choices, the details are not specified. -// -// Example printed form: -// Store {int} t2 t1 -// -type Store struct { - anInstruction - Addr Value - Val Value -} - -// The BlankStore instruction is emitted for assignments to the blank -// identifier. -// -// BlankStore is a pseudo-instruction: it has no dynamic effect. -// -// Pos() returns NoPos. -// -// Example printed form: -// BlankStore t1 -// -type BlankStore struct { - anInstruction - Val Value -} - -// The MapUpdate instruction updates the association of Map[Key] to -// Value. -// -// Pos() returns the ast.KeyValueExpr.Colon or ast.IndexExpr.Lbrack, -// if explicit in the source. -// -// Example printed form: -// MapUpdate t3 t1 t2 -// -type MapUpdate struct { - anInstruction - Map Value - Key Value - Value Value -} - -// A DebugRef instruction maps a source-level expression Expr to the -// IR value X that represents the value (!IsAddr) or address (IsAddr) -// of that expression. -// -// DebugRef is a pseudo-instruction: it has no dynamic effect. -// -// Pos() returns Expr.Pos(), the start position of the source-level -// expression. This is not the same as the "designated" token as -// documented at Value.Pos(). e.g. CallExpr.Pos() does not return the -// position of the ("designated") Lparen token. -// -// DebugRefs are generated only for functions built with debugging -// enabled; see Package.SetDebugMode() and the GlobalDebug builder -// mode flag. -// -// DebugRefs are not emitted for ast.Idents referring to constants or -// predeclared identifiers, since they are trivial and numerous. -// Nor are they emitted for ast.ParenExprs. -// -// (By representing these as instructions, rather than out-of-band, -// consistency is maintained during transformation passes by the -// ordinary SSA renaming machinery.) -// -// Example printed form: -// ; *ast.CallExpr @ 102:9 is t5 -// ; var x float64 @ 109:72 is x -// ; address of *ast.CompositeLit @ 216:10 is t0 -// -type DebugRef struct { - anInstruction - Expr ast.Expr // the referring expression (never *ast.ParenExpr) - object types.Object // the identity of the source var/func - IsAddr bool // Expr is addressable and X is the address it denotes - X Value // the value or address of Expr -} - -// Embeddable mix-ins and helpers for common parts of other structs. ----------- - -// register is a mix-in embedded by all IR values that are also -// instructions, i.e. virtual registers, and provides a uniform -// implementation of most of the Value interface: Value.Name() is a -// numbered register (e.g. "t0"); the other methods are field accessors. -// -// Temporary names are automatically assigned to each register on -// completion of building a function in IR form. -// -type register struct { - anInstruction - typ types.Type // type of virtual register - referrers []Instruction -} - -type node struct { - source ast.Node - id ID -} - -func (n *node) setID(id ID) { n.id = id } -func (n node) ID() ID { return n.id } - -func (n *node) setSource(source ast.Node) { n.source = source } -func (n *node) Source() ast.Node { return n.source } - -func (n *node) Pos() token.Pos { - if n.source != nil { - return n.source.Pos() - } - return token.NoPos -} - -// anInstruction is a mix-in embedded by all Instructions. -// It provides the implementations of the Block and setBlock methods. -type anInstruction struct { - node - block *BasicBlock // the basic block of this instruction -} - -// CallCommon is contained by Go, Defer and Call to hold the -// common parts of a function or method call. -// -// Each CallCommon exists in one of two modes, function call and -// interface method invocation, or "call" and "invoke" for short. -// -// 1. "call" mode: when Method is nil (!IsInvoke), a CallCommon -// represents an ordinary function call of the value in Value, -// which may be a *Builtin, a *Function or any other value of kind -// 'func'. -// -// Value may be one of: -// (a) a *Function, indicating a statically dispatched call -// to a package-level function, an anonymous function, or -// a method of a named type. -// (b) a *MakeClosure, indicating an immediately applied -// function literal with free variables. -// (c) a *Builtin, indicating a statically dispatched call -// to a built-in function. -// (d) any other value, indicating a dynamically dispatched -// function call. -// StaticCallee returns the identity of the callee in cases -// (a) and (b), nil otherwise. -// -// Args contains the arguments to the call. If Value is a method, -// Args[0] contains the receiver parameter. -// -// Example printed form: -// t3 = Call <()> println t1 t2 -// Go t3 -// Defer t3 -// -// 2. "invoke" mode: when Method is non-nil (IsInvoke), a CallCommon -// represents a dynamically dispatched call to an interface method. -// In this mode, Value is the interface value and Method is the -// interface's abstract method. Note: an abstract method may be -// shared by multiple interfaces due to embedding; Value.Type() -// provides the specific interface used for this call. -// -// Value is implicitly supplied to the concrete method implementation -// as the receiver parameter; in other words, Args[0] holds not the -// receiver but the first true argument. -// -// Example printed form: -// t6 = Invoke t5.String -// GoInvoke t4.Bar t2 -// DeferInvoke t4.Bar t2 -// -// For all calls to variadic functions (Signature().Variadic()), -// the last element of Args is a slice. -// -type CallCommon struct { - Value Value // receiver (invoke mode) or func value (call mode) - Method *types.Func // abstract method (invoke mode) - Args []Value // actual parameters (in static method call, includes receiver) - Results Value -} - -// IsInvoke returns true if this call has "invoke" (not "call") mode. -func (c *CallCommon) IsInvoke() bool { - return c.Method != nil -} - -// Signature returns the signature of the called function. -// -// For an "invoke"-mode call, the signature of the interface method is -// returned. -// -// In either "call" or "invoke" mode, if the callee is a method, its -// receiver is represented by sig.Recv, not sig.Params().At(0). -// -func (c *CallCommon) Signature() *types.Signature { - if c.Method != nil { - return c.Method.Type().(*types.Signature) - } - return c.Value.Type().Underlying().(*types.Signature) -} - -// StaticCallee returns the callee if this is a trivially static -// "call"-mode call to a function. -func (c *CallCommon) StaticCallee() *Function { - switch fn := c.Value.(type) { - case *Function: - return fn - case *MakeClosure: - return fn.Fn.(*Function) - } - return nil -} - -// Description returns a description of the mode of this call suitable -// for a user interface, e.g., "static method call". -func (c *CallCommon) Description() string { - switch fn := c.Value.(type) { - case *Builtin: - return "built-in function call" - case *MakeClosure: - return "static function closure call" - case *Function: - if fn.Signature.Recv() != nil { - return "static method call" - } - return "static function call" - } - if c.IsInvoke() { - return "dynamic method call" // ("invoke" mode) - } - return "dynamic function call" -} - -// The CallInstruction interface, implemented by *Go, *Defer and *Call, -// exposes the common parts of function-calling instructions, -// yet provides a way back to the Value defined by *Call alone. -// -type CallInstruction interface { - Instruction - Common() *CallCommon // returns the common parts of the call - Value() *Call -} - -func (s *Call) Common() *CallCommon { return &s.Call } -func (s *Defer) Common() *CallCommon { return &s.Call } -func (s *Go) Common() *CallCommon { return &s.Call } - -func (s *Call) Value() *Call { return s } -func (s *Defer) Value() *Call { return nil } -func (s *Go) Value() *Call { return nil } - -func (v *Builtin) Type() types.Type { return v.sig } -func (v *Builtin) Name() string { return v.name } -func (*Builtin) Referrers() *[]Instruction { return nil } -func (v *Builtin) Pos() token.Pos { return token.NoPos } -func (v *Builtin) Object() types.Object { return types.Universe.Lookup(v.name) } -func (v *Builtin) Parent() *Function { return nil } - -func (v *FreeVar) Type() types.Type { return v.typ } -func (v *FreeVar) Name() string { return v.name } -func (v *FreeVar) Referrers() *[]Instruction { return &v.referrers } -func (v *FreeVar) Parent() *Function { return v.parent } - -func (v *Global) Type() types.Type { return v.typ } -func (v *Global) Name() string { return v.name } -func (v *Global) Parent() *Function { return nil } -func (v *Global) Referrers() *[]Instruction { return nil } -func (v *Global) Token() token.Token { return token.VAR } -func (v *Global) Object() types.Object { return v.object } -func (v *Global) String() string { return v.RelString(nil) } -func (v *Global) Package() *Package { return v.Pkg } -func (v *Global) RelString(from *types.Package) string { return relString(v, from) } - -func (v *Function) Name() string { return v.name } -func (v *Function) Type() types.Type { return v.Signature } -func (v *Function) Token() token.Token { return token.FUNC } -func (v *Function) Object() types.Object { return v.object } -func (v *Function) String() string { return v.RelString(nil) } -func (v *Function) Package() *Package { return v.Pkg } -func (v *Function) Parent() *Function { return v.parent } -func (v *Function) Referrers() *[]Instruction { - if v.parent != nil { - return &v.referrers - } - return nil -} - -func (v *Parameter) Object() types.Object { return v.object } - -func (v *Alloc) Type() types.Type { return v.typ } -func (v *Alloc) Referrers() *[]Instruction { return &v.referrers } - -func (v *register) Type() types.Type { return v.typ } -func (v *register) setType(typ types.Type) { v.typ = typ } -func (v *register) Name() string { return fmt.Sprintf("t%d", v.id) } -func (v *register) Referrers() *[]Instruction { return &v.referrers } - -func (v *anInstruction) Parent() *Function { return v.block.parent } -func (v *anInstruction) Block() *BasicBlock { return v.block } -func (v *anInstruction) setBlock(block *BasicBlock) { v.block = block } -func (v *anInstruction) Referrers() *[]Instruction { return nil } - -func (t *Type) Name() string { return t.object.Name() } -func (t *Type) Pos() token.Pos { return t.object.Pos() } -func (t *Type) Type() types.Type { return t.object.Type() } -func (t *Type) Token() token.Token { return token.TYPE } -func (t *Type) Object() types.Object { return t.object } -func (t *Type) String() string { return t.RelString(nil) } -func (t *Type) Package() *Package { return t.pkg } -func (t *Type) RelString(from *types.Package) string { return relString(t, from) } - -func (c *NamedConst) Name() string { return c.object.Name() } -func (c *NamedConst) Pos() token.Pos { return c.object.Pos() } -func (c *NamedConst) String() string { return c.RelString(nil) } -func (c *NamedConst) Type() types.Type { return c.object.Type() } -func (c *NamedConst) Token() token.Token { return token.CONST } -func (c *NamedConst) Object() types.Object { return c.object } -func (c *NamedConst) Package() *Package { return c.pkg } -func (c *NamedConst) RelString(from *types.Package) string { return relString(c, from) } - -// Func returns the package-level function of the specified name, -// or nil if not found. -// -func (p *Package) Func(name string) (f *Function) { - f, _ = p.Members[name].(*Function) - return -} - -// Var returns the package-level variable of the specified name, -// or nil if not found. -// -func (p *Package) Var(name string) (g *Global) { - g, _ = p.Members[name].(*Global) - return -} - -// Const returns the package-level constant of the specified name, -// or nil if not found. -// -func (p *Package) Const(name string) (c *NamedConst) { - c, _ = p.Members[name].(*NamedConst) - return -} - -// Type returns the package-level type of the specified name, -// or nil if not found. -// -func (p *Package) Type(name string) (t *Type) { - t, _ = p.Members[name].(*Type) - return -} - -func (s *DebugRef) Pos() token.Pos { return s.Expr.Pos() } - -// Operands. - -func (v *Alloc) Operands(rands []*Value) []*Value { - return rands -} - -func (v *BinOp) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Y) -} - -func (c *CallCommon) Operands(rands []*Value) []*Value { - rands = append(rands, &c.Value) - for i := range c.Args { - rands = append(rands, &c.Args[i]) - } - return rands -} - -func (s *Go) Operands(rands []*Value) []*Value { - return s.Call.Operands(rands) -} - -func (s *Call) Operands(rands []*Value) []*Value { - return s.Call.Operands(rands) -} - -func (s *Defer) Operands(rands []*Value) []*Value { - return s.Call.Operands(rands) -} - -func (v *ChangeInterface) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *ChangeType) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *Convert) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (s *DebugRef) Operands(rands []*Value) []*Value { - return append(rands, &s.X) -} - -func (v *Extract) Operands(rands []*Value) []*Value { - return append(rands, &v.Tuple) -} - -func (v *Field) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *FieldAddr) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (s *If) Operands(rands []*Value) []*Value { - return append(rands, &s.Cond) -} - -func (s *ConstantSwitch) Operands(rands []*Value) []*Value { - rands = append(rands, &s.Tag) - for i := range s.Conds { - rands = append(rands, &s.Conds[i]) - } - return rands -} - -func (s *TypeSwitch) Operands(rands []*Value) []*Value { - rands = append(rands, &s.Tag) - return rands -} - -func (v *Index) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Index) -} - -func (v *IndexAddr) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Index) -} - -func (*Jump) Operands(rands []*Value) []*Value { - return rands -} - -func (*Unreachable) Operands(rands []*Value) []*Value { - return rands -} - -func (v *MapLookup) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Index) -} - -func (v *StringLookup) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Index) -} - -func (v *MakeChan) Operands(rands []*Value) []*Value { - return append(rands, &v.Size) -} - -func (v *MakeClosure) Operands(rands []*Value) []*Value { - rands = append(rands, &v.Fn) - for i := range v.Bindings { - rands = append(rands, &v.Bindings[i]) - } - return rands -} - -func (v *MakeInterface) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *MakeMap) Operands(rands []*Value) []*Value { - return append(rands, &v.Reserve) -} - -func (v *MakeSlice) Operands(rands []*Value) []*Value { - return append(rands, &v.Len, &v.Cap) -} - -func (v *MapUpdate) Operands(rands []*Value) []*Value { - return append(rands, &v.Map, &v.Key, &v.Value) -} - -func (v *Next) Operands(rands []*Value) []*Value { - return append(rands, &v.Iter) -} - -func (s *Panic) Operands(rands []*Value) []*Value { - return append(rands, &s.X) -} - -func (v *Sigma) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *Phi) Operands(rands []*Value) []*Value { - for i := range v.Edges { - rands = append(rands, &v.Edges[i]) - } - return rands -} - -func (v *Range) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (s *Return) Operands(rands []*Value) []*Value { - for i := range s.Results { - rands = append(rands, &s.Results[i]) - } - return rands -} - -func (*RunDefers) Operands(rands []*Value) []*Value { - return rands -} - -func (v *Select) Operands(rands []*Value) []*Value { - for i := range v.States { - rands = append(rands, &v.States[i].Chan, &v.States[i].Send) - } - return rands -} - -func (s *Send) Operands(rands []*Value) []*Value { - return append(rands, &s.Chan, &s.X) -} - -func (recv *Recv) Operands(rands []*Value) []*Value { - return append(rands, &recv.Chan) -} - -func (v *Slice) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Low, &v.High, &v.Max) -} - -func (s *Store) Operands(rands []*Value) []*Value { - return append(rands, &s.Addr, &s.Val) -} - -func (s *BlankStore) Operands(rands []*Value) []*Value { - return append(rands, &s.Val) -} - -func (v *TypeAssert) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *UnOp) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *Load) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -// Non-Instruction Values: -func (v *Builtin) Operands(rands []*Value) []*Value { return rands } -func (v *FreeVar) Operands(rands []*Value) []*Value { return rands } -func (v *Const) Operands(rands []*Value) []*Value { return rands } -func (v *Function) Operands(rands []*Value) []*Value { return rands } -func (v *Global) Operands(rands []*Value) []*Value { return rands } -func (v *Parameter) Operands(rands []*Value) []*Value { return rands } diff --git a/vendor/honnef.co/go/tools/ir/staticcheck.conf b/vendor/honnef.co/go/tools/ir/staticcheck.conf deleted file mode 100644 index d7b38bc..0000000 --- a/vendor/honnef.co/go/tools/ir/staticcheck.conf +++ /dev/null @@ -1,3 +0,0 @@ -# ssa/... is mostly imported from upstream and we don't want to -# deviate from it too much, hence disabling SA1019 -checks = ["inherit", "-SA1019"] diff --git a/vendor/honnef.co/go/tools/ir/util.go b/vendor/honnef.co/go/tools/ir/util.go deleted file mode 100644 index df0f8bf..0000000 --- a/vendor/honnef.co/go/tools/ir/util.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines a number of miscellaneous utility functions. - -import ( - "fmt" - "go/ast" - "go/token" - "go/types" - "io" - "os" - - "golang.org/x/tools/go/ast/astutil" -) - -//// AST utilities - -func unparen(e ast.Expr) ast.Expr { return astutil.Unparen(e) } - -// isBlankIdent returns true iff e is an Ident with name "_". -// They have no associated types.Object, and thus no type. -// -func isBlankIdent(e ast.Expr) bool { - id, ok := e.(*ast.Ident) - return ok && id.Name == "_" -} - -//// Type utilities. Some of these belong in go/types. - -// isPointer returns true for types whose underlying type is a pointer. -func isPointer(typ types.Type) bool { - _, ok := typ.Underlying().(*types.Pointer) - return ok -} - -func isInterface(T types.Type) bool { return types.IsInterface(T) } - -// deref returns a pointer's element type; otherwise it returns typ. -func deref(typ types.Type) types.Type { - if p, ok := typ.Underlying().(*types.Pointer); ok { - return p.Elem() - } - return typ -} - -// recvType returns the receiver type of method obj. -func recvType(obj *types.Func) types.Type { - return obj.Type().(*types.Signature).Recv().Type() -} - -// logStack prints the formatted "start" message to stderr and -// returns a closure that prints the corresponding "end" message. -// Call using 'defer logStack(...)()' to show builder stack on panic. -// Don't forget trailing parens! -// -func logStack(format string, args ...interface{}) func() { - msg := fmt.Sprintf(format, args...) - io.WriteString(os.Stderr, msg) - io.WriteString(os.Stderr, "\n") - return func() { - io.WriteString(os.Stderr, msg) - io.WriteString(os.Stderr, " end\n") - } -} - -// newVar creates a 'var' for use in a types.Tuple. -func newVar(name string, typ types.Type) *types.Var { - return types.NewParam(token.NoPos, nil, name, typ) -} - -// anonVar creates an anonymous 'var' for use in a types.Tuple. -func anonVar(typ types.Type) *types.Var { - return newVar("", typ) -} - -var lenResults = types.NewTuple(anonVar(tInt)) - -// makeLen returns the len builtin specialized to type func(T)int. -func makeLen(T types.Type) *Builtin { - lenParams := types.NewTuple(anonVar(T)) - return &Builtin{ - name: "len", - sig: types.NewSignature(nil, lenParams, lenResults, false), - } -} diff --git a/vendor/honnef.co/go/tools/ir/wrappers.go b/vendor/honnef.co/go/tools/ir/wrappers.go deleted file mode 100644 index 7dd3347..0000000 --- a/vendor/honnef.co/go/tools/ir/wrappers.go +++ /dev/null @@ -1,292 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines synthesis of Functions that delegate to declared -// methods; they come in three kinds: -// -// (1) wrappers: methods that wrap declared methods, performing -// implicit pointer indirections and embedded field selections. -// -// (2) thunks: funcs that wrap declared methods. Like wrappers, -// thunks perform indirections and field selections. The thunk's -// first parameter is used as the receiver for the method call. -// -// (3) bounds: funcs that wrap declared methods. The bound's sole -// free variable, supplied by a closure, is used as the receiver -// for the method call. No indirections or field selections are -// performed since they can be done before the call. - -import ( - "fmt" - - "go/types" -) - -// -- wrappers ----------------------------------------------------------- - -// makeWrapper returns a synthetic method that delegates to the -// declared method denoted by meth.Obj(), first performing any -// necessary pointer indirections or field selections implied by meth. -// -// The resulting method's receiver type is meth.Recv(). -// -// This function is versatile but quite subtle! Consider the -// following axes of variation when making changes: -// - optional receiver indirection -// - optional implicit field selections -// - meth.Obj() may denote a concrete or an interface method -// - the result may be a thunk or a wrapper. -// -// EXCLUSIVE_LOCKS_REQUIRED(prog.methodsMu) -// -func makeWrapper(prog *Program, sel *types.Selection) *Function { - obj := sel.Obj().(*types.Func) // the declared function - sig := sel.Type().(*types.Signature) // type of this wrapper - - var recv *types.Var // wrapper's receiver or thunk's params[0] - name := obj.Name() - var description string - var start int // first regular param - if sel.Kind() == types.MethodExpr { - name += "$thunk" - description = "thunk" - recv = sig.Params().At(0) - start = 1 - } else { - description = "wrapper" - recv = sig.Recv() - } - - description = fmt.Sprintf("%s for %s", description, sel.Obj()) - if prog.mode&LogSource != 0 { - defer logStack("make %s to (%s)", description, recv.Type())() - } - fn := &Function{ - name: name, - method: sel, - object: obj, - Signature: sig, - Synthetic: description, - Prog: prog, - functionBody: new(functionBody), - } - fn.initHTML(prog.PrintFunc) - fn.startBody() - fn.addSpilledParam(recv, nil) - createParams(fn, start) - - indices := sel.Index() - - var v Value = fn.Locals[0] // spilled receiver - if isPointer(sel.Recv()) { - v = emitLoad(fn, v, nil) - - // For simple indirection wrappers, perform an informative nil-check: - // "value method (T).f called using nil *T pointer" - if len(indices) == 1 && !isPointer(recvType(obj)) { - var c Call - c.Call.Value = &Builtin{ - name: "ir:wrapnilchk", - sig: types.NewSignature(nil, - types.NewTuple(anonVar(sel.Recv()), anonVar(tString), anonVar(tString)), - types.NewTuple(anonVar(sel.Recv())), false), - } - c.Call.Args = []Value{ - v, - emitConst(fn, stringConst(deref(sel.Recv()).String())), - emitConst(fn, stringConst(sel.Obj().Name())), - } - c.setType(v.Type()) - v = fn.emit(&c, nil) - } - } - - // Invariant: v is a pointer, either - // value of *A receiver param, or - // address of A spilled receiver. - - // We use pointer arithmetic (FieldAddr possibly followed by - // Load) in preference to value extraction (Field possibly - // preceded by Load). - - v = emitImplicitSelections(fn, v, indices[:len(indices)-1], nil) - - // Invariant: v is a pointer, either - // value of implicit *C field, or - // address of implicit C field. - - var c Call - if r := recvType(obj); !isInterface(r) { // concrete method - if !isPointer(r) { - v = emitLoad(fn, v, nil) - } - c.Call.Value = prog.declaredFunc(obj) - c.Call.Args = append(c.Call.Args, v) - } else { - c.Call.Method = obj - c.Call.Value = emitLoad(fn, v, nil) - } - for _, arg := range fn.Params[1:] { - c.Call.Args = append(c.Call.Args, arg) - } - emitTailCall(fn, &c, nil) - fn.finishBody() - return fn -} - -// createParams creates parameters for wrapper method fn based on its -// Signature.Params, which do not include the receiver. -// start is the index of the first regular parameter to use. -// -func createParams(fn *Function, start int) { - tparams := fn.Signature.Params() - for i, n := start, tparams.Len(); i < n; i++ { - fn.addParamObj(tparams.At(i), nil) - } -} - -// -- bounds ----------------------------------------------------------- - -// makeBound returns a bound method wrapper (or "bound"), a synthetic -// function that delegates to a concrete or interface method denoted -// by obj. The resulting function has no receiver, but has one free -// variable which will be used as the method's receiver in the -// tail-call. -// -// Use MakeClosure with such a wrapper to construct a bound method -// closure. e.g.: -// -// type T int or: type T interface { meth() } -// func (t T) meth() -// var t T -// f := t.meth -// f() // calls t.meth() -// -// f is a closure of a synthetic wrapper defined as if by: -// -// f := func() { return t.meth() } -// -// Unlike makeWrapper, makeBound need perform no indirection or field -// selections because that can be done before the closure is -// constructed. -// -// EXCLUSIVE_LOCKS_ACQUIRED(meth.Prog.methodsMu) -// -func makeBound(prog *Program, obj *types.Func) *Function { - prog.methodsMu.Lock() - defer prog.methodsMu.Unlock() - fn, ok := prog.bounds[obj] - if !ok { - description := fmt.Sprintf("bound method wrapper for %s", obj) - if prog.mode&LogSource != 0 { - defer logStack("%s", description)() - } - fn = &Function{ - name: obj.Name() + "$bound", - object: obj, - Signature: changeRecv(obj.Type().(*types.Signature), nil), // drop receiver - Synthetic: description, - Prog: prog, - functionBody: new(functionBody), - } - fn.initHTML(prog.PrintFunc) - - fv := &FreeVar{name: "recv", typ: recvType(obj), parent: fn} - fn.FreeVars = []*FreeVar{fv} - fn.startBody() - createParams(fn, 0) - var c Call - - if !isInterface(recvType(obj)) { // concrete - c.Call.Value = prog.declaredFunc(obj) - c.Call.Args = []Value{fv} - } else { - c.Call.Value = fv - c.Call.Method = obj - } - for _, arg := range fn.Params { - c.Call.Args = append(c.Call.Args, arg) - } - emitTailCall(fn, &c, nil) - fn.finishBody() - - prog.bounds[obj] = fn - } - return fn -} - -// -- thunks ----------------------------------------------------------- - -// makeThunk returns a thunk, a synthetic function that delegates to a -// concrete or interface method denoted by sel.Obj(). The resulting -// function has no receiver, but has an additional (first) regular -// parameter. -// -// Precondition: sel.Kind() == types.MethodExpr. -// -// type T int or: type T interface { meth() } -// func (t T) meth() -// f := T.meth -// var t T -// f(t) // calls t.meth() -// -// f is a synthetic wrapper defined as if by: -// -// f := func(t T) { return t.meth() } -// -// TODO(adonovan): opt: currently the stub is created even when used -// directly in a function call: C.f(i, 0). This is less efficient -// than inlining the stub. -// -// EXCLUSIVE_LOCKS_ACQUIRED(meth.Prog.methodsMu) -// -func makeThunk(prog *Program, sel *types.Selection) *Function { - if sel.Kind() != types.MethodExpr { - panic(sel) - } - - key := selectionKey{ - kind: sel.Kind(), - recv: sel.Recv(), - obj: sel.Obj(), - index: fmt.Sprint(sel.Index()), - indirect: sel.Indirect(), - } - - prog.methodsMu.Lock() - defer prog.methodsMu.Unlock() - - // Canonicalize key.recv to avoid constructing duplicate thunks. - canonRecv, ok := prog.canon.At(key.recv).(types.Type) - if !ok { - canonRecv = key.recv - prog.canon.Set(key.recv, canonRecv) - } - key.recv = canonRecv - - fn, ok := prog.thunks[key] - if !ok { - fn = makeWrapper(prog, sel) - if fn.Signature.Recv() != nil { - panic(fn) // unexpected receiver - } - prog.thunks[key] = fn - } - return fn -} - -func changeRecv(s *types.Signature, recv *types.Var) *types.Signature { - return types.NewSignature(recv, s.Params(), s.Results(), s.Variadic()) -} - -// selectionKey is like types.Selection but a usable map key. -type selectionKey struct { - kind types.SelectionKind - recv types.Type // canonicalized via Program.canon - obj types.Object - index string - indirect bool -} diff --git a/vendor/honnef.co/go/tools/ir/write.go b/vendor/honnef.co/go/tools/ir/write.go deleted file mode 100644 index b936bc9..0000000 --- a/vendor/honnef.co/go/tools/ir/write.go +++ /dev/null @@ -1,5 +0,0 @@ -package ir - -func NewJump(parent *BasicBlock) *Jump { - return &Jump{anInstruction{block: parent}, ""} -} diff --git a/vendor/honnef.co/go/tools/lint/lint.go b/vendor/honnef.co/go/tools/lint/lint.go deleted file mode 100644 index 1a70e0c..0000000 --- a/vendor/honnef.co/go/tools/lint/lint.go +++ /dev/null @@ -1,539 +0,0 @@ -// Package lint provides the foundation for tools like staticcheck -package lint // import "honnef.co/go/tools/lint" - -import ( - "bytes" - "encoding/gob" - "fmt" - "go/scanner" - "go/token" - "go/types" - "path/filepath" - "sort" - "strings" - "sync" - "sync/atomic" - "unicode" - - "golang.org/x/tools/go/analysis" - "golang.org/x/tools/go/packages" - "honnef.co/go/tools/config" - "honnef.co/go/tools/internal/cache" -) - -type Documentation struct { - Title string - Text string - Since string - NonDefault bool - Options []string -} - -func (doc *Documentation) String() string { - b := &strings.Builder{} - fmt.Fprintf(b, "%s\n\n", doc.Title) - if doc.Text != "" { - fmt.Fprintf(b, "%s\n\n", doc.Text) - } - fmt.Fprint(b, "Available since\n ") - if doc.Since == "" { - fmt.Fprint(b, "unreleased") - } else { - fmt.Fprintf(b, "%s", doc.Since) - } - if doc.NonDefault { - fmt.Fprint(b, ", non-default") - } - fmt.Fprint(b, "\n") - if len(doc.Options) > 0 { - fmt.Fprintf(b, "\nOptions\n") - for _, opt := range doc.Options { - fmt.Fprintf(b, " %s", opt) - } - fmt.Fprint(b, "\n") - } - return b.String() -} - -type Ignore interface { - Match(p Problem) bool -} - -type LineIgnore struct { - File string - Line int - Checks []string - Matched bool - Pos token.Position -} - -func (li *LineIgnore) Match(p Problem) bool { - pos := p.Pos - if pos.Filename != li.File || pos.Line != li.Line { - return false - } - for _, c := range li.Checks { - if m, _ := filepath.Match(c, p.Check); m { - li.Matched = true - return true - } - } - return false -} - -func (li *LineIgnore) String() string { - matched := "not matched" - if li.Matched { - matched = "matched" - } - return fmt.Sprintf("%s:%d %s (%s)", li.File, li.Line, strings.Join(li.Checks, ", "), matched) -} - -type FileIgnore struct { - File string - Checks []string -} - -func (fi *FileIgnore) Match(p Problem) bool { - if p.Pos.Filename != fi.File { - return false - } - for _, c := range fi.Checks { - if m, _ := filepath.Match(c, p.Check); m { - return true - } - } - return false -} - -type Severity uint8 - -const ( - Error Severity = iota - Warning - Ignored -) - -// Problem represents a problem in some source code. -type Problem struct { - Pos token.Position - End token.Position - Message string - Check string - Severity Severity - Related []Related -} - -type Related struct { - Pos token.Position - End token.Position - Message string -} - -func (p Problem) Equal(o Problem) bool { - return p.Pos == o.Pos && - p.End == o.End && - p.Message == o.Message && - p.Check == o.Check && - p.Severity == o.Severity -} - -func (p *Problem) String() string { - return fmt.Sprintf("%s (%s)", p.Message, p.Check) -} - -// A Linter lints Go source code. -type Linter struct { - Checkers []*analysis.Analyzer - CumulativeCheckers []CumulativeChecker - GoVersion int - Config config.Config - Stats Stats - RepeatAnalyzers uint -} - -type CumulativeChecker interface { - Analyzer() *analysis.Analyzer - Result() []types.Object - ProblemObject(*token.FileSet, types.Object) Problem -} - -func (l *Linter) Lint(cfg *packages.Config, patterns []string) ([]Problem, error) { - var allAnalyzers []*analysis.Analyzer - allAnalyzers = append(allAnalyzers, l.Checkers...) - for _, cum := range l.CumulativeCheckers { - allAnalyzers = append(allAnalyzers, cum.Analyzer()) - } - - // The -checks command line flag overrules all configuration - // files, which means that for `-checks="foo"`, no check other - // than foo can ever be reported to the user. Make use of this - // fact to cull the list of analyses we need to run. - - // replace "inherit" with "all", as we don't want to base the - // list of all checks on the default configuration, which - // disables certain checks. - checks := make([]string, len(l.Config.Checks)) - copy(checks, l.Config.Checks) - for i, c := range checks { - if c == "inherit" { - checks[i] = "all" - } - } - - allowed := FilterChecks(allAnalyzers, checks) - var allowedAnalyzers []*analysis.Analyzer - for _, c := range l.Checkers { - if allowed[c.Name] { - allowedAnalyzers = append(allowedAnalyzers, c) - } - } - hasCumulative := false - for _, cum := range l.CumulativeCheckers { - a := cum.Analyzer() - if allowed[a.Name] { - hasCumulative = true - allowedAnalyzers = append(allowedAnalyzers, a) - } - } - - r, err := NewRunner(&l.Stats) - if err != nil { - return nil, err - } - r.goVersion = l.GoVersion - r.repeatAnalyzers = l.RepeatAnalyzers - - pkgs, err := r.Run(cfg, patterns, allowedAnalyzers, hasCumulative) - if err != nil { - return nil, err - } - - tpkgToPkg := map[*types.Package]*Package{} - for _, pkg := range pkgs { - tpkgToPkg[pkg.Types] = pkg - - for _, e := range pkg.errs { - switch e := e.(type) { - case types.Error: - p := Problem{ - Pos: e.Fset.PositionFor(e.Pos, false), - Message: e.Msg, - Severity: Error, - Check: "compile", - } - pkg.problems = append(pkg.problems, p) - case packages.Error: - msg := e.Msg - if len(msg) != 0 && msg[0] == '\n' { - // TODO(dh): See https://github.com/golang/go/issues/32363 - msg = msg[1:] - } - - var pos token.Position - if e.Pos == "" { - // Under certain conditions (malformed package - // declarations, multiple packages in the same - // directory), go list emits an error on stderr - // instead of JSON. Those errors do not have - // associated position information in - // go/packages.Error, even though the output on - // stderr may contain it. - if p, n, err := parsePos(msg); err == nil { - if abs, err := filepath.Abs(p.Filename); err == nil { - p.Filename = abs - } - pos = p - msg = msg[n+2:] - } - } else { - var err error - pos, _, err = parsePos(e.Pos) - if err != nil { - panic(fmt.Sprintf("internal error: %s", e)) - } - } - p := Problem{ - Pos: pos, - Message: msg, - Severity: Error, - Check: "compile", - } - pkg.problems = append(pkg.problems, p) - case scanner.ErrorList: - for _, e := range e { - p := Problem{ - Pos: e.Pos, - Message: e.Msg, - Severity: Error, - Check: "compile", - } - pkg.problems = append(pkg.problems, p) - } - case error: - p := Problem{ - Pos: token.Position{}, - Message: e.Error(), - Severity: Error, - Check: "compile", - } - pkg.problems = append(pkg.problems, p) - } - } - } - - atomic.StoreUint32(&r.stats.State, StateCumulative) - for _, cum := range l.CumulativeCheckers { - for _, res := range cum.Result() { - pkg := tpkgToPkg[res.Pkg()] - if pkg == nil { - panic(fmt.Sprintf("analyzer %s flagged object %s in package %s, a package that we aren't tracking", cum.Analyzer(), res, res.Pkg())) - } - allowedChecks := FilterChecks(allowedAnalyzers, pkg.cfg.Merge(l.Config).Checks) - if allowedChecks[cum.Analyzer().Name] { - pos := DisplayPosition(pkg.Fset, res.Pos()) - // FIXME(dh): why are we ignoring generated files - // here? Surely this is specific to 'unused', not all - // cumulative checkers - if _, ok := pkg.gen[pos.Filename]; ok { - continue - } - p := cum.ProblemObject(pkg.Fset, res) - pkg.problems = append(pkg.problems, p) - } - } - } - - for _, pkg := range pkgs { - if !pkg.fromSource { - // Don't cache packages that we loaded from the cache - continue - } - cpkg := cachedPackage{ - Problems: pkg.problems, - Ignores: pkg.ignores, - Config: pkg.cfg, - } - buf := &bytes.Buffer{} - if err := gob.NewEncoder(buf).Encode(cpkg); err != nil { - return nil, err - } - id := cache.Subkey(pkg.actionID, "data "+r.problemsCacheKey) - if err := r.cache.PutBytes(id, buf.Bytes()); err != nil { - return nil, err - } - } - - var problems []Problem - // Deduplicate line ignores. When U1000 processes a package and - // its test variant, it will only emit a single problem for an - // unused object, not two problems. We will, however, have two - // line ignores, one per package. Without deduplication, one line - // ignore will be marked as matched, while the other one won't, - // subsequently reporting a "this linter directive didn't match - // anything" error. - ignores := map[token.Position]Ignore{} - for _, pkg := range pkgs { - for _, ig := range pkg.ignores { - if lig, ok := ig.(*LineIgnore); ok { - ig = ignores[lig.Pos] - if ig == nil { - ignores[lig.Pos] = lig - ig = lig - } - } - for i := range pkg.problems { - p := &pkg.problems[i] - if ig.Match(*p) { - p.Severity = Ignored - } - } - } - - if pkg.cfg == nil { - // The package failed to load, otherwise we would have a - // valid config. Pass through all errors. - problems = append(problems, pkg.problems...) - } else { - for _, p := range pkg.problems { - allowedChecks := FilterChecks(allowedAnalyzers, pkg.cfg.Merge(l.Config).Checks) - allowedChecks["compile"] = true - if allowedChecks[p.Check] { - problems = append(problems, p) - } - } - } - - for _, ig := range pkg.ignores { - ig, ok := ig.(*LineIgnore) - if !ok { - continue - } - ig = ignores[ig.Pos].(*LineIgnore) - if ig.Matched { - continue - } - - couldveMatched := false - allowedChecks := FilterChecks(allowedAnalyzers, pkg.cfg.Merge(l.Config).Checks) - for _, c := range ig.Checks { - if !allowedChecks[c] { - continue - } - couldveMatched = true - break - } - - if !couldveMatched { - // The ignored checks were disabled for the containing package. - // Don't flag the ignore for not having matched. - continue - } - p := Problem{ - Pos: ig.Pos, - Message: "this linter directive didn't match anything; should it be removed?", - Check: "", - } - problems = append(problems, p) - } - } - - if len(problems) == 0 { - return nil, nil - } - - sort.Slice(problems, func(i, j int) bool { - pi := problems[i].Pos - pj := problems[j].Pos - - if pi.Filename != pj.Filename { - return pi.Filename < pj.Filename - } - if pi.Line != pj.Line { - return pi.Line < pj.Line - } - if pi.Column != pj.Column { - return pi.Column < pj.Column - } - - return problems[i].Message < problems[j].Message - }) - - var out []Problem - out = append(out, problems[0]) - for i, p := range problems[1:] { - // We may encounter duplicate problems because one file - // can be part of many packages. - if !problems[i].Equal(p) { - out = append(out, p) - } - } - return out, nil -} - -func FilterChecks(allChecks []*analysis.Analyzer, checks []string) map[string]bool { - // OPT(dh): this entire computation could be cached per package - allowedChecks := map[string]bool{} - - for _, check := range checks { - b := true - if len(check) > 1 && check[0] == '-' { - b = false - check = check[1:] - } - if check == "*" || check == "all" { - // Match all - for _, c := range allChecks { - allowedChecks[c.Name] = b - } - } else if strings.HasSuffix(check, "*") { - // Glob - prefix := check[:len(check)-1] - isCat := strings.IndexFunc(prefix, func(r rune) bool { return unicode.IsNumber(r) }) == -1 - - for _, c := range allChecks { - idx := strings.IndexFunc(c.Name, func(r rune) bool { return unicode.IsNumber(r) }) - if isCat { - // Glob is S*, which should match S1000 but not SA1000 - cat := c.Name[:idx] - if prefix == cat { - allowedChecks[c.Name] = b - } - } else { - // Glob is S1* - if strings.HasPrefix(c.Name, prefix) { - allowedChecks[c.Name] = b - } - } - } - } else { - // Literal check name - allowedChecks[check] = b - } - } - return allowedChecks -} - -func DisplayPosition(fset *token.FileSet, p token.Pos) token.Position { - if p == token.NoPos { - return token.Position{} - } - - // Only use the adjusted position if it points to another Go file. - // This means we'll point to the original file for cgo files, but - // we won't point to a YACC grammar file. - pos := fset.PositionFor(p, false) - adjPos := fset.PositionFor(p, true) - - if filepath.Ext(adjPos.Filename) == ".go" { - return adjPos - } - return pos -} - -var bufferPool = &sync.Pool{ - New: func() interface{} { - buf := bytes.NewBuffer(nil) - buf.Grow(64) - return buf - }, -} - -func FuncName(f *types.Func) string { - buf := bufferPool.Get().(*bytes.Buffer) - buf.Reset() - if f.Type() != nil { - sig := f.Type().(*types.Signature) - if recv := sig.Recv(); recv != nil { - buf.WriteByte('(') - if _, ok := recv.Type().(*types.Interface); ok { - // gcimporter creates abstract methods of - // named interfaces using the interface type - // (not the named type) as the receiver. - // Don't print it in full. - buf.WriteString("interface") - } else { - types.WriteType(buf, recv.Type(), nil) - } - buf.WriteByte(')') - buf.WriteByte('.') - } else if f.Pkg() != nil { - writePackage(buf, f.Pkg()) - } - } - buf.WriteString(f.Name()) - s := buf.String() - bufferPool.Put(buf) - return s -} - -func writePackage(buf *bytes.Buffer, pkg *types.Package) { - if pkg == nil { - return - } - s := pkg.Path() - if s != "" { - buf.WriteString(s) - buf.WriteByte('.') - } -} diff --git a/vendor/honnef.co/go/tools/lint/lintdsl/lintdsl.go b/vendor/honnef.co/go/tools/lint/lintdsl/lintdsl.go deleted file mode 100644 index 4408aff..0000000 --- a/vendor/honnef.co/go/tools/lint/lintdsl/lintdsl.go +++ /dev/null @@ -1,58 +0,0 @@ -// Package lintdsl provides helpers for implementing static analysis -// checks. Dot-importing this package is encouraged. -package lintdsl - -import ( - "bytes" - "fmt" - "go/ast" - "go/format" - - "golang.org/x/tools/go/analysis" - "honnef.co/go/tools/pattern" -) - -func Inspect(node ast.Node, fn func(node ast.Node) bool) { - if node == nil { - return - } - ast.Inspect(node, fn) -} - -func Match(pass *analysis.Pass, q pattern.Pattern, node ast.Node) (*pattern.Matcher, bool) { - // Note that we ignore q.Relevant – callers of Match usually use - // AST inspectors that already filter on nodes we're interested - // in. - m := &pattern.Matcher{TypesInfo: pass.TypesInfo} - ok := m.Match(q.Root, node) - return m, ok -} - -func MatchAndEdit(pass *analysis.Pass, before, after pattern.Pattern, node ast.Node) (*pattern.Matcher, []analysis.TextEdit, bool) { - m, ok := Match(pass, before, node) - if !ok { - return m, nil, false - } - r := pattern.NodeToAST(after.Root, m.State) - buf := &bytes.Buffer{} - format.Node(buf, pass.Fset, r) - edit := []analysis.TextEdit{{ - Pos: node.Pos(), - End: node.End(), - NewText: buf.Bytes(), - }} - return m, edit, true -} - -func Selector(x, sel string) *ast.SelectorExpr { - return &ast.SelectorExpr{ - X: &ast.Ident{Name: x}, - Sel: &ast.Ident{Name: sel}, - } -} - -// ExhaustiveTypeSwitch panics when called. It can be used to ensure -// that type switches are exhaustive. -func ExhaustiveTypeSwitch(v interface{}) { - panic(fmt.Sprintf("internal error: unhandled case %T", v)) -} diff --git a/vendor/honnef.co/go/tools/lint/lintutil/format/format.go b/vendor/honnef.co/go/tools/lint/lintutil/format/format.go deleted file mode 100644 index b28f888..0000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/format/format.go +++ /dev/null @@ -1,162 +0,0 @@ -// Package format provides formatters for linter problems. -package format - -import ( - "encoding/json" - "fmt" - "go/token" - "io" - "os" - "path/filepath" - "text/tabwriter" - - "honnef.co/go/tools/lint" -) - -func shortPath(path string) string { - cwd, err := os.Getwd() - if err != nil { - return path - } - if rel, err := filepath.Rel(cwd, path); err == nil && len(rel) < len(path) { - return rel - } - return path -} - -func relativePositionString(pos token.Position) string { - s := shortPath(pos.Filename) - if pos.IsValid() { - if s != "" { - s += ":" - } - s += fmt.Sprintf("%d:%d", pos.Line, pos.Column) - } - if s == "" { - s = "-" - } - return s -} - -type Statter interface { - Stats(total, errors, warnings, ignored int) -} - -type Formatter interface { - Format(p lint.Problem) -} - -type Text struct { - W io.Writer -} - -func (o Text) Format(p lint.Problem) { - fmt.Fprintf(o.W, "%s: %s\n", relativePositionString(p.Pos), p.String()) - for _, r := range p.Related { - fmt.Fprintf(o.W, "\t%s: %s\n", relativePositionString(r.Pos), r.Message) - } -} - -type JSON struct { - W io.Writer -} - -func severity(s lint.Severity) string { - switch s { - case lint.Error: - return "error" - case lint.Warning: - return "warning" - case lint.Ignored: - return "ignored" - } - return "" -} - -func (o JSON) Format(p lint.Problem) { - type location struct { - File string `json:"file"` - Line int `json:"line"` - Column int `json:"column"` - } - type related struct { - Location location `json:"location"` - End location `json:"end"` - Message string `json:"message"` - } - jp := struct { - Code string `json:"code"` - Severity string `json:"severity,omitempty"` - Location location `json:"location"` - End location `json:"end"` - Message string `json:"message"` - Related []related `json:"related,omitempty"` - }{ - Code: p.Check, - Severity: severity(p.Severity), - Location: location{ - File: p.Pos.Filename, - Line: p.Pos.Line, - Column: p.Pos.Column, - }, - End: location{ - File: p.End.Filename, - Line: p.End.Line, - Column: p.End.Column, - }, - Message: p.Message, - } - for _, r := range p.Related { - jp.Related = append(jp.Related, related{ - Location: location{ - File: r.Pos.Filename, - Line: r.Pos.Line, - Column: r.Pos.Column, - }, - End: location{ - File: r.End.Filename, - Line: r.End.Line, - Column: r.End.Column, - }, - Message: r.Message, - }) - } - _ = json.NewEncoder(o.W).Encode(jp) -} - -type Stylish struct { - W io.Writer - - prevFile string - tw *tabwriter.Writer -} - -func (o *Stylish) Format(p lint.Problem) { - pos := p.Pos - if pos.Filename == "" { - pos.Filename = "-" - } - - if pos.Filename != o.prevFile { - if o.prevFile != "" { - o.tw.Flush() - fmt.Fprintln(o.W) - } - fmt.Fprintln(o.W, pos.Filename) - o.prevFile = pos.Filename - o.tw = tabwriter.NewWriter(o.W, 0, 4, 2, ' ', 0) - } - fmt.Fprintf(o.tw, " (%d, %d)\t%s\t%s\n", pos.Line, pos.Column, p.Check, p.Message) - for _, r := range p.Related { - fmt.Fprintf(o.tw, " (%d, %d)\t\t %s\n", r.Pos.Line, r.Pos.Column, r.Message) - } -} - -func (o *Stylish) Stats(total, errors, warnings, ignored int) { - if o.tw != nil { - o.tw.Flush() - fmt.Fprintln(o.W) - } - fmt.Fprintf(o.W, " ✖ %d problems (%d errors, %d warnings, %d ignored)\n", - total, errors, warnings, ignored) -} diff --git a/vendor/honnef.co/go/tools/lint/lintutil/stats.go b/vendor/honnef.co/go/tools/lint/lintutil/stats.go deleted file mode 100644 index ba8caf0..0000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/stats.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build !aix,!android,!darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris - -package lintutil - -import "os" - -var infoSignals = []os.Signal{} diff --git a/vendor/honnef.co/go/tools/lint/lintutil/stats_bsd.go b/vendor/honnef.co/go/tools/lint/lintutil/stats_bsd.go deleted file mode 100644 index 3a62ede..0000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/stats_bsd.go +++ /dev/null @@ -1,10 +0,0 @@ -// +build darwin dragonfly freebsd netbsd openbsd - -package lintutil - -import ( - "os" - "syscall" -) - -var infoSignals = []os.Signal{syscall.SIGINFO} diff --git a/vendor/honnef.co/go/tools/lint/lintutil/stats_posix.go b/vendor/honnef.co/go/tools/lint/lintutil/stats_posix.go deleted file mode 100644 index 53f21c6..0000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/stats_posix.go +++ /dev/null @@ -1,10 +0,0 @@ -// +build aix android linux solaris - -package lintutil - -import ( - "os" - "syscall" -) - -var infoSignals = []os.Signal{syscall.SIGUSR1} diff --git a/vendor/honnef.co/go/tools/lint/lintutil/util.go b/vendor/honnef.co/go/tools/lint/lintutil/util.go deleted file mode 100644 index 7c3dbde..0000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/util.go +++ /dev/null @@ -1,444 +0,0 @@ -// Copyright (c) 2013 The Go Authors. All rights reserved. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file or at -// https://developers.google.com/open-source/licenses/bsd. - -// Package lintutil provides helpers for writing linter command lines. -package lintutil // import "honnef.co/go/tools/lint/lintutil" - -import ( - "crypto/sha256" - "errors" - "flag" - "fmt" - "go/build" - "go/token" - "io" - "log" - "os" - "os/signal" - "regexp" - "runtime" - "runtime/pprof" - "strconv" - "strings" - "sync" - "sync/atomic" - "time" - - "honnef.co/go/tools/config" - "honnef.co/go/tools/internal/cache" - "honnef.co/go/tools/lint" - "honnef.co/go/tools/lint/lintutil/format" - "honnef.co/go/tools/version" - - "golang.org/x/tools/go/analysis" - "golang.org/x/tools/go/buildutil" - "golang.org/x/tools/go/packages" -) - -func NewVersionFlag() flag.Getter { - tags := build.Default.ReleaseTags - v := tags[len(tags)-1][2:] - version := new(VersionFlag) - if err := version.Set(v); err != nil { - panic(fmt.Sprintf("internal error: %s", err)) - } - return version -} - -type VersionFlag int - -func (v *VersionFlag) String() string { - return fmt.Sprintf("1.%d", *v) - -} - -func (v *VersionFlag) Set(s string) error { - if len(s) < 3 { - return errors.New("invalid Go version") - } - if s[0] != '1' { - return errors.New("invalid Go version") - } - if s[1] != '.' { - return errors.New("invalid Go version") - } - i, err := strconv.Atoi(s[2:]) - *v = VersionFlag(i) - return err -} - -func (v *VersionFlag) Get() interface{} { - return int(*v) -} - -func usage(name string, flags *flag.FlagSet) func() { - return func() { - fmt.Fprintf(os.Stderr, "Usage of %s:\n", name) - fmt.Fprintf(os.Stderr, "\t%s [flags] # runs on package in current directory\n", name) - fmt.Fprintf(os.Stderr, "\t%s [flags] packages\n", name) - fmt.Fprintf(os.Stderr, "\t%s [flags] directory\n", name) - fmt.Fprintf(os.Stderr, "\t%s [flags] files... # must be a single package\n", name) - fmt.Fprintf(os.Stderr, "Flags:\n") - flags.PrintDefaults() - } -} - -type list []string - -func (list *list) String() string { - return `"` + strings.Join(*list, ",") + `"` -} - -func (list *list) Set(s string) error { - if s == "" { - *list = nil - return nil - } - - *list = strings.Split(s, ",") - return nil -} - -func FlagSet(name string) *flag.FlagSet { - flags := flag.NewFlagSet("", flag.ExitOnError) - flags.Usage = usage(name, flags) - flags.String("tags", "", "List of `build tags`") - flags.Bool("tests", true, "Include tests") - flags.Bool("version", false, "Print version and exit") - flags.Bool("show-ignored", false, "Don't filter ignored problems") - flags.String("f", "text", "Output `format` (valid choices are 'stylish', 'text' and 'json')") - flags.String("explain", "", "Print description of `check`") - - flags.String("debug.cpuprofile", "", "Write CPU profile to `file`") - flags.String("debug.memprofile", "", "Write memory profile to `file`") - flags.Bool("debug.version", false, "Print detailed version information about this program") - flags.Bool("debug.no-compile-errors", false, "Don't print compile errors") - flags.String("debug.measure-analyzers", "", "Write analysis measurements to `file`. `file` will be opened for appending if it already exists.") - flags.Uint("debug.repeat-analyzers", 0, "Run analyzers `num` times") - - checks := list{"inherit"} - fail := list{"all"} - flags.Var(&checks, "checks", "Comma-separated list of `checks` to enable.") - flags.Var(&fail, "fail", "Comma-separated list of `checks` that can cause a non-zero exit status.") - - tags := build.Default.ReleaseTags - v := tags[len(tags)-1][2:] - version := new(VersionFlag) - if err := version.Set(v); err != nil { - panic(fmt.Sprintf("internal error: %s", err)) - } - - flags.Var(version, "go", "Target Go `version` in the format '1.x'") - return flags -} - -func findCheck(cs []*analysis.Analyzer, check string) (*analysis.Analyzer, bool) { - for _, c := range cs { - if c.Name == check { - return c, true - } - } - return nil, false -} - -func ProcessFlagSet(cs []*analysis.Analyzer, cums []lint.CumulativeChecker, fs *flag.FlagSet) { - tags := fs.Lookup("tags").Value.(flag.Getter).Get().(string) - tests := fs.Lookup("tests").Value.(flag.Getter).Get().(bool) - goVersion := fs.Lookup("go").Value.(flag.Getter).Get().(int) - formatter := fs.Lookup("f").Value.(flag.Getter).Get().(string) - printVersion := fs.Lookup("version").Value.(flag.Getter).Get().(bool) - showIgnored := fs.Lookup("show-ignored").Value.(flag.Getter).Get().(bool) - explain := fs.Lookup("explain").Value.(flag.Getter).Get().(string) - - cpuProfile := fs.Lookup("debug.cpuprofile").Value.(flag.Getter).Get().(string) - memProfile := fs.Lookup("debug.memprofile").Value.(flag.Getter).Get().(string) - debugVersion := fs.Lookup("debug.version").Value.(flag.Getter).Get().(bool) - debugNoCompile := fs.Lookup("debug.no-compile-errors").Value.(flag.Getter).Get().(bool) - debugRepeat := fs.Lookup("debug.repeat-analyzers").Value.(flag.Getter).Get().(uint) - - var measureAnalyzers func(analysis *analysis.Analyzer, pkg *lint.Package, d time.Duration) - if path := fs.Lookup("debug.measure-analyzers").Value.(flag.Getter).Get().(string); path != "" { - f, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) - if err != nil { - log.Fatal(err) - } - - mu := &sync.Mutex{} - measureAnalyzers = func(analysis *analysis.Analyzer, pkg *lint.Package, d time.Duration) { - mu.Lock() - defer mu.Unlock() - if _, err := fmt.Fprintf(f, "%s\t%s\t%d\n", analysis.Name, pkg.ID, d.Nanoseconds()); err != nil { - log.Println("error writing analysis measurements:", err) - } - } - } - - cfg := config.Config{} - cfg.Checks = *fs.Lookup("checks").Value.(*list) - - exit := func(code int) { - if cpuProfile != "" { - pprof.StopCPUProfile() - } - if memProfile != "" { - f, err := os.Create(memProfile) - if err != nil { - panic(err) - } - runtime.GC() - pprof.WriteHeapProfile(f) - } - os.Exit(code) - } - if cpuProfile != "" { - f, err := os.Create(cpuProfile) - if err != nil { - log.Fatal(err) - } - pprof.StartCPUProfile(f) - } - - if debugVersion { - version.Verbose() - exit(0) - } - - if printVersion { - version.Print() - exit(0) - } - - // Validate that the tags argument is well-formed. go/packages - // doesn't detect malformed build flags and returns unhelpful - // errors. - tf := buildutil.TagsFlag{} - if err := tf.Set(tags); err != nil { - fmt.Fprintln(os.Stderr, fmt.Errorf("invalid value %q for flag -tags: %s", tags, err)) - exit(1) - } - - if explain != "" { - var haystack []*analysis.Analyzer - haystack = append(haystack, cs...) - for _, cum := range cums { - haystack = append(haystack, cum.Analyzer()) - } - check, ok := findCheck(haystack, explain) - if !ok { - fmt.Fprintln(os.Stderr, "Couldn't find check", explain) - exit(1) - } - if check.Doc == "" { - fmt.Fprintln(os.Stderr, explain, "has no documentation") - exit(1) - } - fmt.Println(check.Doc) - exit(0) - } - - ps, err := Lint(cs, cums, fs.Args(), &Options{ - Tags: tags, - LintTests: tests, - GoVersion: goVersion, - Config: cfg, - PrintAnalyzerMeasurement: measureAnalyzers, - RepeatAnalyzers: debugRepeat, - }) - if err != nil { - fmt.Fprintln(os.Stderr, err) - exit(1) - } - - var f format.Formatter - switch formatter { - case "text": - f = format.Text{W: os.Stdout} - case "stylish": - f = &format.Stylish{W: os.Stdout} - case "json": - f = format.JSON{W: os.Stdout} - default: - fmt.Fprintf(os.Stderr, "unsupported output format %q\n", formatter) - exit(2) - } - - var ( - total int - errors int - warnings int - ignored int - ) - - fail := *fs.Lookup("fail").Value.(*list) - analyzers := make([]*analysis.Analyzer, len(cs), len(cs)+len(cums)) - copy(analyzers, cs) - for _, cum := range cums { - analyzers = append(analyzers, cum.Analyzer()) - } - shouldExit := lint.FilterChecks(analyzers, fail) - shouldExit["compile"] = true - - total = len(ps) - for _, p := range ps { - if p.Check == "compile" && debugNoCompile { - continue - } - if p.Severity == lint.Ignored && !showIgnored { - ignored++ - continue - } - if shouldExit[p.Check] { - errors++ - } else { - p.Severity = lint.Warning - warnings++ - } - f.Format(p) - } - if f, ok := f.(format.Statter); ok { - f.Stats(total, errors, warnings, ignored) - } - if errors > 0 { - exit(1) - } - exit(0) -} - -type Options struct { - Config config.Config - - Tags string - LintTests bool - GoVersion int - PrintAnalyzerMeasurement func(analysis *analysis.Analyzer, pkg *lint.Package, d time.Duration) - RepeatAnalyzers uint -} - -func computeSalt() ([]byte, error) { - if version.Version != "devel" { - return []byte(version.Version), nil - } - p, err := os.Executable() - if err != nil { - return nil, err - } - f, err := os.Open(p) - if err != nil { - return nil, err - } - defer f.Close() - h := sha256.New() - if _, err := io.Copy(h, f); err != nil { - return nil, err - } - return h.Sum(nil), nil -} - -func Lint(cs []*analysis.Analyzer, cums []lint.CumulativeChecker, paths []string, opt *Options) ([]lint.Problem, error) { - salt, err := computeSalt() - if err != nil { - return nil, fmt.Errorf("could not compute salt for cache: %s", err) - } - cache.SetSalt(salt) - - if opt == nil { - opt = &Options{} - } - - l := &lint.Linter{ - Checkers: cs, - CumulativeCheckers: cums, - GoVersion: opt.GoVersion, - Config: opt.Config, - RepeatAnalyzers: opt.RepeatAnalyzers, - } - l.Stats.PrintAnalyzerMeasurement = opt.PrintAnalyzerMeasurement - cfg := &packages.Config{} - if opt.LintTests { - cfg.Tests = true - } - if opt.Tags != "" { - cfg.BuildFlags = append(cfg.BuildFlags, "-tags", opt.Tags) - } - - printStats := func() { - // Individual stats are read atomically, but overall there - // is no synchronisation. For printing rough progress - // information, this doesn't matter. - switch atomic.LoadUint32(&l.Stats.State) { - case lint.StateInitializing: - fmt.Fprintln(os.Stderr, "Status: initializing") - case lint.StateGraph: - fmt.Fprintln(os.Stderr, "Status: loading package graph") - case lint.StateProcessing: - fmt.Fprintf(os.Stderr, "Packages: %d/%d initial, %d/%d total; Workers: %d/%d; Problems: %d\n", - atomic.LoadUint32(&l.Stats.ProcessedInitialPackages), - atomic.LoadUint32(&l.Stats.InitialPackages), - atomic.LoadUint32(&l.Stats.ProcessedPackages), - atomic.LoadUint32(&l.Stats.TotalPackages), - atomic.LoadUint32(&l.Stats.ActiveWorkers), - atomic.LoadUint32(&l.Stats.TotalWorkers), - atomic.LoadUint32(&l.Stats.Problems), - ) - case lint.StateCumulative: - fmt.Fprintln(os.Stderr, "Status: processing cumulative checkers") - } - } - if len(infoSignals) > 0 { - ch := make(chan os.Signal, 1) - signal.Notify(ch, infoSignals...) - defer signal.Stop(ch) - go func() { - for range ch { - printStats() - } - }() - } - - ps, err := l.Lint(cfg, paths) - return ps, err -} - -var posRe = regexp.MustCompile(`^(.+?):(\d+)(?::(\d+)?)?$`) - -func parsePos(pos string) token.Position { - if pos == "-" || pos == "" { - return token.Position{} - } - parts := posRe.FindStringSubmatch(pos) - if parts == nil { - panic(fmt.Sprintf("internal error: malformed position %q", pos)) - } - file := parts[1] - line, _ := strconv.Atoi(parts[2]) - col, _ := strconv.Atoi(parts[3]) - return token.Position{ - Filename: file, - Line: line, - Column: col, - } -} - -func InitializeAnalyzers(docs map[string]*lint.Documentation, analyzers map[string]*analysis.Analyzer) map[string]*analysis.Analyzer { - out := make(map[string]*analysis.Analyzer, len(analyzers)) - for k, v := range analyzers { - vc := *v - out[k] = &vc - - vc.Name = k - doc, ok := docs[k] - if !ok { - panic(fmt.Sprintf("missing documentation for check %s", k)) - } - vc.Doc = doc.String() - if vc.Flags.Usage == nil { - fs := flag.NewFlagSet("", flag.PanicOnError) - fs.Var(NewVersionFlag(), "go", "Target Go version") - vc.Flags = *fs - } - } - return out -} diff --git a/vendor/honnef.co/go/tools/lint/runner.go b/vendor/honnef.co/go/tools/lint/runner.go deleted file mode 100644 index 74106ce..0000000 --- a/vendor/honnef.co/go/tools/lint/runner.go +++ /dev/null @@ -1,1114 +0,0 @@ -package lint - -/* -Package loading - -Conceptually, package loading in the runner can be imagined as a -graph-shaped work list. We iteratively pop off leaf nodes (packages -that have no unloaded dependencies) and load data from export data, -our cache, or source. - -Specifically, non-initial packages are loaded from export data and the -fact cache if possible, otherwise from source. Initial packages are -loaded from export data, the fact cache and the (problems, ignores, -config) cache if possible, otherwise from source. - -The appeal of this approach is that it is both simple to implement and -easily parallelizable. Each leaf node can be processed independently, -and new leaf nodes appear as their dependencies are being processed. - -The downside of this approach, however, is that we're doing more work -than necessary. Imagine an initial package A, which has the following -dependency chain: A->B->C->D – in the current implementation, we will -load all 4 packages. However, if package A can be loaded fully from -cached information, then none of its dependencies are necessary, and -we could avoid loading them. - - -Parallelism - -Runner implements parallel processing of packages by spawning one -goroutine per package in the dependency graph, without any semaphores. -Each goroutine initially waits on the completion of all of its -dependencies, thus establishing correct order of processing. Once all -dependencies finish processing, the goroutine will load the package -from export data or source – this loading is guarded by a semaphore, -sized according to the number of CPU cores. This way, we only have as -many packages occupying memory and CPU resources as there are actual -cores to process them. - -This combination of unbounded goroutines but bounded package loading -means that if we have many parallel, independent subgraphs, they will -all execute in parallel, while not wasting resources for long linear -chains or trying to process more subgraphs in parallel than the system -can handle. - - -Caching - -We make use of several caches. These caches are Go's export data, our -facts cache, and our (problems, ignores, config) cache. - -Initial packages will either be loaded from a combination of all three -caches, or from source. Non-initial packages will either be loaded -from a combination of export data and facts cache, or from source. - -The facts cache is separate from the (problems, ignores, config) cache -because when we process non-initial packages, we generate facts, but -we discard problems and ignores. - -The facts cache is keyed by (package, analyzer), whereas the -(problems, ignores, config) cache is keyed by (package, list of -analyzes). The difference between the two exists because there are -only a handful of analyses that produce facts, but hundreds of -analyses that don't. Creating one cache entry per fact-generating -analysis is feasible, creating one cache entry per normal analysis has -significant performance and storage overheads. - -The downside of keying by the list of analyzes is, naturally, that a -change in list of analyzes changes the cache key. `staticcheck -checks -A` and `staticcheck -checks A,B` will therefore need their own cache -entries and not reuse each other's work. This problem does not affect -the facts cache. - -*/ - -import ( - "bytes" - "encoding/gob" - "encoding/hex" - "fmt" - "go/ast" - "go/token" - "go/types" - "reflect" - "regexp" - "runtime" - "sort" - "strconv" - "strings" - "sync" - "sync/atomic" - "time" - - "golang.org/x/tools/go/analysis" - "golang.org/x/tools/go/packages" - "golang.org/x/tools/go/types/objectpath" - "honnef.co/go/tools/config" - "honnef.co/go/tools/facts" - "honnef.co/go/tools/internal/cache" - "honnef.co/go/tools/loader" -) - -func init() { - gob.Register(&FileIgnore{}) - gob.Register(&LineIgnore{}) -} - -// If enabled, abuse of the go/analysis API will lead to panics -const sanityCheck = true - -// OPT(dh): for a dependency tree A->B->C->D, if we have cached data -// for B, there should be no need to load C and D individually. Go's -// export data for B contains all the data we need on types, and our -// fact cache could store the union of B, C and D in B. -// -// This may change unused's behavior, however, as it may observe fewer -// interfaces from transitive dependencies. - -// OPT(dh): every single package will have the same value for -// canClearTypes. We could move the Package.decUse method to runner to -// eliminate this field. This is probably not worth it, though. There -// are only thousands of packages, so the field only takes up -// kilobytes of memory. - -// OPT(dh): do we really need the Package.gen field? it's based -// trivially on pkg.results and merely caches the result of a type -// assertion. How often do we actually use the field? - -type Package struct { - // dependents is initially set to 1 plus the number of packages - // that directly import this package. It is atomically decreased - // by 1 every time a dependent has been processed or when the - // package itself has been processed. Once the value reaches zero, - // the package is no longer needed. - dependents uint64 - - *packages.Package - Imports []*Package - initial bool - // fromSource is set to true for packages that have been loaded - // from source. This is the case for initial packages, packages - // with missing export data, and packages with no cached facts. - fromSource bool - // hash stores the package hash, as computed by packageHash - hash string - actionID cache.ActionID - done chan struct{} - - resultsMu sync.Mutex - // results maps analyzer IDs to analyzer results. it is - // implemented as a deduplicating concurrent cache. - results []*result - - cfg *config.Config - // gen maps file names to the code generator that created them - gen map[string]facts.Generator - problems []Problem - ignores []Ignore - errs []error - - // these slices are indexed by analysis - facts []map[types.Object][]analysis.Fact - pkgFacts [][]analysis.Fact - - // canClearTypes is set to true if we can discard type - // information after the package and its dependents have been - // processed. This is the case when no cumulative checkers are - // being run. - canClearTypes bool -} - -type cachedPackage struct { - Problems []Problem - Ignores []Ignore - Config *config.Config -} - -func (pkg *Package) decUse() { - ret := atomic.AddUint64(&pkg.dependents, ^uint64(0)) - if ret == 0 { - // nobody depends on this package anymore - if pkg.canClearTypes { - pkg.Types = nil - } - pkg.facts = nil - pkg.pkgFacts = nil - - for _, imp := range pkg.Imports { - imp.decUse() - } - } -} - -type result struct { - v interface{} - err error - ready chan struct{} -} - -type Runner struct { - cache *cache.Cache - goVersion int - stats *Stats - repeatAnalyzers uint - - analyzerIDs analyzerIDs - problemsCacheKey string - - // limits parallelism of loading packages - loadSem chan struct{} -} - -type analyzerIDs struct { - m map[*analysis.Analyzer]int -} - -func (ids analyzerIDs) get(a *analysis.Analyzer) int { - id, ok := ids.m[a] - if !ok { - panic(fmt.Sprintf("no analyzer ID for %s", a.Name)) - } - return id -} - -type Fact struct { - Path string - Fact analysis.Fact -} - -type analysisAction struct { - analyzer *analysis.Analyzer - analyzerID int - pkg *Package - newPackageFacts []analysis.Fact - problems []Problem - - pkgFacts map[*types.Package][]analysis.Fact -} - -func (ac *analysisAction) String() string { - return fmt.Sprintf("%s @ %s", ac.analyzer, ac.pkg) -} - -func (ac *analysisAction) allObjectFacts() []analysis.ObjectFact { - out := make([]analysis.ObjectFact, 0, len(ac.pkg.facts[ac.analyzerID])) - for obj, facts := range ac.pkg.facts[ac.analyzerID] { - for _, fact := range facts { - out = append(out, analysis.ObjectFact{ - Object: obj, - Fact: fact, - }) - } - } - return out -} - -func (ac *analysisAction) allPackageFacts() []analysis.PackageFact { - out := make([]analysis.PackageFact, 0, len(ac.pkgFacts)) - for pkg, facts := range ac.pkgFacts { - for _, fact := range facts { - out = append(out, analysis.PackageFact{ - Package: pkg, - Fact: fact, - }) - } - } - return out -} - -func (ac *analysisAction) importObjectFact(obj types.Object, fact analysis.Fact) bool { - if sanityCheck && len(ac.analyzer.FactTypes) == 0 { - panic("analysis doesn't export any facts") - } - for _, f := range ac.pkg.facts[ac.analyzerID][obj] { - if reflect.TypeOf(f) == reflect.TypeOf(fact) { - reflect.ValueOf(fact).Elem().Set(reflect.ValueOf(f).Elem()) - return true - } - } - return false -} - -func (ac *analysisAction) importPackageFact(pkg *types.Package, fact analysis.Fact) bool { - if sanityCheck && len(ac.analyzer.FactTypes) == 0 { - panic("analysis doesn't export any facts") - } - for _, f := range ac.pkgFacts[pkg] { - if reflect.TypeOf(f) == reflect.TypeOf(fact) { - reflect.ValueOf(fact).Elem().Set(reflect.ValueOf(f).Elem()) - return true - } - } - return false -} - -func (ac *analysisAction) exportObjectFact(obj types.Object, fact analysis.Fact) { - if sanityCheck && len(ac.analyzer.FactTypes) == 0 { - panic("analysis doesn't export any facts") - } - ac.pkg.facts[ac.analyzerID][obj] = append(ac.pkg.facts[ac.analyzerID][obj], fact) -} - -func (ac *analysisAction) exportPackageFact(fact analysis.Fact) { - if sanityCheck && len(ac.analyzer.FactTypes) == 0 { - panic("analysis doesn't export any facts") - } - ac.pkgFacts[ac.pkg.Types] = append(ac.pkgFacts[ac.pkg.Types], fact) - ac.newPackageFacts = append(ac.newPackageFacts, fact) -} - -func (ac *analysisAction) report(pass *analysis.Pass, d analysis.Diagnostic) { - p := Problem{ - Pos: DisplayPosition(pass.Fset, d.Pos), - End: DisplayPosition(pass.Fset, d.End), - Message: d.Message, - Check: pass.Analyzer.Name, - } - for _, r := range d.Related { - p.Related = append(p.Related, Related{ - Pos: DisplayPosition(pass.Fset, r.Pos), - End: DisplayPosition(pass.Fset, r.End), - Message: r.Message, - }) - } - ac.problems = append(ac.problems, p) -} - -func (r *Runner) runAnalysis(ac *analysisAction) (ret interface{}, err error) { - ac.pkg.resultsMu.Lock() - res := ac.pkg.results[r.analyzerIDs.get(ac.analyzer)] - if res != nil { - ac.pkg.resultsMu.Unlock() - <-res.ready - return res.v, res.err - } else { - res = &result{ - ready: make(chan struct{}), - } - ac.pkg.results[r.analyzerIDs.get(ac.analyzer)] = res - ac.pkg.resultsMu.Unlock() - - defer func() { - res.v = ret - res.err = err - close(res.ready) - }() - - pass := new(analysis.Pass) - *pass = analysis.Pass{ - Analyzer: ac.analyzer, - Fset: ac.pkg.Fset, - Files: ac.pkg.Syntax, - // type information may be nil or may be populated. if it is - // nil, it will get populated later. - Pkg: ac.pkg.Types, - TypesInfo: ac.pkg.TypesInfo, - TypesSizes: ac.pkg.TypesSizes, - ResultOf: map[*analysis.Analyzer]interface{}{}, - ImportObjectFact: ac.importObjectFact, - ImportPackageFact: ac.importPackageFact, - ExportObjectFact: ac.exportObjectFact, - ExportPackageFact: ac.exportPackageFact, - Report: func(d analysis.Diagnostic) { - ac.report(pass, d) - }, - AllObjectFacts: ac.allObjectFacts, - AllPackageFacts: ac.allPackageFacts, - } - - if !ac.pkg.initial { - // Don't report problems in dependencies - pass.Report = func(analysis.Diagnostic) {} - } - return r.runAnalysisUser(pass, ac) - } -} - -func (r *Runner) loadCachedPackage(pkg *Package, analyzers []*analysis.Analyzer) (cachedPackage, bool) { - // OPT(dh): we can cache this computation, it'll be the same for all packages - id := cache.Subkey(pkg.actionID, "data "+r.problemsCacheKey) - - b, _, err := r.cache.GetBytes(id) - if err != nil { - return cachedPackage{}, false - } - var cpkg cachedPackage - if err := gob.NewDecoder(bytes.NewReader(b)).Decode(&cpkg); err != nil { - return cachedPackage{}, false - } - return cpkg, true -} - -func (r *Runner) loadCachedFacts(a *analysis.Analyzer, pkg *Package) ([]Fact, bool) { - if len(a.FactTypes) == 0 { - return nil, true - } - - var facts []Fact - // Look in the cache for facts - aID := passActionID(pkg, a) - aID = cache.Subkey(aID, "facts") - b, _, err := r.cache.GetBytes(aID) - if err != nil { - // No cached facts, analyse this package like a user-provided one, but ignore diagnostics - return nil, false - } - - if err := gob.NewDecoder(bytes.NewReader(b)).Decode(&facts); err != nil { - // Cached facts are broken, analyse this package like a user-provided one, but ignore diagnostics - return nil, false - } - return facts, true -} - -type dependencyError struct { - dep string - err error -} - -func (err dependencyError) nested() dependencyError { - if o, ok := err.err.(dependencyError); ok { - return o.nested() - } - return err -} - -func (err dependencyError) Error() string { - if o, ok := err.err.(dependencyError); ok { - return o.Error() - } - return fmt.Sprintf("error running dependency %s: %s", err.dep, err.err) -} - -func (r *Runner) makeAnalysisAction(a *analysis.Analyzer, pkg *Package) *analysisAction { - aid := r.analyzerIDs.get(a) - ac := &analysisAction{ - analyzer: a, - analyzerID: aid, - pkg: pkg, - } - - if len(a.FactTypes) == 0 { - return ac - } - - // Merge all package facts of dependencies - ac.pkgFacts = map[*types.Package][]analysis.Fact{} - seen := map[*Package]struct{}{} - var dfs func(*Package) - dfs = func(pkg *Package) { - if _, ok := seen[pkg]; ok { - return - } - seen[pkg] = struct{}{} - s := pkg.pkgFacts[aid] - ac.pkgFacts[pkg.Types] = s[0:len(s):len(s)] - for _, imp := range pkg.Imports { - dfs(imp) - } - } - dfs(pkg) - - return ac -} - -// analyzes that we always want to run, even if they're not being run -// explicitly or as dependencies. these are necessary for the inner -// workings of the runner. -var injectedAnalyses = []*analysis.Analyzer{facts.Generated, config.Analyzer} - -func (r *Runner) runAnalysisUser(pass *analysis.Pass, ac *analysisAction) (interface{}, error) { - if !ac.pkg.fromSource { - panic(fmt.Sprintf("internal error: %s was not loaded from source", ac.pkg)) - } - - // User-provided package, analyse it - // First analyze it with dependencies - for _, req := range ac.analyzer.Requires { - acReq := r.makeAnalysisAction(req, ac.pkg) - ret, err := r.runAnalysis(acReq) - if err != nil { - // We couldn't run a dependency, no point in going on - return nil, dependencyError{req.Name, err} - } - - pass.ResultOf[req] = ret - } - - // Then with this analyzer - var ret interface{} - for i := uint(0); i < r.repeatAnalyzers+1; i++ { - var err error - t := time.Now() - ret, err = ac.analyzer.Run(pass) - r.stats.MeasureAnalyzer(ac.analyzer, ac.pkg, time.Since(t)) - if err != nil { - return nil, err - } - } - - if len(ac.analyzer.FactTypes) > 0 { - // Merge new facts into the package and persist them. - var facts []Fact - for _, fact := range ac.newPackageFacts { - id := r.analyzerIDs.get(ac.analyzer) - ac.pkg.pkgFacts[id] = append(ac.pkg.pkgFacts[id], fact) - facts = append(facts, Fact{"", fact}) - } - for obj, afacts := range ac.pkg.facts[ac.analyzerID] { - if obj.Pkg() != ac.pkg.Package.Types { - continue - } - path, err := objectpath.For(obj) - if err != nil { - continue - } - for _, fact := range afacts { - facts = append(facts, Fact{string(path), fact}) - } - } - - if err := r.cacheData(facts, ac.pkg, ac.analyzer, "facts"); err != nil { - return nil, err - } - } - - return ret, nil -} - -func (r *Runner) cacheData(v interface{}, pkg *Package, a *analysis.Analyzer, subkey string) error { - buf := &bytes.Buffer{} - if err := gob.NewEncoder(buf).Encode(v); err != nil { - return err - } - aID := passActionID(pkg, a) - aID = cache.Subkey(aID, subkey) - if err := r.cache.PutBytes(aID, buf.Bytes()); err != nil { - return err - } - return nil -} - -func NewRunner(stats *Stats) (*Runner, error) { - cache, err := cache.Default() - if err != nil { - return nil, err - } - - return &Runner{ - cache: cache, - stats: stats, - }, nil -} - -// Run loads packages corresponding to patterns and analyses them with -// analyzers. It returns the loaded packages, which contain reported -// diagnostics as well as extracted ignore directives. -// -// Note that diagnostics have not been filtered at this point yet, to -// accommodate cumulative analyzes that require additional steps to -// produce diagnostics. -func (r *Runner) Run(cfg *packages.Config, patterns []string, analyzers []*analysis.Analyzer, hasCumulative bool) ([]*Package, error) { - checkerNames := make([]string, len(analyzers)) - for i, a := range analyzers { - checkerNames[i] = a.Name - } - sort.Strings(checkerNames) - r.problemsCacheKey = strings.Join(checkerNames, " ") - - var allAnalyzers []*analysis.Analyzer - r.analyzerIDs = analyzerIDs{m: map[*analysis.Analyzer]int{}} - id := 0 - seen := map[*analysis.Analyzer]struct{}{} - var dfs func(a *analysis.Analyzer) - dfs = func(a *analysis.Analyzer) { - if _, ok := seen[a]; ok { - return - } - seen[a] = struct{}{} - allAnalyzers = append(allAnalyzers, a) - r.analyzerIDs.m[a] = id - id++ - for _, f := range a.FactTypes { - gob.Register(f) - } - for _, req := range a.Requires { - dfs(req) - } - } - for _, a := range analyzers { - if v := a.Flags.Lookup("go"); v != nil { - v.Value.Set(fmt.Sprintf("1.%d", r.goVersion)) - } - dfs(a) - } - for _, a := range injectedAnalyses { - dfs(a) - } - // Run all analyzers on all packages (subject to further - // restrictions enforced later). This guarantees that if analyzer - // A1 depends on A2, and A2 has facts, that A2 will run on the - // dependencies of user-provided packages, even though A1 won't. - analyzers = allAnalyzers - - var dcfg packages.Config - if cfg != nil { - dcfg = *cfg - } - - atomic.StoreUint32(&r.stats.State, StateGraph) - initialPkgs, err := loader.Graph(dcfg, patterns...) - if err != nil { - return nil, err - } - defer r.cache.Trim() - - var allPkgs []*Package - m := map[*packages.Package]*Package{} - packages.Visit(initialPkgs, nil, func(l *packages.Package) { - m[l] = &Package{ - Package: l, - results: make([]*result, len(r.analyzerIDs.m)), - facts: make([]map[types.Object][]analysis.Fact, len(r.analyzerIDs.m)), - pkgFacts: make([][]analysis.Fact, len(r.analyzerIDs.m)), - done: make(chan struct{}), - // every package needs itself - dependents: 1, - canClearTypes: !hasCumulative, - } - allPkgs = append(allPkgs, m[l]) - for i := range m[l].facts { - m[l].facts[i] = map[types.Object][]analysis.Fact{} - } - for _, err := range l.Errors { - m[l].errs = append(m[l].errs, err) - } - for _, v := range l.Imports { - m[v].dependents++ - m[l].Imports = append(m[l].Imports, m[v]) - } - - m[l].hash, err = r.packageHash(m[l]) - m[l].actionID = packageActionID(m[l]) - if err != nil { - m[l].errs = append(m[l].errs, err) - } - }) - - pkgs := make([]*Package, len(initialPkgs)) - for i, l := range initialPkgs { - pkgs[i] = m[l] - pkgs[i].initial = true - } - - atomic.StoreUint32(&r.stats.InitialPackages, uint32(len(initialPkgs))) - atomic.StoreUint32(&r.stats.TotalPackages, uint32(len(allPkgs))) - atomic.StoreUint32(&r.stats.State, StateProcessing) - - var wg sync.WaitGroup - wg.Add(len(allPkgs)) - r.loadSem = make(chan struct{}, runtime.GOMAXPROCS(-1)) - atomic.StoreUint32(&r.stats.TotalWorkers, uint32(cap(r.loadSem))) - for _, pkg := range allPkgs { - pkg := pkg - go func() { - r.processPkg(pkg, analyzers) - - if pkg.initial { - atomic.AddUint32(&r.stats.ProcessedInitialPackages, 1) - } - atomic.AddUint32(&r.stats.Problems, uint32(len(pkg.problems))) - wg.Done() - }() - } - wg.Wait() - - return pkgs, nil -} - -var posRe = regexp.MustCompile(`^(.+?):(\d+)(?::(\d+)?)?`) - -func parsePos(pos string) (token.Position, int, error) { - if pos == "-" || pos == "" { - return token.Position{}, 0, nil - } - parts := posRe.FindStringSubmatch(pos) - if parts == nil { - return token.Position{}, 0, fmt.Errorf("malformed position %q", pos) - } - file := parts[1] - line, _ := strconv.Atoi(parts[2]) - col, _ := strconv.Atoi(parts[3]) - return token.Position{ - Filename: file, - Line: line, - Column: col, - }, len(parts[0]), nil -} - -// loadPkg loads a Go package. It may be loaded from a combination of -// caches, or from source. -func (r *Runner) loadPkg(pkg *Package, analyzers []*analysis.Analyzer) error { - if pkg.Types != nil { - panic(fmt.Sprintf("internal error: %s has already been loaded", pkg.Package)) - } - - if pkg.initial { - // Try to load cached package - cpkg, ok := r.loadCachedPackage(pkg, analyzers) - if ok { - pkg.problems = cpkg.Problems - pkg.ignores = cpkg.Ignores - pkg.cfg = cpkg.Config - } else { - pkg.fromSource = true - return loader.LoadFromSource(pkg.Package) - } - } - - // At this point we're either working with a non-initial package, - // or we managed to load cached problems for the package. We still - // need export data and facts. - - // OPT(dh): we don't need type information for this package if no - // other package depends on it. this may be the case for initial - // packages. - - // Load package from export data - if err := loader.LoadFromExport(pkg.Package); err != nil { - // We asked Go to give us up to date export data, yet - // we can't load it. There must be something wrong. - // - // Attempt loading from source. This should fail (because - // otherwise there would be export data); we just want to - // get the compile errors. If loading from source succeeds - // we discard the result, anyway. Otherwise we'll fail - // when trying to reload from export data later. - // - // FIXME(dh): we no longer reload from export data, so - // theoretically we should be able to continue - pkg.fromSource = true - if err := loader.LoadFromSource(pkg.Package); err != nil { - return err - } - // Make sure this package can't be imported successfully - pkg.Package.Errors = append(pkg.Package.Errors, packages.Error{ - Pos: "-", - Msg: fmt.Sprintf("could not load export data: %s", err), - Kind: packages.ParseError, - }) - return fmt.Errorf("could not load export data: %s", err) - } - - failed := false - seen := make([]bool, len(r.analyzerIDs.m)) - var dfs func(*analysis.Analyzer) - dfs = func(a *analysis.Analyzer) { - if seen[r.analyzerIDs.get(a)] { - return - } - seen[r.analyzerIDs.get(a)] = true - - if len(a.FactTypes) > 0 { - facts, ok := r.loadCachedFacts(a, pkg) - if !ok { - failed = true - return - } - - for _, f := range facts { - if f.Path == "" { - // This is a package fact - pkg.pkgFacts[r.analyzerIDs.get(a)] = append(pkg.pkgFacts[r.analyzerIDs.get(a)], f.Fact) - continue - } - obj, err := objectpath.Object(pkg.Types, objectpath.Path(f.Path)) - if err != nil { - // Be lenient about these errors. For example, when - // analysing io/ioutil from source, we may get a fact - // for methods on the devNull type, and objectpath - // will happily create a path for them. However, when - // we later load io/ioutil from export data, the path - // no longer resolves. - // - // If an exported type embeds the unexported type, - // then (part of) the unexported type will become part - // of the type information and our path will resolve - // again. - continue - } - pkg.facts[r.analyzerIDs.get(a)][obj] = append(pkg.facts[r.analyzerIDs.get(a)][obj], f.Fact) - } - } - - for _, req := range a.Requires { - dfs(req) - } - } - for _, a := range analyzers { - dfs(a) - } - - if !failed { - return nil - } - - // We failed to load some cached facts - pkg.fromSource = true - // XXX we added facts to the maps, we need to get rid of those - return loader.LoadFromSource(pkg.Package) -} - -type analysisError struct { - analyzer *analysis.Analyzer - pkg *Package - err error -} - -func (err analysisError) Error() string { - return fmt.Sprintf("error running analyzer %s on %s: %s", err.analyzer, err.pkg, err.err) -} - -// processPkg processes a package. This involves loading the package, -// either from export data or from source. For packages loaded from -// source, the provides analyzers will be run on the package. -func (r *Runner) processPkg(pkg *Package, analyzers []*analysis.Analyzer) { - defer func() { - // Clear information we no longer need. Make sure to do this - // when returning from processPkg so that we clear - // dependencies, not just initial packages. - pkg.TypesInfo = nil - pkg.Syntax = nil - pkg.results = nil - - atomic.AddUint32(&r.stats.ProcessedPackages, 1) - pkg.decUse() - close(pkg.done) - }() - - // Ensure all packages have the generated map and config. This is - // required by internals of the runner. Analyses that themselves - // make use of either have an explicit dependency so that other - // runners work correctly, too. - analyzers = append(analyzers[0:len(analyzers):len(analyzers)], injectedAnalyses...) - - if len(pkg.errs) != 0 { - return - } - - for _, imp := range pkg.Imports { - <-imp.done - if len(imp.errs) > 0 { - if imp.initial { - // Don't print the error of the dependency since it's - // an initial package and we're already printing the - // error. - pkg.errs = append(pkg.errs, fmt.Errorf("could not analyze dependency %s of %s", imp, pkg)) - } else { - var s string - for _, err := range imp.errs { - s += "\n\t" + err.Error() - } - pkg.errs = append(pkg.errs, fmt.Errorf("could not analyze dependency %s of %s: %s", imp, pkg, s)) - } - return - } - } - if pkg.PkgPath == "unsafe" { - pkg.Types = types.Unsafe - return - } - - r.loadSem <- struct{}{} - atomic.AddUint32(&r.stats.ActiveWorkers, 1) - defer func() { - <-r.loadSem - atomic.AddUint32(&r.stats.ActiveWorkers, ^uint32(0)) - }() - if err := r.loadPkg(pkg, analyzers); err != nil { - pkg.errs = append(pkg.errs, err) - return - } - - // A package's object facts is the union of all of its dependencies. - for _, imp := range pkg.Imports { - for ai, m := range imp.facts { - for obj, facts := range m { - pkg.facts[ai][obj] = facts[0:len(facts):len(facts)] - } - } - } - - if !pkg.fromSource { - // Nothing left to do for the package. - return - } - - // Run analyses on initial packages and those missing facts - var wg sync.WaitGroup - wg.Add(len(analyzers)) - errs := make([]error, len(analyzers)) - var acs []*analysisAction - for i, a := range analyzers { - i := i - a := a - ac := r.makeAnalysisAction(a, pkg) - acs = append(acs, ac) - go func() { - defer wg.Done() - // Only initial packages and packages with missing - // facts will have been loaded from source. - if pkg.initial || len(a.FactTypes) > 0 { - if _, err := r.runAnalysis(ac); err != nil { - errs[i] = analysisError{a, pkg, err} - return - } - } - }() - } - wg.Wait() - - depErrors := map[dependencyError]int{} - for _, err := range errs { - if err == nil { - continue - } - switch err := err.(type) { - case analysisError: - switch err := err.err.(type) { - case dependencyError: - depErrors[err.nested()]++ - default: - pkg.errs = append(pkg.errs, err) - } - default: - pkg.errs = append(pkg.errs, err) - } - } - for err, count := range depErrors { - pkg.errs = append(pkg.errs, - fmt.Errorf("could not run %s@%s, preventing %d analyzers from running: %s", err.dep, pkg, count, err.err)) - } - - // We can't process ignores at this point because `unused` needs - // to see more than one package to make its decision. - // - // OPT(dh): can't we guard this block of code by pkg.initial? - ignores, problems := parseDirectives(pkg.Package) - pkg.ignores = append(pkg.ignores, ignores...) - pkg.problems = append(pkg.problems, problems...) - for _, ac := range acs { - pkg.problems = append(pkg.problems, ac.problems...) - } - - if pkg.initial { - // Only initial packages have these analyzers run, and only - // initial packages need these. - if pkg.results[r.analyzerIDs.get(config.Analyzer)].v != nil { - pkg.cfg = pkg.results[r.analyzerIDs.get(config.Analyzer)].v.(*config.Config) - } - pkg.gen = pkg.results[r.analyzerIDs.get(facts.Generated)].v.(map[string]facts.Generator) - } - - // In a previous version of the code, we would throw away all type - // information and reload it from export data. That was - // nonsensical. The *types.Package doesn't keep any information - // live that export data wouldn't also. We only need to discard - // the AST and the TypesInfo maps; that happens after we return - // from processPkg. -} - -func parseDirective(s string) (cmd string, args []string) { - if !strings.HasPrefix(s, "//lint:") { - return "", nil - } - s = strings.TrimPrefix(s, "//lint:") - fields := strings.Split(s, " ") - return fields[0], fields[1:] -} - -// parseDirectives extracts all linter directives from the source -// files of the package. Malformed directives are returned as problems. -func parseDirectives(pkg *packages.Package) ([]Ignore, []Problem) { - var ignores []Ignore - var problems []Problem - - for _, f := range pkg.Syntax { - found := false - commentLoop: - for _, cg := range f.Comments { - for _, c := range cg.List { - if strings.Contains(c.Text, "//lint:") { - found = true - break commentLoop - } - } - } - if !found { - continue - } - cm := ast.NewCommentMap(pkg.Fset, f, f.Comments) - for node, cgs := range cm { - for _, cg := range cgs { - for _, c := range cg.List { - if !strings.HasPrefix(c.Text, "//lint:") { - continue - } - cmd, args := parseDirective(c.Text) - switch cmd { - case "ignore", "file-ignore": - if len(args) < 2 { - p := Problem{ - Pos: DisplayPosition(pkg.Fset, c.Pos()), - Message: "malformed linter directive; missing the required reason field?", - Severity: Error, - Check: "compile", - } - problems = append(problems, p) - continue - } - default: - // unknown directive, ignore - continue - } - checks := strings.Split(args[0], ",") - pos := DisplayPosition(pkg.Fset, node.Pos()) - var ig Ignore - switch cmd { - case "ignore": - ig = &LineIgnore{ - File: pos.Filename, - Line: pos.Line, - Checks: checks, - Pos: DisplayPosition(pkg.Fset, c.Pos()), - } - case "file-ignore": - ig = &FileIgnore{ - File: pos.Filename, - Checks: checks, - } - } - ignores = append(ignores, ig) - } - } - } - } - - return ignores, problems -} - -// packageHash computes a package's hash. The hash is based on all Go -// files that make up the package, as well as the hashes of imported -// packages. -func (r *Runner) packageHash(pkg *Package) (string, error) { - key := cache.NewHash("package hash") - fmt.Fprintf(key, "pkgpath %s\n", pkg.PkgPath) - fmt.Fprintf(key, "go %d\n", r.goVersion) - for _, f := range pkg.CompiledGoFiles { - h, err := cache.FileHash(f) - if err != nil { - return "", err - } - fmt.Fprintf(key, "file %s %x\n", f, h) - } - - // Actually load the configuration to calculate its hash. This - // will take into consideration inheritance of configuration - // files, as well as the default configuration. - // - // OPT(dh): doing this means we'll load the config twice: once for - // computing the hash, and once when analyzing the package from - // source. - cdir := config.Dir(pkg.GoFiles) - if cdir == "" { - fmt.Fprintf(key, "file %s %x\n", config.ConfigName, [cache.HashSize]byte{}) - } else { - cfg, err := config.Load(cdir) - if err != nil { - return "", err - } - h := cache.NewHash(config.ConfigName) - if _, err := h.Write([]byte(cfg.String())); err != nil { - return "", err - } - fmt.Fprintf(key, "file %s %x\n", config.ConfigName, h.Sum()) - } - - imps := make([]*Package, len(pkg.Imports)) - copy(imps, pkg.Imports) - sort.Slice(imps, func(i, j int) bool { - return imps[i].PkgPath < imps[j].PkgPath - }) - for _, dep := range imps { - if dep.PkgPath == "unsafe" { - continue - } - - fmt.Fprintf(key, "import %s %s\n", dep.PkgPath, dep.hash) - } - h := key.Sum() - return hex.EncodeToString(h[:]), nil -} - -func packageActionID(pkg *Package) cache.ActionID { - key := cache.NewHash("package ID") - fmt.Fprintf(key, "pkgpath %s\n", pkg.PkgPath) - fmt.Fprintf(key, "pkghash %s\n", pkg.hash) - return key.Sum() -} - -// passActionID computes an ActionID for an analysis pass. -func passActionID(pkg *Package, analyzer *analysis.Analyzer) cache.ActionID { - return cache.Subkey(pkg.actionID, fmt.Sprintf("analyzer %s", analyzer.Name)) -} diff --git a/vendor/honnef.co/go/tools/lint/stats.go b/vendor/honnef.co/go/tools/lint/stats.go deleted file mode 100644 index 85eb978..0000000 --- a/vendor/honnef.co/go/tools/lint/stats.go +++ /dev/null @@ -1,38 +0,0 @@ -package lint - -import ( - "time" - - "golang.org/x/tools/go/analysis" -) - -const ( - StateInitializing = 0 - StateGraph = 1 - StateProcessing = 2 - StateCumulative = 3 -) - -type Stats struct { - State uint32 - - InitialPackages uint32 - TotalPackages uint32 - ProcessedPackages uint32 - ProcessedInitialPackages uint32 - Problems uint32 - ActiveWorkers uint32 - TotalWorkers uint32 - PrintAnalyzerMeasurement func(*analysis.Analyzer, *Package, time.Duration) -} - -type AnalysisMeasurementKey struct { - Analysis string - Pkg string -} - -func (s *Stats) MeasureAnalyzer(analysis *analysis.Analyzer, pkg *Package, d time.Duration) { - if s.PrintAnalyzerMeasurement != nil { - s.PrintAnalyzerMeasurement(analysis, pkg, d) - } -} diff --git a/vendor/honnef.co/go/tools/loader/loader.go b/vendor/honnef.co/go/tools/loader/loader.go deleted file mode 100644 index a14f274..0000000 --- a/vendor/honnef.co/go/tools/loader/loader.go +++ /dev/null @@ -1,210 +0,0 @@ -package loader - -import ( - "errors" - "fmt" - "go/ast" - "go/parser" - "go/scanner" - "go/token" - "go/types" - "log" - "os" - - "golang.org/x/tools/go/gcexportdata" - "golang.org/x/tools/go/packages" -) - -// Graph resolves patterns and returns packages with all the -// information required to later load type information, and optionally -// syntax trees. -// -// The provided config can set any setting with the exception of Mode. -func Graph(cfg packages.Config, patterns ...string) ([]*packages.Package, error) { - cfg.Mode = packages.NeedName | packages.NeedImports | packages.NeedDeps | packages.NeedExportsFile | packages.NeedFiles | packages.NeedCompiledGoFiles | packages.NeedTypesSizes - pkgs, err := packages.Load(&cfg, patterns...) - if err != nil { - return nil, err - } - fset := token.NewFileSet() - packages.Visit(pkgs, nil, func(pkg *packages.Package) { - pkg.Fset = fset - }) - - n := 0 - for _, pkg := range pkgs { - if len(pkg.CompiledGoFiles) == 0 && len(pkg.Errors) == 0 && pkg.PkgPath != "unsafe" { - // If a package consists only of test files, then - // go/packages incorrectly(?) returns an empty package for - // the non-test variant. Get rid of those packages. See - // #646. - // - // Do not, however, skip packages that have errors. Those, - // too, may have no files, but we want to print the - // errors. - continue - } - pkgs[n] = pkg - n++ - } - return pkgs[:n], nil -} - -// LoadFromExport loads a package from export data. All of its -// dependencies must have been loaded already. -func LoadFromExport(pkg *packages.Package) error { - pkg.IllTyped = true - for path, pkg := range pkg.Imports { - if pkg.Types == nil { - return fmt.Errorf("dependency %q hasn't been loaded yet", path) - } - } - if pkg.ExportFile == "" { - return fmt.Errorf("no export data for %q", pkg.ID) - } - f, err := os.Open(pkg.ExportFile) - if err != nil { - return err - } - defer f.Close() - - r, err := gcexportdata.NewReader(f) - if err != nil { - return err - } - - view := make(map[string]*types.Package) // view seen by gcexportdata - seen := make(map[*packages.Package]bool) // all visited packages - var visit func(pkgs map[string]*packages.Package) - visit = func(pkgs map[string]*packages.Package) { - for _, pkg := range pkgs { - if !seen[pkg] { - seen[pkg] = true - view[pkg.PkgPath] = pkg.Types - visit(pkg.Imports) - } - } - } - visit(pkg.Imports) - tpkg, err := gcexportdata.Read(r, pkg.Fset, view, pkg.PkgPath) - if err != nil { - return err - } - pkg.Types = tpkg - pkg.IllTyped = false - return nil -} - -// LoadFromSource loads a package from source. All of its dependencies -// must have been loaded already. -func LoadFromSource(pkg *packages.Package) error { - pkg.IllTyped = true - pkg.Types = types.NewPackage(pkg.PkgPath, pkg.Name) - - // OPT(dh): many packages have few files, much fewer than there - // are CPU cores. Additionally, parsing each individual file is - // very fast. A naive parallel implementation of this loop won't - // be faster, and tends to be slower due to extra scheduling, - // bookkeeping and potentially false sharing of cache lines. - pkg.Syntax = make([]*ast.File, len(pkg.CompiledGoFiles)) - for i, file := range pkg.CompiledGoFiles { - f, err := parser.ParseFile(pkg.Fset, file, nil, parser.ParseComments) - if err != nil { - pkg.Errors = append(pkg.Errors, convertError(err)...) - return err - } - pkg.Syntax[i] = f - } - pkg.TypesInfo = &types.Info{ - Types: make(map[ast.Expr]types.TypeAndValue), - Defs: make(map[*ast.Ident]types.Object), - Uses: make(map[*ast.Ident]types.Object), - Implicits: make(map[ast.Node]types.Object), - Scopes: make(map[ast.Node]*types.Scope), - Selections: make(map[*ast.SelectorExpr]*types.Selection), - } - - importer := func(path string) (*types.Package, error) { - if path == "unsafe" { - return types.Unsafe, nil - } - if path == "C" { - // go/packages doesn't tell us that cgo preprocessing - // failed. When we subsequently try to parse the package, - // we'll encounter the raw C import. - return nil, errors.New("cgo preprocessing failed") - } - imp := pkg.Imports[path] - if imp == nil { - return nil, nil - } - if len(imp.Errors) > 0 { - return nil, imp.Errors[0] - } - return imp.Types, nil - } - tc := &types.Config{ - Importer: importerFunc(importer), - Error: func(err error) { - pkg.Errors = append(pkg.Errors, convertError(err)...) - }, - } - err := types.NewChecker(tc, pkg.Fset, pkg.Types, pkg.TypesInfo).Files(pkg.Syntax) - if err != nil { - return err - } - pkg.IllTyped = false - return nil -} - -func convertError(err error) []packages.Error { - var errs []packages.Error - // taken from go/packages - switch err := err.(type) { - case packages.Error: - // from driver - errs = append(errs, err) - - case *os.PathError: - // from parser - errs = append(errs, packages.Error{ - Pos: err.Path + ":1", - Msg: err.Err.Error(), - Kind: packages.ParseError, - }) - - case scanner.ErrorList: - // from parser - for _, err := range err { - errs = append(errs, packages.Error{ - Pos: err.Pos.String(), - Msg: err.Msg, - Kind: packages.ParseError, - }) - } - - case types.Error: - // from type checker - errs = append(errs, packages.Error{ - Pos: err.Fset.Position(err.Pos).String(), - Msg: err.Msg, - Kind: packages.TypeError, - }) - - default: - // unexpected impoverished error from parser? - errs = append(errs, packages.Error{ - Pos: "-", - Msg: err.Error(), - Kind: packages.UnknownError, - }) - - // If you see this error message, please file a bug. - log.Printf("internal error: error %q (%T) without position", err, err) - } - return errs -} - -type importerFunc func(path string) (*types.Package, error) - -func (f importerFunc) Import(path string) (*types.Package, error) { return f(path) } diff --git a/vendor/honnef.co/go/tools/pattern/convert.go b/vendor/honnef.co/go/tools/pattern/convert.go deleted file mode 100644 index dfcd156..0000000 --- a/vendor/honnef.co/go/tools/pattern/convert.go +++ /dev/null @@ -1,242 +0,0 @@ -package pattern - -import ( - "fmt" - "go/ast" - "go/token" - "go/types" - "reflect" -) - -var astTypes = map[string]reflect.Type{ - "Ellipsis": reflect.TypeOf(ast.Ellipsis{}), - "RangeStmt": reflect.TypeOf(ast.RangeStmt{}), - "AssignStmt": reflect.TypeOf(ast.AssignStmt{}), - "IndexExpr": reflect.TypeOf(ast.IndexExpr{}), - "Ident": reflect.TypeOf(ast.Ident{}), - "ValueSpec": reflect.TypeOf(ast.ValueSpec{}), - "GenDecl": reflect.TypeOf(ast.GenDecl{}), - "BinaryExpr": reflect.TypeOf(ast.BinaryExpr{}), - "ForStmt": reflect.TypeOf(ast.ForStmt{}), - "ArrayType": reflect.TypeOf(ast.ArrayType{}), - "DeferStmt": reflect.TypeOf(ast.DeferStmt{}), - "MapType": reflect.TypeOf(ast.MapType{}), - "ReturnStmt": reflect.TypeOf(ast.ReturnStmt{}), - "SliceExpr": reflect.TypeOf(ast.SliceExpr{}), - "StarExpr": reflect.TypeOf(ast.StarExpr{}), - "UnaryExpr": reflect.TypeOf(ast.UnaryExpr{}), - "SendStmt": reflect.TypeOf(ast.SendStmt{}), - "SelectStmt": reflect.TypeOf(ast.SelectStmt{}), - "ImportSpec": reflect.TypeOf(ast.ImportSpec{}), - "IfStmt": reflect.TypeOf(ast.IfStmt{}), - "GoStmt": reflect.TypeOf(ast.GoStmt{}), - "Field": reflect.TypeOf(ast.Field{}), - "SelectorExpr": reflect.TypeOf(ast.SelectorExpr{}), - "StructType": reflect.TypeOf(ast.StructType{}), - "KeyValueExpr": reflect.TypeOf(ast.KeyValueExpr{}), - "FuncType": reflect.TypeOf(ast.FuncType{}), - "FuncLit": reflect.TypeOf(ast.FuncLit{}), - "FuncDecl": reflect.TypeOf(ast.FuncDecl{}), - "ChanType": reflect.TypeOf(ast.ChanType{}), - "CallExpr": reflect.TypeOf(ast.CallExpr{}), - "CaseClause": reflect.TypeOf(ast.CaseClause{}), - "CommClause": reflect.TypeOf(ast.CommClause{}), - "CompositeLit": reflect.TypeOf(ast.CompositeLit{}), - "EmptyStmt": reflect.TypeOf(ast.EmptyStmt{}), - "SwitchStmt": reflect.TypeOf(ast.SwitchStmt{}), - "TypeSwitchStmt": reflect.TypeOf(ast.TypeSwitchStmt{}), - "TypeAssertExpr": reflect.TypeOf(ast.TypeAssertExpr{}), - "TypeSpec": reflect.TypeOf(ast.TypeSpec{}), - "InterfaceType": reflect.TypeOf(ast.InterfaceType{}), - "BranchStmt": reflect.TypeOf(ast.BranchStmt{}), - "IncDecStmt": reflect.TypeOf(ast.IncDecStmt{}), - "BasicLit": reflect.TypeOf(ast.BasicLit{}), -} - -func ASTToNode(node interface{}) Node { - switch node := node.(type) { - case *ast.File: - panic("cannot convert *ast.File to Node") - case nil: - return Nil{} - case string: - return String(node) - case token.Token: - return Token(node) - case *ast.ExprStmt: - return ASTToNode(node.X) - case *ast.BlockStmt: - if node == nil { - return Nil{} - } - return ASTToNode(node.List) - case *ast.FieldList: - if node == nil { - return Nil{} - } - return ASTToNode(node.List) - case *ast.BasicLit: - if node == nil { - return Nil{} - } - case *ast.ParenExpr: - return ASTToNode(node.X) - } - - if node, ok := node.(ast.Node); ok { - name := reflect.TypeOf(node).Elem().Name() - T, ok := structNodes[name] - if !ok { - panic(fmt.Sprintf("internal error: unhandled type %T", node)) - } - - if reflect.ValueOf(node).IsNil() { - return Nil{} - } - v := reflect.ValueOf(node).Elem() - objs := make([]Node, T.NumField()) - for i := 0; i < T.NumField(); i++ { - f := v.FieldByName(T.Field(i).Name) - objs[i] = ASTToNode(f.Interface()) - } - - n, err := populateNode(name, objs, false) - if err != nil { - panic(fmt.Sprintf("internal error: %s", err)) - } - return n - } - - s := reflect.ValueOf(node) - if s.Kind() == reflect.Slice { - if s.Len() == 0 { - return List{} - } - if s.Len() == 1 { - return ASTToNode(s.Index(0).Interface()) - } - - tail := List{} - for i := s.Len() - 1; i >= 0; i-- { - head := ASTToNode(s.Index(i).Interface()) - l := List{ - Head: head, - Tail: tail, - } - tail = l - } - return tail - } - - panic(fmt.Sprintf("internal error: unhandled type %T", node)) -} - -func NodeToAST(node Node, state State) interface{} { - switch node := node.(type) { - case Binding: - v, ok := state[node.Name] - if !ok { - // really we want to return an error here - panic("XXX") - } - switch v := v.(type) { - case types.Object: - return &ast.Ident{Name: v.Name()} - default: - return v - } - case Builtin, Any, Object, Function, Not, Or: - panic("XXX") - case List: - if (node == List{}) { - return []ast.Node{} - } - x := []ast.Node{NodeToAST(node.Head, state).(ast.Node)} - x = append(x, NodeToAST(node.Tail, state).([]ast.Node)...) - return x - case Token: - return token.Token(node) - case String: - return string(node) - case Nil: - return nil - } - - name := reflect.TypeOf(node).Name() - T, ok := astTypes[name] - if !ok { - panic(fmt.Sprintf("internal error: unhandled type %T", node)) - } - v := reflect.ValueOf(node) - out := reflect.New(T) - for i := 0; i < T.NumField(); i++ { - fNode := v.FieldByName(T.Field(i).Name) - if (fNode == reflect.Value{}) { - continue - } - fAST := out.Elem().FieldByName(T.Field(i).Name) - switch fAST.Type().Kind() { - case reflect.Slice: - c := reflect.ValueOf(NodeToAST(fNode.Interface().(Node), state)) - if c.Kind() != reflect.Slice { - // it's a single node in the pattern, we have to wrap - // it in a slice - slice := reflect.MakeSlice(fAST.Type(), 1, 1) - slice.Index(0).Set(c) - c = slice - } - switch fAST.Interface().(type) { - case []ast.Node: - switch cc := c.Interface().(type) { - case []ast.Node: - fAST.Set(c) - case []ast.Expr: - var slice []ast.Node - for _, el := range cc { - slice = append(slice, el) - } - fAST.Set(reflect.ValueOf(slice)) - default: - panic("XXX") - } - case []ast.Expr: - switch cc := c.Interface().(type) { - case []ast.Node: - var slice []ast.Expr - for _, el := range cc { - slice = append(slice, el.(ast.Expr)) - } - fAST.Set(reflect.ValueOf(slice)) - case []ast.Expr: - fAST.Set(c) - default: - panic("XXX") - } - default: - panic("XXX") - } - case reflect.Int: - c := reflect.ValueOf(NodeToAST(fNode.Interface().(Node), state)) - switch c.Kind() { - case reflect.String: - tok, ok := tokensByString[c.Interface().(string)] - if !ok { - // really we want to return an error here - panic("XXX") - } - fAST.SetInt(int64(tok)) - case reflect.Int: - fAST.Set(c) - default: - panic(fmt.Sprintf("internal error: unexpected kind %s", c.Kind())) - } - default: - r := NodeToAST(fNode.Interface().(Node), state) - if r != nil { - fAST.Set(reflect.ValueOf(r)) - } - } - } - - return out.Interface().(ast.Node) -} diff --git a/vendor/honnef.co/go/tools/pattern/doc.go b/vendor/honnef.co/go/tools/pattern/doc.go deleted file mode 100644 index 05d86c2..0000000 --- a/vendor/honnef.co/go/tools/pattern/doc.go +++ /dev/null @@ -1,273 +0,0 @@ -/* -Package pattern implements a simple language for pattern matching Go ASTs. - -Design decisions and trade-offs - -The language is designed specifically for the task of filtering ASTs -to simplify the implementation of analyses in staticcheck. -It is also intended to be trivial to parse and execute. - -To that end, we make certain decisions that make the language more -suited to its task, while making certain queries infeasible. - -Furthermore, it is fully expected that the majority of analyses will still require ordinary Go code -to further process the filtered AST, to make use of type information and to enforce complex invariants. -It is not our goal to design a scripting language for writing entire checks in. - -The language - -At its core, patterns are a representation of Go ASTs, allowing for the use of placeholders to enable pattern matching. -Their syntax is inspired by LISP and Haskell, but unlike LISP, the core unit of patterns isn't the list, but the node. -There is a fixed set of nodes, identified by name, and with the exception of the Or node, all nodes have a fixed number of arguments. -In addition to nodes, there are atoms, which represent basic units such as strings or the nil value. - -Pattern matching is implemented via bindings, represented by the Binding node. -A Binding can match nodes and associate them with names, to later recall the nodes. -This allows for expressing "this node must be equal to that node" constraints. - -To simplify writing and reading patterns, a small amount of additional syntax exists on top of nodes and atoms. -This additional syntax doesn't add any new features of its own, it simply provides shortcuts to creating nodes and atoms. - -To show an example of a pattern, first consider this snippet of Go code: - - if x := fn(); x != nil { - for _, v := range x { - println(v, x) - } - } - -The corresponding AST expressed as an idiomatic pattern would look as follows: - - (IfStmt - (AssignStmt (Ident "x") ":=" (CallExpr (Ident "fn") [])) - (BinaryExpr (Ident "x") "!=" (Ident "nil")) - (RangeStmt - (Ident "_") (Ident "v") ":=" (Ident "x") - (CallExpr (Ident "println") [(Ident "v") (Ident "x")])) - nil) - -Two things are worth noting about this representation. -First, the [el1 el2 ...] syntax is a short-hand for creating lists. -It is a short-hand for el1:el2:[], which itself is a short-hand for (List el1 (List el2 (List nil nil)). -Second, note the absence of a lot of lists in places that normally accept lists. -For example, assignment assigns a number of right-hands to a number of left-hands, yet our AssignStmt is lacking any form of list. -This is due to the fact that a single node can match a list of exactly one element. -Thus, the two following forms have identical matching behavior: - - (AssignStmt (Ident "x") ":=" (CallExpr (Ident "fn") [])) - (AssignStmt [(Ident "x")] ":=" [(CallExpr (Ident "fn") [])]) - -This section serves as an overview of the language's syntax. -More in-depth explanations of the matching behavior as well as an exhaustive list of node types follows in the coming sections. - -Pattern matching - -TODO write about pattern matching - -- inspired by haskell syntax, but much, much simpler and naive - -Node types - -The language contains two kinds of nodes: those that map to nodes in the AST, and those that implement additional logic. - -Nodes that map directly to AST nodes are named identically to the types in the go/ast package. -What follows is an exhaustive list of these nodes: - - (ArrayType len elt) - (AssignStmt lhs tok rhs) - (BasicLit kind value) - (BinaryExpr x op y) - (BranchStmt tok label) - (CallExpr fun args) - (CaseClause list body) - (ChanType dir value) - (CommClause comm body) - (CompositeLit type elts) - (DeferStmt call) - (Ellipsis elt) - (EmptyStmt) - (Field names type tag) - (ForStmt init cond post body) - (FuncDecl recv name type body) - (FuncLit type body) - (FuncType params results) - (GenDecl specs) - (GoStmt call) - (Ident name) - (IfStmt init cond body else) - (ImportSpec name path) - (IncDecStmt x tok) - (IndexExpr x index) - (InterfaceType methods) - (KeyValueExpr key value) - (MapType key value) - (RangeStmt key value tok x body) - (ReturnStmt results) - (SelectStmt body) - (SelectorExpr x sel) - (SendStmt chan value) - (SliceExpr x low high max) - (StarExpr x) - (StructType fields) - (SwitchStmt init tag body) - (TypeAssertExpr) - (TypeSpec name type) - (TypeSwitchStmt init assign body) - (UnaryExpr op x) - (ValueSpec names type values) - -Additionally, there are the String, Token and nil atoms. -Strings are double-quoted string literals, as in (Ident "someName"). -Tokens are also represented as double-quoted string literals, but are converted to token.Token values in contexts that require tokens, -such as in (BinaryExpr x "<" y), where "<" is transparently converted to token.LSS during matching. -The keyword 'nil' denotes the nil value, which represents the absence of any value. - -We also defines the (List head tail) node, which is used to represent sequences of elements as a singly linked list. -The head is a single element, and the tail is the remainder of the list. -For example, - - (List "foo" (List "bar" (List "baz" (List nil nil)))) - -represents a list of three elements, "foo", "bar" and "baz". There is dedicated syntax for writing lists, which looks as follows: - - ["foo" "bar" "baz"] - -This syntax is itself syntactic sugar for the following form: - - "foo":"bar":"baz":[] - -This form is of particular interest for pattern matching, as it allows matching on the head and tail. For example, - - "foo":"bar":_ - -would match any list with at least two elements, where the first two elements are "foo" and "bar". This is equivalent to writing - - (List "foo" (List "bar" _)) - -Note that it is not possible to match from the end of the list. -That is, there is no way to express a query such as "a list of any length where the last element is foo". - -Note that unlike in LISP, nil and empty lists are distinct from one another. -In patterns, with respect to lists, nil is akin to Go's untyped nil. -It will match a nil ast.Node, but it will not match a nil []ast.Expr. Nil will, however, match pointers to named types such as *ast.Ident. -Similarly, lists are akin to Go's -slices. An empty list will match both a nil and an empty []ast.Expr, but it will not match a nil ast.Node. - -Due to the difference between nil and empty lists, an empty list is represented as (List nil nil), i.e. a list with no head or tail. -Similarly, a list of one element is represented as (List el (List nil nil)). Unlike in LISP, it cannot be represented by (List el nil). - -Finally, there are nodes that implement special logic or matching behavior. - -(Any) matches any value. The underscore (_) maps to this node, making the following two forms equivalent: - - (Ident _) - (Ident (Any)) - -(Builtin name) matches a built-in identifier or function by name. -This is a type-aware variant of (Ident name). -Instead of only comparing the name, it resolves the object behind the name and makes sure it's a pre-declared identifier. - -For example, in the following piece of code - - func fn() { - println(true) - true := false - println(true) - } - -the pattern - - (Builtin "true") - -will match exactly once, on the first use of 'true' in the function. -Subsequent occurrences of 'true' no longer refer to the pre-declared identifier. - -(Object name) matches an identifier by name, but yields the -types.Object it refers to. - -(Function name) matches ast.Idents and ast.SelectorExprs that refer to a function with a given fully qualified name. -For example, "net/url.PathEscape" matches the PathEscape function in the net/url package, -and "(net/url.EscapeError).Error" refers to the Error method on the net/url.EscapeError type, -either on an instance of the type, or on the type itself. - -For example, the following patterns match the following lines of code: - - (CallExpr (Function "fmt.Println") _) // pattern 1 - (CallExpr (Function "(net/url.EscapeError).Error") _) // pattern 2 - - fmt.Println("hello, world") // matches pattern 1 - var x url.EscapeError - x.Error() // matches pattern 2 - (url.EscapeError).Error(x) // also matches pattern 2 - -(Binding name node) creates or uses a binding. -Bindings work like variable assignments, allowing referring to already matched nodes. -As an example, bindings are necessary to match self-assignment of the form "x = x", -since we need to express that the right-hand side is identical to the left-hand side. - -If a binding's node is not nil, the matcher will attempt to match a node according to the pattern. -If a binding's node is nil, the binding will either recall an existing value, or match the Any node. -It is an error to provide a non-nil node to a binding that has already been bound. - -Referring back to the earlier example, the following pattern will match self-assignment of idents: - - (AssignStmt (Binding "lhs" (Ident _)) "=" (Binding "lhs" nil)) - -Because bindings are a crucial component of pattern matching, there is special syntax for creating and recalling bindings. -Lower-case names refer to bindings. If standing on its own, the name "foo" will be equivalent to (Binding "foo" nil). -If a name is followed by an at-sign (@) then it will create a binding for the node that follows. -Together, this allows us to rewrite the earlier example as follows: - - (AssignStmt lhs@(Ident _) "=" lhs) - -(Or nodes...) is a variadic node that tries matching each node until one succeeds. For example, the following pattern matches all idents of name "foo" or "bar": - - (Ident (Or "foo" "bar")) - -We could also have written - - (Or (Ident "foo") (Ident "bar")) - -and achieved the same result. We can also mix different kinds of nodes: - - (Or (Ident "foo") (CallExpr (Ident "bar") _)) - -When using bindings inside of nodes used inside Or, all or none of the bindings will be bound. -That is, partially matched nodes that ultimately failed to match will not produce any bindings observable outside of the matching attempt. -We can thus write - - (Or (Ident name) (CallExpr name)) - -and 'name' will either be a String if the first option matched, or an Ident or SelectorExpr if the second option matched. - -(Not node) - -The Not node negates a match. For example, (Not (Ident _)) will match all nodes that aren't identifiers. - -ChanDir(0) - -Automatic unnesting of AST nodes - -The Go AST has several types of nodes that wrap other nodes. -To simplify matching, we automatically unwrap some of these nodes. - -These nodes are ExprStmt (for using expressions in a statement context), -ParenExpr (for parenthesized expressions), -DeclStmt (for declarations in a statement context), -and LabeledStmt (for labeled statements). - -Thus, the query - - (FuncLit _ [(CallExpr _ _)] - -will match a function literal containing a single function call, -even though in the actual Go AST, the CallExpr is nested inside an ExprStmt, -as function bodies are made up of sequences of statements. - -On the flip-side, there is no way to specifically match these wrapper nodes. -For example, there is no way of searching for unnecessary parentheses, like in the following piece of Go code: - - ((x)) += 2 - -*/ -package pattern diff --git a/vendor/honnef.co/go/tools/pattern/fuzz.go b/vendor/honnef.co/go/tools/pattern/fuzz.go deleted file mode 100644 index 52e7df9..0000000 --- a/vendor/honnef.co/go/tools/pattern/fuzz.go +++ /dev/null @@ -1,50 +0,0 @@ -// +build gofuzz - -package pattern - -import ( - "go/ast" - goparser "go/parser" - "go/token" - "os" - "path/filepath" - "strings" -) - -var files []*ast.File - -func init() { - fset := token.NewFileSet() - filepath.Walk("/usr/lib/go/src", func(path string, info os.FileInfo, err error) error { - if err != nil { - // XXX error handling - panic(err) - } - if !strings.HasSuffix(path, ".go") { - return nil - } - f, err := goparser.ParseFile(fset, path, nil, 0) - if err != nil { - return nil - } - files = append(files, f) - return nil - }) -} - -func Fuzz(data []byte) int { - p := &Parser{} - pat, err := p.Parse(string(data)) - if err != nil { - if strings.Contains(err.Error(), "internal error") { - panic(err) - } - return 0 - } - _ = pat.Root.String() - - for _, f := range files { - Match(pat.Root, f) - } - return 1 -} diff --git a/vendor/honnef.co/go/tools/pattern/lexer.go b/vendor/honnef.co/go/tools/pattern/lexer.go deleted file mode 100644 index fb72e39..0000000 --- a/vendor/honnef.co/go/tools/pattern/lexer.go +++ /dev/null @@ -1,221 +0,0 @@ -package pattern - -import ( - "fmt" - "go/token" - "unicode" - "unicode/utf8" -) - -type lexer struct { - f *token.File - - input string - start int - pos int - width int - items chan item -} - -type itemType int - -const eof = -1 - -const ( - itemError itemType = iota - itemLeftParen - itemRightParen - itemLeftBracket - itemRightBracket - itemTypeName - itemVariable - itemAt - itemColon - itemBlank - itemString - itemEOF -) - -func (typ itemType) String() string { - switch typ { - case itemError: - return "ERROR" - case itemLeftParen: - return "(" - case itemRightParen: - return ")" - case itemLeftBracket: - return "[" - case itemRightBracket: - return "]" - case itemTypeName: - return "TYPE" - case itemVariable: - return "VAR" - case itemAt: - return "@" - case itemColon: - return ":" - case itemBlank: - return "_" - case itemString: - return "STRING" - case itemEOF: - return "EOF" - default: - return fmt.Sprintf("itemType(%d)", typ) - } -} - -type item struct { - typ itemType - val string - pos int -} - -type stateFn func(*lexer) stateFn - -func (l *lexer) run() { - for state := lexStart; state != nil; { - state = state(l) - } - close(l.items) -} - -func (l *lexer) emitValue(t itemType, value string) { - l.items <- item{t, value, l.start} - l.start = l.pos -} - -func (l *lexer) emit(t itemType) { - l.items <- item{t, l.input[l.start:l.pos], l.start} - l.start = l.pos -} - -func lexStart(l *lexer) stateFn { - switch r := l.next(); { - case r == eof: - l.emit(itemEOF) - return nil - case unicode.IsSpace(r): - l.ignore() - case r == '(': - l.emit(itemLeftParen) - case r == ')': - l.emit(itemRightParen) - case r == '[': - l.emit(itemLeftBracket) - case r == ']': - l.emit(itemRightBracket) - case r == '@': - l.emit(itemAt) - case r == ':': - l.emit(itemColon) - case r == '_': - l.emit(itemBlank) - case r == '"': - l.backup() - return lexString - case unicode.IsUpper(r): - l.backup() - return lexType - case unicode.IsLower(r): - l.backup() - return lexVariable - default: - return l.errorf("unexpected character %c", r) - } - return lexStart -} - -func (l *lexer) next() (r rune) { - if l.pos >= len(l.input) { - l.width = 0 - return eof - } - r, l.width = utf8.DecodeRuneInString(l.input[l.pos:]) - - if r == '\n' { - l.f.AddLine(l.pos) - } - - l.pos += l.width - - return r -} - -func (l *lexer) ignore() { - l.start = l.pos -} - -func (l *lexer) backup() { - l.pos -= l.width -} - -func (l *lexer) errorf(format string, args ...interface{}) stateFn { - // TODO(dh): emit position information in errors - l.items <- item{ - itemError, - fmt.Sprintf(format, args...), - l.start, - } - return nil -} - -func isAlphaNumeric(r rune) bool { - return r >= '0' && r <= '9' || - r >= 'a' && r <= 'z' || - r >= 'A' && r <= 'Z' -} - -func lexString(l *lexer) stateFn { - l.next() // skip quote - escape := false - - var runes []rune - for { - switch r := l.next(); r { - case eof: - return l.errorf("unterminated string") - case '"': - if !escape { - l.emitValue(itemString, string(runes)) - return lexStart - } else { - runes = append(runes, '"') - escape = false - } - case '\\': - if escape { - runes = append(runes, '\\') - escape = false - } else { - escape = true - } - default: - runes = append(runes, r) - } - } -} - -func lexType(l *lexer) stateFn { - l.next() - for { - if !isAlphaNumeric(l.next()) { - l.backup() - l.emit(itemTypeName) - return lexStart - } - } -} - -func lexVariable(l *lexer) stateFn { - l.next() - for { - if !isAlphaNumeric(l.next()) { - l.backup() - l.emit(itemVariable) - return lexStart - } - } -} diff --git a/vendor/honnef.co/go/tools/pattern/match.go b/vendor/honnef.co/go/tools/pattern/match.go deleted file mode 100644 index ff039ba..0000000 --- a/vendor/honnef.co/go/tools/pattern/match.go +++ /dev/null @@ -1,513 +0,0 @@ -package pattern - -import ( - "fmt" - "go/ast" - "go/token" - "go/types" - "reflect" - - "honnef.co/go/tools/lint" -) - -var tokensByString = map[string]Token{ - "INT": Token(token.INT), - "FLOAT": Token(token.FLOAT), - "IMAG": Token(token.IMAG), - "CHAR": Token(token.CHAR), - "STRING": Token(token.STRING), - "+": Token(token.ADD), - "-": Token(token.SUB), - "*": Token(token.MUL), - "/": Token(token.QUO), - "%": Token(token.REM), - "&": Token(token.AND), - "|": Token(token.OR), - "^": Token(token.XOR), - "<<": Token(token.SHL), - ">>": Token(token.SHR), - "&^": Token(token.AND_NOT), - "+=": Token(token.ADD_ASSIGN), - "-=": Token(token.SUB_ASSIGN), - "*=": Token(token.MUL_ASSIGN), - "/=": Token(token.QUO_ASSIGN), - "%=": Token(token.REM_ASSIGN), - "&=": Token(token.AND_ASSIGN), - "|=": Token(token.OR_ASSIGN), - "^=": Token(token.XOR_ASSIGN), - "<<=": Token(token.SHL_ASSIGN), - ">>=": Token(token.SHR_ASSIGN), - "&^=": Token(token.AND_NOT_ASSIGN), - "&&": Token(token.LAND), - "||": Token(token.LOR), - "<-": Token(token.ARROW), - "++": Token(token.INC), - "--": Token(token.DEC), - "==": Token(token.EQL), - "<": Token(token.LSS), - ">": Token(token.GTR), - "=": Token(token.ASSIGN), - "!": Token(token.NOT), - "!=": Token(token.NEQ), - "<=": Token(token.LEQ), - ">=": Token(token.GEQ), - ":=": Token(token.DEFINE), - "...": Token(token.ELLIPSIS), - "IMPORT": Token(token.IMPORT), - "VAR": Token(token.VAR), - "TYPE": Token(token.TYPE), - "CONST": Token(token.CONST), -} - -func maybeToken(node Node) (Node, bool) { - if node, ok := node.(String); ok { - if tok, ok := tokensByString[string(node)]; ok { - return tok, true - } - return node, false - } - return node, false -} - -func isNil(v interface{}) bool { - if v == nil { - return true - } - if _, ok := v.(Nil); ok { - return true - } - return false -} - -type matcher interface { - Match(*Matcher, interface{}) (interface{}, bool) -} - -type State = map[string]interface{} - -type Matcher struct { - TypesInfo *types.Info - State State -} - -func (m *Matcher) fork() *Matcher { - state := make(State, len(m.State)) - for k, v := range m.State { - state[k] = v - } - return &Matcher{ - TypesInfo: m.TypesInfo, - State: state, - } -} - -func (m *Matcher) merge(mc *Matcher) { - m.State = mc.State -} - -func (m *Matcher) Match(a Node, b ast.Node) bool { - m.State = State{} - _, ok := match(m, a, b) - return ok -} - -func Match(a Node, b ast.Node) (*Matcher, bool) { - m := &Matcher{} - ret := m.Match(a, b) - return m, ret -} - -// Match two items, which may be (Node, AST) or (AST, AST) -func match(m *Matcher, l, r interface{}) (interface{}, bool) { - if _, ok := r.(Node); ok { - panic("Node mustn't be on right side of match") - } - - switch l := l.(type) { - case *ast.ParenExpr: - return match(m, l.X, r) - case *ast.ExprStmt: - return match(m, l.X, r) - case *ast.DeclStmt: - return match(m, l.Decl, r) - case *ast.LabeledStmt: - return match(m, l.Stmt, r) - case *ast.BlockStmt: - return match(m, l.List, r) - case *ast.FieldList: - return match(m, l.List, r) - } - - switch r := r.(type) { - case *ast.ParenExpr: - return match(m, l, r.X) - case *ast.ExprStmt: - return match(m, l, r.X) - case *ast.DeclStmt: - return match(m, l, r.Decl) - case *ast.LabeledStmt: - return match(m, l, r.Stmt) - case *ast.BlockStmt: - if r == nil { - return match(m, l, nil) - } - return match(m, l, r.List) - case *ast.FieldList: - if r == nil { - return match(m, l, nil) - } - return match(m, l, r.List) - case *ast.BasicLit: - if r == nil { - return match(m, l, nil) - } - } - - if l, ok := l.(matcher); ok { - return l.Match(m, r) - } - - if l, ok := l.(Node); ok { - // Matching of pattern with concrete value - return matchNodeAST(m, l, r) - } - - if l == nil || r == nil { - return nil, l == r - } - - { - ln, ok1 := l.(ast.Node) - rn, ok2 := r.(ast.Node) - if ok1 && ok2 { - return matchAST(m, ln, rn) - } - } - - { - obj, ok := l.(types.Object) - if ok { - switch r := r.(type) { - case *ast.Ident: - return obj, obj == m.TypesInfo.ObjectOf(r) - case *ast.SelectorExpr: - return obj, obj == m.TypesInfo.ObjectOf(r.Sel) - default: - return obj, false - } - } - } - - { - ln, ok1 := l.([]ast.Expr) - rn, ok2 := r.([]ast.Expr) - if ok1 || ok2 { - if ok1 && !ok2 { - rn = []ast.Expr{r.(ast.Expr)} - } else if !ok1 && ok2 { - ln = []ast.Expr{l.(ast.Expr)} - } - - if len(ln) != len(rn) { - return nil, false - } - for i, ll := range ln { - if _, ok := match(m, ll, rn[i]); !ok { - return nil, false - } - } - return r, true - } - } - - { - ln, ok1 := l.([]ast.Stmt) - rn, ok2 := r.([]ast.Stmt) - if ok1 || ok2 { - if ok1 && !ok2 { - rn = []ast.Stmt{r.(ast.Stmt)} - } else if !ok1 && ok2 { - ln = []ast.Stmt{l.(ast.Stmt)} - } - - if len(ln) != len(rn) { - return nil, false - } - for i, ll := range ln { - if _, ok := match(m, ll, rn[i]); !ok { - return nil, false - } - } - return r, true - } - } - - panic(fmt.Sprintf("unsupported comparison: %T and %T", l, r)) -} - -// Match a Node with an AST node -func matchNodeAST(m *Matcher, a Node, b interface{}) (interface{}, bool) { - switch b := b.(type) { - case []ast.Stmt: - // 'a' is not a List or we'd be using its Match - // implementation. - - if len(b) != 1 { - return nil, false - } - return match(m, a, b[0]) - case []ast.Expr: - // 'a' is not a List or we'd be using its Match - // implementation. - - if len(b) != 1 { - return nil, false - } - return match(m, a, b[0]) - case ast.Node: - ra := reflect.ValueOf(a) - rb := reflect.ValueOf(b).Elem() - - if ra.Type().Name() != rb.Type().Name() { - return nil, false - } - - for i := 0; i < ra.NumField(); i++ { - af := ra.Field(i) - fieldName := ra.Type().Field(i).Name - bf := rb.FieldByName(fieldName) - if (bf == reflect.Value{}) { - panic(fmt.Sprintf("internal error: could not find field %s in type %t when comparing with %T", fieldName, b, a)) - } - ai := af.Interface() - bi := bf.Interface() - if ai == nil { - return b, bi == nil - } - if _, ok := match(m, ai.(Node), bi); !ok { - return b, false - } - } - return b, true - case nil: - return nil, a == Nil{} - default: - panic(fmt.Sprintf("unhandled type %T", b)) - } -} - -// Match two AST nodes -func matchAST(m *Matcher, a, b ast.Node) (interface{}, bool) { - ra := reflect.ValueOf(a) - rb := reflect.ValueOf(b) - - if ra.Type() != rb.Type() { - return nil, false - } - if ra.IsNil() || rb.IsNil() { - return rb, ra.IsNil() == rb.IsNil() - } - - ra = ra.Elem() - rb = rb.Elem() - for i := 0; i < ra.NumField(); i++ { - af := ra.Field(i) - bf := rb.Field(i) - if af.Type() == rtTokPos || af.Type() == rtObject || af.Type() == rtCommentGroup { - continue - } - - switch af.Kind() { - case reflect.Slice: - if af.Len() != bf.Len() { - return nil, false - } - for j := 0; j < af.Len(); j++ { - if _, ok := match(m, af.Index(j).Interface().(ast.Node), bf.Index(j).Interface().(ast.Node)); !ok { - return nil, false - } - } - case reflect.String: - if af.String() != bf.String() { - return nil, false - } - case reflect.Int: - if af.Int() != bf.Int() { - return nil, false - } - case reflect.Bool: - if af.Bool() != bf.Bool() { - return nil, false - } - case reflect.Ptr, reflect.Interface: - if _, ok := match(m, af.Interface(), bf.Interface()); !ok { - return nil, false - } - default: - panic(fmt.Sprintf("internal error: unhandled kind %s (%T)", af.Kind(), af.Interface())) - } - } - return b, true -} - -func (b Binding) Match(m *Matcher, node interface{}) (interface{}, bool) { - if isNil(b.Node) { - v, ok := m.State[b.Name] - if ok { - // Recall value - return match(m, v, node) - } - // Matching anything - b.Node = Any{} - } - - // Store value - if _, ok := m.State[b.Name]; ok { - panic(fmt.Sprintf("binding already created: %s", b.Name)) - } - new, ret := match(m, b.Node, node) - if ret { - m.State[b.Name] = new - } - return new, ret -} - -func (Any) Match(m *Matcher, node interface{}) (interface{}, bool) { - return node, true -} - -func (l List) Match(m *Matcher, node interface{}) (interface{}, bool) { - v := reflect.ValueOf(node) - if v.Kind() == reflect.Slice { - if isNil(l.Head) { - return node, v.Len() == 0 - } - if v.Len() == 0 { - return nil, false - } - // OPT(dh): don't check the entire tail if head didn't match - _, ok1 := match(m, l.Head, v.Index(0).Interface()) - _, ok2 := match(m, l.Tail, v.Slice(1, v.Len()).Interface()) - return node, ok1 && ok2 - } - // Our empty list does not equal an untyped Go nil. This way, we can - // tell apart an if with no else and an if with an empty else. - return nil, false -} - -func (s String) Match(m *Matcher, node interface{}) (interface{}, bool) { - switch o := node.(type) { - case token.Token: - if tok, ok := maybeToken(s); ok { - return match(m, tok, node) - } - return nil, false - case string: - return o, string(s) == o - default: - return nil, false - } -} - -func (tok Token) Match(m *Matcher, node interface{}) (interface{}, bool) { - o, ok := node.(token.Token) - if !ok { - return nil, false - } - return o, token.Token(tok) == o -} - -func (Nil) Match(m *Matcher, node interface{}) (interface{}, bool) { - return nil, isNil(node) -} - -func (builtin Builtin) Match(m *Matcher, node interface{}) (interface{}, bool) { - ident, ok := node.(*ast.Ident) - if !ok { - return nil, false - } - obj := m.TypesInfo.ObjectOf(ident) - if obj != types.Universe.Lookup(ident.Name) { - return nil, false - } - return match(m, builtin.Name, ident.Name) -} - -func (obj Object) Match(m *Matcher, node interface{}) (interface{}, bool) { - ident, ok := node.(*ast.Ident) - if !ok { - return nil, false - } - - id := m.TypesInfo.ObjectOf(ident) - _, ok = match(m, obj.Name, ident.Name) - return id, ok -} - -func (fn Function) Match(m *Matcher, node interface{}) (interface{}, bool) { - var name string - var obj types.Object - switch node := node.(type) { - case *ast.Ident: - obj = m.TypesInfo.ObjectOf(node) - switch obj := obj.(type) { - case *types.Func: - name = lint.FuncName(obj) - case *types.Builtin: - name = obj.Name() - default: - return nil, false - } - case *ast.SelectorExpr: - var ok bool - obj, ok = m.TypesInfo.ObjectOf(node.Sel).(*types.Func) - if !ok { - return nil, false - } - name = lint.FuncName(obj.(*types.Func)) - default: - return nil, false - } - _, ok := match(m, fn.Name, name) - return obj, ok -} - -func (or Or) Match(m *Matcher, node interface{}) (interface{}, bool) { - for _, opt := range or.Nodes { - mc := m.fork() - if ret, ok := match(mc, opt, node); ok { - m.merge(mc) - return ret, true - } - } - return nil, false -} - -func (not Not) Match(m *Matcher, node interface{}) (interface{}, bool) { - _, ok := match(m, not.Node, node) - if ok { - return nil, false - } - return node, true -} - -var ( - // Types of fields in go/ast structs that we want to skip - rtTokPos = reflect.TypeOf(token.Pos(0)) - rtObject = reflect.TypeOf((*ast.Object)(nil)) - rtCommentGroup = reflect.TypeOf((*ast.CommentGroup)(nil)) -) - -var ( - _ matcher = Binding{} - _ matcher = Any{} - _ matcher = List{} - _ matcher = String("") - _ matcher = Token(0) - _ matcher = Nil{} - _ matcher = Builtin{} - _ matcher = Object{} - _ matcher = Function{} - _ matcher = Or{} - _ matcher = Not{} -) diff --git a/vendor/honnef.co/go/tools/pattern/parser.go b/vendor/honnef.co/go/tools/pattern/parser.go deleted file mode 100644 index 009238b..0000000 --- a/vendor/honnef.co/go/tools/pattern/parser.go +++ /dev/null @@ -1,455 +0,0 @@ -package pattern - -import ( - "fmt" - "go/ast" - "go/token" - "reflect" -) - -type Pattern struct { - Root Node - // Relevant contains instances of ast.Node that could potentially - // initiate a successful match of the pattern. - Relevant []reflect.Type -} - -func MustParse(s string) Pattern { - p := &Parser{AllowTypeInfo: true} - pat, err := p.Parse(s) - if err != nil { - panic(err) - } - return pat -} - -func roots(node Node) []reflect.Type { - switch node := node.(type) { - case Or: - var out []reflect.Type - for _, el := range node.Nodes { - out = append(out, roots(el)...) - } - return out - case Not: - return roots(node.Node) - case Binding: - return roots(node.Node) - case Nil, nil: - // this branch is reached via bindings - return allTypes - default: - Ts, ok := nodeToASTTypes[reflect.TypeOf(node)] - if !ok { - panic(fmt.Sprintf("internal error: unhandled type %T", node)) - } - return Ts - } -} - -var allTypes = []reflect.Type{ - reflect.TypeOf((*ast.RangeStmt)(nil)), - reflect.TypeOf((*ast.AssignStmt)(nil)), - reflect.TypeOf((*ast.IndexExpr)(nil)), - reflect.TypeOf((*ast.Ident)(nil)), - reflect.TypeOf((*ast.ValueSpec)(nil)), - reflect.TypeOf((*ast.GenDecl)(nil)), - reflect.TypeOf((*ast.BinaryExpr)(nil)), - reflect.TypeOf((*ast.ForStmt)(nil)), - reflect.TypeOf((*ast.ArrayType)(nil)), - reflect.TypeOf((*ast.DeferStmt)(nil)), - reflect.TypeOf((*ast.MapType)(nil)), - reflect.TypeOf((*ast.ReturnStmt)(nil)), - reflect.TypeOf((*ast.SliceExpr)(nil)), - reflect.TypeOf((*ast.StarExpr)(nil)), - reflect.TypeOf((*ast.UnaryExpr)(nil)), - reflect.TypeOf((*ast.SendStmt)(nil)), - reflect.TypeOf((*ast.SelectStmt)(nil)), - reflect.TypeOf((*ast.ImportSpec)(nil)), - reflect.TypeOf((*ast.IfStmt)(nil)), - reflect.TypeOf((*ast.GoStmt)(nil)), - reflect.TypeOf((*ast.Field)(nil)), - reflect.TypeOf((*ast.SelectorExpr)(nil)), - reflect.TypeOf((*ast.StructType)(nil)), - reflect.TypeOf((*ast.KeyValueExpr)(nil)), - reflect.TypeOf((*ast.FuncType)(nil)), - reflect.TypeOf((*ast.FuncLit)(nil)), - reflect.TypeOf((*ast.FuncDecl)(nil)), - reflect.TypeOf((*ast.ChanType)(nil)), - reflect.TypeOf((*ast.CallExpr)(nil)), - reflect.TypeOf((*ast.CaseClause)(nil)), - reflect.TypeOf((*ast.CommClause)(nil)), - reflect.TypeOf((*ast.CompositeLit)(nil)), - reflect.TypeOf((*ast.EmptyStmt)(nil)), - reflect.TypeOf((*ast.SwitchStmt)(nil)), - reflect.TypeOf((*ast.TypeSwitchStmt)(nil)), - reflect.TypeOf((*ast.TypeAssertExpr)(nil)), - reflect.TypeOf((*ast.TypeSpec)(nil)), - reflect.TypeOf((*ast.InterfaceType)(nil)), - reflect.TypeOf((*ast.BranchStmt)(nil)), - reflect.TypeOf((*ast.IncDecStmt)(nil)), - reflect.TypeOf((*ast.BasicLit)(nil)), -} - -var nodeToASTTypes = map[reflect.Type][]reflect.Type{ - reflect.TypeOf(String("")): nil, - reflect.TypeOf(Token(0)): nil, - reflect.TypeOf(List{}): {reflect.TypeOf((*ast.BlockStmt)(nil)), reflect.TypeOf((*ast.FieldList)(nil))}, - reflect.TypeOf(Builtin{}): {reflect.TypeOf((*ast.Ident)(nil))}, - reflect.TypeOf(Object{}): {reflect.TypeOf((*ast.Ident)(nil))}, - reflect.TypeOf(Function{}): {reflect.TypeOf((*ast.Ident)(nil)), reflect.TypeOf((*ast.SelectorExpr)(nil))}, - reflect.TypeOf(Any{}): allTypes, - reflect.TypeOf(RangeStmt{}): {reflect.TypeOf((*ast.RangeStmt)(nil))}, - reflect.TypeOf(AssignStmt{}): {reflect.TypeOf((*ast.AssignStmt)(nil))}, - reflect.TypeOf(IndexExpr{}): {reflect.TypeOf((*ast.IndexExpr)(nil))}, - reflect.TypeOf(Ident{}): {reflect.TypeOf((*ast.Ident)(nil))}, - reflect.TypeOf(ValueSpec{}): {reflect.TypeOf((*ast.ValueSpec)(nil))}, - reflect.TypeOf(GenDecl{}): {reflect.TypeOf((*ast.GenDecl)(nil))}, - reflect.TypeOf(BinaryExpr{}): {reflect.TypeOf((*ast.BinaryExpr)(nil))}, - reflect.TypeOf(ForStmt{}): {reflect.TypeOf((*ast.ForStmt)(nil))}, - reflect.TypeOf(ArrayType{}): {reflect.TypeOf((*ast.ArrayType)(nil))}, - reflect.TypeOf(DeferStmt{}): {reflect.TypeOf((*ast.DeferStmt)(nil))}, - reflect.TypeOf(MapType{}): {reflect.TypeOf((*ast.MapType)(nil))}, - reflect.TypeOf(ReturnStmt{}): {reflect.TypeOf((*ast.ReturnStmt)(nil))}, - reflect.TypeOf(SliceExpr{}): {reflect.TypeOf((*ast.SliceExpr)(nil))}, - reflect.TypeOf(StarExpr{}): {reflect.TypeOf((*ast.StarExpr)(nil))}, - reflect.TypeOf(UnaryExpr{}): {reflect.TypeOf((*ast.UnaryExpr)(nil))}, - reflect.TypeOf(SendStmt{}): {reflect.TypeOf((*ast.SendStmt)(nil))}, - reflect.TypeOf(SelectStmt{}): {reflect.TypeOf((*ast.SelectStmt)(nil))}, - reflect.TypeOf(ImportSpec{}): {reflect.TypeOf((*ast.ImportSpec)(nil))}, - reflect.TypeOf(IfStmt{}): {reflect.TypeOf((*ast.IfStmt)(nil))}, - reflect.TypeOf(GoStmt{}): {reflect.TypeOf((*ast.GoStmt)(nil))}, - reflect.TypeOf(Field{}): {reflect.TypeOf((*ast.Field)(nil))}, - reflect.TypeOf(SelectorExpr{}): {reflect.TypeOf((*ast.SelectorExpr)(nil))}, - reflect.TypeOf(StructType{}): {reflect.TypeOf((*ast.StructType)(nil))}, - reflect.TypeOf(KeyValueExpr{}): {reflect.TypeOf((*ast.KeyValueExpr)(nil))}, - reflect.TypeOf(FuncType{}): {reflect.TypeOf((*ast.FuncType)(nil))}, - reflect.TypeOf(FuncLit{}): {reflect.TypeOf((*ast.FuncLit)(nil))}, - reflect.TypeOf(FuncDecl{}): {reflect.TypeOf((*ast.FuncDecl)(nil))}, - reflect.TypeOf(ChanType{}): {reflect.TypeOf((*ast.ChanType)(nil))}, - reflect.TypeOf(CallExpr{}): {reflect.TypeOf((*ast.CallExpr)(nil))}, - reflect.TypeOf(CaseClause{}): {reflect.TypeOf((*ast.CaseClause)(nil))}, - reflect.TypeOf(CommClause{}): {reflect.TypeOf((*ast.CommClause)(nil))}, - reflect.TypeOf(CompositeLit{}): {reflect.TypeOf((*ast.CompositeLit)(nil))}, - reflect.TypeOf(EmptyStmt{}): {reflect.TypeOf((*ast.EmptyStmt)(nil))}, - reflect.TypeOf(SwitchStmt{}): {reflect.TypeOf((*ast.SwitchStmt)(nil))}, - reflect.TypeOf(TypeSwitchStmt{}): {reflect.TypeOf((*ast.TypeSwitchStmt)(nil))}, - reflect.TypeOf(TypeAssertExpr{}): {reflect.TypeOf((*ast.TypeAssertExpr)(nil))}, - reflect.TypeOf(TypeSpec{}): {reflect.TypeOf((*ast.TypeSpec)(nil))}, - reflect.TypeOf(InterfaceType{}): {reflect.TypeOf((*ast.InterfaceType)(nil))}, - reflect.TypeOf(BranchStmt{}): {reflect.TypeOf((*ast.BranchStmt)(nil))}, - reflect.TypeOf(IncDecStmt{}): {reflect.TypeOf((*ast.IncDecStmt)(nil))}, - reflect.TypeOf(BasicLit{}): {reflect.TypeOf((*ast.BasicLit)(nil))}, -} - -var requiresTypeInfo = map[string]bool{ - "Function": true, - "Builtin": true, - "Object": true, -} - -type Parser struct { - // Allow nodes that rely on type information - AllowTypeInfo bool - - lex *lexer - cur item - last *item - items chan item -} - -func (p *Parser) Parse(s string) (Pattern, error) { - p.cur = item{} - p.last = nil - p.items = nil - - fset := token.NewFileSet() - p.lex = &lexer{ - f: fset.AddFile("

    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 B2X_Df literal 0 HcmV?d00001 diff --git a/static/main.css b/static/main.css index 9acc08d..e5a307e 100644 --- a/static/main.css +++ b/static/main.css @@ -156,7 +156,7 @@ position: absolute; top: 3rem; float: right; - width: 80px; + width: 5rem; border: 1px solid var(--fg); border-radius: 3px; background-color: var(--bg); @@ -165,7 +165,7 @@ justify-content: space-between; padding: 0.5rem; align-items: center; - transform: translate(-80px, 0); + transform: translate(-1.5rem, 0); } .color-mode__btn svg { @@ -205,11 +205,7 @@ a:hover { } @font-face { - font-family: "NewYorker"; - src: url("/static/fonts/NewYorkerEngraved-zR1.woff"); -} - -@font-face { + font-display: swap; font-family: "OldEnglish"; src: url("/static/fonts/OldEnglishFive-axyVg.woff"); } @@ -233,7 +229,7 @@ h1 { } h2 { - font-size: 3rem; + font-size: 2.5rem; font-weight: 600; word-wrap: break-spaces !important; color: var(--fg); @@ -319,6 +315,14 @@ h5 { max-height: inherit; } +.article-page { + border: none; + max-width: 50em; + margin-left: auto; + margin-right: auto; +} + + .divider { border-bottom: var(--line); width: 100%; @@ -404,12 +408,13 @@ h5 { width: 100%; height: 2rem; border: none; - border-bottom: 2px solid var(--fg); margin-top: 1rem; font-family: var(--font); font-size: 16pt; color: var(--fg); + border-radius: 0; background-color: var(--bg); + border-bottom: 2px solid var(--fg); } .submit { @@ -471,6 +476,7 @@ h5 { } .article-content img { + border-radius: 20px; width: 100%; height: auto; margin-top: 1rem; @@ -505,4 +511,5 @@ figcaption p { filter: brightness(0.8); margin-top: 1rem; border-radius: 20px; -} \ No newline at end of file +} + diff --git a/tmpl/article-tile.html b/tmpl/article-tile.html index 27a5e27..5b11e64 100644 --- a/tmpl/article-tile.html +++ b/tmpl/article-tile.html @@ -6,13 +6,15 @@ {{if .ImageURL}} {{end}}

    0);KwlGP0{MoQm=3;8iSCrmlVm7 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⁣Wp|`5+m(@?cl0WF@w*bxHzZ2-u4p;fk6G%o8- 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 z z06!eXlIF(Ctpn&DJT$@!+2s!REIzaZD-Pv%zu-BuN|o2-QVu@eExgfV-K*d+J&zSc zj4do^yA?&si5v!$2Va5J$%zUd&z(j?n_#h`^^aK%=K$tI*nS40Wn@ImlvA;Tf0^(a3_(o3ASacvT_}_YeSH3w)!-fg?ku>Fvm5 z*n~@slwqg4D({WCirrk;=?>81WVL|FW|?@s$tI51@TO;PW}rfEU*Jix9`q~pNDWZ; zGvzifCjGgIt#Y=V#OHM(_Qpu>0|1H=r`qmm&w5R;OxkwMO?jEm`p5d|IbX(EMjAK> zzEULooNhCgb@}mttSk5@-{BUpc|v^iEu31xi@!44Wtm%gtJ7JVZ-KX|-D0rLAD<&Y zkG=b?I~csV@FdLbXv8TqqR*nLZ}m)eAQqPBe4h_*wGhrG6j(%ixo{QFG#6ssgg}n# zSq@y8j<6jP%TpclL03v%)8zsJSpE$<0LHo`!)Jv$LFNjw< zw(HJ8ta$vkZDX%ihJ4B2fAM&A6bH-NdTHTZ)2uf$3%!xoc{`nPBmzuqXY!AwU zm*CXDcA|FF9n!RuFe=UHL+e?Jdy9YB?t#ja?fEw+jQDduB8`FYLz0J|vdCw`7Ue)x zMHM+}06CS0jdE#JJFt}my)2P8$b0waB&n6!dzkXnp(nBHRD(frx+yAsLg^qTeWMi9 zuH19Qp59Aho_v| ze3E|M+o~Js(gB4a^=LPD6)u;7qXO(Y=AUjYm~8H_M8b<&dB%^f z(ysPcU+b{7`89N#~OeMF<{SyiKYXzM;G znSMr+;zMT#TtZOR-Kh6UuX?qygYwX=}8-54(Bf4fi z9scFy*Do|hqy^GD`RAe(_SSvN)73-~6mzf_mhmP3uk+nv^ZR2AHcH?XHeQSPV%_u& zXXM(LppE<1D`kb!2q^q~99XGaF5|ZK6Kw4BtjIjv7%sePMQmALrfZX_#&uEWm#KwBmnx6OyjMP=G=>X&)g!SU0T=IxWlAc_L)`zxnO8W3Tyx+| zlYcO}vyM+GWY75f*&_i@GSY;swEL_n=8$l`1H5d=&T)ZOC>dN)S9<4;zBl7d(7#Lx z+TORzMlpA`@h#h=;M0$<`l5yPAm6ww9iE0%-XC)W8myQ9NN21yjWUA!ZAI7giF5{? z%+%Yh3_!DZMH@p4VCxQQO_z_iLf!L4=;c2d$?3@kr8GOvl)s4qh^+7bIF6v3tiW=) zXH5e?Nm{h1Qbt25q4(o)y74)6c{?HQv(eRLGFa^DqpOm){IS-(O%tYq{*8u}sc1I! zW^8V7bIdmW*l*24*`Y<%|Kv(OZ(9YwAxn5~%gY2Avq*8T;<=m|obNqeiZtyBqEen< zPm;L-bH-ig%3ZXIij#Na3NkAEkhfkscO@@DtO5$lXeo(}{q^9`p!@Wh*9=c<9PCp= z5G20rdScwf)Cw3fS8g3KU9nNWm8Lvw9xmK>arFTk(e)KV^6&boU)Pu{W#qYt3$tYl zZ3$vPinZ%3U8J8={>}vTn3h1Fk1hMeBydF0DDwl)&oq`k4&xr)^WhRmAM={g(g68^->e63GjO}6$c9=KkriR@1pjp z6#TL*GjXXKgh;!~1pott^^5Afq~{`Qe7(JG6oOh=C-rUzAZAUiJ@x|94uDz;#O1l3 zf)IW@|BL)t@yk?sTy8|vNJKKKJG>e&f<#X&eoIg6UAiA;jVI5m4dg3T8#oGY<7 zH;wpB(aWhl43i2M(!N|dc|VGQ9rX0vz{sEr4%MC=S6djG1C9XBu;l|Sd8emGTUM7RDQ>N++xe$B~WBoeak9{vWd5!x^pz?Aza>MNdR$$ybEvEm$lo5)z^$g6I-GdhhI# zC{d&L8boKc=qnQ4YEf1fJyvIxReqjl<~Q@c^ZpCx%$#$V&wX7;@KTBCt?H+Ki*+g0 zAK*b`2pAwqIOI!6xCTQKfN!&`^LHLAJ$>B&`hofWpI-!v3CL#<56Kxr6<{7vAtp-H z=lm$<&BXzm4;wZQX3l4vHO`z`DhLgNJ}VX@K=WEWxtx!6Wq!i!4trN+^_%wHtcM5N zujai%wGDg-jL6_`+8R;0^-G~Xr3KqzhCsmjEN*Jn=$e}U+7b4 za&LPjxHfAU1va$Um}yB(P|rYKqwQTuUKJ4bdY|&s77Il!7u?wWbiPj^reBgCY|peo z9+O*~-2aJ-bmryM_#z(W1wK^u^3L9~6#n~qCvUd5u9OixShjP-37LwwJzSA%eJ*tH zxu7aEQ+?@ZU^L9UCpNaG$E2NSIG7u;LMLK;g2*PFEBp^iZTW*mn_2xR7vR9%VUZPO z$7P+CdrvGlr}$h1A=V>Id!j`^@@?OWW-E>{|8pq73RFS}aMlaF8&q�epG{h;^Ix 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