aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiall Sheridan <nsheridan@gmail.com>2018-08-23 22:51:21 +0100
committerNiall Sheridan <nsheridan@gmail.com>2018-08-24 13:45:03 +0100
commitf8e3dea19012ccf05965d10255789eec33c2ebcf (patch)
tree8522ceada8bc7270648f29615b89550db910cb6c
parent91f9bc722152146466523861162b85195f99875b (diff)
Update deps
-rw-r--r--server/a_server-packr.go10
-rw-r--r--server/store/a_store-packr.go20
-rw-r--r--vendor/cloud.google.com/go/storage/acl.go136
-rw-r--r--vendor/cloud.google.com/go/storage/bucket.go184
-rw-r--r--vendor/cloud.google.com/go/storage/copy.go6
-rw-r--r--vendor/cloud.google.com/go/storage/doc.go17
-rw-r--r--vendor/cloud.google.com/go/storage/go110.go2
-rw-r--r--vendor/cloud.google.com/go/storage/go17.go4
-rw-r--r--vendor/cloud.google.com/go/storage/not_go110.go2
-rw-r--r--vendor/cloud.google.com/go/storage/not_go17.go7
-rw-r--r--vendor/cloud.google.com/go/storage/reader.go48
-rw-r--r--vendor/cloud.google.com/go/storage/storage.go53
-rw-r--r--vendor/cloud.google.com/go/storage/storage.replay48071
-rw-r--r--vendor/cloud.google.com/go/storage/writer.go3
-rw-r--r--vendor/contrib.go.opencensus.io/exporter/stackdriver/LICENSE202
-rw-r--r--vendor/contrib.go.opencensus.io/exporter/stackdriver/propagation/http.go94
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go9
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go6
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go (renamed from vendor/github.com/aws/aws-sdk-go/aws/csm/metricChan.go)0
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go7
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go21
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go8
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go22
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go169
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go2
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/session/doc.go2
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go38
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/version.go2
-rw-r--r--vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go23
-rw-r--r--vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go36
-rw-r--r--vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go2
-rw-r--r--vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go7
-rw-r--r--vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go14
-rw-r--r--vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go6
-rw-r--r--vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go72
-rw-r--r--vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go30
-rw-r--r--vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go10
-rw-r--r--vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go1
-rw-r--r--vendor/github.com/aws/aws-sdk-go/service/s3/api.go105
-rw-r--r--vendor/github.com/aws/aws-sdk-go/service/sts/api.go2
-rw-r--r--vendor/github.com/go-ini/ini/file.go37
-rw-r--r--vendor/github.com/go-ini/ini/ini.go10
-rw-r--r--vendor/github.com/go-ini/ini/parser.go48
-rw-r--r--vendor/github.com/go-ini/ini/section.go1
-rw-r--r--vendor/github.com/go-sql-driver/mysql/AUTHORS1
-rw-r--r--vendor/github.com/go-sql-driver/mysql/README.md2
-rw-r--r--vendor/github.com/go-sql-driver/mysql/appengine.go19
-rw-r--r--vendor/github.com/go-sql-driver/mysql/auth.go2
-rw-r--r--vendor/github.com/go-sql-driver/mysql/driver.go3
-rw-r--r--vendor/github.com/go-sql-driver/mysql/packets.go9
-rw-r--r--vendor/github.com/gobuffalo/packr/box.go49
-rw-r--r--vendor/github.com/gobuffalo/packr/builder/tmpl.go4
-rw-r--r--vendor/github.com/gobuffalo/packr/env.go24
-rw-r--r--vendor/github.com/gobuffalo/packr/go.mod10
-rw-r--r--vendor/github.com/gobuffalo/packr/go.sum22
-rw-r--r--vendor/github.com/gobuffalo/packr/packr.go19
-rw-r--r--vendor/github.com/gobuffalo/packr/walk.go63
-rw-r--r--vendor/github.com/gogo/protobuf/LICENSE35
-rw-r--r--vendor/github.com/gogo/protobuf/proto/Makefile43
-rw-r--r--vendor/github.com/gogo/protobuf/proto/clone.go258
-rw-r--r--vendor/github.com/gogo/protobuf/proto/custom_gogo.go39
-rw-r--r--vendor/github.com/gogo/protobuf/proto/decode.go428
-rw-r--r--vendor/github.com/gogo/protobuf/proto/discard.go350
-rw-r--r--vendor/github.com/gogo/protobuf/proto/duration.go100
-rw-r--r--vendor/github.com/gogo/protobuf/proto/duration_gogo.go49
-rw-r--r--vendor/github.com/gogo/protobuf/proto/encode.go218
-rw-r--r--vendor/github.com/gogo/protobuf/proto/encode_gogo.go33
-rw-r--r--vendor/github.com/gogo/protobuf/proto/equal.go300
-rw-r--r--vendor/github.com/gogo/protobuf/proto/extensions.go604
-rw-r--r--vendor/github.com/gogo/protobuf/proto/extensions_gogo.go368
-rw-r--r--vendor/github.com/gogo/protobuf/proto/lib.go929
-rw-r--r--vendor/github.com/gogo/protobuf/proto/lib_gogo.go50
-rw-r--r--vendor/github.com/gogo/protobuf/proto/message_set.go314
-rw-r--r--vendor/github.com/gogo/protobuf/proto/pointer_reflect.go357
-rw-r--r--vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go59
-rw-r--r--vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go308
-rw-r--r--vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go56
-rw-r--r--vendor/github.com/gogo/protobuf/proto/properties.go600
-rw-r--r--vendor/github.com/gogo/protobuf/proto/properties_gogo.go36
-rw-r--r--vendor/github.com/gogo/protobuf/proto/skip_gogo.go119
-rw-r--r--vendor/github.com/gogo/protobuf/proto/table_marshal.go2799
-rw-r--r--vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go388
-rw-r--r--vendor/github.com/gogo/protobuf/proto/table_merge.go657
-rw-r--r--vendor/github.com/gogo/protobuf/proto/table_unmarshal.go2048
-rw-r--r--vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go385
-rw-r--r--vendor/github.com/gogo/protobuf/proto/text.go928
-rw-r--r--vendor/github.com/gogo/protobuf/proto/text_gogo.go57
-rw-r--r--vendor/github.com/gogo/protobuf/proto/text_parser.go998
-rw-r--r--vendor/github.com/gogo/protobuf/proto/timestamp.go113
-rw-r--r--vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go49
-rw-r--r--vendor/github.com/golang/protobuf/proto/deprecated.go38
-rw-r--r--vendor/github.com/golang/protobuf/proto/extensions.go2
-rw-r--r--vendor/github.com/golang/protobuf/proto/lib.go20
-rw-r--r--vendor/github.com/golang/protobuf/proto/properties.go9
-rw-r--r--vendor/github.com/golang/protobuf/proto/table_marshal.go8
-rw-r--r--vendor/github.com/golang/protobuf/proto/table_unmarshal.go6
-rw-r--r--vendor/github.com/google/go-github/github/activity_events.go4
-rw-r--r--vendor/github.com/google/go-github/github/apps.go67
-rw-r--r--vendor/github.com/google/go-github/github/apps_marketplace.go12
-rw-r--r--vendor/github.com/google/go-github/github/checks.go428
-rw-r--r--vendor/github.com/google/go-github/github/event_types.go98
-rw-r--r--vendor/github.com/google/go-github/github/gists.go30
-rw-r--r--vendor/github.com/google/go-github/github/git_blobs.go6
-rw-r--r--vendor/github.com/google/go-github/github/git_commits.go7
-rw-r--r--vendor/github.com/google/go-github/github/git_refs.go15
-rw-r--r--vendor/github.com/google/go-github/github/git_tags.go7
-rw-r--r--vendor/github.com/google/go-github/github/git_trees.go6
-rw-r--r--vendor/github.com/google/go-github/github/github-accessors.go960
-rw-r--r--vendor/github.com/google/go-github/github/github.go29
-rw-r--r--vendor/github.com/google/go-github/github/issues.go33
-rw-r--r--vendor/github.com/google/go-github/github/issues_events.go21
-rw-r--r--vendor/github.com/google/go-github/github/issues_labels.go25
-rw-r--r--vendor/github.com/google/go-github/github/issues_milestones.go12
-rw-r--r--vendor/github.com/google/go-github/github/licenses.go6
-rw-r--r--vendor/github.com/google/go-github/github/messages.go2
-rw-r--r--vendor/github.com/google/go-github/github/migrations_user.go214
-rw-r--r--vendor/github.com/google/go-github/github/orgs.go17
-rw-r--r--vendor/github.com/google/go-github/github/orgs_members.go2
-rw-r--r--vendor/github.com/google/go-github/github/orgs_teams.go514
-rw-r--r--vendor/github.com/google/go-github/github/projects.go85
-rw-r--r--vendor/github.com/google/go-github/github/pulls.go13
-rw-r--r--vendor/github.com/google/go-github/github/pulls_comments.go28
-rw-r--r--vendor/github.com/google/go-github/github/reactions.go25
-rw-r--r--vendor/github.com/google/go-github/github/repos.go75
-rw-r--r--vendor/github.com/google/go-github/github/repos_commits.go2
-rw-r--r--vendor/github.com/google/go-github/github/repos_community_health.go10
-rw-r--r--vendor/github.com/google/go-github/github/repos_deployments.go19
-rw-r--r--vendor/github.com/google/go-github/github/repos_hooks.go16
-rw-r--r--vendor/github.com/google/go-github/github/repos_prereceive_hooks.go110
-rw-r--r--vendor/github.com/google/go-github/github/repos_projects.go7
-rw-r--r--vendor/github.com/google/go-github/github/repos_releases.go24
-rw-r--r--vendor/github.com/google/go-github/github/search.go10
-rw-r--r--vendor/github.com/google/go-github/github/teams.go350
-rw-r--r--vendor/github.com/google/go-github/github/teams_discussion_comments.go2
-rw-r--r--vendor/github.com/google/go-github/github/teams_discussions.go4
-rw-r--r--vendor/github.com/google/go-github/github/teams_members.go174
-rw-r--r--vendor/github.com/google/go-github/github/timestamp.go4
-rw-r--r--vendor/github.com/google/go-github/github/users.go51
-rw-r--r--vendor/github.com/google/go-github/github/with_appengine.go20
-rw-r--r--vendor/github.com/googleapis/gax-go/CODE_OF_CONDUCT.md43
-rw-r--r--vendor/github.com/gorilla/csrf/README.md49
-rw-r--r--vendor/github.com/gorilla/csrf/doc.go5
-rw-r--r--vendor/github.com/gorilla/handlers/cors.go2
-rw-r--r--vendor/github.com/gorilla/handlers/handlers.go225
-rw-r--r--vendor/github.com/gorilla/handlers/logging.go252
-rw-r--r--vendor/github.com/gorilla/mux/route.go2
-rw-r--r--vendor/github.com/hashicorp/errwrap/README.md2
-rw-r--r--vendor/github.com/hashicorp/go-multierror/format.go6
-rw-r--r--vendor/github.com/hashicorp/go-multierror/sort.go16
-rw-r--r--vendor/github.com/hashicorp/go-retryablehttp/client.go19
-rw-r--r--vendor/github.com/hashicorp/vault/api/auth_token.go57
-rw-r--r--vendor/github.com/hashicorp/vault/api/client.go53
-rw-r--r--vendor/github.com/hashicorp/vault/api/help.go6
-rw-r--r--vendor/github.com/hashicorp/vault/api/logical.go55
-rw-r--r--vendor/github.com/hashicorp/vault/api/secret.go14
-rw-r--r--vendor/github.com/hashicorp/vault/api/ssh.go13
-rw-r--r--vendor/github.com/hashicorp/vault/api/ssh_agent.go5
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_audit.go87
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_auth.go41
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_capabilities.go35
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_config_cors.go71
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_generate_root.go22
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_health.go7
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_init.go11
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_leader.go7
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_leases.go65
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_mounts.go64
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_plugins.go28
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_policy.go60
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_rekey.go125
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_rotate.go59
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_seal.go11
-rw-r--r--vendor/github.com/hashicorp/vault/api/sys_stepdown.go11
-rw-r--r--vendor/github.com/hashicorp/vault/helper/consts/consts.go14
-rw-r--r--vendor/github.com/hashicorp/vault/helper/consts/error.go16
-rw-r--r--vendor/github.com/hashicorp/vault/helper/consts/replication.go82
-rw-r--r--vendor/github.com/hashicorp/vault/helper/parseutil/parseutil.go2
-rw-r--r--vendor/github.com/hashicorp/vault/helper/strutil/strutil.go61
-rw-r--r--vendor/github.com/mattn/go-sqlite3/README.md2
-rw-r--r--vendor/github.com/mattn/go-sqlite3/sqlite3.go4
-rw-r--r--vendor/github.com/mattn/go-sqlite3/sqlite3_other.go3
-rw-r--r--vendor/github.com/mitchellh/go-homedir/homedir.go10
-rw-r--r--vendor/github.com/mitchellh/mapstructure/mapstructure.go3
-rw-r--r--vendor/github.com/pelletier/go-toml/PULL_REQUEST_TEMPLATE.md5
-rw-r--r--vendor/github.com/pelletier/go-toml/README.md3
-rw-r--r--vendor/github.com/pelletier/go-toml/appveyor.yml39
-rwxr-xr-xvendor/github.com/pelletier/go-toml/test.sh8
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/collector.go39
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/doc.go12
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/fnv.go13
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/go_collector.go13
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/http.go2
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/labels.go13
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/metric.go31
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/process_collector.go10
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go36
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go34
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/registry.go212
-rw-r--r--vendor/github.com/prometheus/client_golang/prometheus/summary.go14
-rw-r--r--vendor/github.com/prometheus/client_model/go/metrics.pb.go381
-rw-r--r--vendor/github.com/prometheus/common/expfmt/text_parse.go2
-rw-r--r--vendor/github.com/prometheus/procfs/mountstats.go51
-rw-r--r--vendor/github.com/prometheus/procfs/xfrm.go2
-rw-r--r--vendor/github.com/spf13/jwalterweatherman/README.md2
-rw-r--r--vendor/github.com/spf13/pflag/bytes.go104
-rw-r--r--vendor/github.com/spf13/pflag/string_to_int.go149
-rw-r--r--vendor/github.com/spf13/pflag/string_to_string.go160
-rw-r--r--vendor/github.com/spf13/viper/README.md24
-rw-r--r--vendor/github.com/spf13/viper/viper.go41
-rw-r--r--vendor/github.com/xanzy/go-gitlab/README.md7
-rw-r--r--vendor/github.com/xanzy/go-gitlab/award_emojis.go62
-rw-r--r--vendor/github.com/xanzy/go-gitlab/commits.go80
-rw-r--r--vendor/github.com/xanzy/go-gitlab/deployments.go4
-rw-r--r--vendor/github.com/xanzy/go-gitlab/events.go8
-rw-r--r--vendor/github.com/xanzy/go-gitlab/gitlab.go50
-rw-r--r--vendor/github.com/xanzy/go-gitlab/group_boards.go262
-rw-r--r--vendor/github.com/xanzy/go-gitlab/group_variables.go171
-rw-r--r--vendor/github.com/xanzy/go-gitlab/issues.go2
-rw-r--r--vendor/github.com/xanzy/go-gitlab/keys.go70
-rw-r--r--vendor/github.com/xanzy/go-gitlab/merge_requests.go17
-rw-r--r--vendor/github.com/xanzy/go-gitlab/pipelines.go2
-rw-r--r--vendor/github.com/xanzy/go-gitlab/project_variables.go196
-rw-r--r--vendor/github.com/xanzy/go-gitlab/repositories.go5
-rw-r--r--vendor/github.com/xanzy/go-gitlab/services.go142
-rw-r--r--vendor/github.com/xanzy/go-gitlab/tags.go14
-rw-r--r--vendor/go.opencensus.io/CONTRIBUTING.md34
-rw-r--r--vendor/go.opencensus.io/Gopkg.lock185
-rw-r--r--vendor/go.opencensus.io/Gopkg.toml12
-rw-r--r--vendor/go.opencensus.io/README.md99
-rw-r--r--vendor/go.opencensus.io/go.mod20
-rw-r--r--vendor/go.opencensus.io/opencensus.go2
-rw-r--r--vendor/go.opencensus.io/plugin/ochttp/client.go27
-rw-r--r--vendor/go.opencensus.io/plugin/ochttp/server.go291
-rw-r--r--vendor/go.opencensus.io/plugin/ochttp/span_annotator.go160
-rw-r--r--vendor/go.opencensus.io/plugin/ochttp/stats.go10
-rw-r--r--vendor/go.opencensus.io/plugin/ochttp/trace.go39
-rw-r--r--vendor/go.opencensus.io/stats/measure.go28
-rw-r--r--vendor/go.opencensus.io/stats/measure_float64.go8
-rw-r--r--vendor/go.opencensus.io/stats/measure_int64.go8
-rw-r--r--vendor/go.opencensus.io/stats/view/collector.go5
-rw-r--r--vendor/go.opencensus.io/stats/view/export.go3
-rw-r--r--vendor/go.opencensus.io/stats/view/view.go6
-rw-r--r--vendor/go.opencensus.io/stats/view/worker.go62
-rw-r--r--vendor/go.opencensus.io/stats/view/worker_commands.go9
-rw-r--r--vendor/go.opencensus.io/tag/map_codec.go31
-rw-r--r--vendor/go.opencensus.io/trace/config.go9
-rw-r--r--vendor/go.opencensus.io/trace/doc.go2
-rw-r--r--vendor/go.opencensus.io/trace/export.go34
-rw-r--r--vendor/go.opencensus.io/trace/trace.go93
-rw-r--r--vendor/golang.org/x/crypto/internal/chacha20/chacha_generic.go112
-rw-r--r--vendor/golang.org/x/crypto/internal/chacha20/chacha_s390x.s (renamed from vendor/golang.org/x/crypto/internal/chacha20/asm_s390x.s)0
-rw-r--r--vendor/golang.org/x/crypto/internal/subtle/aliasing_appengine.go35
-rw-r--r--vendor/golang.org/x/crypto/ssh/keys.go5
-rw-r--r--vendor/golang.org/x/net/http2/client_conn_pool.go28
-rw-r--r--vendor/golang.org/x/net/http2/configure_transport.go8
-rw-r--r--vendor/golang.org/x/net/http2/flow.go10
-rw-r--r--vendor/golang.org/x/net/http2/frame.go63
-rw-r--r--vendor/golang.org/x/net/http2/go111.go26
-rw-r--r--vendor/golang.org/x/net/http2/go17.go15
-rw-r--r--vendor/golang.org/x/net/http2/headermap.go20
-rw-r--r--vendor/golang.org/x/net/http2/hpack/huffman.go20
-rw-r--r--vendor/golang.org/x/net/http2/http2.go17
-rw-r--r--vendor/golang.org/x/net/http2/not_go111.go17
-rw-r--r--vendor/golang.org/x/net/http2/not_go17.go8
-rw-r--r--vendor/golang.org/x/net/http2/server.go43
-rw-r--r--vendor/golang.org/x/net/http2/transport.go207
-rw-r--r--vendor/golang.org/x/oauth2/internal/client_appengine.go13
-rw-r--r--vendor/golang.org/x/oauth2/internal/token.go2
-rw-r--r--vendor/golang.org/x/sys/unix/aliases.go14
-rw-r--r--vendor/golang.org/x/sys/unix/fcntl.go6
-rw-r--r--vendor/golang.org/x/sys/unix/ioctl.go30
-rwxr-xr-xvendor/golang.org/x/sys/unix/mkerrors.sh13
-rwxr-xr-xvendor/golang.org/x/sys/unix/mksysnum_freebsd.pl2
-rw-r--r--vendor/golang.org/x/sys/unix/openbsd_pledge.go75
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_bsd.go8
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_darwin.go36
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_dragonfly.go6
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_freebsd.go249
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux.go154
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go7
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_netbsd.go16
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_openbsd.go4
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_solaris.go18
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_unix.go4
-rw-r--r--vendor/golang.org/x/sys/unix/xattr_bsd.go231
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go32
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go29
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go29
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go29
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_386.go22
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go22
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_arm.go22
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go22
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mips.go21
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go21
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go21
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go21
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go21
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go21
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go22
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go28
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go29
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go28
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go35
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go57
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go57
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go57
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go57
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go6
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go6
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go6
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_386.go95
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go95
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go95
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go95
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go107
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go95
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go95
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go107
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go119
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go119
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go95
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go214
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go214
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go214
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go736
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go736
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go736
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_386.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go1
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go1
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go1
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go17
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go17
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go17
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go17
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_386.go38
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go40
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_arm.go39
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go40
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mips.go39
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go40
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go40
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go39
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go40
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go40
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go40
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go17
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go17
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go17
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go17
-rw-r--r--vendor/golang.org/x/text/unicode/bidi/bidi.go2
-rw-r--r--vendor/golang.org/x/text/unicode/bidi/bracket.go2
-rw-r--r--vendor/golang.org/x/text/unicode/bidi/core.go2
-rw-r--r--vendor/golang.org/x/text/unicode/norm/composition.go8
-rw-r--r--vendor/golang.org/x/text/unicode/norm/forminfo.go19
-rw-r--r--vendor/golang.org/x/text/unicode/norm/normalize.go4
-rw-r--r--vendor/golang.org/x/text/unicode/norm/tables10.0.0.go1890
-rw-r--r--vendor/golang.org/x/text/unicode/norm/tables9.0.0.go1890
-rw-r--r--vendor/google.golang.org/api/option/option.go3
-rw-r--r--vendor/google.golang.org/api/storage/v1/storage-gen.go2
-rw-r--r--vendor/google.golang.org/api/transport/http/dial_appengine.go30
-rw-r--r--vendor/google.golang.org/api/transport/http/go18.go2
-rw-r--r--vendor/google.golang.org/appengine/CONTRIBUTING.md90
-rw-r--r--vendor/google.golang.org/appengine/LICENSE202
-rw-r--r--vendor/google.golang.org/appengine/README.md73
-rw-r--r--vendor/google.golang.org/appengine/appengine.go113
-rw-r--r--vendor/google.golang.org/appengine/appengine_vm.go20
-rw-r--r--vendor/google.golang.org/appengine/errors.go46
-rw-r--r--vendor/google.golang.org/appengine/go.mod7
-rw-r--r--vendor/google.golang.org/appengine/go.sum8
-rw-r--r--vendor/google.golang.org/appengine/identity.go142
-rw-r--r--vendor/google.golang.org/appengine/internal/api.go660
-rw-r--r--vendor/google.golang.org/appengine/internal/api_common.go123
-rw-r--r--vendor/google.golang.org/appengine/internal/api_pre17.go682
-rw-r--r--vendor/google.golang.org/appengine/internal/app_id.go28
-rw-r--r--vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.pb.go611
-rw-r--r--vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.proto64
-rw-r--r--vendor/google.golang.org/appengine/internal/base/api_base.pb.go308
-rw-r--r--vendor/google.golang.org/appengine/internal/base/api_base.proto33
-rw-r--r--vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go4367
-rwxr-xr-xvendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto551
-rw-r--r--vendor/google.golang.org/appengine/internal/identity.go14
-rw-r--r--vendor/google.golang.org/appengine/internal/identity_vm.go101
-rw-r--r--vendor/google.golang.org/appengine/internal/internal.go110
-rw-r--r--vendor/google.golang.org/appengine/internal/log/log_service.pb.go1313
-rw-r--r--vendor/google.golang.org/appengine/internal/log/log_service.proto150
-rw-r--r--vendor/google.golang.org/appengine/internal/main_vm.go48
-rw-r--r--vendor/google.golang.org/appengine/internal/metadata.go61
-rw-r--r--vendor/google.golang.org/appengine/internal/modules/modules_service.pb.go786
-rw-r--r--vendor/google.golang.org/appengine/internal/modules/modules_service.proto80
-rw-r--r--vendor/google.golang.org/appengine/internal/net.go56
-rwxr-xr-xvendor/google.golang.org/appengine/internal/regen.sh40
-rw-r--r--vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go361
-rw-r--r--vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto44
-rw-r--r--vendor/google.golang.org/appengine/internal/transaction.go115
-rw-r--r--vendor/google.golang.org/appengine/namespace.go25
-rw-r--r--vendor/google.golang.org/appengine/timeout.go20
-rw-r--r--vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go4
-rw-r--r--vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go110
-rw-r--r--vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go12
-rw-r--r--vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go14
-rw-r--r--vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go6
-rw-r--r--vendor/vendor.json866
415 files changed, 89539 insertions, 6465 deletions
diff --git a/server/a_server-packr.go b/server/a_server-packr.go
index e1edb6c..98e70af 100644
--- a/server/a_server-packr.go
+++ b/server/a_server-packr.go
@@ -1,4 +1,4 @@
-// Code generated by github.com/gobuffalo/packr. DO NOT EDIT
+// Code generated by github.com/gobuffalo/packr. DO NOT EDIT.
package server
@@ -7,8 +7,8 @@ import "github.com/gobuffalo/packr"
// You can use the "packr clean" command to clean up this,
// and any other packr generated files.
func init() {
- packr.PackJSONBytes("static", "css/normalize.css", "\"H4sIAAAAAAAA/7RZaY/cNtL+rl9RcRDYnlfd0z2Ok7yazQcjxybI4UXsxS5gDCBKLHVzhyIFkurp9mb/+6J46OjRTBxgnXyYtkRWFet46inq8uITUNq0TIr3uK6thcOL9WZ9Bb/DLz++hZ9Fjcoi/A474dZCXw5r4eIyyy4vLjK4gO0a3qADjg3rpYNGKwcNa4U8gdNgmbIri0Y0a1p8tYa/GTygciBevwGHRweWBDL+r946YI1DA9oIVI45oRXUe6Z2mMOdcHvdO+DCskoKtSNxANBbNPBe65bkX2bZ3rUS/p2BN2QVDCkmZlzD5QVsaSnAqrUrMmFFJqyCCQVsN5vP/KqruOoOq1vh/nDlfwaX/IatPuDgkpaZnVDRvkrzk7cvPC1gcx12wg9vf/n5JZ2vk+xEm4US5AKbAcDX/7P/prH7RhuDtYOykrq+LQflSrtgAHJotAGmTtE8lNj66Cn48Tv46vL/139GTsnRMSFtCfQP27ctM6cyCttuLrdbksYUh++FwUYf/5z0lgk1SNtGhzPjRC0xz5gVHPMsmpBnjdjVrCMP+9+9wTxrtHZo8myPjPu/O6P7Ls9Icp61qPo8U+yQZxbrsDMewoc0GlaAN/R6khHb9XgKoaRQuHrkMHPnXq3h16HwDkjHYRKYFDvlQ6EbKDujdwat9af/Zm90i3nyYe4d+rpDw5JLei50ntVMHZjNs7Q5zw6Co54fZWrttHaSIStvSAEVs0grl+ohlXyrORoFldF3Fo2Fxug2aRJqB6U3rBxqvdbKGS3telJUeKzRWtij2O19GhKOvASOB1GjnR6wUNo9e5dk3Dyfn0tphdcZREFjGXqDX3FODoHy3V5wjuqmBOtOhDo+Tp1BOyuCy+3G2/iD4Ahuj1A6bDvJHJb3K+Zyu83hDWuYEfk01+EvcHUVD5D05lkStGR9wI2fhbr9iBgR/U6n2hl2gorVt1QVikOtpTYhiqx24oAgyZahnlM0vO3jvpXfV4AzTNmOGVRu6vwf286QRoOMs0pI4U5wt0cFja57i9z7jEmrodW9RdjrA5pQNUzKIbuS8iKYlmes8Cu9Mbp3lKwT9H1L6C7xgBIstkw5UX9Ep6YE+6OsupcrobbT2arKvHPCSbwJLtaGo1lV2jndFrDtjsC1c8iXcptUI1h01KbLSkuOxsNHSsfP/+8R1VWeWWe02o299i5WEol6SOHCWYOK+xp4o0bZ3tgChGNS1EvCD8wIVkmEcr8t4x7PKxSPndajilBQRugu/bsytoeShBFW4NHZD/bCfjsxUbzHAq6wvZ429/UXX2K7DC6Pxj4qaJm5PaueAj5tmg0piWX06WazKF+oWisrrCPBZPrgI8/RvHuWa8a29PDsZF9tPrtewPTS9lV0pe27EljTkH8JzX3jCPhaPqSpp0Tqu3NlX778jE44keBLFaDT1pOiAgxKRoV9/VgzIoOTeKe7Alab9UsKkX9exaoJ5bLarK/Su8sL+K6tkHPkISuU++gIG6o3QJ1QRFagZIv9IwGraHeTuj/rYYlvEOY1Ut/5PAttJcqKAJNCcdj5jlkYrV1olmlrEfcl1/yVSBGF+KO7JuVyLOHFUvHJF0o0HiWwuRnL3mILn2+641KhcNE0aFDVaKFCd4c4lj/J1m6P5jxz96GRrFr9flXpI+WtULsiuYSeXfvQPPhqkXl8o5VjQo1RW66bLh5vjBDrnV46nOYcSmzLVa+Em1S+QcXRUBCXNdSayPJtxYkfYp5Z1nb356pWK207VmM+/ryel/J2LKnvtWk/YlP9Sek7BVK0IsyOBVSnNITlEbgnyQJawes38E86vb4jDDmFzchJWoJnotcWJdauzKFXkpzKqGEa3zA7ozs07gTCUjON3rtP+wNXogSuMHh9j4Z0reMgG6wX1vZYRBS1cZdu4tiLPMGBTaNBku8jG40RaB/U9GJ9VlTe7KEGnDx9OAfonaMRSKiud3mmOxenpeAu4q5HxwwG/he7VbRmOkqQ6fMXcfIeR2R6+GI+VAwcPdVAOZCZgFblOZOamX1WPgdhRSXxD/to6W8BPHNttGnLZDZTNYYhNIhPLTEkjvf8KykjlNDONNwMAQWufdCiwPuaDkz2YcKZTMRRWSBzU1vGIOZndHI2DY6ioqmPijoLfNgSmuvM2NmAkirh1UEL7ueIf2D1k3BQ9R58Xilu6M3n6836gtqfQXh29Rw4EsM8WVC+z6fpMJaLd6+fV8v5nDipCaHS/OB0PFctRX0biKJP2xLcqUMbB8lUIWkE6W0SwPy4E9OgPlFJ1r2x2kS5qW+Ilu1wRTKjnUnN0EjsmRP9hZVf9I62ff0kvHhykw8lMn1L3c89uclnD21ftcI9CVNAuq9iXYfMUAQLCDKntRWsL6DTQjk0SxX2G67s5GYvnpeSfBGNhjO9S69vZqcbngY4iPqj9Ov712dCKTTQMc4Jxch/kSHN8GmmuSh8P/aD4srvj366/+KcOEHS9MBVwKiRYGaB4Go1xLq3/vUnou20cUx5+kvCKPn//iqkjN3j0C78Pm/RjPGG+9bZbOyeWjBY67al/k3lxBycdA9cq6cOmHPYdm7Md7dHi/OmEU/y1IJou/AiXLVyjZaEGLQdlc/IXfLknBy0gTvB3Z5EpcKOLqr0EcL6AYknlKe8f11ytT671UnBXuK6k3Sv91jfVvp4XgaGcaGfpFl4JF7DXHyctp1JvBfurL4XRx+uWZVT7ocW+NT3BeO9d8kx/op1ZtdEdaBGQ1yOpJUDIUo4Tgjib4pCzuQgHNSst2jvqw1LSc65JnJyuCEP1zBlLKfSe59AuVzwn+rbCs2Tm6JIWOFLYmU7oVazrv7gBt27+Qbv9JS452R0kiTlCEtjw7bITL1vBEpePngnQOkySBnDW07uMFKYl4VERH4mVC17mq4IE7ynmt71Bled0bp5vuCwYN8j+Eqe9ubPPy88PhskQQ8tmaD1g1I+ADWD8VCTpTLlzZJ/EiH2zo5vn1W987QkLHlODbSLKToT6MdWehzVBUjbM0vCkjnPfNcenFXC6MPH3D6mXXiyCqoXU/XBPRxrbQLQPRTFc9Lyrb+Phwn9CymWR2YauFQ83DB7ouSUkdP+su2OYLUUHD6tN/T/7I4IrrrjvAGtX7zEFjbrL67C3y/He4l7nxM8ry6X+P4S/51gbgqK1dCh7iQCM0j4X7N+t3egewfCI88J3qPR/kE6Xur4Eneo+Fkz/WCQPftQNnzcsLXRUlbMPEDhZ4PFwzPwt74nJkLt0XZyU1nCM9Z1UiCnOZGB6ckFlT6EXIRfX7/9rvC7BgbEFLnZsgblCSqM0MvHjy4L42U0OU1Hj96XwltiSB//Mr/V1gEN6xT/RF2dp8U1SpmCG55MbpZrLSXrLBIIhV/X48soL/Enx/PM7f3uGbP6bwAAAP//rsjNo3UeAAA=\"")
- packr.PackJSONBytes("static", "css/skeleton.css", "\"H4sIAAAAAAAA/8w6727kNu7f/RREigXage35P5udoMWv3d20P6Db3jV7dx8O/SDb9FiIbLmSnMl0EeDe4d7wnuQg2fK/kWdzn7KTADMmRYoiKVKkNZ95M7i7R4aKF/D3VbgIN94M3vLyJOghU7BaLDc+vCMPCD+SnMQZejM4Ho/hAZVs6MKY594MbgUiKA6VRKiKBAWoDOHD/38ERmMsJIbeDDKlyv18rjnwEgvJKxFjyMVh3gyS85yqwFKUWenNYLmar97MtSjebO553nwGH0nEEHgKMS8UFkp6//nXv7/Afy+AHwVNvAB+IBLhTp0YSi+Aj6eSHwQps5MXwM+0uNfAHyqleKF/3XKRS4ORSn+/5QlqKr1q/XxXkpgWBy+AvynKqKIG+pYhETX4AyaUwF8rFBpltWZEeXGdOP9hNvdCbUxCCxTwyQMouaSK8mIPAhlR9AFvPIAjTVS2h+Vi8Uo/5uQxaEBvdovysYaJAy32sABSKa4hJUkSWhw0aNUMivhjIOmfBhpxkaAIIv54A09aDFblhW9/SCPNaN6UcaL2wDBVl7lpvd9yAQk+0BglMCIOZm+QAjaLRfmoV/5/ubHX1zkt7GoM7hsz9UgvrSzXWyNKf3l6xstzbrfTcxrcZ+ZcvNJzmAG1ltqfshlZqz/QqtnDZjh8n1IhVRBnlCV90j7cxcYsTI/nBfZn7h4lOD6frNibcNd+XluR1JE/i3i5DtftpyXOBF6YuyVerV7d9BGGOOWVuDB1S7xehOdip/Th0qI74jcOsSV9fJ7Crh1iS3zA4hlr3u4cYqNOKM8g3m0dYhf0oqFb4tebcNEXvDbVJaF7xNcrl9js4qJb4jdLl5MckV0w1qdBVJn2+EBlVCQNmykeTl9RR14TSyf1BaXbqTPCUvfMI2cxJPMZ/JqmEpXUIUazME9BdArGO9eBkH3eA21cu/Zvx6Lbyf4UYpr38rXDcj0WvY0+5u6KASPuq51jI3UsepHAn8TIKdHXG4fNeyy6SDFm7oohI+YbV9jrWHSRxJ9CTOt864qKPRa9PTfm7tqOI+4711boWPQjkT+NmuTuiqsdi16o8icxk0p/fe0IYD2Pm1KLM8aNN5ErLPfWzqa17oyCI/Zv3DGkv88Hgew8DAzQ8n/397Nodx4Nhnj5HOuei9mLiY5F9LBy0vefPH1O0we1fmHw4sfwybP5fAa//PrxvZepnAGVIFHpYm+3CrevQHJ9tlRAGDNF32/vP0CORFYCc12cgcoErw4Zr1RbbXpEIEREYgK8gKU+lNYH6BDuuEbQmDB2gmW4FZjDt7Dclo+w/0YLY4TQp8SUF0qfu3FfS6L1GvHkNEYuwy3mNzo7xZUQWCh2AswlxERXq3EmeI4QVQfIqaSFQlEKVLQ4gNCjeAGGKTKznDqzMapNbeKF5r+7sTMeG9hmsWhhKckpO+3h6s4UvHBHCgl/EfzKh6uf9BFB0Zj8ghUOANBAWoAP3wtKmA+SFDKQKGiqp4g542IPX61WK+NYpkDuCswX959Jp8qWPmQrH7K1D9nGh2zrQ7Yzxmt2jOKlPgp1gIgrxfM9rATmZypfL8ypKVvCp771N+FCjx6bbHUDwFApFIGs6+k9BOFSD33ystWQxzrcOXlsb6Z4aEHWYyZOQdbTgmgmmyGTVbhxMnFKsri2XLZDLsvw2sVl6xRlsbVcdmMuWxeXnYPLwhbDP/eK0TIjEUP1+XJ0bNJto0mdAMam2oSrDndmgV2H27itY3Bbt9INbkIJpvIuHd5r92Td53nxnTe5HYmR3UaT5fvv37/7QQtP9hl/aBoBFru4/X7x9n27NNu6evF1TC4ujIyIvme/aVFW6p/qVOK3V7KKcqqufh9CBUo8A9bkV78bbSRUloyc9kALswUixuN7HZbsXlhf192mXgNq3TSgrCa3261+VPioAsLoodhDjDoH3Yxy2LKmG0S8XZ1kBvvPzjnegXVEsVMpQQqZcpHvoSpLFDGR2CITjLkgdfOt4EXdeMuoQsMNNfAoSGk6XyS+PwheFUnQrMhwLolOs3VrzLTDBEloJfewse03Dd3DUud9zmgCX0VRZPRSCanZlJxaLVzo1dXmqB3U2tY+uSzswjV2dqGstS3OzpfyuJLtfM2Tcz4Hzs7nQLXzGdxgx63X6546LfT6+lpDeaW0DzTRppGy+QpKQXMiTlbcM7BL7ouDmgVcHGNXMho0WNLt7a3bhb5ar9+ubxeO9TaIyUUOPWEC+YwFX/CTZ4ycWPzIi8bYgVNNIJ8j+rTLPWPklOjnDjltvSZ1nFuvyym2R51/yTmjrxfMCWXjZFBUeYRiDJVIRJyNoTqwnsPOWFbiDFQSKY9cJBquuRCBxPckMoxVfTqayja78tGUVqb0+ZihATygUE1xVScaaYK+LnNub32gh4ILTCA6wT8wuqdNveMwc5qmE6H83VL/XYr+j4HMSMKPXX6ZDvLzGfyGOX9ACeR4fyQigQRTUjEF0tTNWnSpSzijNQkpF0B/vfvCTWhMFxyNjgNSlkgEKerkWmsEAIKc/zmFM58zHDwNJ9Dnaesfu+3AP+rz6W4IswWWBsOTS3+uqGG16AxTjS5duFqjbszEVEa7LkSnY4u1irDP9ZbphTKH63aZZ5hTGYmQ+R7DAxbJ8PDXnvpGNWpdF7iObPDkpRRZIrHewL0XeN2eaaqgxdgMcYbxfcQfz46rJKHcfTBtFwDfQWh+BG2bZPIMO2hauddScJET1itw5Bf7Jl4Hg6ruGjEqVWAixx5iKmKmA4ekiVETPx+TYExzwgaDfGiY2X1j39q4qr+KQcV8/cWZr2dovhoW9n110+pa2B/rvsrrIuBN/fqV0X6Zaf3NdgyMLcyVgRfX+qQpYp7g0PVN1d75WfcSP1y59fCcmkQfU5b6byJRvV/qv4lEBU9eKRC+g1bY8y3fiq+Vb1sBY8lKgV1jrr7D8eJGmLSMynxPJUPb6GPD6zpP9OvU7vZDk64bPzzTr05K2fDdv0rO3vmPt1JNxciAqHsc0Ig6IHXNFntF5sV1Oqlo24hoTtqXdrQJ8+eHP3+YRcbEbV+qFOh7xmX/qLhC30uYJj1UGq60Q/peqeOTjkq+l3KRuxiuWoZGw93VoxdX56SOwypIK8bqXOq6x3OhtVAFOXkck/fuGz2LRanJ67t0n7prQwbQH6Fdvj/A7Cyr6A9Uxl+wjjNx1vNcD4J460DrNjyOjzgdyNA7I0id1uwdtxdf+qQ+TPRBlraywo+cJwVKObzktiepMt0AwY/t7yqI06bKNhcb93B1ddPPPGa7mj6Z5q49TmWdpwyu/b24NiZVNJ95v3CFe1OTRigVHMkJFAepRBWrSqB5j1hJc8ezfjPwR70qoFIPjAUSVY9qEF6BpL5zKpDhAymUyduhuQmHjyQvGfpAUzjxCo6kUJgYRhkpDjWjppjU1WPU9LN1YZkTxuxVOh9KIpt5cx5RVk9/qo8IVQm0MLiGHiTGivICSJHU7IEqT2UoMGxvZfZfiDQ8L18JnH6P8jVhktedUzhmWMBB0AQijHmui+dY0Qf85jNvW865q0svaV5PkiUo7xUvJ+iWi8nVvGsIf3o3Rbtqaf8bAAD//7viGWrCLAAA\"")
- packr.PackJSONBytes("static", "js/list.min.js", "\"H4sIAAAAAAAA/6x7bZPbNpLwX5H4uLRABHGkxMnuksaovI5TT65i++rsvS8UvQUCIMUxRcokNGOfxP3tV3gjQYrjnezlywzx1mh0N/oNrXl6KqnIq3JGQIIoYvDc9XCQoT085ymY0yiL9Veivu5JPcuxZ6d6GIuvR16ls5p/PuU1XyzMRyjX7BeLHNZcnOpyloMMzddQ9qe2LzV9EuodLvnD7HVdVzXwXpGyrMQszUs2O1TsVPDZn7xltvT+5MFQ7OvqYXbn04px7L159/Pff3v9j7fvPvzjl3d/f/uzh+5aCe8TlrjjM/9yrGrRBOe2DeUZonXsU1IU4JNvhpA9DSD6gBSriZs4InFoUOWAbmlAYIs+oX4lQZp2rZklt7SDbVrVQIJLn0IvlOF1mL1gfsHLTOzDbLmEHDBJ9A6FFpw3QdRjKzeH546TQHHROzV81og6p8JThOWY+qyipwMvBUoxAZ5/09T05iTyornJuFglX1e0IE3jQZSNx/kXwUvmQbQfj+Ql419WVepBlF+tuuelkPDuxiOiWknkysyD6NN4sCTiVJNi1VS18CAqxuMKSy7hHqbOQYSo8+QkuAdRObExqWvy1YOowh3JJPuOmuufUY3FPm9Q0y/NBT94ENQQib6TMLYizdeSqpHwMz43gtQi6IDCc+0XeSNeSXSxJz89VPsNJzXdm07dUN1VbWeqc6PaP5KM4w1/jmo/xxv5V/BDg6MY1f593uRJwX/tew5E0H1eZk6Xhs4ZnsvVaV4IXtuWQaMqToeywQzV/p6UrOB1g8+nIyOCsyCKW4lGccryssFn2bgnxYm/JQdutlBUxeeMi799VegHKdLCEmRIyca7NNgjLQlBjkT1XvE9uEOGze+rWgSfkGFqUKCMi5eWhcEBieqlZFhQtnY7X28AakQhMjSuSkHyktfYM3LVXbFky/2Mi9cFl6L/t6+/MpDAIBkvXCyA7sEpGA0hh49SUSnW1A3vZUE1tYTUvuCHY0EEr/vxrsvO0dTvJxg5MKOaU/2obndrq9oRQ31JlGzu86ZjIjBtJTJALtNMtf2GqQDCFtk1ruharUVmeTnrZQPWEYkXi9pXikc2YIvUHkO5VwQxdIToOMeYyVWEMXCELTK7T26I1yF50UmdVYRkudT3M8HdmNLLUeKX5MBjnKDEz8tcgBpVsG1bfc6a/yqFEA+w+yPv0eCkZlNR/cf7d2/x5OmiGCV4jSg2aNgD0tskTJZLSPzjqdkDMxolsb5yklPWAhCzDWEMu2ZAWej1HGNigKqOxJrZ+ypnM6Emhtq+RTHieL4JSbSOsWIRIFjyNOyN1loag84c3aZhajmxx+WpKEI+OsmtVlzb+TqYb9Be2fMGkCiNEUMcWjWmj7mHiNovaz0dUaWWjc2+ehid1czWUo6JEWupMhNX2utOEA7VPcdjs2kPyvAacbxG6Zgv6S0P+XIJLUN4z5CIxBgnSnF0F9zsA/rpWklpmM2xyCkHHG0gSlcrxFcrxJbLjrMO3szgnXExOrhFWfFP4z3Cmd+ykFk2dSeKWBymV8gb8qe982JJnv8PH1wbi6K7lZlLC07qyck9YdQcAAdmzCyvymne9nonIrHGM+k5WqXpaJmmymAVYngPqBR5A5Pdrjby1IYVTLLCQhR1nmXcOQjpqZ0M4VpSJ6tVCAcjURJLf8AeoRO/hgt81rpjWu8ZwqCkv28KOpFKwFE6DmitmP4dcNWpHMIyeGr5c1n5KLQnKs8rCQh7AV6HyS0NqVR7EY271QBKYzGAZTZdbm4lKnLY3dyMvjCqByhoUmcoeRvMVFIkx+EYXWcIBiN8tuDxyUjN3eeMA7tQN/pbbQQLeMaz8pTMffaVxwhgG06EBoyneckXC/3fJwdmv8H1RataiBIbcuAKUf836cpULXjIS1Y9wBadr/zW4Hs0dDCCH5Dr8QbP0cC/CX5EQ3cl+Am5XkjwZ3Tl7wR/QZO+e/BXNBUqBJs1mgo8gs0GfcPRDzbfXw938Uyw+QFNxyzB5jl6PPQINj+i6eAh2Px0NWL8zmDz5zZG318HaD17xoFmgt3YDXGrtzsltUY/rmHIMb9clMnmPq1KSgQgyqNKobSixvqutw0XH/IDr07CFZTEwG7RBgaAOIYGcAhbK6tJ26JzG6MfnnoA65N0KtCoqvdStPF0tzrG1dCr6nAsuODXi+yIWtcHbcq9If3lcnbwICIqaCJa8xpAACLlBa0xxgkkA63Ki4af3a61o6iIUX/a3NJHDC2VJjYBKdymLpzAbW3atiNZx4OrQ9gTq3O4+qs1/Hn+O/kzCHWZRpirQDdUev8f2i+QQZ5qWwNhWg6d9FHH8PIUdJSlkG25dTQSxGDQt6CmM/d5ccDUACOOkci4AFza625NCttWI2lwdPce7tz5utweqOMhk4FMAruBiMU4kfyic4zn68XCRaJRSPDe9Z50Q+F5sEaaG25nSgvw2ExlHbqZ1qxMuE+9NEr0bBSyWHDNHvVhJlwu7uT5aHY3af4vQI5mOHAMtkYWJ5BVLJWAeHGQUREvxduKcRWN5I3Q8UCLUiMxVpB/fJIgd86dintNPiaBiD3iqxGf7vOCSQQa5DjKyfjm9qITsdhnRJDOJZY9nQ2nLRoED6zfTYcNZBwwJG6cI4MgChgiEY+lNA08V6oPxzAZKXzAZPBA/pVqTxUMrdiTXqkkvVJR9rvXKY6671XtYA5+bGCogq13yEBiQn2KEydHFMqQnPEvL6W/sdV4Blyj22qXxHgabYx++l02EylzhlJ8VgpeujvB4L5p7X8df3CseS69Z/HuKOc7iQgCz9/3AfRiQaJNnJeNICWVTplKRW0plt3BYOKEBycnbbme+4M7F2gASI59H0OFicnEuWfQobwbbi0WvZJVYLomGSb0tqlv8mbAQIjWTiYhGE3XKLxXXSY/5149eZ905s2m70ACfVH9Vj3w+hVplLThxK/5sSCUg5toFe3icwvgd8utj3a7j88u/y++yZC32z1bePLaJm2X2Lt2h6K4N71SbROY6GtEoeunZPhcjNjea4A1oiPidSmWTHV3hElsDmuACeljJBco640/M+DyFGSWtKSjMaISsJt7AR3INWyRnhc4nh/vVCn196R591D+Z10deS2+Ag4XCzDBBSrVyYgRnqezbYlhMWDwdrWBVv+q2zK8KdpDMrOlvnHyXW2L9gM13JmmTrk0Rmy025X63X0EsjWSK6m0Vae5eYDUmXqTaEy/kUh1EIwx22YaIFBea4/ZGvGtVpBBpnQPgBL1KZfKivpjLlV47cM6Z8LT3WMfdrjJ9aKBArWM1FGPn+SllA7d16fSARnloYn7eACR94l/PR09dG0lE1+QOuPickn8pqYm940YVjSlWkgH5j1kl8semBHYwj8Kxbw8noR39bYmZdmiSBwUQ4VgYhHcA8+TyOyNs/Dnp5oIorLkv5gePGxeLmPv1eaGfMYbij3518OY+VXNeG0ymfbwzrMFSPp0GuvNXozoI/0MtqE+/pkXTaC1N1KWaUqLUaVwEp8XTa90TL7EYGPiaaAmRTSGNgHpkYZ6PRsfn6cOC1uUcfFOHjeYcLp6vncvMyBBnnSXVopGnlXMaluM6eViqageTMdYQKnh7N5btejRSUTPUXMD1VLI/lq+52WTi/yeB8OIwDpT30A6Lxu72IOhl5Ki4VrdUN8Zw/NNMOowfsOQUleJ5AHPRlGiZgGLQxW9TiCZGiT1005/YaUMaSDZ9OnSEUsMM7KeGdk2k+DUBBkADCmeQpVPMOPwiiOj8Vb6cHQU5XRKt6qFsQnmteHcIoY7da8e4E+1DBM+WEXgjvU64XLR9yRkW+BQYpoEbEA7lPhDSdEetTkAVqOKlYBBGEi3rENhE18uFA32c9DrQJj/l4uiNRoKi3cqdcaO9U7hYIZULYMOibF1VBPfChpQOA80Gh1ptKGGQ9bzkZ3gOknOOh1nD7BdbYIuGzwEbjTtd6x91MBWtejN66Q9tdKApzqvbKkDb7xgYEfVVcJPM0v2fX3atClIyKNFTj95OuqqyqFvY1ljx9x0Uz9Gjan6y7Wp0pSfiGR0wQFzb1KCqRJdwQ/vq1NNuXFXpaNN9V66X84ACSJO1AVNumQ0a5Q3GSqsR1JaUkdRGxlDuyTDa7THXb9dur/NVMGKEtz+SuoL6S27+VEWI8/TmaCZ6iVC1IuF+izJgW9BOsXUBHUz1DN8ulikw606YBI+DL4FxkIAqZ+XJa///4c3v2G5KkxtgNiFGt1LXM8OPEpDOimos5s2lGLo5iIeofYgfdbRuysnYrFPi6rkEgaQ4YNKouUpuPko6mjX3MY3Pv/CKUigtTK21senNSeCG10KPEGSgnfmeuaePkGpn+Z1I15JfNs8BavNXHpjpo4DeC88aA3QY/BZft9DzwbQMxe6fkHuoIwqNIywS/HbWzLsW13y5RSIfdjzmaTwrOSczUQ125N7PiNCd1Yln0kws6qc5WUuZpXY8/ohb/jsa3X6U1Ho6aKaEcZmZGZzBb4Hpx5fE+kpUnNekPTvWFyaNv1SzqZfyuU5WJSOrlGO1+gOd/126d1tHubLJeRRNxTlcfyIQ+Pz4oDsFXMXmPuluvT9Up/6fu0nL4aC1c1SN8QgoUss9ttJHPao2wQGngeDfwXegSyB7nspkcvD/egCcpt9veKGpr57FYeus6sVxx608r764Yga7jh5valxw2g+ZnSeAh6lsZOEPsvpQdJ2l3UMTnNl3CtJPd3r5LdHw+E1dDcbnrSDjGP3AJDKgwAKw2yxAJk63lZxaVqB6xmIyYhb4559U10rfmff0tcaDmKP62oNY1JZMwiR1dWwVZWmzu3sjdUsL2cMsnFOJYOLRQoypIorbR2DWj0w0Z1mVsk4XhwMUc1LiAzPBqq5qzMwAZZDxpypgIwXB8ykP8cFIKjPGEEkg4vJYpVExbmjvLqxLlJWlJXRi5R21XSbfrVIBkoMmcXkeOQlm1g8fMiQ/qOlRqIT/v8HxK7KRpQYqzV70rzqrCbQ3AyvzKnNjONNCCc2M1291YEtYgC24TefyqR9YYBA48j99dqR60qkmZGQOVEPJ2XF+IevRw6vDNXL2c/v3sy4tnCzmqe85iXls7yxJcBMlTTnjc8LW8ykqhGJjr5+yxvRGq2knkD6stsU3+ya5Q3K8LvkjlPhH+tKVDLc6BKFTzwwYs7aYXWZOmaHFXSLr7T8MAlB4W0yHLpETaWgIaJYxt7E3o5/0svFpHTNIp8X+qAq1Er8uyovgTfz9OgQs6tSLoWcF1Xq+LP/4tnrL8dYRru6xJvAAb56+Rtb20GUl/GNo5lEye85ncq+6qccijb/7gnfXL0MDt64RiisQ/qie97SKSLBGwGSiMZwsXCOrrtC56DD3UWVZQX/Rrmdes8DTnQ774ttkznGPe00KAXBoDDohsFEn6IHDB6Dv7W1j93yjkGBKYFtAIHbqSFHSsfSLul4XfZkGTfwdzxTJn+5eJ4qiOrePT7umuVl1yyf3WQyAlGvYVIOBEi7BJkKuqN1rIrQ9nkqVJ3jAJk9abDbpjqOnby8PUN6Utr58tzz+T85GIiK1myuDgk2z9sYbdaPhay6hkhS77UMmaUu4iWvt964xws8IgShe9XrIW6Xaj6MVk90eoHHuAMgxdd7zDFmW68qvcDz7C8V+rL+kKqAflToiTg8E6wuu71Ae7wO9y/64FUVoe3jiMUgXaoll8t8A1tE/VM5BZI9GSS3IJkGqcnvVhNJ8k/8qGNabXcqAFGsntAcUWmk0jFqz+arpAZieB0mukDFxJtJ5yFxXRpBIh7jJOJxX2esLeDmidVMyEkYuxdGOgLDoAVeLqp2WPlssM9EEL+r6WoQ76Ip6XOH3Djavf8RpfFikajwpGI6R6frcSnuev9bvWf0r/jmRE8rb+ofBq7D1Ma4qHLb7RiW3W5LHlkBEhit4+Abw23Qbfr5xOuv73nBqajqx/ZKsOd7Usi2ZLgAJDAYdb0sCrXD9G1XJWbed14oWSS9OVUWbrFxa8NH6H8gmUKeQ5Th1PJOV4Broww88PGy2zXQWyZLD+x2zeUZVL8ckpHwOsxM6CvDfm290iiPe7MJlaWn3Q/HojwOWXQXY/mF7pZLGzKytgXQ8HqiVMoe1GY2Jv0jU1DP+pjL5kGSYQ0r7a/8cklVYDkKwKgRwNXGCuDTyl5cdFWxww34CKLlbhVvwTbYse+g/OfLD9kR8dexHt2xJdzC7bPLx/WXaMfIKn25+iVePrvIgZsMZXhgq/bahcxQrnfYPcziJdrq/3A7bO/YMtixJQjUJqpve/m4Y+cNet5Gu5vdKp5qXD7uHpZotntYznZMfrDz8xbeoDt8I5Fcr/5KVmm8fHaTo0+y6wYVmF4u5xYdpuxe4abNFwvgeUsyegqX9nlJWlTiAyDaWlf4oLSP56EjLjvDnSJv92W9fraRfz3YG/Td+tmNtOSuiV/rHm3XPb0CfcbVHwitxqro5tdSgFIXiIE7iDY/wctlM8f42JWD/EwENz9BKSFq+mXVaFm9WNiuHA7WVUYZo/HvDDShwZyYdZ/k7lKoFwu18peiIkIRtveA9kh6tF1TeUGXy1pF5426Ts1tDe1lkL31bWNvyab7reQJr9F9d0z0gD/bzy/4DRF7/0C+gHv0AMMvt6fwtFzqm4oFOEanGN1DxLEAn+X3A0R585a8BQzOMdafvAsI7NB2E2h0bPF153FK2WJL7HmIy78Q8Vs2OAC75f0BzMfaXvOJmqZh8GicQhu7KHMuQ5fHYzkb07TTzoGMhCaenWwyOVK5IqvZbads6yQSxsZls0O6pQavflrXrSdqnDmRFlELytMhUR6bXWB/mDRYN1U6tViQmVN3Zd+inIV9IBTFaKSGZfgDrig4TAAZOiIKLxdTZSTDtr6uv6+R01C3SRDFlrFPrkSw9HBKtbaeFxBEsOWCbZO+sMckH+QfFG1iGP5vAAAA//84G4UUqT0AAA==\"")
- packr.PackJSONBytes("static", "js/table.js", "\"H4sIAAAAAAAA/3xU3W4aPRC95ykmm4s1CjHky5eb0k1VRai0Io0UkFopipBZD+Bi7I3t5UcV717ZC7tLoL1BrH3OzJnjmZnmKnVCKzD4NhDWoUJDmvC7AbBiBgymFhL4Nnz6TjNmLBI3F5YatJlWFke4cc3uHuvYRCIkwHWaL1E5+paj2Q5RYuq0IfFlisZdB1RckSaabyEpyO8Y0aUU1kUBu54LiUACnBq9tlSimrk53EOnkAtFLMpRosNnvSadwNw1AIS1OXJfH00lMkPCjS+OTrXpsXROSiOWbIEjr4agbIFoATPmkCFYotdeb8gllEXjfK7rmxAS/PX++AGlJJ0mFUqh6Y8eB5AASrrA7Vjws+CbE3BqkDnkY+bOEv47IeAmEwbtWfTtCTozQqUiY/I84f8TwhKtZTM8i747QRtc6QXua2234aviuIEFbgUHpjhU6WkZMEUp7UvnlaaSWeufDBJ4iQIpeu2+w92+x1Uh6+AjleFUTIFcVBIPD1yPffd6VE/8Uagsd2DdVmISLZmZCfWh043AbTNMonSO6WKiNxGsmMwxieKr6rnhCuIIFFt6IBo3FjwCwWsf7fu40Lur9TLLMlT8YS4kJ0avi34Ov7WONhh89T29azTKPpaa8Qc0zhImZW2iIQGFa/j5OOg7lz3jW47WkXIgUfFMC+XdjNuML4Vqe42W/rJaBYneujIkVISrBOJPTMrEmRzjw+gZqjNUJP7SG8WtElzMH2Wc91aoXLl5Yq86btW30R5qUXHS9BV6lcP+04/x54F/lymTFru1wp2ezST2wiDw2i6b5M5p9fcFFV0WzOtQb7F2ankuDv/9eWXu4bR5sKai7LUdjCryH/VUNJzrNeylRsEyQGnxH4y+4HjMaOwafwIAAP//cz7h28YFAAA=\"")
+ packr.PackJSONBytes("static", "css/normalize.css", "\"H4sIAAAAAAAA/7RZaY/cNtL+rl9RcRDYnlfd0z2Ok7yazQcjxybI4UXsxS5gDCBKLHVzhyIFkurp9mb/+6J46OjRTBxgnXyYtkRWFet46inq8uITUNq0TIr3uK6thcOL9WZ9Bb/DLz++hZ9Fjcoi/A474dZCXw5r4eIyyy4vLjK4gO0a3qADjg3rpYNGKwcNa4U8gdNgmbIri0Y0a1p8tYa/GTygciBevwGHRweWBDL+r946YI1DA9oIVI45oRXUe6Z2mMOdcHvdO+DCskoKtSNxANBbNPBe65bkX2bZ3rUS/p2BN2QVDCkmZlzD5QVsaSnAqrUrMmFFJqyCCQVsN5vP/KqruOoOq1vh/nDlfwaX/IatPuDgkpaZnVDRvkrzk7cvPC1gcx12wg9vf/n5JZ2vk+xEm4US5AKbAcDX/7P/prH7RhuDtYOykrq+LQflSrtgAHJotAGmTtE8lNj66Cn48Tv46vL/139GTsnRMSFtCfQP27ctM6cyCttuLrdbksYUh++FwUYf/5z0lgk1SNtGhzPjRC0xz5gVHPMsmpBnjdjVrCMP+9+9wTxrtHZo8myPjPu/O6P7Ls9Icp61qPo8U+yQZxbrsDMewoc0GlaAN/R6khHb9XgKoaRQuHrkMHPnXq3h16HwDkjHYRKYFDvlQ6EbKDujdwat9af/Zm90i3nyYe4d+rpDw5JLei50ntVMHZjNs7Q5zw6Co54fZWrttHaSIStvSAEVs0grl+ohlXyrORoFldF3Fo2Fxug2aRJqB6U3rBxqvdbKGS3telJUeKzRWtij2O19GhKOvASOB1GjnR6wUNo9e5dk3Dyfn0tphdcZREFjGXqDX3FODoHy3V5wjuqmBOtOhDo+Tp1BOyuCy+3G2/iD4Ahuj1A6bDvJHJb3K+Zyu83hDWuYEfk01+EvcHUVD5D05lkStGR9wI2fhbr9iBgR/U6n2hl2gorVt1QVikOtpTYhiqx24oAgyZahnlM0vO3jvpXfV4AzTNmOGVRu6vwf286QRoOMs0pI4U5wt0cFja57i9z7jEmrodW9RdjrA5pQNUzKIbuS8iKYlmes8Cu9Mbp3lKwT9H1L6C7xgBIstkw5UX9Ep6YE+6OsupcrobbT2arKvHPCSbwJLtaGo1lV2jndFrDtjsC1c8iXcptUI1h01KbLSkuOxsNHSsfP/+8R1VWeWWe02o299i5WEol6SOHCWYOK+xp4o0bZ3tgChGNS1EvCD8wIVkmEcr8t4x7PKxSPndajilBQRugu/bsytoeShBFW4NHZD/bCfjsxUbzHAq6wvZ429/UXX2K7DC6Pxj4qaJm5PaueAj5tmg0piWX06WazKF+oWisrrCPBZPrgI8/RvHuWa8a29PDsZF9tPrtewPTS9lV0pe27EljTkH8JzX3jCPhaPqSpp0Tqu3NlX778jE44keBLFaDT1pOiAgxKRoV9/VgzIoOTeKe7Alab9UsKkX9exaoJ5bLarK/Su8sL+K6tkHPkISuU++gIG6o3QJ1QRFagZIv9IwGraHeTuj/rYYlvEOY1Ut/5PAttJcqKAJNCcdj5jlkYrV1olmlrEfcl1/yVSBGF+KO7JuVyLOHFUvHJF0o0HiWwuRnL3mILn2+641KhcNE0aFDVaKFCd4c4lj/J1m6P5jxz96GRrFr9flXpI+WtULsiuYSeXfvQPPhqkXl8o5VjQo1RW66bLh5vjBDrnV46nOYcSmzLVa+Em1S+QcXRUBCXNdSayPJtxYkfYp5Z1nb356pWK207VmM+/ryel/J2LKnvtWk/YlP9Sek7BVK0IsyOBVSnNITlEbgnyQJawes38E86vb4jDDmFzchJWoJnotcWJdauzKFXkpzKqGEa3zA7ozs07gTCUjON3rtP+wNXogSuMHh9j4Z0reMgG6wX1vZYRBS1cZdu4tiLPMGBTaNBku8jG40RaB/U9GJ9VlTe7KEGnDx9OAfonaMRSKiud3mmOxenpeAu4q5HxwwG/he7VbRmOkqQ6fMXcfIeR2R6+GI+VAwcPdVAOZCZgFblOZOamX1WPgdhRSXxD/to6W8BPHNttGnLZDZTNYYhNIhPLTEkjvf8KykjlNDONNwMAQWufdCiwPuaDkz2YcKZTMRRWSBzU1vGIOZndHI2DY6ioqmPijoLfNgSmuvM2NmAkirh1UEL7ueIf2D1k3BQ9R58Xilu6M3n6836gtqfQXh29Rw4EsM8WVC+z6fpMJaLd6+fV8v5nDipCaHS/OB0PFctRX0biKJP2xLcqUMbB8lUIWkE6W0SwPy4E9OgPlFJ1r2x2kS5qW+Ilu1wRTKjnUnN0EjsmRP9hZVf9I62ff0kvHhykw8lMn1L3c89uclnD21ftcI9CVNAuq9iXYfMUAQLCDKntRWsL6DTQjk0SxX2G67s5GYvnpeSfBGNhjO9S69vZqcbngY4iPqj9Ov712dCKTTQMc4Jxch/kSHN8GmmuSh8P/aD4srvj366/+KcOEHS9MBVwKiRYGaB4Go1xLq3/vUnou20cUx5+kvCKPn//iqkjN3j0C78Pm/RjPGG+9bZbOyeWjBY67al/k3lxBycdA9cq6cOmHPYdm7Md7dHi/OmEU/y1IJou/AiXLVyjZaEGLQdlc/IXfLknBy0gTvB3Z5EpcKOLqr0EcL6AYknlKe8f11ytT671UnBXuK6k3Sv91jfVvp4XgaGcaGfpFl4JF7DXHyctp1JvBfurL4XRx+uWZVT7ocW+NT3BeO9d8kx/op1ZtdEdaBGQ1yOpJUDIUo4Tgjib4pCzuQgHNSst2jvqw1LSc65JnJyuCEP1zBlLKfSe59AuVzwn+rbCs2Tm6JIWOFLYmU7oVazrv7gBt27+Qbv9JS452R0kiTlCEtjw7bITL1vBEpePngnQOkySBnDW07uMFKYl4VERH4mVC17mq4IE7ynmt71Bled0bp5vuCwYN8j+Eqe9ubPPy88PhskQQ8tmaD1g1I+ADWD8VCTpTLlzZJ/EiH2zo5vn1W987QkLHlODbSLKToT6MdWehzVBUjbM0vCkjnPfNcenFXC6MPH3D6mXXiyCqoXU/XBPRxrbQLQPRTFc9Lyrb+Phwn9CymWR2YauFQ83DB7ouSUkdP+su2OYLUUHD6tN/T/7I4IrrrjvAGtX7zEFjbrL67C3y/He4l7nxM8ry6X+P4S/51gbgqK1dCh7iQCM0j4X7N+t3egewfCI88J3qPR/kE6Xur4Eneo+Fkz/WCQPftQNnzcsLXRUlbMPEDhZ4PFwzPwt74nJkLt0XZyU1nCM9Z1UiCnOZGB6ckFlT6EXIRfX7/9rvC7BgbEFLnZsgblCSqM0MvHjy4L42U0OU1Hj96XwltiSB//Mr/V1gEN6xT/RF2dp8U1SpmCG55MbpZrLSXrLBIIhV/X48soL/Enx/PM7f3uGbP6bwAAAP//rsjNo3UeAAA=\"")
+ packr.PackJSONBytes("static", "css/skeleton.css", "\"H4sIAAAAAAAA/8w6727kNu7f/RREigXage35P5udoMWv3d20P6Db3jV7dx8O/SDb9FiIbLmSnMl0EeDe4d7wnuQg2fK/kWdzn7KTADMmRYoiKVKkNZ95M7i7R4aKF/D3VbgIN94M3vLyJOghU7BaLDc+vCMPCD+SnMQZejM4Ho/hAZVs6MKY594MbgUiKA6VRKiKBAWoDOHD/38ERmMsJIbeDDKlyv18rjnwEgvJKxFjyMVh3gyS85yqwFKUWenNYLmar97MtSjebO553nwGH0nEEHgKMS8UFkp6//nXv7/Afy+AHwVNvAB+IBLhTp0YSi+Aj6eSHwQps5MXwM+0uNfAHyqleKF/3XKRS4ORSn+/5QlqKr1q/XxXkpgWBy+AvynKqKIG+pYhETX4AyaUwF8rFBpltWZEeXGdOP9hNvdCbUxCCxTwyQMouaSK8mIPAhlR9AFvPIAjTVS2h+Vi8Uo/5uQxaEBvdovysYaJAy32sABSKa4hJUkSWhw0aNUMivhjIOmfBhpxkaAIIv54A09aDFblhW9/SCPNaN6UcaL2wDBVl7lpvd9yAQk+0BglMCIOZm+QAjaLRfmoV/5/ubHX1zkt7GoM7hsz9UgvrSzXWyNKf3l6xstzbrfTcxrcZ+ZcvNJzmAG1ltqfshlZqz/QqtnDZjh8n1IhVRBnlCV90j7cxcYsTI/nBfZn7h4lOD6frNibcNd+XluR1JE/i3i5DtftpyXOBF6YuyVerV7d9BGGOOWVuDB1S7xehOdip/Th0qI74jcOsSV9fJ7Crh1iS3zA4hlr3u4cYqNOKM8g3m0dYhf0oqFb4tebcNEXvDbVJaF7xNcrl9js4qJb4jdLl5MckV0w1qdBVJn2+EBlVCQNmykeTl9RR14TSyf1BaXbqTPCUvfMI2cxJPMZ/JqmEpXUIUazME9BdArGO9eBkH3eA21cu/Zvx6Lbyf4UYpr38rXDcj0WvY0+5u6KASPuq51jI3UsepHAn8TIKdHXG4fNeyy6SDFm7oohI+YbV9jrWHSRxJ9CTOt864qKPRa9PTfm7tqOI+4711boWPQjkT+NmuTuiqsdi16o8icxk0p/fe0IYD2Pm1KLM8aNN5ErLPfWzqa17oyCI/Zv3DGkv88Hgew8DAzQ8n/397Nodx4Nhnj5HOuei9mLiY5F9LBy0vefPH1O0we1fmHw4sfwybP5fAa//PrxvZepnAGVIFHpYm+3CrevQHJ9tlRAGDNF32/vP0CORFYCc12cgcoErw4Zr1RbbXpEIEREYgK8gKU+lNYH6BDuuEbQmDB2gmW4FZjDt7Dclo+w/0YLY4TQp8SUF0qfu3FfS6L1GvHkNEYuwy3mNzo7xZUQWCh2AswlxERXq3EmeI4QVQfIqaSFQlEKVLQ4gNCjeAGGKTKznDqzMapNbeKF5r+7sTMeG9hmsWhhKckpO+3h6s4UvHBHCgl/EfzKh6uf9BFB0Zj8ghUOANBAWoAP3wtKmA+SFDKQKGiqp4g542IPX61WK+NYpkDuCswX959Jp8qWPmQrH7K1D9nGh2zrQ7Yzxmt2jOKlPgp1gIgrxfM9rATmZypfL8ypKVvCp771N+FCjx6bbHUDwFApFIGs6+k9BOFSD33ystWQxzrcOXlsb6Z4aEHWYyZOQdbTgmgmmyGTVbhxMnFKsri2XLZDLsvw2sVl6xRlsbVcdmMuWxeXnYPLwhbDP/eK0TIjEUP1+XJ0bNJto0mdAMam2oSrDndmgV2H27itY3Bbt9INbkIJpvIuHd5r92Td53nxnTe5HYmR3UaT5fvv37/7QQtP9hl/aBoBFru4/X7x9n27NNu6evF1TC4ujIyIvme/aVFW6p/qVOK3V7KKcqqufh9CBUo8A9bkV78bbSRUloyc9kALswUixuN7HZbsXlhf192mXgNq3TSgrCa3261+VPioAsLoodhDjDoH3Yxy2LKmG0S8XZ1kBvvPzjnegXVEsVMpQQqZcpHvoSpLFDGR2CITjLkgdfOt4EXdeMuoQsMNNfAoSGk6XyS+PwheFUnQrMhwLolOs3VrzLTDBEloJfewse03Dd3DUud9zmgCX0VRZPRSCanZlJxaLVzo1dXmqB3U2tY+uSzswjV2dqGstS3OzpfyuJLtfM2Tcz4Hzs7nQLXzGdxgx63X6546LfT6+lpDeaW0DzTRppGy+QpKQXMiTlbcM7BL7ouDmgVcHGNXMho0WNLt7a3bhb5ar9+ubxeO9TaIyUUOPWEC+YwFX/CTZ4ycWPzIi8bYgVNNIJ8j+rTLPWPklOjnDjltvSZ1nFuvyym2R51/yTmjrxfMCWXjZFBUeYRiDJVIRJyNoTqwnsPOWFbiDFQSKY9cJBquuRCBxPckMoxVfTqayja78tGUVqb0+ZihATygUE1xVScaaYK+LnNub32gh4ILTCA6wT8wuqdNveMwc5qmE6H83VL/XYr+j4HMSMKPXX6ZDvLzGfyGOX9ACeR4fyQigQRTUjEF0tTNWnSpSzijNQkpF0B/vfvCTWhMFxyNjgNSlkgEKerkWmsEAIKc/zmFM58zHDwNJ9Dnaesfu+3AP+rz6W4IswWWBsOTS3+uqGG16AxTjS5duFqjbszEVEa7LkSnY4u1irDP9ZbphTKH63aZZ5hTGYmQ+R7DAxbJ8PDXnvpGNWpdF7iObPDkpRRZIrHewL0XeN2eaaqgxdgMcYbxfcQfz46rJKHcfTBtFwDfQWh+BG2bZPIMO2hauddScJET1itw5Bf7Jl4Hg6ruGjEqVWAixx5iKmKmA4ekiVETPx+TYExzwgaDfGiY2X1j39q4qr+KQcV8/cWZr2dovhoW9n110+pa2B/rvsrrIuBN/fqV0X6Zaf3NdgyMLcyVgRfX+qQpYp7g0PVN1d75WfcSP1y59fCcmkQfU5b6byJRvV/qv4lEBU9eKRC+g1bY8y3fiq+Vb1sBY8lKgV1jrr7D8eJGmLSMynxPJUPb6GPD6zpP9OvU7vZDk64bPzzTr05K2fDdv0rO3vmPt1JNxciAqHsc0Ig6IHXNFntF5sV1Oqlo24hoTtqXdrQJ8+eHP3+YRcbEbV+qFOh7xmX/qLhC30uYJj1UGq60Q/peqeOTjkq+l3KRuxiuWoZGw93VoxdX56SOwypIK8bqXOq6x3OhtVAFOXkck/fuGz2LRanJ67t0n7prQwbQH6Fdvj/A7Cyr6A9Uxl+wjjNx1vNcD4J460DrNjyOjzgdyNA7I0id1uwdtxdf+qQ+TPRBlraywo+cJwVKObzktiepMt0AwY/t7yqI06bKNhcb93B1ddPPPGa7mj6Z5q49TmWdpwyu/b24NiZVNJ95v3CFe1OTRigVHMkJFAepRBWrSqB5j1hJc8ezfjPwR70qoFIPjAUSVY9qEF6BpL5zKpDhAymUyduhuQmHjyQvGfpAUzjxCo6kUJgYRhkpDjWjppjU1WPU9LN1YZkTxuxVOh9KIpt5cx5RVk9/qo8IVQm0MLiGHiTGivICSJHU7IEqT2UoMGxvZfZfiDQ8L18JnH6P8jVhktedUzhmWMBB0AQijHmui+dY0Qf85jNvW865q0svaV5PkiUo7xUvJ+iWi8nVvGsIf3o3Rbtqaf8bAAD//7viGWrCLAAA\"")
+ packr.PackJSONBytes("static", "js/list.min.js", "\"H4sIAAAAAAAA/6x7bZPbNpLwX5H4uLRABHGkxMnuksaovI5TT65i++rsvS8UvQUCIMUxRcokNGOfxP3tV3gjQYrjnezlywzx1mh0N/oNrXl6KqnIq3JGQIIoYvDc9XCQoT085ymY0yiL9Veivu5JPcuxZ6d6GIuvR16ls5p/PuU1XyzMRyjX7BeLHNZcnOpyloMMzddQ9qe2LzV9EuodLvnD7HVdVzXwXpGyrMQszUs2O1TsVPDZn7xltvT+5MFQ7OvqYXbn04px7L159/Pff3v9j7fvPvzjl3d/f/uzh+5aCe8TlrjjM/9yrGrRBOe2DeUZonXsU1IU4JNvhpA9DSD6gBSriZs4InFoUOWAbmlAYIs+oX4lQZp2rZklt7SDbVrVQIJLn0IvlOF1mL1gfsHLTOzDbLmEHDBJ9A6FFpw3QdRjKzeH546TQHHROzV81og6p8JThOWY+qyipwMvBUoxAZ5/09T05iTyornJuFglX1e0IE3jQZSNx/kXwUvmQbQfj+Ql419WVepBlF+tuuelkPDuxiOiWknkysyD6NN4sCTiVJNi1VS18CAqxuMKSy7hHqbOQYSo8+QkuAdRObExqWvy1YOowh3JJPuOmuufUY3FPm9Q0y/NBT94ENQQib6TMLYizdeSqpHwMz43gtQi6IDCc+0XeSNeSXSxJz89VPsNJzXdm07dUN1VbWeqc6PaP5KM4w1/jmo/xxv5V/BDg6MY1f593uRJwX/tew5E0H1eZk6Xhs4ZnsvVaV4IXtuWQaMqToeywQzV/p6UrOB1g8+nIyOCsyCKW4lGccryssFn2bgnxYm/JQdutlBUxeeMi799VegHKdLCEmRIyca7NNgjLQlBjkT1XvE9uEOGze+rWgSfkGFqUKCMi5eWhcEBieqlZFhQtnY7X28AakQhMjSuSkHyktfYM3LVXbFky/2Mi9cFl6L/t6+/MpDAIBkvXCyA7sEpGA0hh49SUSnW1A3vZUE1tYTUvuCHY0EEr/vxrsvO0dTvJxg5MKOaU/2obndrq9oRQ31JlGzu86ZjIjBtJTJALtNMtf2GqQDCFtk1ruharUVmeTnrZQPWEYkXi9pXikc2YIvUHkO5VwQxdIToOMeYyVWEMXCELTK7T26I1yF50UmdVYRkudT3M8HdmNLLUeKX5MBjnKDEz8tcgBpVsG1bfc6a/yqFEA+w+yPv0eCkZlNR/cf7d2/x5OmiGCV4jSg2aNgD0tskTJZLSPzjqdkDMxolsb5yklPWAhCzDWEMu2ZAWej1HGNigKqOxJrZ+ypnM6Emhtq+RTHieL4JSbSOsWIRIFjyNOyN1loag84c3aZhajmxx+WpKEI+OsmtVlzb+TqYb9Be2fMGkCiNEUMcWjWmj7mHiNovaz0dUaWWjc2+ehid1czWUo6JEWupMhNX2utOEA7VPcdjs2kPyvAacbxG6Zgv6S0P+XIJLUN4z5CIxBgnSnF0F9zsA/rpWklpmM2xyCkHHG0gSlcrxFcrxJbLjrMO3szgnXExOrhFWfFP4z3Cmd+ykFk2dSeKWBymV8gb8qe982JJnv8PH1wbi6K7lZlLC07qyck9YdQcAAdmzCyvymne9nonIrHGM+k5WqXpaJmmymAVYngPqBR5A5Pdrjby1IYVTLLCQhR1nmXcOQjpqZ0M4VpSJ6tVCAcjURJLf8AeoRO/hgt81rpjWu8ZwqCkv28KOpFKwFE6DmitmP4dcNWpHMIyeGr5c1n5KLQnKs8rCQh7AV6HyS0NqVR7EY271QBKYzGAZTZdbm4lKnLY3dyMvjCqByhoUmcoeRvMVFIkx+EYXWcIBiN8tuDxyUjN3eeMA7tQN/pbbQQLeMaz8pTMffaVxwhgG06EBoyneckXC/3fJwdmv8H1RataiBIbcuAKUf836cpULXjIS1Y9wBadr/zW4Hs0dDCCH5Dr8QbP0cC/CX5EQ3cl+Am5XkjwZ3Tl7wR/QZO+e/BXNBUqBJs1mgo8gs0GfcPRDzbfXw938Uyw+QFNxyzB5jl6PPQINj+i6eAh2Px0NWL8zmDz5zZG318HaD17xoFmgt3YDXGrtzsltUY/rmHIMb9clMnmPq1KSgQgyqNKobSixvqutw0XH/IDr07CFZTEwG7RBgaAOIYGcAhbK6tJ26JzG6MfnnoA65N0KtCoqvdStPF0tzrG1dCr6nAsuODXi+yIWtcHbcq9If3lcnbwICIqaCJa8xpAACLlBa0xxgkkA63Ki4af3a61o6iIUX/a3NJHDC2VJjYBKdymLpzAbW3atiNZx4OrQ9gTq3O4+qs1/Hn+O/kzCHWZRpirQDdUev8f2i+QQZ5qWwNhWg6d9FHH8PIUdJSlkG25dTQSxGDQt6CmM/d5ccDUACOOkci4AFza625NCttWI2lwdPce7tz5utweqOMhk4FMAruBiMU4kfyic4zn68XCRaJRSPDe9Z50Q+F5sEaaG25nSgvw2ExlHbqZ1qxMuE+9NEr0bBSyWHDNHvVhJlwu7uT5aHY3af4vQI5mOHAMtkYWJ5BVLJWAeHGQUREvxduKcRWN5I3Q8UCLUiMxVpB/fJIgd86dintNPiaBiD3iqxGf7vOCSQQa5DjKyfjm9qITsdhnRJDOJZY9nQ2nLRoED6zfTYcNZBwwJG6cI4MgChgiEY+lNA08V6oPxzAZKXzAZPBA/pVqTxUMrdiTXqkkvVJR9rvXKY6671XtYA5+bGCogq13yEBiQn2KEydHFMqQnPEvL6W/sdV4Blyj22qXxHgabYx++l02EylzhlJ8VgpeujvB4L5p7X8df3CseS69Z/HuKOc7iQgCz9/3AfRiQaJNnJeNICWVTplKRW0plt3BYOKEBycnbbme+4M7F2gASI59H0OFicnEuWfQobwbbi0WvZJVYLomGSb0tqlv8mbAQIjWTiYhGE3XKLxXXSY/5149eZ905s2m70ACfVH9Vj3w+hVplLThxK/5sSCUg5toFe3icwvgd8utj3a7j88u/y++yZC32z1bePLaJm2X2Lt2h6K4N71SbROY6GtEoeunZPhcjNjea4A1oiPidSmWTHV3hElsDmuACeljJBco640/M+DyFGSWtKSjMaISsJt7AR3INWyRnhc4nh/vVCn196R591D+Z10deS2+Ag4XCzDBBSrVyYgRnqezbYlhMWDwdrWBVv+q2zK8KdpDMrOlvnHyXW2L9gM13JmmTrk0Rmy025X63X0EsjWSK6m0Vae5eYDUmXqTaEy/kUh1EIwx22YaIFBea4/ZGvGtVpBBpnQPgBL1KZfKivpjLlV47cM6Z8LT3WMfdrjJ9aKBArWM1FGPn+SllA7d16fSARnloYn7eACR94l/PR09dG0lE1+QOuPickn8pqYm940YVjSlWkgH5j1kl8semBHYwj8Kxbw8noR39bYmZdmiSBwUQ4VgYhHcA8+TyOyNs/Dnp5oIorLkv5gePGxeLmPv1eaGfMYbij3518OY+VXNeG0ymfbwzrMFSPp0GuvNXozoI/0MtqE+/pkXTaC1N1KWaUqLUaVwEp8XTa90TL7EYGPiaaAmRTSGNgHpkYZ6PRsfn6cOC1uUcfFOHjeYcLp6vncvMyBBnnSXVopGnlXMaluM6eViqageTMdYQKnh7N5btejRSUTPUXMD1VLI/lq+52WTi/yeB8OIwDpT30A6Lxu72IOhl5Ki4VrdUN8Zw/NNMOowfsOQUleJ5AHPRlGiZgGLQxW9TiCZGiT1005/YaUMaSDZ9OnSEUsMM7KeGdk2k+DUBBkADCmeQpVPMOPwiiOj8Vb6cHQU5XRKt6qFsQnmteHcIoY7da8e4E+1DBM+WEXgjvU64XLR9yRkW+BQYpoEbEA7lPhDSdEetTkAVqOKlYBBGEi3rENhE18uFA32c9DrQJj/l4uiNRoKi3cqdcaO9U7hYIZULYMOibF1VBPfChpQOA80Gh1ptKGGQ9bzkZ3gOknOOh1nD7BdbYIuGzwEbjTtd6x91MBWtejN66Q9tdKApzqvbKkDb7xgYEfVVcJPM0v2fX3atClIyKNFTj95OuqqyqFvY1ljx9x0Uz9Gjan6y7Wp0pSfiGR0wQFzb1KCqRJdwQ/vq1NNuXFXpaNN9V66X84ACSJO1AVNumQ0a5Q3GSqsR1JaUkdRGxlDuyTDa7THXb9dur/NVMGKEtz+SuoL6S27+VEWI8/TmaCZ6iVC1IuF+izJgW9BOsXUBHUz1DN8ulikw606YBI+DL4FxkIAqZ+XJa///4c3v2G5KkxtgNiFGt1LXM8OPEpDOimos5s2lGLo5iIeofYgfdbRuysnYrFPi6rkEgaQ4YNKouUpuPko6mjX3MY3Pv/CKUigtTK21senNSeCG10KPEGSgnfmeuaePkGpn+Z1I15JfNs8BavNXHpjpo4DeC88aA3QY/BZft9DzwbQMxe6fkHuoIwqNIywS/HbWzLsW13y5RSIfdjzmaTwrOSczUQ125N7PiNCd1Yln0kws6qc5WUuZpXY8/ohb/jsa3X6U1Ho6aKaEcZmZGZzBb4Hpx5fE+kpUnNekPTvWFyaNv1SzqZfyuU5WJSOrlGO1+gOd/126d1tHubLJeRRNxTlcfyIQ+Pz4oDsFXMXmPuluvT9Up/6fu0nL4aC1c1SN8QgoUss9ttJHPao2wQGngeDfwXegSyB7nspkcvD/egCcpt9veKGpr57FYeus6sVxx608r764Yga7jh5valxw2g+ZnSeAh6lsZOEPsvpQdJ2l3UMTnNl3CtJPd3r5LdHw+E1dDcbnrSDjGP3AJDKgwAKw2yxAJk63lZxaVqB6xmIyYhb4559U10rfmff0tcaDmKP62oNY1JZMwiR1dWwVZWmzu3sjdUsL2cMsnFOJYOLRQoypIorbR2DWj0w0Z1mVsk4XhwMUc1LiAzPBqq5qzMwAZZDxpypgIwXB8ykP8cFIKjPGEEkg4vJYpVExbmjvLqxLlJWlJXRi5R21XSbfrVIBkoMmcXkeOQlm1g8fMiQ/qOlRqIT/v8HxK7KRpQYqzV70rzqrCbQ3AyvzKnNjONNCCc2M1291YEtYgC24TefyqR9YYBA48j99dqR60qkmZGQOVEPJ2XF+IevRw6vDNXL2c/v3sy4tnCzmqe85iXls7yxJcBMlTTnjc8LW8ykqhGJjr5+yxvRGq2knkD6stsU3+ya5Q3K8LvkjlPhH+tKVDLc6BKFTzwwYs7aYXWZOmaHFXSLr7T8MAlB4W0yHLpETaWgIaJYxt7E3o5/0svFpHTNIp8X+qAq1Er8uyovgTfz9OgQs6tSLoWcF1Xq+LP/4tnrL8dYRru6xJvAAb56+Rtb20GUl/GNo5lEye85ncq+6qccijb/7gnfXL0MDt64RiisQ/qie97SKSLBGwGSiMZwsXCOrrtC56DD3UWVZQX/Rrmdes8DTnQ774ttkznGPe00KAXBoDDohsFEn6IHDB6Dv7W1j93yjkGBKYFtAIHbqSFHSsfSLul4XfZkGTfwdzxTJn+5eJ4qiOrePT7umuVl1yyf3WQyAlGvYVIOBEi7BJkKuqN1rIrQ9nkqVJ3jAJk9abDbpjqOnby8PUN6Utr58tzz+T85GIiK1myuDgk2z9sYbdaPhay6hkhS77UMmaUu4iWvt964xws8IgShe9XrIW6Xaj6MVk90eoHHuAMgxdd7zDFmW68qvcDz7C8V+rL+kKqAflToiTg8E6wuu71Ae7wO9y/64FUVoe3jiMUgXaoll8t8A1tE/VM5BZI9GSS3IJkGqcnvVhNJ8k/8qGNabXcqAFGsntAcUWmk0jFqz+arpAZieB0mukDFxJtJ5yFxXRpBIh7jJOJxX2esLeDmidVMyEkYuxdGOgLDoAVeLqp2WPlssM9EEL+r6WoQ76Ip6XOH3Djavf8RpfFikajwpGI6R6frcSnuev9bvWf0r/jmRE8rb+ofBq7D1Ma4qHLb7RiW3W5LHlkBEhit4+Abw23Qbfr5xOuv73nBqajqx/ZKsOd7Usi2ZLgAJDAYdb0sCrXD9G1XJWbed14oWSS9OVUWbrFxa8NH6H8gmUKeQ5Th1PJOV4Broww88PGy2zXQWyZLD+x2zeUZVL8ckpHwOsxM6CvDfm290iiPe7MJlaWn3Q/HojwOWXQXY/mF7pZLGzKytgXQ8HqiVMoe1GY2Jv0jU1DP+pjL5kGSYQ0r7a/8cklVYDkKwKgRwNXGCuDTyl5cdFWxww34CKLlbhVvwTbYse+g/OfLD9kR8dexHt2xJdzC7bPLx/WXaMfIKn25+iVePrvIgZsMZXhgq/bahcxQrnfYPcziJdrq/3A7bO/YMtixJQjUJqpve/m4Y+cNet5Gu5vdKp5qXD7uHpZotntYznZMfrDz8xbeoDt8I5Fcr/5KVmm8fHaTo0+y6wYVmF4u5xYdpuxe4abNFwvgeUsyegqX9nlJWlTiAyDaWlf4oLSP56EjLjvDnSJv92W9fraRfz3YG/Td+tmNtOSuiV/rHm3XPb0CfcbVHwitxqro5tdSgFIXiIE7iDY/wctlM8f42JWD/EwENz9BKSFq+mXVaFm9WNiuHA7WVUYZo/HvDDShwZyYdZ/k7lKoFwu18peiIkIRtveA9kh6tF1TeUGXy1pF5426Ts1tDe1lkL31bWNvyab7reQJr9F9d0z0gD/bzy/4DRF7/0C+gHv0AMMvt6fwtFzqm4oFOEanGN1DxLEAn+X3A0R585a8BQzOMdafvAsI7NB2E2h0bPF153FK2WJL7HmIy78Q8Vs2OAC75f0BzMfaXvOJmqZh8GicQhu7KHMuQ5fHYzkb07TTzoGMhCaenWwyOVK5IqvZbads6yQSxsZls0O6pQavflrXrSdqnDmRFlELytMhUR6bXWB/mDRYN1U6tViQmVN3Zd+inIV9IBTFaKSGZfgDrig4TAAZOiIKLxdTZSTDtr6uv6+R01C3SRDFlrFPrkSw9HBKtbaeFxBEsOWCbZO+sMckH+QfFG1iGP5vAAAA//84G4UUqT0AAA==\"")
+ packr.PackJSONBytes("static", "js/table.js", "\"H4sIAAAAAAAA/3xU3W4aPRC95ykmm4s1CjHky5eb0k1VRai0Io0UkFopipBZD+Bi7I3t5UcV717ZC7tLoL1BrH3OzJnjmZnmKnVCKzD4NhDWoUJDmvC7AbBiBgymFhL4Nnz6TjNmLBI3F5YatJlWFke4cc3uHuvYRCIkwHWaL1E5+paj2Q5RYuq0IfFlisZdB1RckSaabyEpyO8Y0aUU1kUBu54LiUACnBq9tlSimrk53EOnkAtFLMpRosNnvSadwNw1AIS1OXJfH00lMkPCjS+OTrXpsXROSiOWbIEjr4agbIFoATPmkCFYotdeb8gllEXjfK7rmxAS/PX++AGlJJ0mFUqh6Y8eB5AASrrA7Vjws+CbE3BqkDnkY+bOEv47IeAmEwbtWfTtCTozQqUiY/I84f8TwhKtZTM8i747QRtc6QXua2234aviuIEFbgUHpjhU6WkZMEUp7UvnlaaSWeufDBJ4iQIpeu2+w92+x1Uh6+AjleFUTIFcVBIPD1yPffd6VE/8Uagsd2DdVmISLZmZCfWh043AbTNMonSO6WKiNxGsmMwxieKr6rnhCuIIFFt6IBo3FjwCwWsf7fu40Lur9TLLMlT8YS4kJ0avi34Ov7WONhh89T29azTKPpaa8Qc0zhImZW2iIQGFa/j5OOg7lz3jW47WkXIgUfFMC+XdjNuML4Vqe42W/rJaBYneujIkVISrBOJPTMrEmRzjw+gZqjNUJP7SG8WtElzMH2Wc91aoXLl5Yq86btW30R5qUXHS9BV6lcP+04/x54F/lymTFru1wp2ezST2wiDw2i6b5M5p9fcFFV0WzOtQb7F2ankuDv/9eWXu4bR5sKai7LUdjCryH/VUNJzrNeylRsEyQGnxH4y+4HjMaOwafwIAAP//cz7h28YFAAA=\"")
}
diff --git a/server/store/a_store-packr.go b/server/store/a_store-packr.go
index 2c1ad45..7b63e4b 100644
--- a/server/store/a_store-packr.go
+++ b/server/store/a_store-packr.go
@@ -1,4 +1,4 @@
-// Code generated by github.com/gobuffalo/packr. DO NOT EDIT
+// Code generated by github.com/gobuffalo/packr. DO NOT EDIT.
package store
@@ -7,13 +7,13 @@ import "github.com/gobuffalo/packr"
// You can use the "packr clean" command to clean up this,
// and any other packr generated files.
func init() {
- packr.PackJSONBytes("migrations", "migrations_test.go", "\"H4sIAAAAAAAA/6xW32/bNhB+lv6KA4ENUqfSBbanDH5IY7frlh9t5BQbgsClpZNNRCIVknJqFPnfhyNlW07TdAX2kkjU/fjuu++ObkVxK5YIjVwa4aRWNo5l02rjIIkjVgonFsLiyN7VLI5Y1Tj6J/VI6s5Jf9YItxoZoUp60Tb8HXUWDT22wq22/0eVrHF7YLCqsfDhHFon1ZLFccSW0q26BS90M1rql/auflkauUYzajYBwxyGNo1wTvWW0uGvLI5CKXhgZroFqjVV8bL/zA5zWWfQFSsz8liqzUhYi8Z9z8rgXScNsjiN46pTBczQuvzDqXR4tmM0cfCiL5HPUvgSR7ZblNLA0RjYHne5yACNP7V3Nb9oUSXBMAN21GCjzeaIpXHUJ+XnemqMNonzfhmwKyUWNYLToFtUEEJDoZXCgpB4504NkWVAaUOalDDwk1pbTNL4YVDR2Sb/cPpcQbICbflbdKjWCTv7J/9wOp9N8xlLYTwGxsgmcjy/lW3CzjXsLQDVWhqtGlQO1sJIKoGAPsSR52JXLd4nLj3gbiuJ0ip6969kd6JVJZdJ6r/wc3QwBuaKNpjy98JYnMkGYQzOdBhOj8vSwPjpMuZ/XFAtW3dr78tvmr4/znMy7TKYEyoaBH7SGYPKESRZAXF3ZdFkoG/JRFt+qvVt104fxbrKp5cs/Z3MiEDKTn6Euw8RRw+AtcXH3zv/oESDnsnntEVeb7RphJvk50lKGtlJ60ldeZ4PZRVHRpW+B+IWk+ubxcZhBr9RLKFKfomiTIwqffuqSn4m06pxPG+NVK5K2PynzywD64xUS2+ZxtE8YB5DueDTz1gk7ORyejybwuR4dvz6OJ8OttacCGHwC4T4j4t4MtrVD0b47uiEsJPLi/d7iO/ewPTvd/ksfzbVE3P3KNtg4igxvKA+Tl5nUEqDhdNm07Pn51EQwWGF7QbnyWlq6PDnfifyN7Le761cd6ZA0tVEmqN9nswrila53Ylqu9j521ovEv/0p5Yq2TsBe8FpWqmxoxF8RCOrDbiVcOBWaBCkBeGgRmEdaDW4kUh3plNfy/JcDzjtrVjfNzdtWrdJPMqvM/ZuagldC/fa3No4Urtitmz4dlKPB1U02e7zVRumWRzIxA+i4Keokp4iFZbZIwiClGPxrqO9ZzoFK2FBDSvaQfp/EE3vOlEnr76Fx+AajSVKBpweUvOfcUz0vfoRbh7ieDTyF03PTV0P2r/NIdHS0nFCKpIMWNEgWHSgqyFmH5kP7i659F8mW6gnWjlU7olbjNalDVusvQ7TdHN9Ex6+PMRR0XvulBJ+BPn1NpEmYZzktx27g9s5jaNKG5hnIP0YCrX0N7OP53mRFUj+zlKcQFTUX3P7aZL8XDSYpPthIrOeyvnXcxgWUxQ5I5sG/X4elhNtIVV7SD5YSL9zG4NoW1Rl0h9k+zSvhcWkSn0WH9FTeL0FeuNvWO8Ue4OguyuLfsRRObOByujGN/STd/5E7IOwIMBghQZVgUBASRVkpmlfWE4ryFhH0EPS/gcl/yjqDi+qxJ+m/Ey0f+HGJun1qxuehwsmvdm1Y72vPbTfazS00I+MD+fXvc+XwbrX7L8BAAD//4C0Bmk7CwAA\"")
- packr.PackJSONBytes("migrations", "mysql/20180626224600_create_issued_certs.sql", "\"H4sIAAAAAAAA/5SR0UrDMBSG7/MUh92swxVSYYjuqtoMirUbXQsbIk1oDhrqupLGrX17aV21TkGEXIXv//nOObYNFzv1rIVBSEpyFzE3ZhC7twEDfwHhMga28dfxGriqqjeUaYbaVBwsAsBzbFIlORyEzl6Eti5ns0mXCZMgmLZEqVWRqVK8VmeUxxZuEsQwenwadWSmURiUqTAcpDBo1A4/qbFzfUVt6tjUAUpv2ueMuxjWpdJY/Tem8bDPUXIwqmhUYSznS4l+EOKY5thwMFib9mcV+Q9utIV7tgWrH31CJvN+a37osQ1wJet0aLUMf+xuaP1r/qT3Z08/xhTOKsnwsN7+WBAvWq5Oh/1eMyfvAQAA//+OXEmHBQIAAA==\"")
- packr.PackJSONBytes("migrations", "mysql/20180807223808_idx_revoked_expires_at.sql", "\"H4sIAAAAAAAA/9LVVdDOzUwvSixJVQgt4HL0CXENUghxdPJxVUjILC4uTU2JT04tKilOUHAJ8g9Q8PRzcY1QSMhMqYgvSi3Lz05NiU+tKMgsSi2OTyxJsObiQjbPJb88D5+Jji4uBAxU0EiAiiboJCCJa1pzAQIAAP//O0rcq7kAAAA=\"")
- packr.PackJSONBytes("migrations", "mysql/20180807224200_new_primary_key.sql", "\"H4sIAAAAAAAA/5TOzarCMBAF4H2e4izvRfsErmIzQrBNa0zArhKxQYr4Q1NR314qFrJ1Nwxz5nxZhtm5O/b7IcDeGC8MaRi+LAi+i/EeWncI/RA9A4SuatRallw3WFMzZwAXAnlV2FLBd62HVCY9AbemclLlmkpSBiupt2bKWSU3liCVoN2YfrpTeLnxy5//Tv8LxlKiuD4uvyM/u0Q5AVJoWvkOAAD//1KTCm8VAQAA\"")
- packr.PackJSONBytes("migrations", "mysql/20180822204521_add_reason.sql", "\"H4sIAAAAAAAA/9LVVdDOzUwvSixJVQgt4HL0CXENUghxdPJxVUjILC4uTU2JT04tKilOUHB0cVFw9vcJ9fVTSMhNLS5OTE9NUAhxjQhR8PMPUfAL9fGx5uJCNs4lvzwPn4EuQf4BGCZaAwIAAP//am0hrZEAAAA=\"")
- packr.PackJSONBytes("migrations", "sqlite3/20180626224600_create_issued_certs.sql", "\"H4sIAAAAAAAA/5SR0UrDMBSG7/MUh92swxVSYYjuqtoMirUbXQsbIk1oDhrqupLGrX17aV21TkGEXIXv//nOObYNFzv1rIVBSEpyFzE3ZhC7twEDfwHhMga28dfxGriqqjeUaYbaVBwsAsBzbFIlORyEzl6Eti5ns0mXCZMgmLZEqVWRqVK8VmeUxxZuEsQwenwadWSmURiUqTAcpDBo1A4/qbFzfUVt6tjUAUpv2ueMuxjWpdJY/Tem8bDPUXIwqmhUYSznS4l+EOKY5thwMFib9mcV+Q9utIV7tgWrH31CJvN+a37osQ1wJet0aLUMf+xuaP1r/qT3Z08/xhTOKsnwsN7+WBAvWq5Oh/1eMyfvAQAA//+OXEmHBQIAAA==\"")
- packr.PackJSONBytes("migrations", "sqlite3/20180807223808_idx_revoked_expires_at.sql", "\"H4sIAAAAAAAA/9LVVdDOzUwvSixJVQgt4HIJ8g9Q8PRzcY1QSMhMqYgvSi3Lz05NiU+tKMgsSi2OTyxJsObiQtbkkl+ex+Uc5OoY4kpAo4K/n0JCZnFxaWpKfHJqUUlxgoJGAlRdgo5CApJSTWsuQAAAAP//Yo/PZJkAAAA=\"")
- packr.PackJSONBytes("migrations", "sqlite3/20180807224200_new_primary_key.sql", "\"H4sIAAAAAAAA/9yTUWucQBSF3+dXXPISpS5oIZTWJ5u9W6TumI4jJITgDDq0wyaujNPs7r8vugaN3RaWUigFn5xz9Zxzv1ks4M2T/mqkVZA35JphxBF49DFBELptv6uqKJWxbVGrnQCHAAhdCYgpx0/I4IbF64jdwWe887qzjToU3fmzNOU3aZy3V1cu5DT+kiPQlAPNk6QXNkbXpW7kYzsTL3EV5QmHy/uHy15ZGiWtqgppBVTSKquf1KgK3r/zF36w8APw/Q/dExzH1L7RRrXnjhn1vN2oSoDV9UHX1gkmlvxBI3fFRh0EWLW3xA1JTDNkvCslPdnasRUPxtAejLE8GL16MBjwYPiLSwAyTPCaw598BlYsXb82J0KyZOnNqW2LkEQJR/ZrEhjSaI0wDyzCF4ZiusTbDpZ9MV1FSmcD4ExX5YaETJlcbnf1ayrjVQ8S3sYZz2bOto/VwOhJDs8D8OL+4eIfA9D/Gb/uzeQSgvMS3e3A/A2Zx67+LzL7TH+NzB8BAAD//5JBr+QsBQAA\"")
- packr.PackJSONBytes("migrations", "sqlite3/20180822204521_add_reason.sql", "\"H4sIAAAAAAAA/6SSQWvbQBCF7/srHrnEpjJIhVBanVRrUkTlVbpZQUIp2sUa0sW1Ylbb2P73RbFdG+MeSmBv82b2vZlvMsG7pXvyNjDqlchKTQo6+1wSjOv739w2c/ahN8jyHNOqrGcSZsl9b5/YQNODhqw0ZF2WyOk2q0uNq6tUiNPJ+fO6E1NFmaZLw5uO1wYjARjXGhRS0xdSuFPFLFOP+EqP0VBb8LYZ6i/Wz39aP3p/czNGLYtvNf318CpcedfN3cr+6s/EB4PX339cvyrnnm3gtrHBoLWBg1vyUZV8/BBP4mQSJ4jjT8NLdm28WTnP/f+2eX55XnBrEFy3dV0YJSeW4r3GrpsFbw0Cb4IYp6KQ96T0sJTq4tZ2W4lwDB3hGCvC0WuEvYEI+1/GArinkqYabxmDW1XNznhJRa6qu4sopf/GbJdJkcxmhPPAJj0wVMicHgZYNs3pKSp5Du3o9FTj9E8AAAD//xeZkE/uAgAA\"")
+ packr.PackJSONBytes("migrations", "migrations_test.go", "\"H4sIAAAAAAAA/6xW32/bNhB+lv6KA4ENUqfSBbanDH5IY7frlh9t5BQbgsClpZNNRCIVknJqFPnfhyNlW07TdAX2kkjU/fjuu++ObkVxK5YIjVwa4aRWNo5l02rjIIkjVgonFsLiyN7VLI5Y1Tj6J/VI6s5Jf9YItxoZoUp60Tb8HXUWDT22wq22/0eVrHF7YLCqsfDhHFon1ZLFccSW0q26BS90M1rql/auflkauUYzajYBwxyGNo1wTvWW0uGvLI5CKXhgZroFqjVV8bL/zA5zWWfQFSsz8liqzUhYi8Z9z8rgXScNsjiN46pTBczQuvzDqXR4tmM0cfCiL5HPUvgSR7ZblNLA0RjYHne5yACNP7V3Nb9oUSXBMAN21GCjzeaIpXHUJ+XnemqMNonzfhmwKyUWNYLToFtUEEJDoZXCgpB4504NkWVAaUOalDDwk1pbTNL4YVDR2Sb/cPpcQbICbflbdKjWCTv7J/9wOp9N8xlLYTwGxsgmcjy/lW3CzjXsLQDVWhqtGlQO1sJIKoGAPsSR52JXLd4nLj3gbiuJ0ip6969kd6JVJZdJ6r/wc3QwBuaKNpjy98JYnMkGYQzOdBhOj8vSwPjpMuZ/XFAtW3dr78tvmr4/znMy7TKYEyoaBH7SGYPKESRZAXF3ZdFkoG/JRFt+qvVt104fxbrKp5cs/Z3MiEDKTn6Euw8RRw+AtcXH3zv/oESDnsnntEVeb7RphJvk50lKGtlJ60ldeZ4PZRVHRpW+B+IWk+ubxcZhBr9RLKFKfomiTIwqffuqSn4m06pxPG+NVK5K2PynzywD64xUS2+ZxtE8YB5DueDTz1gk7ORyejybwuR4dvz6OJ8OttacCGHwC4T4j4t4MtrVD0b47uiEsJPLi/d7iO/ewPTvd/ksfzbVE3P3KNtg4igxvKA+Tl5nUEqDhdNm07Pn51EQwWGF7QbnyWlq6PDnfifyN7Le761cd6ZA0tVEmqN9nswrila53Ylqu9j521ovEv/0p5Yq2TsBe8FpWqmxoxF8RCOrDbiVcOBWaBCkBeGgRmEdaDW4kUh3plNfy/JcDzjtrVjfNzdtWrdJPMqvM/ZuagldC/fa3No4Urtitmz4dlKPB1U02e7zVRumWRzIxA+i4Keokp4iFZbZIwiClGPxrqO9ZzoFK2FBDSvaQfp/EE3vOlEnr76Fx+AajSVKBpweUvOfcUz0vfoRbh7ieDTyF03PTV0P2r/NIdHS0nFCKpIMWNEgWHSgqyFmH5kP7i659F8mW6gnWjlU7olbjNalDVusvQ7TdHN9Ex6+PMRR0XvulBJ+BPn1NpEmYZzktx27g9s5jaNKG5hnIP0YCrX0N7OP53mRFUj+zlKcQFTUX3P7aZL8XDSYpPthIrOeyvnXcxgWUxQ5I5sG/X4elhNtIVV7SD5YSL9zG4NoW1Rl0h9k+zSvhcWkSn0WH9FTeL0FeuNvWO8Ue4OguyuLfsRRObOByujGN/STd/5E7IOwIMBghQZVgUBASRVkpmlfWE4ryFhH0EPS/gcl/yjqDi+qxJ+m/Ey0f+HGJun1qxuehwsmvdm1Y72vPbTfazS00I+MD+fXvc+XwbrX7L8BAAD//4C0Bmk7CwAA\"")
+ packr.PackJSONBytes("migrations", "mysql/20180626224600_create_issued_certs.sql", "\"H4sIAAAAAAAA/5SR0UrDMBSG7/MUh92swxVSYYjuqtoMirUbXQsbIk1oDhrqupLGrX17aV21TkGEXIXv//nOObYNFzv1rIVBSEpyFzE3ZhC7twEDfwHhMga28dfxGriqqjeUaYbaVBwsAsBzbFIlORyEzl6Eti5ns0mXCZMgmLZEqVWRqVK8VmeUxxZuEsQwenwadWSmURiUqTAcpDBo1A4/qbFzfUVt6tjUAUpv2ueMuxjWpdJY/Tem8bDPUXIwqmhUYSznS4l+EOKY5thwMFib9mcV+Q9utIV7tgWrH31CJvN+a37osQ1wJet0aLUMf+xuaP1r/qT3Z08/xhTOKsnwsN7+WBAvWq5Oh/1eMyfvAQAA//+OXEmHBQIAAA==\"")
+ packr.PackJSONBytes("migrations", "mysql/20180807223808_idx_revoked_expires_at.sql", "\"H4sIAAAAAAAA/9LVVdDOzUwvSixJVQgt4HL0CXENUghxdPJxVUjILC4uTU2JT04tKilOUHAJ8g9Q8PRzcY1QSMhMqYgvSi3Lz05NiU+tKMgsSi2OTyxJsObiQjbPJb88D5+Jji4uBAxU0EiAiiboJCCJa1pzAQIAAP//O0rcq7kAAAA=\"")
+ packr.PackJSONBytes("migrations", "mysql/20180807224200_new_primary_key.sql", "\"H4sIAAAAAAAA/5TOzarCMBAF4H2e4izvRfsErmIzQrBNa0zArhKxQYr4Q1NR314qFrJ1Nwxz5nxZhtm5O/b7IcDeGC8MaRi+LAi+i/EeWncI/RA9A4SuatRallw3WFMzZwAXAnlV2FLBd62HVCY9AbemclLlmkpSBiupt2bKWSU3liCVoN2YfrpTeLnxy5//Tv8LxlKiuD4uvyM/u0Q5AVJoWvkOAAD//1KTCm8VAQAA\"")
+ packr.PackJSONBytes("migrations", "mysql/20180822204521_add_reason.sql", "\"H4sIAAAAAAAA/9LVVdDOzUwvSixJVQgt4HL0CXENUghxdPJxVUjILC4uTU2JT04tKilOUHB0cVFw9vcJ9fVTSMhNLS5OTE9NUAhxjQhR8PMPUfAL9fGx5uJCNs4lvzwPn4EuQf4BGCZaAwIAAP//am0hrZEAAAA=\"")
+ packr.PackJSONBytes("migrations", "sqlite3/20180626224600_create_issued_certs.sql", "\"H4sIAAAAAAAA/5SR0UrDMBSG7/MUh92swxVSYYjuqtoMirUbXQsbIk1oDhrqupLGrX17aV21TkGEXIXv//nOObYNFzv1rIVBSEpyFzE3ZhC7twEDfwHhMga28dfxGriqqjeUaYbaVBwsAsBzbFIlORyEzl6Eti5ns0mXCZMgmLZEqVWRqVK8VmeUxxZuEsQwenwadWSmURiUqTAcpDBo1A4/qbFzfUVt6tjUAUpv2ueMuxjWpdJY/Tem8bDPUXIwqmhUYSznS4l+EOKY5thwMFib9mcV+Q9utIV7tgWrH31CJvN+a37osQ1wJet0aLUMf+xuaP1r/qT3Z08/xhTOKsnwsN7+WBAvWq5Oh/1eMyfvAQAA//+OXEmHBQIAAA==\"")
+ packr.PackJSONBytes("migrations", "sqlite3/20180807223808_idx_revoked_expires_at.sql", "\"H4sIAAAAAAAA/9LVVdDOzUwvSixJVQgt4HIJ8g9Q8PRzcY1QSMhMqYgvSi3Lz05NiU+tKMgsSi2OTyxJsObiQtbkkl+ex+Uc5OoY4kpAo4K/n0JCZnFxaWpKfHJqUUlxgoJGAlRdgo5CApJSTWsuQAAAAP//Yo/PZJkAAAA=\"")
+ packr.PackJSONBytes("migrations", "sqlite3/20180807224200_new_primary_key.sql", "\"H4sIAAAAAAAA/9yTUWucQBSF3+dXXPISpS5oIZTWJ5u9W6TumI4jJITgDDq0wyaujNPs7r8vugaN3RaWUigFn5xz9Zxzv1ks4M2T/mqkVZA35JphxBF49DFBELptv6uqKJWxbVGrnQCHAAhdCYgpx0/I4IbF64jdwWe887qzjToU3fmzNOU3aZy3V1cu5DT+kiPQlAPNk6QXNkbXpW7kYzsTL3EV5QmHy/uHy15ZGiWtqgppBVTSKquf1KgK3r/zF36w8APw/Q/dExzH1L7RRrXnjhn1vN2oSoDV9UHX1gkmlvxBI3fFRh0EWLW3xA1JTDNkvCslPdnasRUPxtAejLE8GL16MBjwYPiLSwAyTPCaw598BlYsXb82J0KyZOnNqW2LkEQJR/ZrEhjSaI0wDyzCF4ZiusTbDpZ9MV1FSmcD4ExX5YaETJlcbnf1ayrjVQ8S3sYZz2bOto/VwOhJDs8D8OL+4eIfA9D/Gb/uzeQSgvMS3e3A/A2Zx67+LzL7TH+NzB8BAAD//5JBr+QsBQAA\"")
+ packr.PackJSONBytes("migrations", "sqlite3/20180822204521_add_reason.sql", "\"H4sIAAAAAAAA/6SSQWvbQBCF7/srHrnEpjJIhVBanVRrUkTlVbpZQUIp2sUa0sW1Ylbb2P73RbFdG+MeSmBv82b2vZlvMsG7pXvyNjDqlchKTQo6+1wSjOv739w2c/ahN8jyHNOqrGcSZsl9b5/YQNODhqw0ZF2WyOk2q0uNq6tUiNPJ+fO6E1NFmaZLw5uO1wYjARjXGhRS0xdSuFPFLFOP+EqP0VBb8LYZ6i/Wz39aP3p/czNGLYtvNf318CpcedfN3cr+6s/EB4PX339cvyrnnm3gtrHBoLWBg1vyUZV8/BBP4mQSJ4jjT8NLdm28WTnP/f+2eX55XnBrEFy3dV0YJSeW4r3GrpsFbw0Cb4IYp6KQ96T0sJTq4tZ2W4lwDB3hGCvC0WuEvYEI+1/GArinkqYabxmDW1XNznhJRa6qu4sopf/GbJdJkcxmhPPAJj0wVMicHgZYNs3pKSp5Du3o9FTj9E8AAAD//xeZkE/uAgAA\"")
}
diff --git a/vendor/cloud.google.com/go/storage/acl.go b/vendor/cloud.google.com/go/storage/acl.go
index d56795c..0cfc96e 100644
--- a/vendor/cloud.google.com/go/storage/acl.go
+++ b/vendor/cloud.google.com/go/storage/acl.go
@@ -48,10 +48,21 @@ const (
AllAuthenticatedUsers ACLEntity = "allAuthenticatedUsers"
)
-// ACLRule represents a grant for a role to an entity (user, group or team) for a Google Cloud Storage object or bucket.
+// ACLRule represents a grant for a role to an entity (user, group or team) for a
+// Google Cloud Storage object or bucket.
type ACLRule struct {
- Entity ACLEntity
- Role ACLRole
+ Entity ACLEntity
+ EntityID string
+ Role ACLRole
+ Domain string
+ Email string
+ ProjectTeam *ProjectTeam
+}
+
+// ProjectTeam is the project team associated with the entity, if any.
+type ProjectTeam struct {
+ ProjectNumber string
+ Team string
}
// ACLHandle provides operations on an access control list for a Google Cloud Storage bucket or object.
@@ -77,7 +88,7 @@ func (a *ACLHandle) Delete(ctx context.Context, entity ACLEntity) (err error) {
return a.bucketDelete(ctx, entity)
}
-// Set sets the permission level for the given entity.
+// Set sets the role for the given entity.
func (a *ACLHandle) Set(ctx context.Context, entity ACLEntity, role ACLRole) (err error) {
ctx = trace.StartSpan(ctx, "cloud.google.com/go/storage.ACL.Set")
defer func() { trace.EndSpan(ctx, err) }()
@@ -117,7 +128,7 @@ func (a *ACLHandle) bucketDefaultList(ctx context.Context) ([]ACLRule, error) {
if err != nil {
return nil, err
}
- return toACLRules(acls.Items), nil
+ return toObjectACLRules(acls.Items), nil
}
func (a *ACLHandle) bucketDefaultDelete(ctx context.Context, entity ACLEntity) error {
@@ -140,12 +151,7 @@ func (a *ACLHandle) bucketList(ctx context.Context) ([]ACLRule, error) {
if err != nil {
return nil, err
}
- r := make([]ACLRule, len(acls.Items))
- for i, v := range acls.Items {
- r[i].Entity = ACLEntity(v.Entity)
- r[i].Role = ACLRole(v.Role)
- }
- return r, nil
+ return toBucketACLRules(acls.Items), nil
}
func (a *ACLHandle) bucketSet(ctx context.Context, entity ACLEntity, role ACLRole) error {
@@ -167,15 +173,11 @@ func (a *ACLHandle) bucketSet(ctx context.Context, entity ACLEntity, role ACLRol
}
func (a *ACLHandle) bucketDelete(ctx context.Context, entity ACLEntity) error {
- err := runWithRetry(ctx, func() error {
+ return runWithRetry(ctx, func() error {
req := a.c.raw.BucketAccessControls.Delete(a.bucket, string(entity))
a.configureCall(req, ctx)
return req.Do()
})
- if err != nil {
- return err
- }
- return nil
}
func (a *ACLHandle) objectList(ctx context.Context) ([]ACLRule, error) {
@@ -190,7 +192,7 @@ func (a *ACLHandle) objectList(ctx context.Context) ([]ACLRule, error) {
if err != nil {
return nil, err
}
- return toACLRules(acls.Items), nil
+ return toObjectACLRules(acls.Items), nil
}
func (a *ACLHandle) objectSet(ctx context.Context, entity ACLEntity, role ACLRole, isBucketDefault bool) error {
@@ -225,9 +227,7 @@ func (a *ACLHandle) objectDelete(ctx context.Context, entity ACLEntity) error {
})
}
-func (a *ACLHandle) configureCall(call interface {
- Header() http.Header
-}, ctx context.Context) {
+func (a *ACLHandle) configureCall(call interface{ Header() http.Header }, ctx context.Context) {
vc := reflect.ValueOf(call)
vc.MethodByName("Context").Call([]reflect.Value{reflect.ValueOf(ctx)})
if a.userProject != "" {
@@ -236,10 +236,100 @@ func (a *ACLHandle) configureCall(call interface {
setClientHeader(call.Header())
}
-func toACLRules(items []*raw.ObjectAccessControl) []ACLRule {
- r := make([]ACLRule, 0, len(items))
+func toObjectACLRules(items []*raw.ObjectAccessControl) []ACLRule {
+ var rs []ACLRule
for _, item := range items {
- r = append(r, ACLRule{Entity: ACLEntity(item.Entity), Role: ACLRole(item.Role)})
+ rs = append(rs, toObjectACLRule(item))
+ }
+ return rs
+}
+
+func toBucketACLRules(items []*raw.BucketAccessControl) []ACLRule {
+ var rs []ACLRule
+ for _, item := range items {
+ rs = append(rs, toBucketACLRule(item))
+ }
+ return rs
+}
+
+func toObjectACLRule(a *raw.ObjectAccessControl) ACLRule {
+ return ACLRule{
+ Entity: ACLEntity(a.Entity),
+ EntityID: a.EntityId,
+ Role: ACLRole(a.Role),
+ Domain: a.Domain,
+ Email: a.Email,
+ ProjectTeam: toObjectProjectTeam(a.ProjectTeam),
+ }
+}
+
+func toBucketACLRule(a *raw.BucketAccessControl) ACLRule {
+ return ACLRule{
+ Entity: ACLEntity(a.Entity),
+ EntityID: a.EntityId,
+ Role: ACLRole(a.Role),
+ Domain: a.Domain,
+ Email: a.Email,
+ ProjectTeam: toBucketProjectTeam(a.ProjectTeam),
+ }
+}
+
+func toRawObjectACL(rules []ACLRule) []*raw.ObjectAccessControl {
+ if len(rules) == 0 {
+ return nil
+ }
+ r := make([]*raw.ObjectAccessControl, 0, len(rules))
+ for _, rule := range rules {
+ r = append(r, rule.toRawObjectAccessControl("")) // bucket name unnecessary
}
return r
}
+
+func toRawBucketACL(rules []ACLRule) []*raw.BucketAccessControl {
+ if len(rules) == 0 {
+ return nil
+ }
+ r := make([]*raw.BucketAccessControl, 0, len(rules))
+ for _, rule := range rules {
+ r = append(r, rule.toRawBucketAccessControl("")) // bucket name unnecessary
+ }
+ return r
+}
+
+func (r ACLRule) toRawBucketAccessControl(bucket string) *raw.BucketAccessControl {
+ return &raw.BucketAccessControl{
+ Bucket: bucket,
+ Entity: string(r.Entity),
+ Role: string(r.Role),
+ // The other fields are not settable.
+ }
+}
+
+func (r ACLRule) toRawObjectAccessControl(bucket string) *raw.ObjectAccessControl {
+ return &raw.ObjectAccessControl{
+ Bucket: bucket,
+ Entity: string(r.Entity),
+ Role: string(r.Role),
+ // The other fields are not settable.
+ }
+}
+
+func toBucketProjectTeam(p *raw.BucketAccessControlProjectTeam) *ProjectTeam {
+ if p == nil {
+ return nil
+ }
+ return &ProjectTeam{
+ ProjectNumber: p.ProjectNumber,
+ Team: p.Team,
+ }
+}
+
+func toObjectProjectTeam(p *raw.ObjectAccessControlProjectTeam) *ProjectTeam {
+ if p == nil {
+ return nil
+ }
+ return &ProjectTeam{
+ ProjectNumber: p.ProjectNumber,
+ Team: p.Team,
+ }
+}
diff --git a/vendor/cloud.google.com/go/storage/bucket.go b/vendor/cloud.google.com/go/storage/bucket.go
index 93473ce..1c23979 100644
--- a/vendor/cloud.google.com/go/storage/bucket.go
+++ b/vendor/cloud.google.com/go/storage/bucket.go
@@ -82,6 +82,12 @@ func (b *BucketHandle) Create(ctx context.Context, projectID string, attrs *Buck
}
req := b.c.raw.Buckets.Insert(projectID, bkt)
setClientHeader(req.Header())
+ if attrs != nil && attrs.PredefinedACL != "" {
+ req.PredefinedAcl(attrs.PredefinedACL)
+ }
+ if attrs != nil && attrs.PredefinedDefaultObjectACL != "" {
+ req.PredefinedDefaultObjectAcl(attrs.PredefinedDefaultObjectACL)
+ }
return runWithRetry(ctx, func() error { _, err := req.Context(ctx).Do(); return err })
}
@@ -188,6 +194,12 @@ func (b *BucketHandle) Update(ctx context.Context, uattrs BucketAttrsToUpdate) (
if err != nil {
return nil, err
}
+ if uattrs.PredefinedACL != "" {
+ req.PredefinedAcl(uattrs.PredefinedACL)
+ }
+ if uattrs.PredefinedDefaultObjectACL != "" {
+ req.PredefinedDefaultObjectAcl(uattrs.PredefinedDefaultObjectACL)
+ }
// TODO(jba): retry iff metagen is set?
rb, err := req.Context(ctx).Do()
if err != nil {
@@ -223,6 +235,20 @@ type BucketAttrs struct {
// apply to new objects when no object ACL is provided.
DefaultObjectACL []ACLRule
+ // If not empty, applies a predefined set of access controls. It should be set
+ // only when creating a bucket.
+ // It is always empty for BucketAttrs returned from the service.
+ // See https://cloud.google.com/storage/docs/json_api/v1/buckets/insert
+ // for valid values.
+ PredefinedACL string
+
+ // If not empty, applies a predefined set of default object access controls.
+ // It should be set only when creating a bucket.
+ // It is always empty for BucketAttrs returned from the service.
+ // See https://cloud.google.com/storage/docs/json_api/v1/buckets/insert
+ // for valid values.
+ PredefinedDefaultObjectACL string
+
// Location is the location of the bucket. It defaults to "US".
Location string
@@ -272,6 +298,12 @@ type BucketAttrs struct {
// The encryption configuration used by default for newly inserted objects.
Encryption *BucketEncryption
+
+ // The logging configuration.
+ Logging *BucketLogging
+
+ // The website configuration.
+ Website *BucketWebsite
}
// Lifecycle is the lifecycle configuration for objects in the bucket.
@@ -389,6 +421,34 @@ type LifecycleCondition struct {
NumNewerVersions int64
}
+// BucketLogging holds the bucket's logging configuration, which defines the
+// destination bucket and optional name prefix for the current bucket's
+// logs.
+type BucketLogging struct {
+ // The destination bucket where the current bucket's logs
+ // should be placed.
+ LogBucket string
+
+ // A prefix for log object names.
+ LogObjectPrefix string
+}
+
+// Website holds the bucket's website configuration, controlling how the
+// service behaves when accessing bucket contents as a web site. See
+// https://cloud.google.com/storage/docs/static-website for more information.
+type BucketWebsite struct {
+ // If the requested object path is missing, the service will ensure the path has
+ // a trailing '/', append this suffix, and attempt to retrieve the resulting
+ // object. This allows the creation of index.html objects to represent directory
+ // pages.
+ MainPageSuffix string
+
+ // If the requested object path is missing, and any mainPageSuffix object is
+ // missing, if applicable, the service will return the named object from this
+ // bucket as the content for a 404 Not Found result.
+ NotFoundPage string
+}
+
func newBucket(b *raw.Bucket) (*BucketAttrs, error) {
if b == nil {
return nil, nil
@@ -397,52 +457,28 @@ func newBucket(b *raw.Bucket) (*BucketAttrs, error) {
if err != nil {
return nil, err
}
- bucket := &BucketAttrs{
+ return &BucketAttrs{
Name: b.Name,
Location: b.Location,
MetaGeneration: b.Metageneration,
StorageClass: b.StorageClass,
Created: convertTime(b.TimeCreated),
VersioningEnabled: b.Versioning != nil && b.Versioning.Enabled,
+ ACL: toBucketACLRules(b.Acl),
+ DefaultObjectACL: toObjectACLRules(b.DefaultObjectAcl),
Labels: b.Labels,
RequesterPays: b.Billing != nil && b.Billing.RequesterPays,
Lifecycle: toLifecycle(b.Lifecycle),
RetentionPolicy: rp,
CORS: toCORS(b.Cors),
Encryption: toBucketEncryption(b.Encryption),
- }
- acl := make([]ACLRule, len(b.Acl))
- for i, rule := range b.Acl {
- acl[i] = ACLRule{
- Entity: ACLEntity(rule.Entity),
- Role: ACLRole(rule.Role),
- }
- }
- bucket.ACL = acl
- objACL := make([]ACLRule, len(b.DefaultObjectAcl))
- for i, rule := range b.DefaultObjectAcl {
- objACL[i] = ACLRule{
- Entity: ACLEntity(rule.Entity),
- Role: ACLRole(rule.Role),
- }
- }
- bucket.DefaultObjectACL = objACL
- return bucket, nil
+ Logging: toBucketLogging(b.Logging),
+ Website: toBucketWebsite(b.Website),
+ }, nil
}
// toRawBucket copies the editable attribute from b to the raw library's Bucket type.
func (b *BucketAttrs) toRawBucket() *raw.Bucket {
- var acl []*raw.BucketAccessControl
- if len(b.ACL) > 0 {
- acl = make([]*raw.BucketAccessControl, len(b.ACL))
- for i, rule := range b.ACL {
- acl[i] = &raw.BucketAccessControl{
- Entity: string(rule.Entity),
- Role: string(rule.Role),
- }
- }
- }
- dACL := toRawObjectACL(b.DefaultObjectACL)
// Copy label map.
var labels map[string]string
if len(b.Labels) > 0 {
@@ -464,10 +500,10 @@ func (b *BucketAttrs) toRawBucket() *raw.Bucket {
}
return &raw.Bucket{
Name: b.Name,
- DefaultObjectAcl: dACL,
Location: b.Location,
StorageClass: b.StorageClass,
- Acl: acl,
+ Acl: toRawBucketACL(b.ACL),
+ DefaultObjectAcl: toRawObjectACL(b.DefaultObjectACL),
Versioning: v,
Labels: labels,
Billing: bb,
@@ -475,6 +511,8 @@ func (b *BucketAttrs) toRawBucket() *raw.Bucket {
RetentionPolicy: b.RetentionPolicy.toRawRetentionPolicy(),
Cors: toRawCORS(b.CORS),
Encryption: b.Encryption.toRawBucketEncryption(),
+ Logging: b.Logging.toRawBucketLogging(),
+ Website: b.Website.toRawBucketWebsite(),
}
}
@@ -536,6 +574,20 @@ type BucketAttrsToUpdate struct {
// If set, replaces the lifecycle configuration of the bucket.
Lifecycle *Lifecycle
+ // If set, replaces the logging configuration of the bucket.
+ Logging *BucketLogging
+
+ // If set, replaces the website configuration of the bucket.
+ Website *BucketWebsite
+
+ // If not empty, applies a predefined set of access controls.
+ // See https://cloud.google.com/storage/docs/json_api/v1/buckets/patch.
+ PredefinedACL string
+
+ // If not empty, applies a predefined set of default object access controls.
+ // See https://cloud.google.com/storage/docs/json_api/v1/buckets/patch.
+ PredefinedDefaultObjectACL string
+
setLabels map[string]string
deleteLabels map[string]bool
}
@@ -595,6 +647,32 @@ func (ua *BucketAttrsToUpdate) toRawBucket() *raw.Bucket {
if ua.Lifecycle != nil {
rb.Lifecycle = toRawLifecycle(*ua.Lifecycle)
}
+ if ua.Logging != nil {
+ if *ua.Logging == (BucketLogging{}) {
+ rb.NullFields = append(rb.NullFields, "Logging")
+ rb.Logging = nil
+ } else {
+ rb.Logging = ua.Logging.toRawBucketLogging()
+ }
+ }
+ if ua.Website != nil {
+ if *ua.Website == (BucketWebsite{}) {
+ rb.NullFields = append(rb.NullFields, "Website")
+ rb.Website = nil
+ } else {
+ rb.Website = ua.Website.toRawBucketWebsite()
+ }
+ }
+ if ua.PredefinedACL != "" {
+ // Clear ACL or the call will fail.
+ rb.Acl = nil
+ rb.ForceSendFields = append(rb.ForceSendFields, "Acl")
+ }
+ if ua.PredefinedDefaultObjectACL != "" {
+ // Clear ACLs or the call will fail.
+ rb.DefaultObjectAcl = nil
+ rb.ForceSendFields = append(rb.ForceSendFields, "DefaultObjectAcl")
+ }
if ua.setLabels != nil || ua.deleteLabels != nil {
rb.Labels = map[string]string{}
for k, v := range ua.setLabels {
@@ -612,7 +690,7 @@ func (ua *BucketAttrsToUpdate) toRawBucket() *raw.Bucket {
// If returns a new BucketHandle that applies a set of preconditions.
// Preconditions already set on the BucketHandle are ignored.
-// Operations on the new handle will only occur if the preconditions are
+// Operations on the new handle will return an error if the preconditions are not
// satisfied. The only valid preconditions for buckets are MetagenerationMatch
// and MetagenerationNotMatch.
func (b *BucketHandle) If(conds BucketConditions) *BucketHandle {
@@ -836,6 +914,46 @@ func toBucketEncryption(e *raw.BucketEncryption) *BucketEncryption {
return &BucketEncryption{DefaultKMSKeyName: e.DefaultKmsKeyName}
}
+func (b *BucketLogging) toRawBucketLogging() *raw.BucketLogging {
+ if b == nil {
+ return nil
+ }
+ return &raw.BucketLogging{
+ LogBucket: b.LogBucket,
+ LogObjectPrefix: b.LogObjectPrefix,
+ }
+}
+
+func toBucketLogging(b *raw.BucketLogging) *BucketLogging {
+ if b == nil {
+ return nil
+ }
+ return &BucketLogging{
+ LogBucket: b.LogBucket,
+ LogObjectPrefix: b.LogObjectPrefix,
+ }
+}
+
+func (w *BucketWebsite) toRawBucketWebsite() *raw.BucketWebsite {
+ if w == nil {
+ return nil
+ }
+ return &raw.BucketWebsite{
+ MainPageSuffix: w.MainPageSuffix,
+ NotFoundPage: w.NotFoundPage,
+ }
+}
+
+func toBucketWebsite(w *raw.BucketWebsite) *BucketWebsite {
+ if w == nil {
+ return nil
+ }
+ return &BucketWebsite{
+ MainPageSuffix: w.MainPageSuffix,
+ NotFoundPage: w.NotFoundPage,
+ }
+}
+
// Objects returns an iterator over the objects in the bucket that match the Query q.
// If q is nil, no filtering is done.
func (b *BucketHandle) Objects(ctx context.Context, q *Query) *ObjectIterator {
diff --git a/vendor/cloud.google.com/go/storage/copy.go b/vendor/cloud.google.com/go/storage/copy.go
index 98ca5bd..39da383 100644
--- a/vendor/cloud.google.com/go/storage/copy.go
+++ b/vendor/cloud.google.com/go/storage/copy.go
@@ -115,6 +115,9 @@ func (c *Copier) callRewrite(ctx context.Context, rawObj *raw.Object) (*raw.Rewr
if c.DestinationKMSKeyName != "" {
call.DestinationKmsKeyName(c.DestinationKMSKeyName)
}
+ if c.PredefinedACL != "" {
+ call.DestinationPredefinedAcl(c.PredefinedACL)
+ }
if err := applyConds("Copy destination", c.dst.gen, c.dst.conds, call); err != nil {
return nil, err
}
@@ -209,6 +212,9 @@ func (c *Composer) Run(ctx context.Context) (attrs *ObjectAttrs, err error) {
if c.dst.userProject != "" {
call.UserProject(c.dst.userProject)
}
+ if c.PredefinedACL != "" {
+ call.DestinationPredefinedAcl(c.PredefinedACL)
+ }
if err := setEncryptionHeaders(call.Header(), c.dst.encryptionKey, false); err != nil {
return nil, err
}
diff --git a/vendor/cloud.google.com/go/storage/doc.go b/vendor/cloud.google.com/go/storage/doc.go
index 5bd7708..e277f1d 100644
--- a/vendor/cloud.google.com/go/storage/doc.go
+++ b/vendor/cloud.google.com/go/storage/doc.go
@@ -22,9 +22,11 @@ https://cloud.google.com/storage/docs.
See https://godoc.org/cloud.google.com/go for authentication, timeouts,
connection pooling and similar aspects of this package.
-All of the methods of this package use exponential backoff to retry calls
-that fail with certain errors, as described in
-https://cloud.google.com/storage/docs/exponential-backoff.
+All of the methods of this package use exponential backoff to retry calls that fail
+with certain errors, as described in
+https://cloud.google.com/storage/docs/exponential-backoff. Retrying continues
+indefinitely unless the controlling context is canceled or the client is closed. See
+context.WithTimeout and context.WithCancel.
Creating a Client
@@ -161,5 +163,14 @@ SignedURL for details.
// TODO: Handle error.
}
fmt.Println(url)
+
+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:
+
+ if e, ok := err.(*googleapi.Error); ok {
+ if e.Code = 409 { ... }
+ }
*/
package storage // import "cloud.google.com/go/storage"
diff --git a/vendor/cloud.google.com/go/storage/go110.go b/vendor/cloud.google.com/go/storage/go110.go
index 75be3cb..206813f 100644
--- a/vendor/cloud.google.com/go/storage/go110.go
+++ b/vendor/cloud.google.com/go/storage/go110.go
@@ -24,6 +24,8 @@ func shouldRetry(err error) bool {
// Retry on 429 and 5xx, according to
// https://cloud.google.com/storage/docs/exponential-backoff.
return e.Code == 429 || (e.Code >= 500 && e.Code < 600)
+ case interface{ Temporary() bool }:
+ return e.Temporary()
default:
return false
}
diff --git a/vendor/cloud.google.com/go/storage/go17.go b/vendor/cloud.google.com/go/storage/go17.go
index 39b8177..5950205 100644
--- a/vendor/cloud.google.com/go/storage/go17.go
+++ b/vendor/cloud.google.com/go/storage/go17.go
@@ -24,3 +24,7 @@ import (
func withContext(r *http.Request, ctx context.Context) *http.Request {
return r.WithContext(ctx)
}
+
+func goHTTPUncompressed(res *http.Response) bool {
+ return res.Uncompressed
+}
diff --git a/vendor/cloud.google.com/go/storage/not_go110.go b/vendor/cloud.google.com/go/storage/not_go110.go
index 700fde1..66fa45b 100644
--- a/vendor/cloud.google.com/go/storage/not_go110.go
+++ b/vendor/cloud.google.com/go/storage/not_go110.go
@@ -34,6 +34,8 @@ func shouldRetry(err error) bool {
// Unfortunately the error type is unexported, so we resort to string
// matching.
return strings.Contains(e.Error(), "REFUSED_STREAM")
+ case interface{ Temporary() bool }:
+ return e.Temporary()
default:
return false
}
diff --git a/vendor/cloud.google.com/go/storage/not_go17.go b/vendor/cloud.google.com/go/storage/not_go17.go
index 0efb3e9..28b5847 100644
--- a/vendor/cloud.google.com/go/storage/not_go17.go
+++ b/vendor/cloud.google.com/go/storage/not_go17.go
@@ -24,3 +24,10 @@ func withContext(r *http.Request, _ interface{}) *http.Request {
// In Go 1.6 and below, ignore the context.
return r
}
+
+// Go 1.6 doesn't have http.Response.Uncompressed, so we can't know whether the Go
+// HTTP stack uncompressed a gzip file. As a good approximation, assume that
+// the lack of a Content-Length header means that it did uncompress.
+func goHTTPUncompressed(res *http.Response) bool {
+ return res.Header.Get("Content-Length") == ""
+}
diff --git a/vendor/cloud.google.com/go/storage/reader.go b/vendor/cloud.google.com/go/storage/reader.go
index c0f26bf..1fdc197 100644
--- a/vendor/cloud.google.com/go/storage/reader.go
+++ b/vendor/cloud.google.com/go/storage/reader.go
@@ -25,6 +25,7 @@ import (
"reflect"
"strconv"
"strings"
+ "time"
"cloud.google.com/go/internal/trace"
"golang.org/x/net/context"
@@ -130,7 +131,11 @@ func (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, length int64)
if err != nil {
return nil, err
}
- var size int64 // total size of object, even if a range was requested.
+ var (
+ size int64 // total size of object, even if a range was requested.
+ checkCRC bool
+ crc uint32
+ )
if res.StatusCode == http.StatusPartialContent {
cr := strings.TrimSpace(res.Header.Get("Content-Range"))
if !strings.HasPrefix(cr, "bytes ") || !strings.Contains(cr, "/") {
@@ -143,6 +148,18 @@ func (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, length int64)
}
} else {
size = res.ContentLength
+ // Check the CRC iff all of the following hold:
+ // - We asked for content (length != 0).
+ // - We got all the content (status != PartialContent).
+ // - The server sent a CRC header.
+ // - The Go http stack did not uncompress the file.
+ // - We were not served compressed data that was uncompressed on download.
+ // The problem with the last two cases is that the CRC will not match -- GCS
+ // computes it on the compressed contents, but we compute it on the
+ // uncompressed contents.
+ if length != 0 && !goHTTPUncompressed(res) && !uncompressedByServer(res) {
+ crc, checkCRC = parseCRC32c(res)
+ }
}
remain := res.ContentLength
@@ -152,14 +169,6 @@ func (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, length int64)
body.Close()
body = emptyBody
}
- var (
- checkCRC bool
- crc uint32
- )
- // Even if there is a CRC header, we can't compute the hash on partial data.
- if remain == size {
- crc, checkCRC = parseCRC32c(res)
- }
return &Reader{
body: body,
size: size,
@@ -167,12 +176,20 @@ func (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, length int64)
contentType: res.Header.Get("Content-Type"),
contentEncoding: res.Header.Get("Content-Encoding"),
cacheControl: res.Header.Get("Cache-Control"),
+ lastModified: res.Header.Get("Last-Modified"),
wantCRC: crc,
checkCRC: checkCRC,
reopen: reopen,
}, nil
}
+func uncompressedByServer(res *http.Response) bool {
+ // If the data is stored as gzip but is not encoded as gzip, then it
+ // was uncompressed by the server.
+ return res.Header.Get("X-Goog-Stored-Content-Encoding") == "gzip" &&
+ res.Header.Get("Content-Encoding") != "gzip"
+}
+
func parseCRC32c(res *http.Response) (uint32, bool) {
const prefix = "crc32c="
for _, spec := range res.Header["X-Goog-Hash"] {
@@ -200,10 +217,10 @@ type Reader struct {
contentType string
contentEncoding string
cacheControl string
+ lastModified string
checkCRC bool // should we check the CRC?
wantCRC uint32 // the CRC32c value the server sent in the header
gotCRC uint32 // running crc
- checkedCRC bool // did we check the CRC? (For tests.)
reopen func(seen int64) (*http.Response, error)
}
@@ -222,8 +239,7 @@ func (r *Reader) Read(p []byte) (int, error) {
// Check CRC here. It would be natural to check it in Close, but
// everybody defers Close on the assumption that it doesn't return
// anything worth looking at.
- if r.remain == 0 { // Only check if we have Content-Length.
- r.checkedCRC = true
+ if err == io.EOF {
if r.gotCRC != r.wantCRC {
return n, fmt.Errorf("storage: bad CRC on read: got %d, want %d",
r.gotCRC, r.wantCRC)
@@ -288,3 +304,11 @@ func (r *Reader) ContentEncoding() string {
func (r *Reader) CacheControl() string {
return r.cacheControl
}
+
+// LastModified returns the value of the Last-Modified header.
+func (r *Reader) LastModified() (time.Time, error) {
+ if r.lastModified == "" {
+ return time.Time{}, errors.New("storage: no Last-Modified header")
+ }
+ return http.ParseTime(r.lastModified)
+}
diff --git a/vendor/cloud.google.com/go/storage/storage.go b/vendor/cloud.google.com/go/storage/storage.go
index 2681922..f47654a 100644
--- a/vendor/cloud.google.com/go/storage/storage.go
+++ b/vendor/cloud.google.com/go/storage/storage.go
@@ -346,7 +346,7 @@ func (o *ObjectHandle) Generation(gen int64) *ObjectHandle {
// If returns a new ObjectHandle that applies a set of preconditions.
// Preconditions already set on the ObjectHandle are ignored.
-// Operations on the new handle will only occur if the preconditions are
+// Operations on the new handle will return an error if the preconditions are not
// satisfied. See https://cloud.google.com/storage/docs/generations-preconditions
// for more details.
func (o *ObjectHandle) If(conds Conditions) *ObjectHandle {
@@ -467,6 +467,9 @@ func (o *ObjectHandle) Update(ctx context.Context, uattrs ObjectAttrsToUpdate) (
if o.userProject != "" {
call.UserProject(o.userProject)
}
+ if uattrs.PredefinedACL != "" {
+ call.PredefinedAcl(uattrs.PredefinedACL)
+ }
if err := setEncryptionHeaders(call.Header(), o.encryptionKey, false); err != nil {
return nil, err
}
@@ -501,6 +504,10 @@ type ObjectAttrsToUpdate struct {
CacheControl optional.String
Metadata map[string]string // set to map[string]string{} to delete
ACL []ACLRule
+
+ // If not empty, applies a predefined set of access controls. ACL must be nil.
+ // See https://cloud.google.com/storage/docs/json_api/v1/objects/patch.
+ PredefinedACL string
}
// Delete deletes the single specified object.
@@ -595,23 +602,8 @@ func parseKey(key []byte) (*rsa.PrivateKey, error) {
return parsed, nil
}
-func toRawObjectACL(oldACL []ACLRule) []*raw.ObjectAccessControl {
- var acl []*raw.ObjectAccessControl
- if len(oldACL) > 0 {
- acl = make([]*raw.ObjectAccessControl, len(oldACL))
- for i, rule := range oldACL {
- acl[i] = &raw.ObjectAccessControl{
- Entity: string(rule.Entity),
- Role: string(rule.Role),
- }
- }
- }
- return acl
-}
-
// toRawObject copies the editable attributes from o to the raw library's Object type.
func (o *ObjectAttrs) toRawObject(bucket string) *raw.Object {
- acl := toRawObjectACL(o.ACL)
return &raw.Object{
Bucket: bucket,
Name: o.Name,
@@ -621,7 +613,7 @@ func (o *ObjectAttrs) toRawObject(bucket string) *raw.Object {
CacheControl: o.CacheControl,
ContentDisposition: o.ContentDisposition,
StorageClass: o.StorageClass,
- Acl: acl,
+ Acl: toRawObjectACL(o.ACL),
Metadata: o.Metadata,
}
}
@@ -649,6 +641,14 @@ type ObjectAttrs struct {
// ACL is the list of access control rules for the object.
ACL []ACLRule
+ // If not empty, applies a predefined set of access controls. It should be set
+ // only when writing, copying or composing an object. When copying or composing,
+ // it acts as the destinationPredefinedAcl parameter.
+ // PredefinedACL is always empty for ObjectAttrs returned from the service.
+ // See https://cloud.google.com/storage/docs/json_api/v1/objects/insert
+ // for valid values.
+ PredefinedACL string
+
// Owner is the owner of the object. This field is read-only.
//
// If non-zero, it is in the form of "user-<userId>".
@@ -751,13 +751,6 @@ func newObject(o *raw.Object) *ObjectAttrs {
if o == nil {
return nil
}
- acl := make([]ACLRule, len(o.Acl))
- for i, rule := range o.Acl {
- acl[i] = ACLRule{
- Entity: ACLEntity(rule.Entity),
- Role: ACLRole(rule.Role),
- }
- }
owner := ""
if o.Owner != nil {
owner = o.Owner.Entity
@@ -774,7 +767,7 @@ func newObject(o *raw.Object) *ObjectAttrs {
ContentType: o.ContentType,
ContentLanguage: o.ContentLanguage,
CacheControl: o.CacheControl,
- ACL: acl,
+ ACL: toObjectACLRules(o.Acl),
Owner: owner,
ContentEncoding: o.ContentEncoding,
ContentDisposition: o.ContentDisposition,
@@ -1073,4 +1066,12 @@ func setEncryptionHeaders(headers http.Header, key []byte, copySource bool) erro
return nil
}
-// TODO(jbd): Add storage.objects.watch.
+// ServiceAccount fetches the email address of the given project's Google Cloud Storage service account.
+func (c *Client) ServiceAccount(ctx context.Context, projectID string) (string, error) {
+ r := c.raw.Projects.ServiceAccount.Get(projectID)
+ res, err := r.Context(ctx).Do()
+ if err != nil {
+ return "", err
+ }
+ return res.EmailAddress, nil
+}
diff --git a/vendor/cloud.google.com/go/storage/storage.replay b/vendor/cloud.google.com/go/storage/storage.replay
new file mode 100644
index 0000000..4bac15e
--- /dev/null
+++ b/vendor/cloud.google.com/go/storage/storage.replay
@@ -0,0 +1,48071 @@
+{
+ "Initial": "IjIwMTgtMDctMjVUMTg6MjI6NTQuMDA5NjI4NjI4WiI=",
+ "Version": "0.1",
+ "Entries": [
+ {
+ "ID": "995489b78c4d7f4a",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "60"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5600f0fe5749e0dd4c451c8a13e48e12/16945114725680895320;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIn0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "461"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:22:55 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543274000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcau12:4238,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=_r9YW_D4Hoaxswa5pbcI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/5:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WnFEWUxBY0M5Wk5EWlJxemprZmh6Q1pIWjE3U1VqOWxjcXd0aUxmakRsOFk5RTRFZGxMZzA3SUZ3RzNLdXhxYW9oT1J5VHdtNmNhSS1tM2Fnb1V3WFdTZWZNN3NvRUNCV0RnMldoU0R6YU9seGRBZGZKRFBKSWRtbGl1ZU5SdUZQN1RfWkJBWVQ0bWsySGFDZEpkb2VVaUpwY0E5Q1N2RmFobi1lcEpMYlQ4cm1Fd19CMFZPd0k5TEkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Urqfg76Y1YZDSpvVITupScS1ibu6nNvZqgWcU293giOAQIFxews7OG4nFnwXBRNaAkHIvJ1GYHtTiPggqmHXlAoRyCI4g"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuMDg0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIyOjU1LjA4NFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "1de49a660b2417a4",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "60"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b9c0a8bb92d2406546b8a1ed07390987/17636946334912976927;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAxIn0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "461"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:22:56 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543275000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcae12:4379,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=_79YW772Goaxswa5pbcI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/5:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WkVfc2lCWmxya2NVUXdCMmZNYmxfRTE3MkRrTFl5djgxY2ZqNy01b1FpSXc1UW5jTVFEUFV1dnFvMXB4YXNOdGVsMFZvSjNlY3MwVDJ2X0FsRU5RX1o2enpxZ3lQdjByeGNCSnZlMEY1QjlwWFVaVG1sdGdxY1ZINnlXUGZsWHBDRkh5eXBVdjhIMnhldml4bjVORkJGUW5hUzl6OTFNWURvY3FkbmhDZHc3ZXhpSnZtZVk4cTU4WUkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrB3n7WJ55z6h-ma5vJIMPr6y3GJ8XI5aGcPMJmLVVTrjI3Kmj4zc8skLWqlPOCaeyHRt9QLgsXL5lIGJxrbc-UQdgVQQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDEiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuODM3WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIyOjU1LjgzN1oiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "53bf8cf3c3008d2b",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0001?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c0f4ec74810b6ab38cb4bab724a63721/6831446857834371388;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0001?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:22:56 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:22:56 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543276000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaa9:4028,/bns/xi/borg/xi/bns/blobstore2/bitpusher/108.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=AMBYW4fwAqu_swaTlJmwBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/108.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/108:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WkVfc2lCWmxya2NVUXdCMmZNYmxfRTE3MkRrTFl5djgxY2ZqNy01b1FpSXc1UW5jTVFEUFV1dnFvMXB4YXNOdGVsMFZvSjNlY3MwVDJ2X0FsRU5RX1o2enpxZ3lQdjByeGNCSnZlMEY1QjlwWFVaVG1sdGdxY1ZINnlXUGZsWHBDRkh5eXBVdjhIMnhldml4bjVORkJGUW5hUzl6OTFNWURvY3FkbmhDZHc3ZXhpSnZtZVk4cTU4WUkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UreINK7pJVCM0s_e5kC5MuHSg9MwliX904D0KYvcJzc7fduY74BuImHy8a5kStAInZ2-2Td97S5Isb8Ljprq24Uicp4Lg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDEiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuODM3WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIyOjU1LjgzN1oiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDEiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDEiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBRT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "5ccd6c9835c627fd",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0001?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ff10dc1b83007e287be3ca4148d13632/14472408875698920024;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0001?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:22:56 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543276000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbad13:4405,/bns/xi/borg/xi/bns/blobstore2/bitpusher/86.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=AMBYW5CeFK-1swbWtbjQDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/86.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/86:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WkVfc2lCWmxya2NVUXdCMmZNYmxfRTE3MkRrTFl5djgxY2ZqNy01b1FpSXc1UW5jTVFEUFV1dnFvMXB4YXNOdGVsMFZvSjNlY3MwVDJ2X0FsRU5RX1o2enpxZ3lQdjByeGNCSnZlMEY1QjlwWFVaVG1sdGdxY1ZINnlXUGZsWHBDRkh5eXBVdjhIMnhldml4bjVORkJGUW5hUzl6OTFNWURvY3FkbmhDZHc3ZXhpSnZtZVk4cTU4WUkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq4pYFBLd1Qs68nqfHZyNdcLxcKLzgdmfOfB6t6csamQBFtlWRwPrdieaDhbce2ZXbhbPb5BzWhHvCMLN_4PMJ8N5bWHw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "d7fc86dbeaf709a3",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "543"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "67c4d3a8a81f260d4f918f39d1a35a4a/3666909394325412725;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJsYWJlbHMiOnsiZW1wdHkiOiIiLCJsMSI6InYxIn0sImxpZmVjeWNsZSI6eyJydWxlIjpbeyJhY3Rpb24iOnsic3RvcmFnZUNsYXNzIjoiTkVBUkxJTkUiLCJ0eXBlIjoiU2V0U3RvcmFnZUNsYXNzIn0sImNvbmRpdGlvbiI6eyJhZ2UiOjEwLCJjcmVhdGVkQmVmb3JlIjoiMjAxNy0wMS0wMSIsImlzTGl2ZSI6ZmFsc2UsIm1hdGNoZXNTdG9yYWdlQ2xhc3MiOlsiTVVMVElfUkVHSU9OQUwiLCJTVEFOREFSRCJdLCJudW1OZXdlclZlcnNpb25zIjozfX0seyJhY3Rpb24iOnsidHlwZSI6IkRlbGV0ZSJ9LCJjb25kaXRpb24iOnsiYWdlIjozMCwiY3JlYXRlZEJlZm9yZSI6IjIwMTctMDEtMDEiLCJpc0xpdmUiOnRydWUsIm1hdGNoZXNTdG9yYWdlQ2xhc3MiOlsiTkVBUkxJTkUiXSwibnVtTmV3ZXJWZXJzaW9ucyI6MTB9fV19LCJsb2NhdGlvbiI6IlVTIiwibmFtZSI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsInN0b3JhZ2VDbGFzcyI6Ik5FQVJMSU5FIiwidmVyc2lvbmluZyI6eyJlbmFibGVkIjp0cnVlfX0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "1120"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:22:57 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543275000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaau9:4168,/bns/xi/borg/xi/bns/blobstore2/bitpusher/61.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=AMBYW7bFLI24swa_vo3gCg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/61.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/61:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WkVfc2lCWmxya2NVUXdCMmZNYmxfRTE3MkRrTFl5djgxY2ZqNy01b1FpSXc1UW5jTVFEUFV1dnFvMXB4YXNOdGVsMFZvSjNlY3MwVDJ2X0FsRU5RX1o2enpxZ3lQdjByeGNCSnZlMEY1QjlwWFVaVG1sdGdxY1ZINnlXUGZsWHBDRkh5eXBVdjhIMnhldml4bjVORkJGUW5hUzl6OTFNWURvY3FkbmhDZHc3ZXhpSnZtZVk4cTU4WUkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqEBTQUGhFZHeNRb66t2-3ZJyRac4_B6jr4W8ae-MBvso6bhr8TfdUZ_pXAgKXUzDwq7nglUjGu9YkHB-A8-ph_JvnQdQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDEiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTcuMjU0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIyOjU3LjI1NFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJ2ZXJzaW9uaW5nIjogewogICJlbmFibGVkIjogdHJ1ZQogfSwKICJsaWZlY3ljbGUiOiB7CiAgInJ1bGUiOiBbCiAgIHsKICAgICJhY3Rpb24iOiB7CiAgICAgInR5cGUiOiAiU2V0U3RvcmFnZUNsYXNzIiwKICAgICAic3RvcmFnZUNsYXNzIjogIk5FQVJMSU5FIgogICAgfSwKICAgICJjb25kaXRpb24iOiB7CiAgICAgImFnZSI6IDEwLAogICAgICJjcmVhdGVkQmVmb3JlIjogIjIwMTctMDEtMDEiLAogICAgICJpc0xpdmUiOiBmYWxzZSwKICAgICAibWF0Y2hlc1N0b3JhZ2VDbGFzcyI6IFsKICAgICAgIk1VTFRJX1JFR0lPTkFMIiwKICAgICAgIlNUQU5EQVJEIgogICAgIF0sCiAgICAgIm51bU5ld2VyVmVyc2lvbnMiOiAzCiAgICB9CiAgIH0sCiAgIHsKICAgICJhY3Rpb24iOiB7CiAgICAgInR5cGUiOiAiRGVsZXRlIgogICAgfSwKICAgICJjb25kaXRpb24iOiB7CiAgICAgImFnZSI6IDMwLAogICAgICJjcmVhdGVkQmVmb3JlIjogIjIwMTctMDEtMDEiLAogICAgICJpc0xpdmUiOiB0cnVlLAogICAgICJtYXRjaGVzU3RvcmFnZUNsYXNzIjogWwogICAgICAiTkVBUkxJTkUiCiAgICAgXSwKICAgICAibnVtTmV3ZXJWZXJzaW9ucyI6IDEwCiAgICB9CiAgIH0KICBdCiB9LAogImxhYmVscyI6IHsKICAibDEiOiAidjEiLAogICJlbXB0eSI6ICIiCiB9LAogInN0b3JhZ2VDbGFzcyI6ICJORUFSTElORSIsCiAiZXRhZyI6ICJDQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "13f9c95dbd69ed1f",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0001?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "10ed1448a1837388ead397213204dc1f/11307871412189961361;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0001?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3393"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:22:57 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:22:57 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543276000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaw12:4143,/bns/xi/borg/xi/bns/blobstore2/bitpusher/95.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=AcBYW_PmGqy0swbR3ovADQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/95.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/95:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WkVfc2lCWmxya2NVUXdCMmZNYmxfRTE3MkRrTFl5djgxY2ZqNy01b1FpSXc1UW5jTVFEUFV1dnFvMXB4YXNOdGVsMFZvSjNlY3MwVDJ2X0FsRU5RX1o2enpxZ3lQdjByeGNCSnZlMEY1QjlwWFVaVG1sdGdxY1ZINnlXUGZsWHBDRkh5eXBVdjhIMnhldml4bjVORkJGUW5hUzl6OTFNWURvY3FkbmhDZHc3ZXhpSnZtZVk4cTU4WUkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqekkAkoWYCmbKcL-3l3yUvk9FClHt1syqek0Zx_5vF1mzqci3PdW_bDTuwxdTvWehuNlYmPU575-KwpGhNMcqo0oHRKQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDEiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTcuMjU0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIyOjU3LjI1NFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDEiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDEiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBRT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInZlcnNpb25pbmciOiB7CiAgImVuYWJsZWQiOiB0cnVlCiB9LAogImxpZmVjeWNsZSI6IHsKICAicnVsZSI6IFsKICAgewogICAgImFjdGlvbiI6IHsKICAgICAidHlwZSI6ICJTZXRTdG9yYWdlQ2xhc3MiLAogICAgICJzdG9yYWdlQ2xhc3MiOiAiTkVBUkxJTkUiCiAgICB9LAogICAgImNvbmRpdGlvbiI6IHsKICAgICAiYWdlIjogMTAsCiAgICAgImNyZWF0ZWRCZWZvcmUiOiAiMjAxNy0wMS0wMSIsCiAgICAgImlzTGl2ZSI6IGZhbHNlLAogICAgICJtYXRjaGVzU3RvcmFnZUNsYXNzIjogWwogICAgICAiTVVMVElfUkVHSU9OQUwiLAogICAgICAiU1RBTkRBUkQiCiAgICAgXSwKICAgICAibnVtTmV3ZXJWZXJzaW9ucyI6IDMKICAgIH0KICAgfSwKICAgewogICAgImFjdGlvbiI6IHsKICAgICAidHlwZSI6ICJEZWxldGUiCiAgICB9LAogICAgImNvbmRpdGlvbiI6IHsKICAgICAiYWdlIjogMzAsCiAgICAgImNyZWF0ZWRCZWZvcmUiOiAiMjAxNy0wMS0wMSIsCiAgICAgImlzTGl2ZSI6IHRydWUsCiAgICAgIm1hdGNoZXNTdG9yYWdlQ2xhc3MiOiBbCiAgICAgICJORUFSTElORSIKICAgICBdLAogICAgICJudW1OZXdlclZlcnNpb25zIjogMTAKICAgIH0KICAgfQogIF0KIH0sCiAibGFiZWxzIjogewogICJsMSI6ICJ2MSIsCiAgImVtcHR5IjogIiIKIH0sCiAic3RvcmFnZUNsYXNzIjogIk5FQVJMSU5FIiwKICJldGFnIjogIkNBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "5b957bdde178e6b7",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0001?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c7baa50c53056207ddce3e31cf985bdd/502371930816454062;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0001?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:22:58 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543275000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbj15:4375,/bns/xi/borg/xi/bns/blobstore2/bitpusher/7.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=AcBYW5uJK8GEygODroiYBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/7.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/7:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WkVfc2lCWmxya2NVUXdCMmZNYmxfRTE3MkRrTFl5djgxY2ZqNy01b1FpSXc1UW5jTVFEUFV1dnFvMXB4YXNOdGVsMFZvSjNlY3MwVDJ2X0FsRU5RX1o2enpxZ3lQdjByeGNCSnZlMEY1QjlwWFVaVG1sdGdxY1ZINnlXUGZsWHBDRkh5eXBVdjhIMnhldml4bjVORkJGUW5hUzl6OTFNWURvY3FkbmhDZHc3ZXhpSnZtZVk4cTU4WUkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq6HfB-Ap7f0ZNVNiSbqyM7RddIfUm_H6R-Ujgs_voNIKsVzQTVYFR-DPZuKTyGsRLEnaS7cJhLMhAo5CSQqsrmzxfXHQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "8ef7059e09937a2f",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ea2d385ffec5f59f94cc31d07de73ac4/8071277458449604298;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:22:58 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:22:58 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543278000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabn9:4397,/bns/xi/borg/xi/bns/blobstore2/bitpusher/134.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=AsBYW7LsC8q9swamsaLwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/134.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/134:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YWM5aWdTT2J2Q1Q5WVdBcjV4cmhvWUI0WmM3RXcxcFBXNUlwYTlnZ043VUJRMlRnZXpOOWF5d3c2Wmxxc25DVk50R0s1Z0RHZXQyZW9rTG9SVkxsTG1DLTM2b3RtQ3FpQ2JVUGRWUzdvTFN0T1Q5cjZRa1hSbFF6Ulc1LTN5QVRpNllNZEIyNVh6S2FzTWFVS1BEcHZPdTJIcUpUVHJ3dzBQMkNfek5ScHNZdGZ4QS1xenBvZm1uMU0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpTXNjLeGhcjCwi6QVHtwXOpN0GVBXgTkd__qZL58TII-4vOmDqpU7g8TrgwA2K6paygK9FqBlN6zIbK86ojYmTaaQBeA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuMDg0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIyOjU1LjA4NFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBRT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "04ff9054794c645a",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "82f51b269c16d363e16b7a82f9f5e091/15711959105127194599;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:00 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543278000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadccb5:4366,/bns/xi/borg/xi/bns/blobstore2/bitpusher/18.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=AsBYW-G5H-K8swbW8bjYCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/18.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/18:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YWM5aWdTT2J2Q1Q5WVdBcjV4cmhvWUI0WmM3RXcxcFBXNUlwYTlnZ043VUJRMlRnZXpOOWF5d3c2Wmxxc25DVk50R0s1Z0RHZXQyZW9rTG9SVkxsTG1DLTM2b3RtQ3FpQ2JVUGRWUzdvTFN0T1Q5cjZRa1hSbFF6Ulc1LTN5QVRpNllNZEIyNVh6S2FzTWFVS1BEcHZPdTJIcUpUVHJ3dzBQMkNfek5ScHNZdGZ4QS1xenBvZm1uMU0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoKTHX-9MDM6QE2C8ISfPtUdOAV2c7fZbC9QF3CT_brFjz3tkOUkraUQ5V89ptzaqbYeNOScEZsDp3luRk4oLYTe8tvdw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuMDg0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjAwLjAzMFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "2051f2e91a7fd4db",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "64"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "4f25fe138eb9bd2ea50934dfdd6174b5/4906458524258902019;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJsYWJlbHMiOnsiZW1wdHkiOiIiLCJsMSI6InYxIn0sInZlcnNpb25pbmciOnsiZW5hYmxlZCI6dHJ1ZX19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2818"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:01 GMT"
+ ],
+ "Etag": [
+ "CAM="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543278000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadacd12:4335,/bns/xi/borg/xi/bns/blobstore2/bitpusher/56.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=BMBYW9vuDa2yswaCrJ3IBA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/56.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/56:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YWM5aWdTT2J2Q1Q5WVdBcjV4cmhvWUI0WmM3RXcxcFBXNUlwYTlnZ043VUJRMlRnZXpOOWF5d3c2Wmxxc25DVk50R0s1Z0RHZXQyZW9rTG9SVkxsTG1DLTM2b3RtQ3FpQ2JVUGRWUzdvTFN0T1Q5cjZRa1hSbFF6Ulc1LTN5QVRpNllNZEIyNVh6S2FzTWFVS1BEcHZPdTJIcUpUVHJ3dzBQMkNfek5ScHNZdGZ4QS1xenBvZm1uMU0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo6iofDM-ll3yT2tM4L5n4nfwmL38MpguL1YZVa9r0uaSCY2uP_9Izyeqv36VOYUzFSs8Inyd0Ws1yY65zA1JplMxFK7Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuMDg0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjAxLjQyMloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjMiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FNPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FNPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBTT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FNPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQU09IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInZlcnNpb25pbmciOiB7CiAgImVuYWJsZWQiOiB0cnVlCiB9LAogImxhYmVscyI6IHsKICAibDEiOiAidjEiLAogICJlbXB0eSI6ICIiCiB9LAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQU09Igp9Cg=="
+ }
+ },
+ {
+ "ID": "5e8df13dfc8e224b",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "93"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "a6c178130b0518b4ded369bf47ff5743/12547421641618235680;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJsYWJlbHMiOnsiYWJzZW50IjpudWxsLCJlbXB0eSI6bnVsbCwibDEiOiJ2MiIsIm5ldyI6Im5ldyJ9LCJ2ZXJzaW9uaW5nIjp7ImVuYWJsZWQiOmZhbHNlfX0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2820"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:03 GMT"
+ ],
+ "Etag": [
+ "CAQ="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543281000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbbl15:4013,/bns/xi/borg/xi/bns/blobstore2/bitpusher/22.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=BcBYW-OxJs24swaRxZCoAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/22.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/22:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YWM5aWdTT2J2Q1Q5WVdBcjV4cmhvWUI0WmM3RXcxcFBXNUlwYTlnZ043VUJRMlRnZXpOOWF5d3c2Wmxxc25DVk50R0s1Z0RHZXQyZW9rTG9SVkxsTG1DLTM2b3RtQ3FpQ2JVUGRWUzdvTFN0T1Q5cjZRa1hSbFF6Ulc1LTN5QVRpNllNZEIyNVh6S2FzTWFVS1BEcHZPdTJIcUpUVHJ3dzBQMkNfek5ScHNZdGZ4QS1xenBvZm1uMU0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrSszCGooybiZ2xpL-g0HvR8qg5WtbmtmhVC4JtHIOUdQKb073FTmB_TrAPb1b5DHlRwg7oJhhG2IGg10_yFBFpwsG51A"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuMDg0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjAzLjEyM1oiLAogIm1ldGFnZW5lcmF0aW9uIjogIjQiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FRPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FRPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBUT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQVE9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FRPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQVE9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInZlcnNpb25pbmciOiB7CiAgImVuYWJsZWQiOiBmYWxzZQogfSwKICJsYWJlbHMiOiB7CiAgImwxIjogInYyIiwKICAibmV3IjogIm5ldyIKIH0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBUT0iCn0K"
+ }
+ },
+ {
+ "ID": "34105e43f12b0b98",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "77"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "184e0ba4f8220422d9590b96a85d4532/1741922164539695676;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJsaWZlY3ljbGUiOnsicnVsZSI6W3siYWN0aW9uIjp7InR5cGUiOiJEZWxldGUifSwiY29uZGl0aW9uIjp7ImFnZSI6MzB9fV19fQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2951"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:04 GMT"
+ ],
+ "Etag": [
+ "CAU="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543278000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaao15:4469,/bns/xi/borg/xi/bns/blobstore2/bitpusher/149.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=B8BYW_3cE8y8swbYrr3oAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/149.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/149:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YWM5aWdTT2J2Q1Q5WVdBcjV4cmhvWUI0WmM3RXcxcFBXNUlwYTlnZ043VUJRMlRnZXpOOWF5d3c2Wmxxc25DVk50R0s1Z0RHZXQyZW9rTG9SVkxsTG1DLTM2b3RtQ3FpQ2JVUGRWUzdvTFN0T1Q5cjZRa1hSbFF6Ulc1LTN5QVRpNllNZEIyNVh6S2FzTWFVS1BEcHZPdTJIcUpUVHJ3dzBQMkNfek5ScHNZdGZ4QS1xenBvZm1uMU0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq_7gb_hAU1_dVXGeK-VdjvcL5uSv9NaD1PLOeWkMpjdw02DM3UpZC86t4iy3n_Bca76HjdjVoT9sspvsVJu5NklI4XJg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuMDg0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA0LjYyNVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjUiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FVPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FVPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBVT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FVPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQVU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInZlcnNpb25pbmciOiB7CiAgImVuYWJsZWQiOiBmYWxzZQogfSwKICJsaWZlY3ljbGUiOiB7CiAgInJ1bGUiOiBbCiAgIHsKICAgICJhY3Rpb24iOiB7CiAgICAgInR5cGUiOiAiRGVsZXRlIgogICAgfSwKICAgICJjb25kaXRpb24iOiB7CiAgICAgImFnZSI6IDMwCiAgICB9CiAgIH0KICBdCiB9LAogImxhYmVscyI6IHsKICAibDEiOiAidjIiLAogICJuZXciOiAibmV3IgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FVPSIKfQo="
+ }
+ },
+ {
+ "ID": "276c43b1ffa1bd12",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=c1ef58858cb7e8a18a17831e2d5ad00897c407b4ee60c4f58cafe2d1c780"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2b6d53621406806ec1c910d65ec94c5d/5598290133490983882;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1jMWVmNTg4NThjYjdlOGExOGExNzgzMWUyZDVhZDAwODk3YzQwN2I0ZWU2MGM0ZjU4Y2FmZTJkMWM3ODANCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJjb25kZGVsIn0KDQotLWMxZWY1ODg1OGNiN2U4YTE4YTE3ODMxZTJkNWFkMDA4OTdjNDA3YjRlZTYwYzRmNThjYWZlMmQxYzc4MA0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQoNCmZvbw0KLS1jMWVmNTg4NThjYjdlOGExOGExNzgzMWUyZDVhZDAwODk3YzQwN2I0ZWU2MGM0ZjU4Y2FmZTJkMWM3ODAtLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3593"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:05 GMT"
+ ],
+ "Etag": [
+ "CIHA88HvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543284000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabj12:4211,/bns/xi/borg/xi/bns/blobstore2/bitpusher/140.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=CMBYW_rNNoa9swbN3qfoAg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/140.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/140:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YmwtYmZlSmtWb2M5WDNYcnVKaG5pUFpSNjNSbHFoR0dxcGkyQ3RUd3pJa0FDZXpkMkw1SnZLOW90MEgxTzlxbjNPZXRxRzJRd092Z1pVQm9CTHZvSmx0Zm9YVzVDVDZPZ0tPbzBJUy0zbjZBY3ZQc1lKRDhJN3dLVE9NNzJYSXplVExuYjNzVWdEdlM2c1NiV1hrY0tOb0ZfNm9fNXhVNW1YRFhuNko4Z1lQTkVPb3JJY0U1Wi1ScGswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqMON_zWKNvRxbt0O7jbsSGPTS4No0qGChbeBdI8yOPLG99F6O892998qlcsFVmckAE_rZ5kiJIwseo9kgadsTUk_s9Kw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb25kZGVsLzE1MzI1NDI5ODUyMzIzODUiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb25kZGVsIiwKICJuYW1lIjogImNvbmRkZWwiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NTIzMjM4NSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNS4yMzJaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDUuMjMyWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA1LjIzMloiLAogInNpemUiOiAiMyIsCiAibWQ1SGFzaCI6ICJyTDBZMjB6QytGenQ3MlZQek1TazJBPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29uZGRlbD9nZW5lcmF0aW9uPTE1MzI1NDI5ODUyMzIzODUmYWx0PW1lZGlhIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbmRkZWwvMTUzMjU0Mjk4NTIzMjM4NS9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29uZGRlbC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY29uZGRlbCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODUyMzIzODUiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNJSEE4OEh2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29uZGRlbC8xNTMyNTQyOTg1MjMyMzg1L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29uZGRlbC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbmRkZWwiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg1MjMyMzg1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNJSEE4OEh2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29uZGRlbC8xNTMyNTQyOTg1MjMyMzg1L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29uZGRlbC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbmRkZWwiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg1MjMyMzg1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDSUhBODhIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbmRkZWwvMTUzMjU0Mjk4NTIzMjM4NS91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb25kZGVsL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbmRkZWwiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg1MjMyMzg1IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDSUhBODhIdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiejhTdUhRPT0iLAogImV0YWciOiAiQ0lIQTg4SHZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "0553c8baa877e6eb",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/conddel?alt=json\u0026generation=1532542985232384",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d7025d22c7bddde31b785da565b7c9a5/9382884182404178777;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/conddel?alt=json\u0026generation=1532542985232384"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "12471"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:05 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:05 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543284000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadacc2:4342,/bns/xi/borg/xi/bns/blobstore2/bitpusher/114.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=CcBYW5vRGay9swbny6vAAQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/114.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/114:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YmwtYmZlSmtWb2M5WDNYcnVKaG5pUFpSNjNSbHFoR0dxcGkyQ3RUd3pJa0FDZXpkMkw1SnZLOW90MEgxTzlxbjNPZXRxRzJRd092Z1pVQm9CTHZvSmx0Zm9YVzVDVDZPZ0tPbzBJUy0zbjZBY3ZQc1lKRDhJN3dLVE9NNzJYSXplVExuYjNzVWdEdlM2c1NiV1hrY0tOb0ZfNm9fNXhVNW1YRFhuNko4Z1lQTkVPb3JJY0U1Wi1ScGswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrdyksvyvVGB9rEhOrCTdx5NXUKXdTqwPJdbNvlSdRMwcZL2bYMT6eiuIE3MbS2XiVlOmMQIs2d8OyE2-XBC7Or3h7rHg"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb25kZGVsIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6Ok9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29uZGRlbFxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YTo4NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6MjcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmRlbGV0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTEzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogT0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb25kZGVsXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1OT1RfRk9VTkQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6T0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb25kZGVsXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjg0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YToyNylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZGVsZXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMTMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBPQkpFQ1RfTk9UX0ZPVU5EOiBPQkpFQ1RfTk9UX0ZPVU5EOiBObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbmRkZWxcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPW5vdEZvdW5kLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5OT1RfRk9VTkQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpPQkpFQ1RfTk9UX0ZPVU5EOiBPQkpFQ1RfTk9UX0ZPVU5EOiBPQkpFQ1RfTk9UX0ZPVU5EOiBObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbmRkZWxcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29uZGRlbFxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuLCBlcnJvclByb3RvQ29kZT1OT1RfRk9VTkQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlX2lkLm5hbWUsIG1lc3NhZ2U9Tm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb25kZGVsLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlX2lkLm5hbWUsIG1lc3NhZ2U9Tm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb25kZGVsLCByZWFzb249bm90Rm91bmQsIHJwY0NvZGU9NDA0fSBObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbmRkZWw6IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpPQkpFQ1RfTk9UX0ZPVU5EOiBPQkpFQ1RfTk9UX0ZPVU5EOiBPQkpFQ1RfTk9UX0ZPVU5EOiBObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbmRkZWxcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29uZGRlbFxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwNCwKICAibWVzc2FnZSI6ICJObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbmRkZWwiCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "65476a6e19536095",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/conddel?alt=json\u0026ifMetagenerationMatch=2",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b502294055b3fa5ddff80a0cc98fa6dd/13239253255145219303;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/conddel?alt=json\u0026ifMetagenerationMatch=2"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 412,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "12589"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:05 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:05 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543284000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbh13:4060,/bns/xi/borg/xi/bns/blobstore2/bitpusher/110.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=CcBYW7aeH6i9swbA1rXICg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/110.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/110:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YmwtYmZlSmtWb2M5WDNYcnVKaG5pUFpSNjNSbHFoR0dxcGkyQ3RUd3pJa0FDZXpkMkw1SnZLOW90MEgxTzlxbjNPZXRxRzJRd092Z1pVQm9CTHZvSmx0Zm9YVzVDVDZPZ0tPbzBJUy0zbjZBY3ZQc1lKRDhJN3dLVE9NNzJYSXplVExuYjNzVWdEdlM2c1NiV1hrY0tOb0ZfNm9fNXhVNW1YRFhuNko4Z1lQTkVPb3JJY0U1Wi1ScGswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq1RBBlaxBOsxNmkwxs8tPKKQedfZoeRuY_lfqC7n03_MsisBYh75aySgYyfsIXyb57W3DmBl_bPzw8h7vcu6WUU9w8cg"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiY29uZGl0aW9uTm90TWV0IiwKICAgICJtZXNzYWdlIjogIlByZWNvbmRpdGlvbiBGYWlsZWQiLAogICAgImxvY2F0aW9uVHlwZSI6ICJoZWFkZXIiLAogICAgImxvY2F0aW9uIjogIklmLU1hdGNoIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OklOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IEV4cGVjdGVkIG1ldGFkYXRhIGdlbmVyYXRpb24gdG8gbWF0Y2ggMiwgYnV0IGFjdHVhbCB2YWx1ZSB3YXMgMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IElOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogRXhwZWN0ZWQgbWV0YWRhdGEgZ2VuZXJhdGlvbiB0byBtYXRjaCAyLCBidXQgYWN0dWFsIHZhbHVlIHdhcyAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9UFJFQ09ORElUSU9OX0ZBSUxFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IElOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBFeHBlY3RlZCBtZXRhZGF0YSBnZW5lcmF0aW9uIHRvIG1hdGNoIDIsIGJ1dCBhY3R1YWwgdmFsdWUgd2FzIDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjg0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YToyNylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZGVsZXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMTMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IEV4cGVjdGVkIG1ldGFkYXRhIGdlbmVyYXRpb24gdG8gbWF0Y2ggMiwgYnV0IGFjdHVhbCB2YWx1ZSB3YXMgMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6Mjc2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPXByZWNvbmRpdGlvbkZhaWxlZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uQ09ORElUSU9OX05PVF9NRVQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IElOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBFeHBlY3RlZCBtZXRhZGF0YSBnZW5lcmF0aW9uIHRvIG1hdGNoIDIsIGJ1dCBhY3R1YWwgdmFsdWUgd2FzIDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjg0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YToyNylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZGVsZXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMTMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IEV4cGVjdGVkIG1ldGFkYXRhIGdlbmVyYXRpb24gdG8gbWF0Y2ggMiwgYnV0IGFjdHVhbCB2YWx1ZSB3YXMgMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6Mjc2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Q09ORElUSU9OX05PVF9NRVQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1udWxsLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249aGVhZGVycy5JZi1NYXRjaCwgbWVzc2FnZT1QcmVjb25kaXRpb24gRmFpbGVkLCByZWFzb249Y29uZGl0aW9uTm90TWV0LCBycGNDb2RlPTQxMn0gUHJlY29uZGl0aW9uIEZhaWxlZDogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OklOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IEV4cGVjdGVkIG1ldGFkYXRhIGdlbmVyYXRpb24gdG8gbWF0Y2ggMiwgYnV0IGFjdHVhbCB2YWx1ZSB3YXMgMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IElOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogRXhwZWN0ZWQgbWV0YWRhdGEgZ2VuZXJhdGlvbiB0byBtYXRjaCAyLCBidXQgYWN0dWFsIHZhbHVlIHdhcyAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQxMiwKICAibWVzc2FnZSI6ICJQcmVjb25kaXRpb24gRmFpbGVkIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "c759910945a5e883",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/conddel?alt=json\u0026ifMetagenerationNotMatch=1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f641fe2dc94d90815c2e7379537eb49f/17023847299763577973;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/conddel?alt=json\u0026ifMetagenerationNotMatch=1"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 304,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543285000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcah4:4081,/bns/xi/borg/xi/bns/blobstore2/bitpusher/13.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=CcBYW4azLqu_swbmtYzYDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/13.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/13:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YmwtYmZlSmtWb2M5WDNYcnVKaG5pUFpSNjNSbHFoR0dxcGkyQ3RUd3pJa0FDZXpkMkw1SnZLOW90MEgxTzlxbjNPZXRxRzJRd092Z1pVQm9CTHZvSmx0Zm9YVzVDVDZPZ0tPbzBJUy0zbjZBY3ZQc1lKRDhJN3dLVE9NNzJYSXplVExuYjNzVWdEdlM2c1NiV1hrY0tOb0ZfNm9fNXhVNW1YRFhuNko4Z1lQTkVPb3JJY0U1Wi1ScGswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UokIqNirCo2Afgimb1pcehTIzCJf1XPKIHiDLHddAH2q3fxkS9AspfpO2cdQdV3URPlwuXF1FgWrvLMre0f-qlss2iB-w"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "e14c71c54ea09c03",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/conddel?alt=json\u0026generation=1532542985232385",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "fcbead8575decc7a16d4594b4a4748c0/2433752674276926723;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/conddel?alt=json\u0026generation=1532542985232385"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543284000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabp15:4495,/bns/xi/borg/xi/bns/blobstore2/bitpusher/48.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=CsBYW4i7AoS2swbxoazoAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/48.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/48:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YmwtYmZlSmtWb2M5WDNYcnVKaG5pUFpSNjNSbHFoR0dxcGkyQ3RUd3pJa0FDZXpkMkw1SnZLOW90MEgxTzlxbjNPZXRxRzJRd092Z1pVQm9CTHZvSmx0Zm9YVzVDVDZPZ0tPbzBJUy0zbjZBY3ZQc1lKRDhJN3dLVE9NNzJYSXplVExuYjNzVWdEdlM2c1NiV1hrY0tOb0ZfNm9fNXhVNW1YRFhuNko4Z1lQTkVPb3JJY0U1Wi1ScGswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpcEdEtdYPra2fLzZ9Zgrs_QfnL6Bp9bReyG6LPwmWoRHfuWWMSc7_Z2321rPNnVTylUGs-NOgNzLL3wjsn9QQf0Zj1HA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "6f1a8dc57e35929f",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=4423b00a47a2b0098ebfeb1b6779787b5166a555061dc3c726cdbe872835"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5e6c71761e9a6f8fa4372172271107ad/6218065248213476754;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS00NDIzYjAwYTQ3YTJiMDA5OGViZmViMWI2Nzc5Nzg3YjUxNjZhNTU1MDYxZGMzYzcyNmNkYmU4NzI4MzUNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJvYmoxIn0KDQotLTQ0MjNiMDBhNDdhMmIwMDk4ZWJmZWIxYjY3Nzk3ODdiNTE2NmE1NTUwNjFkYzNjNzI2Y2RiZTg3MjgzNQ0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQoNCqJf9Feb6Zw0U1TdYzAR9lINCi0tNDQyM2IwMGE0N2EyYjAwOThlYmZlYjFiNjc3OTc4N2I1MTY2YTU1NTA2MWRjM2M3MjZjZGJlODcyODM1LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3585"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:07 GMT"
+ ],
+ "Etag": [
+ "CKPZ1cLvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543286000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbbp16:4027,/bns/xi/borg/xi/bns/blobstore2/bitpusher/76.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=CsBYW4P4H7C5swaK1pn4CQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/76.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/76:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur-lGeQ8Zi_SkDCI5F9Tpu8sAEjnPEVdBOPJlMcnwEuZo-c-1dWE21JSS8Ynf1RCxNou3_x2LuaD3AAgah696wtvwklVA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxIiwKICJuYW1lIjogIm9iajEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNi44NDBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogInNpemUiOiAiMTYiLAogIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajE/Z2VuZXJhdGlvbj0xNTMyNTQyOTg2ODQxMjUxJmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iajEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDS1BaMWNMdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDS1BaMWNMdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIkZMamV3QT09IiwKICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "2f2b86fabe8034f7",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=204ac4f95ae3b5c4b9d6fe0fcdb6d2018de5dcf919fbaa32ea3ee3ebb3d1"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "66e8df151445ccf38c8b08411179976b/10074715791636260384;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0yMDRhYzRmOTVhZTNiNWM0YjlkNmZlMGZjZGI2ZDIwMThkZTVkY2Y5MTlmYmFhMzJlYTNlZTNlYmIzZDENCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJvYmoyIn0KDQotLTIwNGFjNGY5NWFlM2I1YzRiOWQ2ZmUwZmNkYjZkMjAxOGRlNWRjZjkxOWZiYWEzMmVhM2VlM2ViYjNkMQ0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQoNCiKwxNJmSk4fX1+sgbziNRENCi0tMjA0YWM0Zjk1YWUzYjVjNGI5ZDZmZTBmY2RiNmQyMDE4ZGU1ZGNmOTE5ZmJhYTMyZWEzZWUzZWJiM2QxLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3585"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:07 GMT"
+ ],
+ "Etag": [
+ "CNL/9MLvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaba15:4126,/bns/xi/borg/xi/bns/blobstore2/bitpusher/78.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=C8BYW4CzA622swaWrLTYDA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/78.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/78:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrGmmOKBykibCEGOWCroqaSkcRdNkYtlnHLEIRNUx0LdFE-gGNfjiOg9Wk77fxWGuxPx8y_j2mLDzx-tGs8HltRTS1RAQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyIiwKICJuYW1lIjogIm9iajIiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzM1NDA2NiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy4zNTNaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogInNpemUiOiAiMTYiLAogIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajI/Z2VuZXJhdGlvbj0xNTMyNTQyOTg3MzU0MDY2JmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iajIiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDTkwvOU1MdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzM1NDA2NiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDTkwvOU1MdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzM1NDA2NiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzM1NDA2NiIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIlNxaVo3dz09IiwKICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "4f75e30940504bef",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=d594693bb097183419f68521c5b16cd2c1811c7107b10f1d9df72ea24cd6"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "71fab8c2023d41cb8245e5a4dc2ba739/13859028369851000750;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1kNTk0NjkzYmIwOTcxODM0MTlmNjg1MjFjNWIxNmNkMmMxODExYzcxMDdiMTBmMWQ5ZGY3MmVhMjRjZDYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJvYmovd2l0aC9zbGFzaGVzIn0KDQotLWQ1OTQ2OTNiYjA5NzE4MzQxOWY2ODUyMWM1YjE2Y2QyYzE4MTFjNzEwN2IxMGYxZDlkZjcyZWEyNGNkNg0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQoNCjJbplp3/Ko74wnmO3d6B+gNCi0tZDU5NDY5M2JiMDk3MTgzNDE5ZjY4NTIxYzViMTZjZDJjMTgxMWM3MTA3YjEwZjFkOWRmNzJlYTI0Y2Q2LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3801"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:07 GMT"
+ ],
+ "Etag": [
+ "CKzki8PvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543286000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbbf15:4048,/bns/xi/borg/xi/bns/blobstore2/bitpusher/74.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=C8BYW7WGHM6yswafrpjYBw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/74.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/74:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpTlgIJ5q__2_cu1ydeT2DaNKIM_KIRmyVYOwv4aglKy6nwV3z7pmsuQePWltg2Bco89kklYW3gaMuOXOF-SKJMJKqQ6Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcyIsCiAibmFtZSI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW4iLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuNzI3WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjcyN1oiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICJzaXplIjogIjE2IiwKICJtZDVIYXNoIjogIk1JYlJrcStvSmZPcVY5ZDkxTHBnOHc9PSIsCiAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcz9nZW5lcmF0aW9uPTE1MzI1NDI5ODc3Mjc0MDQmYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogImh5L2VwQT09IiwKICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "7e73ecc9555cb9cf",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj%2Fwith%2Fslashes?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d98a0ff38be2c6fb62c77263613d055f/3053527788982642891;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj%2Fwith%2Fslashes?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3801"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:07 GMT"
+ ],
+ "Etag": [
+ "CKzki8PvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcar15:4207,/bns/xi/borg/xi/bns/blobstore2/bitpusher/142.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=C8BYW7LHMoq9swbt0Y3oAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/142.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/142:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqImeke8QEWb46J_vyALSCRWPv9N2wYy9MJWoktJtyGwBRvPLyokO9Tw5TlofwVZrY7eiWuGJRCKEldexFeBmhGg7ScvA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcyIsCiAibmFtZSI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW4iLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuNzI3WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjcyN1oiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICJzaXplIjogIjE2IiwKICJtZDVIYXNoIjogIk1JYlJrcStvSmZPcVY5ZDkxTHBnOHc9PSIsCiAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcz9nZW5lcmF0aW9uPTE1MzI1NDI5ODc3Mjc0MDQmYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogImh5L2VwQT09IiwKICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "849ca28ccda01769",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "97e52f6c3e24aeb6ab43c1eb6143bf4f/10694490906342042087;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3585"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:07 GMT"
+ ],
+ "Etag": [
+ "CKPZ1cLvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcby9:4035,/bns/xi/borg/xi/bns/blobstore2/bitpusher/58.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=C8BYW4riN9C3swaYoYGgCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/58.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/58:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrvQUaIou2Lrvqcu6UdlxwE1fvXRG4FaITE4o3mkBhzTICwN_tYP3CJLr8GIkITg7QTpbHhQZMnN7UGWfS3u5Zt3VuDpw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxIiwKICJuYW1lIjogIm9iajEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNi44NDBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogInNpemUiOiAiMTYiLAogIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajE/Z2VuZXJhdGlvbj0xNTMyNTQyOTg2ODQxMjUxJmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iajEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDS1BaMWNMdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDS1BaMWNMdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIkZMamV3QT09IiwKICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "dbe76949137497e2",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj2?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "883ad357165d9079b5a4592ca1a319c3/18335452924206524932;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj2?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3585"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:08 GMT"
+ ],
+ "Etag": [
+ "CNL/9MLvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcav14:4080,/bns/xi/borg/xi/bns/blobstore2/bitpusher/82.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=C8BYW-3CPNC2swaw7bzYBQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/82.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/82:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq-2yQrvyVtaYR35AzZGKqzl7p6NEx8mVNa4Nmu1Jz2btVLcjWojTvf_s2cUSKzha5SSGJa1dvI_InqNkrp4gclrO8NPA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyIiwKICJuYW1lIjogIm9iajIiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzM1NDA2NiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy4zNTNaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogInNpemUiOiAiMTYiLAogIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajI/Z2VuZXJhdGlvbj0xNTMyNTQyOTg3MzU0MDY2JmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iajIiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDTkwvOU1MdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzM1NDA2NiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDTkwvOU1MdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzM1NDA2NiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzM1NDA2NiIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIlNxaVo3dz09IiwKICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "fa0e97573079b40b",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d68fec18352a51afb0fe5531c4e4a908/3745359398231501458;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "11512"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:08 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:08 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaad3:4296,/bns/xi/borg/xi/bns/blobstore2/bitpusher/129.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=DMBYW8etBOe8swagtYXwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/129.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/129:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqHjOOUMtcegyDU44Mt6CP604l1RVPz7wUw6bCAPL_UstJ0JSgEz5CUSeeEJPc7o7ZGsPDHmTPjqnEeYPZvOT-3x8fGBg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzIiwKICAgIm5hbWUiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW4iLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjcyN1oiLAogICAic2l6ZSI6ICIxNiIsCiAgICJtZDVIYXNoIjogIk1JYlJrcStvSmZPcVY5ZDkxTHBnOHc9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzP2dlbmVyYXRpb249MTUzMjU0Mjk4NzcyNzQwNCZhbHQ9bWVkaWEiLAogICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJoeS9lcEE9PSIsCiAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEiLAogICAibmFtZSI6ICJvYmoxIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5ODY4NDEyNTEmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJGTGpld0E9PSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIiLAogICAibmFtZSI6ICJvYmoyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMj9nZW5lcmF0aW9uPTE1MzI1NDI5ODczNTQwNjYmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJTcWlaN3c9PSIsCiAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "c223e6cf2ca27ed6",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ad98fb57942df25865eafcdbcc680ed5/7529953447127984928;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "4058"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:08 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:08 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadccb5:4366,/bns/xi/borg/xi/bns/blobstore2/bitpusher/43.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=DMBYW-miH-65swarrY6wBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/43.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/43:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrX-2wTFCWPBuosKhmtOFf7iaUR4j9RC27QjKMo4ABB42WuNC6DYAP4J6kLEDEZc16FjttEa5v8XB1QkLetCrZfMmGrgQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJuZXh0UGFnZVRva2VuIjogIkNoQnZZbW92ZDJsMGFDOXpiR0Z6YUdWeiIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqL3dpdGgvc2xhc2hlcy8xNTMyNTQyOTg3NzI3NDA0IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcyIsCiAgICJuYW1lIjogIm9iai93aXRoL3NsYXNoZXMiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJjb250ZW50VHlwZSI6ICJ0ZXh0L3BsYWluIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuNzI3WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuNzI3WiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInNpemUiOiAiMTYiLAogICAibWQ1SGFzaCI6ICJNSWJSa3Erb0pmT3FWOWQ5MUxwZzh3PT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcz9nZW5lcmF0aW9uPTE1MzI1NDI5ODc3Mjc0MDQmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqL3dpdGgvc2xhc2hlcy8xNTMyNTQyOTg3NzI3NDA0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgIH0sCiAgICJjcmMzMmMiOiAiaHkvZXBBPT0iLAogICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogIH0KIF0KfQo="
+ }
+ },
+ {
+ "ID": "c83209f180dfbea5",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=ChBvYmovd2l0aC9zbGFzaGVz\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "deb04d516b868a65a4dc7f35a4b11d02/11314264921569749934;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=ChBvYmovd2l0aC9zbGFzaGVz\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3826"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:09 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:09 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaax14:4175,/bns/xi/borg/xi/bns/blobstore2/bitpusher/146.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=DMBYW9y4N8W8swaY9Jb4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/146.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/146:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpewhC4NHsn9gM5gIJIANYQFBjd8q6YpUG_S3FwzMVt8pVKwQhbBBxM9w5XnpNMd388YnATsUMfGVj5azt3S_KW1JKQKQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJuZXh0UGFnZVRva2VuIjogIkNnUnZZbW94IiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEiLAogICAibmFtZSI6ICJvYmoxIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5ODY4NDEyNTEmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJGTGpld0E9PSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "4a4374ada3d35207",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=CgRvYmox\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e089e52ffc38649260a77e90746b01ee/15170915464992468029;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=CgRvYmox\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3796"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:09 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:09 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbg14:4207,/bns/xi/borg/xi/bns/blobstore2/bitpusher/84.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=DcBYW4eNE426swaDrquQCQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/84.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/84:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uprb4RUySGsgb1AjgGWVJj1UqKMjFnQ5EkpG8MoAC6X0GWCmkbvmVOp2dTQow9gc8zUP-HPNGx-7_I9xHkd8WPngB3NWA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIiLAogICAibmFtZSI6ICJvYmoyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMj9nZW5lcmF0aW9uPTE1MzI1NDI5ODczNTQwNjYmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJTcWlaN3c9PSIsCiAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "d09b8808607cb03b",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b1bd5d02f20d5b983f508feec0cd4b2b/508765444491144395;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "4058"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:10 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:10 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae9:4327,/bns/xi/borg/xi/bns/blobstore2/bitpusher/91.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=DcBYW56wK8K8swaH0qagBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/91.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/91:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq18kThVGAgliBfWIZuWpWYI9dCynk4dfHkvH3AbhqNsPuuXR1ZoCMMNNPYdpUaSDVVsGzF5zaG5qPu6QecD4htvRSloA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJuZXh0UGFnZVRva2VuIjogIkNoQnZZbW92ZDJsMGFDOXpiR0Z6YUdWeiIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqL3dpdGgvc2xhc2hlcy8xNTMyNTQyOTg3NzI3NDA0IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcyIsCiAgICJuYW1lIjogIm9iai93aXRoL3NsYXNoZXMiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJjb250ZW50VHlwZSI6ICJ0ZXh0L3BsYWluIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuNzI3WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuNzI3WiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInNpemUiOiAiMTYiLAogICAibWQ1SGFzaCI6ICJNSWJSa3Erb0pmT3FWOWQ5MUxwZzh3PT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcz9nZW5lcmF0aW9uPTE1MzI1NDI5ODc3Mjc0MDQmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqL3dpdGgvc2xhc2hlcy8xNTMyNTQyOTg3NzI3NDA0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgIH0sCiAgICJjcmMzMmMiOiAiaHkvZXBBPT0iLAogICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogIH0KIF0KfQo="
+ }
+ },
+ {
+ "ID": "4a5e252ca7f60968",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=ChBvYmovd2l0aC9zbGFzaGVz\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bf32752c22840955895891591f8e1b2d/4365134512937282905;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=ChBvYmovd2l0aC9zbGFzaGVz\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3826"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:10 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:10 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabe13:4160,/bns/xi/borg/xi/bns/blobstore2/bitpusher/127.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=DsBYW8ObB8u8swbztoroAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/127.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/127:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqEDS97YpUfh3Qx7ArG4CA4C04_XInTYTEIG5O3boGZKsTMBDPcIvT-IyxbwyUG69PSbJMYZurLIEA-UDy1_yeWWBSfqQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJuZXh0UGFnZVRva2VuIjogIkNnUnZZbW94IiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEiLAogICAibmFtZSI6ICJvYmoxIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5ODY4NDEyNTEmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJGTGpld0E9PSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "91ec5142d27af885",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=CgRvYmox\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "814923b27d6c1b38b9f93731dbfcaa62/8149728561850543591;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=CgRvYmox\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3796"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:10 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:10 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcai3:4242,/bns/xi/borg/xi/bns/blobstore2/bitpusher/97.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=DsBYW5mNH4yzswa9zLiYAQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/97.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/97:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrMX9KerK8jH0YtikfJQuWtUJdhkcsobbmDkMVb8Ss1flTwOZ_CWHBB4-bN7LN6LysPiY8t6UdIpc42EZ5zctAxyhe4vw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIiLAogICAibmFtZSI6ICJvYmoyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMj9nZW5lcmF0aW9uPTE1MzI1NDI5ODczNTQwNjYmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJTcWlaN3c9PSIsCiAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "5fc095833330f7e4",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2a33f78b124518fddb81897735ec0ca0/12006096530801766006;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "7792"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:11 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:11 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbh15:4099,/bns/xi/borg/xi/bns/blobstore2/bitpusher/71.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=DsBYW9KDOeu5swaj8KQw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/71.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/71:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpBYvDwMECKaACpJipOby_ockkdLt6RSZs_MCIC_ZVj8bKtTJgDOiDoj2XuP9AD0Uo-GGbgvp0_f2rc6SokTdRgjBrjng"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJuZXh0UGFnZVRva2VuIjogIkNnUnZZbW94IiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzIiwKICAgIm5hbWUiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW4iLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjcyN1oiLAogICAic2l6ZSI6ICIxNiIsCiAgICJtZDVIYXNoIjogIk1JYlJrcStvSmZPcVY5ZDkxTHBnOHc9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzP2dlbmVyYXRpb249MTUzMjU0Mjk4NzcyNzQwNCZhbHQ9bWVkaWEiLAogICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJoeS9lcEE9PSIsCiAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEiLAogICAibmFtZSI6ICJvYmoxIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5ODY4NDEyNTEmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJGTGpld0E9PSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "0787b875c5bc177d",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=CgRvYmox\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "628e8715ed7891f5b690c673e653e530/15790690579698249476;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=CgRvYmox\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3796"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:11 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:11 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcba13:4101,/bns/xi/borg/xi/bns/blobstore2/bitpusher/80.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=D8BYW4W0FOyyswbR54r4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/80.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/80:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpR0XxBqYMX4BYIrF9W2WixeN_osBWc0D1g9H6I2nrOo_zrFjqmVgU6QAo2MY8ou5M0rNTCPyF60Grq8mKiMogwWyGDJw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIiLAogICAibmFtZSI6ICJvYmoyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMj9nZW5lcmF0aW9uPTE1MzI1NDI5ODczNTQwNjYmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJTcWlaN3c9PSIsCiAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "1a4db303f96ea0a2",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "db4a8beb70e247b231ed7531c9c97ef2/1200597053723226002;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "7792"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:12 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:12 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcby9:4035,/bns/xi/borg/xi/bns/blobstore2/bitpusher/63.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=D8BYW9aqK86zswbii4FI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/63.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/63:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq6RdzAN4jDeo6NOIT6NnSTrgXNgsgxYl3HopVuU_vVj01WaBjM70M-I59_GaMayO8ZQpTdgibVIo-Lkm3DcgDzZNyqWA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJuZXh0UGFnZVRva2VuIjogIkNnUnZZbW94IiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzIiwKICAgIm5hbWUiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW4iLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjcyN1oiLAogICAic2l6ZSI6ICIxNiIsCiAgICJtZDVIYXNoIjogIk1JYlJrcStvSmZPcVY5ZDkxTHBnOHc9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzP2dlbmVyYXRpb249MTUzMjU0Mjk4NzcyNzQwNCZhbHQ9bWVkaWEiLAogICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJoeS9lcEE9PSIsCiAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEiLAogICAibmFtZSI6ICJvYmoxIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5ODY4NDEyNTEmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJGTGpld0E9PSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "5d243927db122d7b",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=CgRvYmox\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "a2890f9b475154d7616acd2eafe0de60/4985191098324807712;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=CgRvYmox\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3796"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:12 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:12 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbba4:4153,/bns/xi/borg/xi/bns/blobstore2/bitpusher/69.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EMBYW8KdB6O9swa9vaKYDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/69.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/69:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur72YZ5CGf-nH9R6zWo7QxlgclJ-9dqKKYegu6aYRu556ayNvwo28ZKtNVdlSBpOOfWOabd1xcx3_ZD0DV6-PCDOgKB5A"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIiLAogICAibmFtZSI6ICJvYmoyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMj9nZW5lcmF0aW9uPTE1MzI1NDI5ODczNTQwNjYmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJTcWlaN3c9PSIsCiAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "e63408be0eac34d7",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=3\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f81795c6bda0b7ed4644a53a5b67b84a/8841559071587709103;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=3\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "11512"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:12 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:12 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbcc3:4358,/bns/xi/borg/xi/bns/blobstore2/bitpusher/106.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EMBYW8j1IMm9swbZ6qrAAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/106.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/106:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpnFYB9qy1Eqp-RRc08G_Ez3rjo2pb6L89KbqnjLp-w_iIRL97Pm251AmY8GL1ATcV5XQF6cbxNqbgd8NloWivPEeX6eA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzIiwKICAgIm5hbWUiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW4iLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjcyN1oiLAogICAic2l6ZSI6ICIxNiIsCiAgICJtZDVIYXNoIjogIk1JYlJrcStvSmZPcVY5ZDkxTHBnOHc9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzP2dlbmVyYXRpb249MTUzMjU0Mjk4NzcyNzQwNCZhbHQ9bWVkaWEiLAogICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJoeS9lcEE9PSIsCiAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEiLAogICAibmFtZSI6ICJvYmoxIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5ODY4NDEyNTEmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJGTGpld0E9PSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIiLAogICAibmFtZSI6ICJvYmoyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMj9nZW5lcmF0aW9uPTE1MzI1NDI5ODczNTQwNjYmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJTcWlaN3c9PSIsCiAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "bc997e779916ea8c",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=3\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "cd3d566d9767758ee84d4c1d35da3360/12625871649802449213;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=3\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "11512"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:13 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:13 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaad9:4278,/bns/xi/borg/xi/bns/blobstore2/bitpusher/3.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EcBYW-VfooXKA6aqg-gE"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/3.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/3:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqG9LHiLgtluezAUcsj6Tbdr9ikg4bDD752eCj7TyO6EOKlstBa3KVNdw6R1HmJTHO29I-lqQNh7kpjvHOybaZy1axocQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzIiwKICAgIm5hbWUiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW4iLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjcyN1oiLAogICAic2l6ZSI6ICIxNiIsCiAgICJtZDVIYXNoIjogIk1JYlJrcStvSmZPcVY5ZDkxTHBnOHc9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzP2dlbmVyYXRpb249MTUzMjU0Mjk4NzcyNzQwNCZhbHQ9bWVkaWEiLAogICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJoeS9lcEE9PSIsCiAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEiLAogICAibmFtZSI6ICJvYmoxIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5ODY4NDEyNTEmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJGTGpld0E9PSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIiLAogICAibmFtZSI6ICJvYmoyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMj9nZW5lcmF0aW9uPTE1MzI1NDI5ODczNTQwNjYmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJTcWlaN3c9PSIsCiAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "b00fee0e53993c5c",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=13\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f13c59eaf450225b9ac559d293fd1804/16482522188947108299;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=13\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "11512"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:13 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:13 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaq16:4442,/bns/xi/borg/xi/bns/blobstore2/bitpusher/136.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EcBYW66tGca8swbts4roAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/136.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/136:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UprpCE5m5A_TepF6l_h9HK4HnMBPGkXXswa-tWIPtB-kKXkP8FDajtsCSb_Y3mQhLvwlr5wgfxT4mrM-7JbWx1kXwuU7Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzIiwKICAgIm5hbWUiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW4iLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjcyN1oiLAogICAic2l6ZSI6ICIxNiIsCiAgICJtZDVIYXNoIjogIk1JYlJrcStvSmZPcVY5ZDkxTHBnOHc9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzP2dlbmVyYXRpb249MTUzMjU0Mjk4NzcyNzQwNCZhbHQ9bWVkaWEiLAogICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJoeS9lcEE9PSIsCiAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEiLAogICAibmFtZSI6ICJvYmoxIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5ODY4NDEyNTEmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJGTGpld0E9PSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIiLAogICAibmFtZSI6ICJvYmoyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMj9nZW5lcmF0aW9uPTE1MzI1NDI5ODczNTQwNjYmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJTcWlaN3c9PSIsCiAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "a8d180dd423ebbfb",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=13\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "6b50f9a4460caafe45bf62b9397f0440/1820372168429007449;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026maxResults=13\u0026pageToken=\u0026prefix=obj\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "11512"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:14 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:14 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcad8:4117,/bns/xi/borg/xi/bns/blobstore2/bitpusher/116.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EcBYW4D8Mua8swbZpa6IBQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/116.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/116:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UredqwXxSnUxaCWZ6SEF4xxX9lWsUeCuUTcsRMQbI-MXme_Q2kbhcpO3Hb12Pn8XiIrVKa9rNJYEiTiUDICRYgKBHc8Ug"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzIiwKICAgIm5hbWUiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW4iLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjcyN1oiLAogICAic2l6ZSI6ICIxNiIsCiAgICJtZDVIYXNoIjogIk1JYlJrcStvSmZPcVY5ZDkxTHBnOHc9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzP2dlbmVyYXRpb249MTUzMjU0Mjk4NzcyNzQwNCZhbHQ9bWVkaWEiLAogICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0t6a2k4UHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai93aXRoL3NsYXNoZXMvMTUzMjU0Mjk4NzcyNzQwNC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJoeS9lcEE9PSIsCiAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEiLAogICAibmFtZSI6ICJvYmoxIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5ODY4NDEyNTEmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJGTGpld0E9PSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIiLAogICAibmFtZSI6ICJvYmoyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA3LjM1M1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAiZytVZmFTOHVpbGp0VXpxTVpyeVY3dz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMj9nZW5lcmF0aW9uPTE1MzI1NDI5ODczNTQwNjYmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoyLzE1MzI1NDI5ODczNTQwNjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3MzU0MDY2IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJTcWlaN3c9PSIsCiAgICJldGFnIjogIkNOTC85TUx2dXR3Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "b29861667e66d100",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "a270b057a24f4e545c728d02cde51426/9461334186293490550;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:14 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:14 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/98,/bns/yb/borg/yb/bns/blobstore2/bitpusher/529.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EsBYW5SvE8TulAG407CQBg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/529.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/529:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpR_S77wMkWzkMnH_DPBOuISvTthWVcQvyapTx05mw1vLCJGD8rEK7gKfHp2kizZRqc5HLjhVfWMZ7ucP7py_6OObgXQmjTdnCe087nC1RHrUqLCEE"
+ ]
+ },
+ "Body": "ol/0V5vpnDRTVN1jMBH2Ug=="
+ }
+ },
+ {
+ "ID": "d683f316209d67c2",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "09e89d632c01a4430c2b98d9af39803b/17102297303652889746;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:14 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:14 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/459,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1139.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EsBYW9SAHIP_lAH2iZj4Cw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1139.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/1139:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UotKChitwDWgNML4IAEIZHCHHiMKlPbGVyJrb8NAOLHubUOFf9wozJO6m7ocdcWWniKAmoBQK2BdJmdCSY6VJLwrt8Fqg"
+ ]
+ },
+ "Body": "ol/0V5vpnDRTVN1jMBH2Ug=="
+ }
+ },
+ {
+ "ID": "ec968e975c1dd9ac",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj2",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1ff8b71e11e18bce971d2ee0fbf500f2/6296796727079433647;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj2"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:14 GMT"
+ ],
+ "Etag": [
+ "\"83e51f692f2e8a58ed533a8c66bc95ef\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:14 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:07 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542987354066"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=SqiZ7w==",
+ "md5=g+UfaS8uiljtUzqMZryV7w=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/565,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EsBYW-iHIIuW7AL1vauwCw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/1:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoRokH3fVDLCgD7oBAUy74DEr62EoOp-xgflQkRItEhRh-eih-VkROz42Qwwb0Nufjuntic66EiirT8WCo58ahMcbpTTGN1HOQTEPYmdrSpLyhFBlA"
+ ]
+ },
+ "Body": "IrDE0mZKTh9fX6yBvOI1EQ=="
+ }
+ },
+ {
+ "ID": "90e448977a40a328",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj2",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "68121ec63028952c28b3fc81dd973d05/13937759844438832843;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj2"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:14 GMT"
+ ],
+ "Etag": [
+ "\"83e51f692f2e8a58ed533a8c66bc95ef\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:14 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:07 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542987354066"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=SqiZ7w==",
+ "md5=g+UfaS8uiljtUzqMZryV7w=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/551,/bns/yb/borg/yb/bns/blobstore2/bitpusher/688.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EsBYW-TjKIzulgHXubXwCA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/688.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/688:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upgra69XRNGto16SrNhT6kEIwQ91sc41EYrMG8un5QIBqcQqDiYpIBVrhFJXR1_LnPcfp36_i_NS0Zp6Vx9pXiLggmL3w"
+ ]
+ },
+ "Body": "IrDE0mZKTh9fX6yBvOI1EQ=="
+ }
+ },
+ {
+ "ID": "f061c6a2663da019",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj/with/slashes",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "24aede56a29b031886c7cbe3aa207c15/3131977792888731624;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj/with/slashes"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:14 GMT"
+ ],
+ "Etag": [
+ "\"3086d192afa825f3aa57d77dd4ba60f3\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:14 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:07 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542987727404"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=hy/epA==",
+ "md5=MIbRkq+oJfOqV9d91Lpg8w=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/114,/bns/yb/borg/yb/bns/blobstore2/bitpusher/44.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EsBYW5bBLIqClgHoiYPgCA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/44.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/44:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpXH_tDR81GwNEbwI1Hj_uCOmHzbAtYnmiZqkanZzEfWxQNHwdhWWN3RHRuZZOnkvMKSlEBNpJEjOisD1iHtJV39GT3W6aVhrCWkjyshcQvT1PMFNk"
+ ]
+ },
+ "Body": "MlumWnf8qjvjCeY7d3oH6A=="
+ }
+ },
+ {
+ "ID": "37c5cf73a48c9ff2",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj/with/slashes",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2bcc71b5d5e437acc1bd4f7b0a08ae6e/10772940910248130564;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj/with/slashes"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:14 GMT"
+ ],
+ "Etag": [
+ "\"3086d192afa825f3aa57d77dd4ba60f3\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:14 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:07 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542987727404"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=hy/epA==",
+ "md5=MIbRkq+oJfOqV9d91Lpg8w=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/573,/bns/yb/borg/yb/bns/blobstore2/bitpusher/548.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EsBYW9bvNtXslQG005-QDg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/548.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/548:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqy9_6k_RUZrjZm-Cr_K1oKHE2hIJM_ZIDAmwD6CybBSnspxWZ5qM4FlgcY2I6JOSKqcH2Gj3JJFbkW1oaTEQBUTX8q19O4be-ESQ13YcRVz7bb2dI"
+ ]
+ },
+ "Body": "MlumWnf8qjvjCeY7d3oH6A=="
+ }
+ },
+ {
+ "ID": "7eae5769a840f714",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Range": [
+ "bytes=0-15"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "970514526b7a1a2eb2f656cebcb387dc/18413902932407515425;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:14 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:14 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/502,/bns/yb/borg/yb/bns/blobstore2/bitpusher/944.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=EsBYW_r3OoKAlAGj9JGADA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/944.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/944:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur8xt5raPdwIOtyLAW1QIFXWfR_iUmxZrui8xwhyFIBx2CxMp5UzzjKgPA1VqSnxlalNNjOuMDrryCcA5PXAGnDhLEKXA"
+ ]
+ },
+ "Body": "ol/0V5vpnDRTVN1jMBH2Ug=="
+ }
+ },
+ {
+ "ID": "c5af2b56f9e37551",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Range": [
+ "bytes=0-7"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "95ea8bbac3acf3ebc4f9eb21d3da9e1f/7608403451034073661;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 206,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "8"
+ ],
+ "Content-Range": [
+ "bytes 0-7/16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:15 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:15 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/200,/bns/yb/borg/yb/bns/blobstore2/bitpusher/740.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=E8BYW_bEAYOP7AKU05WABQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/740.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/740:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqC6KsZqPg3i4r-FD_WQwHiaAGtwnrRfdEnmtKG5HI5T3vlrWsSfzkSnxWF8PI1npx12U3JcFTpdwn41RM5OoiSFoduMo4mCufjb03dmuGZ1qD4-TU"
+ ]
+ },
+ "Body": "ol/0V5vpnDQ="
+ }
+ },
+ {
+ "ID": "f13b9ccf9f9e89eb",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Range": [
+ "bytes=8-23"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d74b55cf146314b35ff0038cbf13888c/15249365468898556762;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 206,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "8"
+ ],
+ "Content-Range": [
+ "bytes 8-15/16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:15 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:15 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/428,/bns/yk/borg/yk/bns/blobstore2/bitpusher/903.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=E8BYW_jeBZKErAXr2rXADA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yk/borg/yk/bns/blobstore2/bitpusher/903.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yk/borg/yk/bns/blobstore2/bitpusher/903:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up64yINI2cPB09up6Cdie3JA-5Ot16qO1zB3m9mDf-t9tq_Esp6ku37I0wGlNWrWmVIHLMx7s9IsPkmAhwLn3Lx3CkupUZ-8xqfzX-3Ym_9B3miZMM"
+ ]
+ },
+ "Body": "U1TdYzAR9lI="
+ }
+ },
+ {
+ "ID": "f794200cd11db96b",
+ "Request": {
+ "Method": "HEAD",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7b7c7922dd78fe6b1c8743ea682035bd/4443865987525114998;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:15 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:15 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/596,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1160.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=E8BYW8GLDIfVlgG49pv4Cw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1160.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/1160:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo9PAVVOQpILrWhRVthWFuHdZb0Xj69ptZCk-ucot7XVGOHyfr3MVz17SFTS_BiCp2172Y5vsqp-YwjglvNj9W58pO5vQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "e83972ff27c1433d",
+ "Request": {
+ "Method": "HEAD",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "069c7ef9051522db0bc06c2640bd0b32/12084828009684499859;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:15 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:15 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/211,/bns/yb/borg/yb/bns/blobstore2/bitpusher/744.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=E8BYW7jBD4yT7AKjypCgBw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/744.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/744:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqaNghcJUaww3_7bLlDKvZVJaFNPAN1q0TauMV_KvTSXAJq2hFvhfKJUcz2vY8KXGaSMRG5C9MdU3jII-GHISkAxS44I56jc7rG9qE_VkwxZb-jLOc"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "8ff36d21bbb08226",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Range": [
+ "bytes=8-"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "631d7e8d5b04d14285fb844accfd50e1/1279047057612537775;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 206,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "8"
+ ],
+ "Content-Range": [
+ "bytes 8-15/16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:15 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:15 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/558,/bns/yb/borg/yb/bns/blobstore2/bitpusher/533.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=E8BYW6TyEpCWlAGr2LDACA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/533.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/533:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upi4rHgHCBHajFOT3p_ccFHWQZVISGaKI83cVW6hH2AS45dcAYgxxFe6o502GgB_fLm77A-1JPXKCimj2I7b8nqDS9a51vFKLfM1rWzFjjf0hmnP_g"
+ ]
+ },
+ "Body": "U1TdYzAR9lI="
+ }
+ },
+ {
+ "ID": "f61e1d41c1f0873f",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Range": [
+ "bytes=0-31"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "50ae531d7f70f95d2af7312432ecf7cc/8920010174971871436;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:15 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:15 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/232,/bns/yb/borg/yb/bns/blobstore2/bitpusher/328.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=E8BYW9C7Fo7llAG336LgCQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/328.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/328:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo903bVakVyM-LvLNma3rti06MEM6oOvPtw0tZvrMlshMYcFWtdjmP-DqXfKzaV7c4jEOVUKHTMvhYCN8W1Ur3NzyqWfYAX_WUjVr2UlIzS8aq_eUY"
+ ]
+ },
+ "Body": "ol/0V5vpnDRTVN1jMBH2Ug=="
+ }
+ },
+ {
+ "ID": "3a16f2efadf5468b",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Range": [
+ "bytes=32-41"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "3e36d43e83be177a111aa502fed3781c/16560972192836354537;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 416,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "167"
+ ],
+ "Content-Type": [
+ "application/xml; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:15 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:15 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/46,/bns/yb/borg/yb/bns/blobstore2/bitpusher/635.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=E8BYW8qHGsb4lQHstobgBg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/635.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/635:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UroulP65rugFtZfApPN0wapvhpzAKDIDZAghKvnDYXqBmW49yxKeBduHiW_Vp6aHKEsXjWvzOl1xm1oiWcjC5m31kO3QbyJbib64HPWi8HkAuJPz84"
+ ]
+ },
+ "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+SW52YWxpZFJhbmdlPC9Db2RlPjxNZXNzYWdlPlRoZSByZXF1ZXN0ZWQgcmFuZ2UgY2Fubm90IGJlIHNhdGlzZmllZC48L01lc3NhZ2U+PERldGFpbHM+Ynl0ZXM9MzItNDE8L0RldGFpbHM+PC9FcnJvcj4="
+ }
+ },
+ {
+ "ID": "efbe26fef4c033d5",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "efdf09c4b9ecfb8db6b9e8b5af5b037e/5755472715757814277;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3585"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:15 GMT"
+ ],
+ "Etag": [
+ "CKPZ1cLvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaal14:4213,/bns/xi/borg/xi/bns/blobstore2/bitpusher/133.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=E8BYW9XFHam9swaeo4b4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/133.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/133:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpxZvBxwzpz_kmQ8gO1aOH3SOQ7G7-8JIe6TxrYwcqgV5Vw5VIZdXuILJ-5iJlFk35pFYlztjDwxyxUt_cR_cfWZPoqWw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxIiwKICJuYW1lIjogIm9iajEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNi44NDBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogInNpemUiOiAiMTYiLAogIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajE/Z2VuZXJhdGlvbj0xNTMyNTQyOTg2ODQxMjUxJmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iajEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDS1BaMWNMdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDS1BaMWNMdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIkZMamV3QT09IiwKICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "d4f61ace5cec8d02",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "934d385320ae1f205d0e7acbd0d69899/13396434733622297378;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2951"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:15 GMT"
+ ],
+ "Etag": [
+ "CAU="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:15 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabr1:4172,/bns/xi/borg/xi/bns/blobstore2/bitpusher/119.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=E8BYW4zDIeGFygOT4obwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/119.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/119:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrIzFwT4khGv2qNY4F4uwKUIMdeKNpqNnjsWIFB26YuDoPpT6-WRuNdIVo7YOqwl_e25N2QSdtI83nhA_KuPE2xjXnIuA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuMDg0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA0LjYyNVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjUiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FVPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FVPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBVT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FVPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQVU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInZlcnNpb25pbmciOiB7CiAgImVuYWJsZWQiOiBmYWxzZQogfSwKICJsaWZlY3ljbGUiOiB7CiAgInJ1bGUiOiBbCiAgIHsKICAgICJhY3Rpb24iOiB7CiAgICAgInR5cGUiOiAiRGVsZXRlIgogICAgfSwKICAgICJjb25kaXRpb24iOiB7CiAgICAgImFnZSI6IDMwCiAgICB9CiAgIH0KICBdCiB9LAogImxhYmVscyI6IHsKICAibmV3IjogIm5ldyIsCiAgImwxIjogInYyIgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FVPSIKfQo="
+ }
+ },
+ {
+ "ID": "db4c731f39e11978",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/copy-obj1?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ce01e9a3394cf82f95cd7420aa2b3a59/2590935252248855614;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/copy-obj1?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3865"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:16 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543295000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaab2:4240,/bns/xi/borg/xi/bns/blobstore2/bitpusher/11.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=E8BYW4WJMZC3swb1pLGIDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/11.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/11:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpIYc31DiECXoLXpFNs_97BkJWl95kKtMZDnvi16hKd_PsvW7F7zNQU6jJfq25Zn71MnMd0rcS31k_p48V8YOTQSCVVHg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiMTYiLAogIm9iamVjdFNpemUiOiAiMTYiLAogImRvbmUiOiB0cnVlLAogInJlc291cmNlIjogewogICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMS8xNTMyNTQyOTk2MjU1MTM5IiwKICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvcHktb2JqMSIsCiAgIm5hbWUiOiAiY29weS1vYmoxIiwKICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5NjI1NTEzOSIsCiAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICJjb250ZW50VHlwZSI6ICJ0ZXh0L3BsYWluIiwKICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoxNi4yNTNaIiwKICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjE2LjI1M1oiLAogICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjE2LjI1M1oiLAogICJzaXplIjogIjE2IiwKICAibWQ1SGFzaCI6ICJud1VYQUhxVVFKcTVueXk2ejNqTmt3PT0iLAogICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvcHktb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5OTYyNTUxMzkmYWx0PW1lZGlhIiwKICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgImFjbCI6IFsKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxLzE1MzI1NDI5OTYyNTUxMzkvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb3B5LW9iajEvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY29weS1vYmoxIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5OTYyNTUxMzkiLAogICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJPV05FUiIsCiAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICJ0ZWFtIjogIm93bmVycyIKICAgIH0sCiAgICAiZXRhZyI6ICJDS09qbE1mdnV0d0NFQUU9IgogICB9LAogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb3B5LW9iajEvMTUzMjU0Mjk5NjI1NTEzOS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb3B5LW9iajEvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAib2JqZWN0IjogImNvcHktb2JqMSIsCiAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk2MjU1MTM5IiwKICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgIH0sCiAgICAiZXRhZyI6ICJDS09qbE1mdnV0d0NFQUU9IgogICB9LAogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb3B5LW9iajEvMTUzMjU0Mjk5NjI1NTEzOS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb3B5LW9iajEvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAib2JqZWN0IjogImNvcHktb2JqMSIsCiAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk2MjU1MTM5IiwKICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICB9LAogICAgImV0YWciOiAiQ0tPamxNZnZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxLzE1MzI1NDI5OTYyNTUxMzkvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvcHktb2JqMS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAib2JqZWN0IjogImNvcHktb2JqMSIsCiAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk2MjU1MTM5IiwKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAicm9sZSI6ICJPV05FUiIsCiAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgImV0YWciOiAiQ0tPamxNZnZ1dHdDRUFFPSIKICAgfQogIF0sCiAgIm93bmVyIjogewogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgfSwKICAiY3JjMzJjIjogIkZMamV3QT09IiwKICAiZXRhZyI6ICJDS09qbE1mdnV0d0NFQUU9IgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "3c8575a59df371a1",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/copy-obj1?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "31"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7b480d80b7a4154998d54f5fa943a068/10231615799431595355;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/copy-obj1?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJjb250ZW50RW5jb2RpbmciOiJpZGVudGl0eSJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3827"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:17 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543295000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcdk2:4016,/bns/xi/borg/xi/bns/blobstore2/bitpusher/88.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=FMBYW-roFs62swbPnpToAQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/88.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/88:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrWoWjCdqYJJGHXjH2FVigRxwQYmaXWYvH0reBp5Hwr3sgI0xcxjMHAInF-e4wsNkPHOv9Fv_L93Xt-xZD8MynHGOg-RQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiMTYiLAogIm9iamVjdFNpemUiOiAiMTYiLAogImRvbmUiOiB0cnVlLAogInJlc291cmNlIjogewogICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMS8xNTMyNTQyOTk2OTE1NjkxIiwKICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvcHktb2JqMSIsCiAgIm5hbWUiOiAiY29weS1vYmoxIiwKICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5NjkxNTY5MSIsCiAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjE2LjkxNVoiLAogICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MTYuOTE1WiIsCiAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MTYuOTE1WiIsCiAgInNpemUiOiAiMTYiLAogICJtZDVIYXNoIjogIm53VVhBSHFVUUpxNW55eTZ6M2pOa3c9PSIsCiAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29weS1vYmoxP2dlbmVyYXRpb249MTUzMjU0Mjk5NjkxNTY5MSZhbHQ9bWVkaWEiLAogICJjb250ZW50RW5jb2RpbmciOiAiaWRlbnRpdHkiLAogICJhY2wiOiBbCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMS8xNTMyNTQyOTk2OTE1NjkxL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29weS1vYmoxL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAib2JqZWN0IjogImNvcHktb2JqMSIsCiAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk2OTE1NjkxIiwKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJvd25lcnMiCiAgICB9LAogICAgImV0YWciOiAiQ092THZNZnZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxLzE1MzI1NDI5OTY5MTU2OTEvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29weS1vYmoxL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgIm9iamVjdCI6ICJjb3B5LW9iajEiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5NjkxNTY5MSIsCiAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJPV05FUiIsCiAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICB9LAogICAgImV0YWciOiAiQ092THZNZnZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxLzE1MzI1NDI5OTY5MTU2OTEvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29weS1vYmoxL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgIm9iamVjdCI6ICJjb3B5LW9iajEiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5NjkxNTY5MSIsCiAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJSRUFERVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgfSwKICAgICJldGFnIjogIkNPdkx2TWZ2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMS8xNTMyNTQyOTk2OTE1NjkxL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb3B5LW9iajEvYWNsL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgIm9iamVjdCI6ICJjb3B5LW9iajEiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5NjkxNTY5MSIsCiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJldGFnIjogIkNPdkx2TWZ2dXR3Q0VBRT0iCiAgIH0KICBdLAogICJvd25lciI6IHsKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogIH0sCiAgImNyYzMyYyI6ICJGTGpld0E9PSIsCiAgImV0YWciOiAiQ092THZNZnZ1dHdDRUFFPSIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "87b2b1bfd455ce30",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "193"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "33d21e24a5b7feb5f37b990443e5e8da/17800522426559596151;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJhY2wiOlt7ImVudGl0eSI6ImRvbWFpbi1nb29nbGUuY29tIiwicm9sZSI6IlJFQURFUiJ9XSwiYnVja2V0IjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwiY29udGVudExhbmd1YWdlIjoiZW4iLCJjb250ZW50VHlwZSI6InRleHQvaHRtbCIsIm1ldGFkYXRhIjp7ImtleSI6InZhbHVlIn19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2345"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:17 GMT"
+ ],
+ "Etag": [
+ "CKPZ1cLvutwCEAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543297000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabi15:4315,/bns/xi/borg/xi/bns/blobstore2/bitpusher/118.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=FcBYW63HBuGEygPhuovwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/118.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/118:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UryqBo4OhH9TFnxIbGlI9qZ1XijDY-TOIgwIL9vkTRCkuLwzRad1n5396S75i0xhvAWuCWxC16VjslLimoJBepVnWAMVw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxIiwKICJuYW1lIjogIm9iajEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMiIsCiAiY29udGVudFR5cGUiOiAidGV4dC9odG1sIiwKICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoxNy4yMDhaIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAic2l6ZSI6ICIxNiIsCiAibWQ1SGFzaCI6ICJud1VYQUhxVVFKcTVueXk2ejNqTmt3PT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMT9nZW5lcmF0aW9uPTE1MzI1NDI5ODY4NDEyNTEmYWx0PW1lZGlhIiwKICJjb250ZW50TGFuZ3VhZ2UiOiAiZW4iLAogImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogIm1ldGFkYXRhIjogewogICJrZXkiOiAidmFsdWUiCiB9LAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS8xNTMyNTQyOTg2ODQxMjUxL2RvbWFpbi1nb29nbGUuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC9kb21haW4tZ29vZ2xlLmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJvYmoxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogICAicm9sZSI6ICJSRUFERVIiLAogICAiZG9tYWluIjogImdvb2dsZS5jb20iLAogICAiZXRhZyI6ICJDS1BaMWNMdnV0d0NFQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iajEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDS1BaMWNMdnV0d0NFQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiRkxqZXdBPT0iLAogImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFJPSIKfQo="
+ }
+ },
+ {
+ "ID": "3267a22b842f2dbf",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "120"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ae89184153451f9d3d3af07d5b4d197c/6995021845691238292;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLCJjb250ZW50TGFuZ3VhZ2UiOm51bGwsImNvbnRlbnRUeXBlIjpudWxsLCJtZXRhZGF0YSI6bnVsbH0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2254"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:17 GMT"
+ ],
+ "Etag": [
+ "CKPZ1cLvutwCEAM="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543297000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaw14:4032,/bns/xi/borg/xi/bns/blobstore2/bitpusher/29.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=FcBYW-K0E4KyswbEgp2YDw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/29.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/29:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqNfQatMpauXUcNKCCbU6WjxnGmN4FSK3O-vKdnUE7KhzLJFUs-d-8mCR3FsIFep5EI-iZhmzzsnLTJd1JXg-uqmsoiTA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxIiwKICJuYW1lIjogIm9iajEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMyIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNi44NDBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MTcuNDA1WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjA2Ljg0MFoiLAogInNpemUiOiAiMTYiLAogIm1kNUhhc2giOiAibndVWEFIcVVRSnE1bnl5Nnozak5rdz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajE/Z2VuZXJhdGlvbj0xNTMyNTQyOTg2ODQxMjUxJmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvZG9tYWluLWdvb2dsZS5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogIm9iajEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgImVudGl0eSI6ICJkb21haW4tZ29vZ2xlLmNvbSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJkb21haW4iOiAiZ29vZ2xlLmNvbSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBTT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS8xNTMyNTQyOTg2ODQxMjUxL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajEvYWNsL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAib2JqMSIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBTT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJGTGpld0E9PSIsCiAiZXRhZyI6ICJDS1BaMWNMdnV0d0NFQU09Igp9Cg=="
+ }
+ },
+ {
+ "ID": "cf918b741f8e0d73",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=58c6eb3affdfecbc50b943d1128991c4c617888fa619467af075960e39ff"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b0dbd0f6c497e771f32520ff46fc9c99/10851672384819120162;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS01OGM2ZWIzYWZmZGZlY2JjNTBiOTQzZDExMjg5OTFjNGM2MTc4ODhmYTYxOTQ2N2FmMDc1OTYwZTM5ZmYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm5hbWUiOiJjaGVja3N1bS1vYmplY3QifQoNCi0tNThjNmViM2FmZmRmZWNiYzUwYjk0M2QxMTI4OTkxYzRjNjE3ODg4ZmE2MTk0NjdhZjA3NTk2MGUzOWZmDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KaGVsbG93b3JsZA0KLS01OGM2ZWIzYWZmZGZlY2JjNTBiOTQzZDExMjg5OTFjNGM2MTc4ODhmYTYxOTQ2N2FmMDc1OTYwZTM5ZmYtLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3737"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:17 GMT"
+ ],
+ "Etag": [
+ "CIqV9MfvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabf15:4445,/bns/xi/borg/xi/bns/blobstore2/bitpusher/103.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=FcBYW8S4H-60swb07ZvYDA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/103.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/103:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoIgpuVbHRwuZajxHCtaIqOXkBGsZd4a7X7s8-PWmmYk8p_KYWwgUzEn2TJlIS1UNM0u0poVoTjNgyTW7is2dkrEt_vbw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jaGVja3N1bS1vYmplY3QvMTUzMjU0Mjk5NzgyNjE4NiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NoZWNrc3VtLW9iamVjdCIsCiAibmFtZSI6ICJjaGVja3N1bS1vYmplY3QiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5NzgyNjE4NiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoxNy44MjVaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MTcuODI1WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjE3LjgyNVoiLAogInNpemUiOiAiMTAiLAogIm1kNUhhc2giOiAiL0Y0RGpUaWxjRElJVkVIbi9uQVFzQT09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NoZWNrc3VtLW9iamVjdD9nZW5lcmF0aW9uPTE1MzI1NDI5OTc4MjYxODYmYWx0PW1lZGlhIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NoZWNrc3VtLW9iamVjdC8xNTMyNTQyOTk3ODI2MTg2L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jaGVja3N1bS1vYmplY3QvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNoZWNrc3VtLW9iamVjdCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5OTc4MjYxODYiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNJcVY5TWZ2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY2hlY2tzdW0tb2JqZWN0LzE1MzI1NDI5OTc4MjYxODYvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jaGVja3N1bS1vYmplY3QvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjaGVja3N1bS1vYmplY3QiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk3ODI2MTg2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNJcVY5TWZ2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY2hlY2tzdW0tb2JqZWN0LzE1MzI1NDI5OTc4MjYxODYvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jaGVja3N1bS1vYmplY3QvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjaGVja3N1bS1vYmplY3QiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk3ODI2MTg2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDSXFWOU1mdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NoZWNrc3VtLW9iamVjdC8xNTMyNTQyOTk3ODI2MTg2L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NoZWNrc3VtLW9iamVjdC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjaGVja3N1bS1vYmplY3QiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk3ODI2MTg2IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDSXFWOU1mdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiVnN1MGdBPT0iLAogImV0YWciOiAiQ0lxVjlNZnZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "a72851302c1c94ac",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=ff5db1b3764364bc9f101664a923d7efce638cf789d3c9d1a5a6a217b81a"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "9f2318c5dbeb957ae6ff28d2d41d1dde/14635984963050637488;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1mZjVkYjFiMzc2NDM2NGJjOWYxMDE2NjRhOTIzZDdlZmNlNjM4Y2Y3ODlkM2M5ZDFhNWE2YTIxN2I4MWENCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm5hbWUiOiJ6ZXJvLW9iamVjdCJ9Cg0KLS1mZjVkYjFiMzc2NDM2NGJjOWYxMDE2NjRhOTIzZDdlZmNlNjM4Y2Y3ODlkM2M5ZDFhNWE2YTIxN2I4MWENCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOA0KDQoNCi0tZmY1ZGIxYjM3NjQzNjRiYzlmMTAxNjY0YTkyM2Q3ZWZjZTYzOGNmNzg5ZDNjOWQxYTVhNmEyMTdiODFhLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3672"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:18 GMT"
+ ],
+ "Etag": [
+ "CMKsjcjvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaba12:4191,/bns/xi/borg/xi/bns/blobstore2/bitpusher/20.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=FcBYW4-ZOa6wswbUmaUY"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/20.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/20:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo-glncbZdul5foYk9vnHwjO9rwyTdCqUjJHPDfqaNcevVNcCsOKQ-lW7Qn9_04J5j4_TFkgApp3wx_OQ0DyW0-NKvL2w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC96ZXJvLW9iamVjdC8xNTMyNTQyOTk4MjM4Nzg2IiwKICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vemVyby1vYmplY3QiLAogIm5hbWUiOiAiemVyby1vYmplY3QiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5ODIzODc4NiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoxOC4yMzhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MTguMjM4WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjE4LjIzOFoiLAogInNpemUiOiAiMCIsCiAibWQ1SGFzaCI6ICIxQjJNMlk4QXNnVHBnQW1ZN1BoQ2ZnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vemVyby1vYmplY3Q/Z2VuZXJhdGlvbj0xNTMyNTQyOTk4MjM4Nzg2JmFsdD1tZWRpYSIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC96ZXJvLW9iamVjdC8xNTMyNTQyOTk4MjM4Nzg2L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby96ZXJvLW9iamVjdC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiemVyby1vYmplY3QiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk4MjM4Nzg2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDTUtzamNqdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3plcm8tb2JqZWN0LzE1MzI1NDI5OTgyMzg3ODYvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby96ZXJvLW9iamVjdC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInplcm8tb2JqZWN0IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5ODIzODc4NiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDTUtzamNqdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3plcm8tb2JqZWN0LzE1MzI1NDI5OTgyMzg3ODYvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby96ZXJvLW9iamVjdC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInplcm8tb2JqZWN0IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5ODIzODc4NiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ01Lc2pjanZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC96ZXJvLW9iamVjdC8xNTMyNTQyOTk4MjM4Nzg2L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3plcm8tb2JqZWN0L2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInplcm8tb2JqZWN0IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5ODIzODc4NiIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ01Lc2pjanZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIkFBQUFBQT09IiwKICJldGFnIjogIkNNS3NqY2p2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "c0cc51b69256be58",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1/acl/allUsers?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "98"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "cc63857e097ae547f8f19b643986db4a/3830484382182279629;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1/acl/allUsers?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLCJlbnRpdHkiOiJhbGxVc2VycyIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "446"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:18 GMT"
+ ],
+ "Etag": [
+ "CKPZ1cLvutwCEAQ="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543297000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaam10:4277,/bns/xi/borg/xi/bns/blobstore2/bitpusher/121.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=FsBYW9ijFcKFygPBwIT4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/121.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/121:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoOM9pN4P1pMWIGtXNiaamoRM8msPqeZgI4ofHwu7BnvrpvIJmEzk_uaUOlj_PBV1zF1nmbJWb1Rp1effWvN7VjxjaZtg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS8xNTMyNTQyOTg2ODQxMjUxL2FsbFVzZXJzIiwKICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvYWxsVXNlcnMiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogIm9iamVjdCI6ICJvYmoxIiwKICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogImVudGl0eSI6ICJhbGxVc2VycyIsCiAicm9sZSI6ICJSRUFERVIiLAogImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFRPSIKfQo="
+ }
+ },
+ {
+ "ID": "84c36287e6bde7e7",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "90f9743c390dc97ed6a2f59af4c13bce/11471447503836580585;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=60"
+ ],
+ "Content-Length": [
+ "16"
+ ],
+ "Content-Type": [
+ "application/octet-stream"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:18 GMT"
+ ],
+ "Etag": [
+ "\"9f0517007a94409ab99f2cbacf78cd93\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:18 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:06 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532542986841251"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=FLjewA==",
+ "md5=nwUXAHqUQJq5nyy6z3jNkw=="
+ ],
+ "X-Goog-Metageneration": [
+ "4"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "16"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/449,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1157.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=FsBYW77RJcLjlAH45JagDA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1157.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/1157:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo_7oIS7lElhqcoMkJQvtJLIIL8gQ8fyQ2nltMRpvnZmOJMYt3zJBl5R06yvE7M_gysi9cpJFPl35nn2jycAbkRL_fYBg"
+ ]
+ },
+ "Body": "ol/0V5vpnDRTVN1jMBH2Ug=="
+ }
+ },
+ {
+ "ID": "17d25cffc7d4c994",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=104e3b49ee84bc055e1eb6326e2e93304791ccd2fd32747cb1ca1852e32f"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e2f2b1e0dcb3febb119f0d480be107ac/15327816572282719095;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0xMDRlM2I0OWVlODRiYzA1NWUxZWI2MzI2ZTJlOTMzMDQ3OTFjY2QyZmQzMjc0N2NiMWNhMTg1MmUzMmYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm5hbWUiOiJvYmoxIn0KDQotLTEwNGUzYjQ5ZWU4NGJjMDU1ZTFlYjYzMjZlMmU5MzMwNDc5MWNjZDJmZDMyNzQ3Y2IxY2ExODUyZTMyZg0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCmhlbGxvDQotLTEwNGUzYjQ5ZWU4NGJjMDU1ZTFlYjYzMjZlMmU5MzMwNDc5MWNjZDJmZDMyNzQ3Y2IxY2ExODUyZTMyZi0tDQo="
+ },
+ "Response": {
+ "StatusCode": 401,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "30747"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:18 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "Www-Authenticate": [
+ "Bearer realm=\"https://accounts.google.com/\""
+ ],
+ "X-Google-Backends": [
+ "xgiadabi15:4315,/bns/xi/borg/xi/bns/blobstore2/bitpusher/14.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=FsBYW7yNK8K5swbhtJyABg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/14.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/14:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "GgIYBiAB"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uro3yTa-HH-0roVuNhW9SsrhNzXokKb032d0gWYNR9TB2iQu4hrhUEPQWXdYtG7yfU6Qr8S4ctm7Zv0pPvgc8LFH1jJ4A"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLiIsCiAgICAibG9jYXRpb25UeXBlIjogImhlYWRlciIsCiAgICAibG9jYXRpb24iOiAiQXV0aG9yaXphdGlvbiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjI3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6NjEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmluc2VydChPYmplY3RzRGVsZWdhdG9yLmphdmE6OTUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1MT0dJTl9SRVFVSVJFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9Y29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPUxPR0lOX1JFUVVJUkVELCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6Mjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YTo2MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuaW5zZXJ0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo5NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPXVuYXV0aG9yaXplZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uUkVRVUlSRUQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjI3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6NjEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmluc2VydChPYmplY3RzRGVsZWdhdG9yLmphdmE6OTUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPVJFUVVJUkVELCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPWVudGl0eS5hdXRoZW50aWNhdGVkX3VzZXIsIG1lc3NhZ2U9QW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLiwgdW5uYW1lZEFyZ3VtZW50cz1bXX0sIGxvY2F0aW9uPWhlYWRlcnMuQXV0aG9yaXphdGlvbiwgbWVzc2FnZT1Bbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAxfSBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YToyNzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjYxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5pbnNlcnQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjk1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6Mjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YTo2MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuaW5zZXJ0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo5NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXtXV1ctQXV0aGVudGljYXRlPVtCZWFyZXIgcmVhbG09XCJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vXCJdfSwgaHR0cFN0YXR1cz11bmF1dGhvcml6ZWQsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLlJFUVVJUkVELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YToyNzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjYxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5pbnNlcnQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjk1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuLCBlcnJvclByb3RvQ29kZT1SRVFVSVJFRCwgZXJyb3JQcm90b0RvbWFpbj1nZGF0YS5Db3JlRXJyb3JEb21haW4sIGZpbHRlcmVkTWVzc2FnZT1udWxsLCBsb2NhdGlvbj1lbnRpdHkuYXV0aGVudGljYXRlZF91c2VyLCBtZXNzYWdlPUFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1oZWFkZXJzLkF1dGhvcml6YXRpb24sIG1lc3NhZ2U9QW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLiwgcmVhc29uPXJlcXVpcmVkLCBycGNDb2RlPTQwMX0gQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLjogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6Mjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YTo2MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuaW5zZXJ0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo5NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuYXV0aC5BdXRoZW50aWNhdG9ySW50ZXJjZXB0b3IuYWRkQ2hhbGxlbmdlSGVhZGVyKEF1dGhlbnRpY2F0b3JJbnRlcmNlcHRvci5qYXZhOjI2NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmF1dGguQXV0aGVudGljYXRvckludGVyY2VwdG9yLnByb2Nlc3NFcnJvclJlc3BvbnNlKEF1dGhlbnRpY2F0b3JJbnRlcmNlcHRvci5qYXZhOjIzMSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmF1dGguR2FpYU1pbnRJbnRlcmNlcHRvci5wcm9jZXNzRXJyb3JSZXNwb25zZShHYWlhTWludEludGVyY2VwdG9yLmphdmE6NzQ1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5pbnRlcmNlcHQuQXJvdW5kSW50ZXJjZXB0b3JXcmFwcGVyLnByb2Nlc3NFcnJvclJlc3BvbnNlKEFyb3VuZEludGVyY2VwdG9yV3JhcHBlci5qYXZhOjI4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc3RhdHMuU3RhdHNCb290c3RyYXAkSW50ZXJjZXB0b3JTdGF0c1JlY29yZGVyLnByb2Nlc3NFcnJvclJlc3BvbnNlKFN0YXRzQm9vdHN0cmFwLmphdmE6MzEyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5pbnRlcmNlcHQuSW50ZXJjZXB0aW9ucyRBcm91bmRJbnRlcmNlcHRpb24uaGFuZGxlRXJyb3JSZXNwb25zZShJbnRlcmNlcHRpb25zLmphdmE6MjAyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5pbnRlcmNlcHQuSW50ZXJjZXB0aW9ucyRBcm91bmRJbnRlcmNlcHRpb24uYWNjZXNzJDIwMChJbnRlcmNlcHRpb25zLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5pbnRlcmNlcHQuSW50ZXJjZXB0aW9ucyRBcm91bmRJbnRlcmNlcHRpb24kMS5jYWxsKEludGVyY2VwdGlvbnMuamF2YToxNDQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLmludGVyY2VwdC5JbnRlcmNlcHRpb25zJEFyb3VuZEludGVyY2VwdGlvbiQxLmNhbGwoSW50ZXJjZXB0aW9ucy5qYXZhOjEzNylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0RXhjZXB0aW9uKEFic3RyYWN0RnV0dXJlLmphdmE6NzE2KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjY4KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9TE9HSU5fUkVRVUlSRUQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YToyNzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjYxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5pbnNlcnQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjk1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9dW5hdXRob3JpemVkLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5SRVFVSVJFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6Mjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YTo2MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuaW5zZXJ0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo5NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LmF1dGhlbnRpY2F0ZWRfdXNlciwgbWVzc2FnZT1Bbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249aGVhZGVycy5BdXRob3JpemF0aW9uLCBtZXNzYWdlPUFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS4sIHJlYXNvbj1yZXF1aXJlZCwgcnBjQ29kZT00MDF9IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjI3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6NjEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmluc2VydChPYmplY3RzRGVsZWdhdG9yLmphdmE6OTUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdC4uLiAxOSBtb3JlXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDAxLAogICJtZXNzYWdlIjogIkFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "e48050aef4c4969c",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/copy-obj1?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bd8b90422d88e9ac925994388f6c5f67/665946922968222470;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/copy-obj1?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:19 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543286000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbk13:4247,/bns/xi/borg/xi/bns/blobstore2/bitpusher/93.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=F8BYW-FMqbSzBpjljNgL"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/93.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/93:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqYaePpqNjKmf7E62a-MiDTqbazV4RWjoa6droYh9HowWqqZdY6LfIo_8S8AsbMGEaa2lPhnAmgSpkoSQVVcsIhd5VQsw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "1602d04e5742ea15",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/copy-obj1?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "495f0a2cfeccc38945aafbd418603fec/4522315991414361236;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/copy-obj1?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "12497"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:19 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:19 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae1:4085,/bns/xi/borg/xi/bns/blobstore2/bitpusher/125.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=F8BYW7miH8GFygP35YHoAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/125.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/125:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpFiedi2Omaq6YrFYBvHaamyhkiQJc7eP2mA-1vrCT6Hb9CR0KzUmw3x2h0s3YhplcpgcCm0MWL9PhRPfSD3e_eCG6UuQ"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb3B5LW9iajEiLAogICAgImRlYnVnSW5mbyI6ICJjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6T0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb3B5LW9iajFcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1OT1RfRk9VTkQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6T0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb3B5LW9iajFcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1ub3RGb3VuZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uTk9UX0ZPVU5ELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6T0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb3B5LW9iajFcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPU5PVF9GT1VORCwgZXJyb3JQcm90b0RvbWFpbj1nZGF0YS5Db3JlRXJyb3JEb21haW4sIGZpbHRlcmVkTWVzc2FnZT1udWxsLCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQubmFtZSwgbWVzc2FnZT1ObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMSwgdW5uYW1lZEFyZ3VtZW50cz1bXX0sIGxvY2F0aW9uPWVudGl0eS5yZXNvdXJjZV9pZC5uYW1lLCBtZXNzYWdlPU5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxLCByZWFzb249bm90Rm91bmQsIHJwY0NvZGU9NDA0fSBObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMTogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6Ok9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjg0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YToyNylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZGVsZXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMTMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBPQkpFQ1RfTk9UX0ZPVU5EOiBPQkpFQ1RfTk9UX0ZPVU5EOiBObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwNCwKICAibWVzc2FnZSI6ICJObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMSIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "720ad909201d145f",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/copy-obj1?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "be3e3cf98acc0c17bd05771392a26df3/12163279113068662192;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/copy-obj1?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "12437"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:19 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:19 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543287000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcca7:4401,/bns/xi/borg/xi/bns/blobstore2/bitpusher/50.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=F8BYW8PEIsKwswbo-qroCQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/50.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/50:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrEFaJuU43EkZ9a3OPACLQHz5miDc9qKv9a7ayd935FYUSKyDnBoEo6x-BeWdAAFvVbx796n0sDdwodi-LFfytOltFLyA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb3B5LW9iajEiLAogICAgImRlYnVnSW5mbyI6ICJjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6T0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb3B5LW9iajFcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkdldE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0T2JqZWN0LmphdmE6MzMzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuR2V0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRPYmplY3QuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZ2V0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo4MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1OT1RfRk9VTkQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6T0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb3B5LW9iajFcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkdldE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0T2JqZWN0LmphdmE6MzMzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuR2V0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRPYmplY3QuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZ2V0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo4MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1ub3RGb3VuZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uTk9UX0ZPVU5ELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6T0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogT0JKRUNUX05PVF9GT1VORDogTm8gc3VjaCBvYmplY3Q6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb3B5LW9iajFcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkdldE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0T2JqZWN0LmphdmE6MzMzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuR2V0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRPYmplY3QuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZ2V0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo4MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPU5PVF9GT1VORCwgZXJyb3JQcm90b0RvbWFpbj1nZGF0YS5Db3JlRXJyb3JEb21haW4sIGZpbHRlcmVkTWVzc2FnZT1udWxsLCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQubmFtZSwgbWVzc2FnZT1ObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMSwgdW5uYW1lZEFyZ3VtZW50cz1bXX0sIGxvY2F0aW9uPWVudGl0eS5yZXNvdXJjZV9pZC5uYW1lLCBtZXNzYWdlPU5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxLCByZWFzb249bm90Rm91bmQsIHJwY0NvZGU9NDA0fSBObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMTogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6Ok9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE9CSkVDVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggb2JqZWN0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29weS1vYmoxXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5HZXRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldE9iamVjdC5qYXZhOjMzMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkdldE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0T2JqZWN0LmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmdldChPYmplY3RzRGVsZWdhdG9yLmphdmE6ODEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBPQkpFQ1RfTk9UX0ZPVU5EOiBPQkpFQ1RfTk9UX0ZPVU5EOiBObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwNCwKICAibWVzc2FnZSI6ICJObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvcHktb2JqMSIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "bc2dcd6daedbf12b",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/composed1/compose?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "156"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "795823fae1bc56539477f0c3c6a55502/1357778532200304333;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/composed1/compose?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAifSwic291cmNlT2JqZWN0cyI6W3sibmFtZSI6Im9iajEifSx7Im5hbWUiOiJvYmoyIn0seyJuYW1lIjoib2JqL3dpdGgvc2xhc2hlcyJ9XX0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "800"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:20 GMT"
+ ],
+ "Etag": [
+ "CNXlgcnvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543295000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcca7:4401,/bns/xi/borg/xi/bns/blobstore2/bitpusher/52.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=F8BYW_2UMcWxswbvo6bYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/52.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/52:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq40VTdjQ1hWBPSa4S127LyTnK-5XTJOY7OdPIlYQUjUtTZs9iFaRCdxQG06SN9Fz5vvsjJCe7qRBrnrVZPs0r7S3eN_A"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb21wb3NlZDEvMTUzMjU0MzAwMDE0NjY0NSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbXBvc2VkMSIsCiAibmFtZSI6ICJjb21wb3NlZDEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMDE0NjY0NSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyMC4xNDZaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjAuMTQ2WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjIwLjE0NloiLAogInNpemUiOiAiNDgiLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29tcG9zZWQxP2dlbmVyYXRpb249MTUzMjU0MzAwMDE0NjY0NSZhbHQ9bWVkaWEiLAogImNyYzMyYyI6ICJNUkFmeWc9PSIsCiAiY29tcG9uZW50Q291bnQiOiAzLAogImV0YWciOiAiQ05YbGdjbnZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "ed49dcc21ac6eaa4",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/composed1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2d47f08ebede06d239b38e532165a07e/8998741649559703529;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/composed1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "48"
+ ],
+ "Content-Type": [
+ "application/octet-stream"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:20 GMT"
+ ],
+ "Etag": [
+ "\"-CNXlgcnvutwCEAE=\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:20 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:20 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Component-Count": [
+ "3"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:20 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532543000146645"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=MRAfyg=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "48"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/146,/bns/yb/borg/yb/bns/blobstore2/bitpusher/882.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=GMBYW-mpEYTilgGz07OgDA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/882.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/882:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqrMoSNK8TIwf9LzAutTWKZlmehvgj16AwNIAK-Mu5w2facKkCXYLCI5_rNYedMjRcoT1IPTWlEJgkSCNxzDHvcTZKqWw"
+ ]
+ },
+ "Body": "ol/0V5vpnDRTVN1jMBH2UiKwxNJmSk4fX1+sgbziNREyW6Zad/yqO+MJ5jt3egfo"
+ }
+ },
+ {
+ "ID": "6ba3a6eb78165892",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/composed2/compose?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "182"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5c637d77a32f7b8f8d6e8fbb9b9709a8/16639422196742443014;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/composed2/compose?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLCJjb250ZW50VHlwZSI6InRleHQvanNvbiJ9LCJzb3VyY2VPYmplY3RzIjpbeyJuYW1lIjoib2JqMSJ9LHsibmFtZSI6Im9iajIifSx7Im5hbWUiOiJvYmovd2l0aC9zbGFzaGVzIn1dfQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "829"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:20 GMT"
+ ],
+ "Etag": [
+ "CKm7psnvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543295000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaca8:4102,/bns/xi/borg/xi/bns/blobstore2/bitpusher/89.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=GMBYW8rQGoO9swaYg4XIAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/89.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/89:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3Wld1VlZPbFo5UEJuNy1xSnQ3YTFGeE42d05KRlNFUUJsSWxQNkUtZGdWZnY4YVVVVlJ3UEJWTkNTMVp6VVBiLTFYMnFnZVhBOVpfaXBOQVk0OE9zc0cwNEgyemxJbGpxcGwxVFlwNEdCeWhMRVE0RVZGbXZadFB5Si1SYnV5aTB3cEVmcVQ1aG9qRHVkYnpyeXVSU2Q3M05iWHhra2xSRUZhMUE2cXJGY1pvcFBBZmhZaTNDUWwzTDQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoCEyBjfUiojY7nE_12fAN1NbbWX5PI8H_YpZ9QJ0FZ6cUj6tgRVRe18-53UIcqjp7YvwQuX7migBXhz7S4BVMjGku9FA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb21wb3NlZDIvMTUzMjU0MzAwMDc0NzQzMyIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbXBvc2VkMiIsCiAibmFtZSI6ICJjb21wb3NlZDIiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMDc0NzQzMyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9qc29uIiwKICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjIwLjc0N1oiLAogInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyMC43NDdaIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjAuNzQ3WiIsCiAic2l6ZSI6ICI0OCIsCiAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb21wb3NlZDI/Z2VuZXJhdGlvbj0xNTMyNTQzMDAwNzQ3NDMzJmFsdD1tZWRpYSIsCiAiY3JjMzJjIjogIk1SQWZ5Zz09IiwKICJjb21wb25lbnRDb3VudCI6IDMsCiAiZXRhZyI6ICJDS203cHNudnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "ee6f1740a68b9136",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/composed2",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "75810f2606a85a8ae56cb069d27c73b9/5833922719663903010;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/composed2"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "48"
+ ],
+ "Content-Type": [
+ "text/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:21 GMT"
+ ],
+ "Etag": [
+ "\"-CKm7psnvutwCEAE=\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:21 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:20 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Component-Count": [
+ "3"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:20 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532543000747433"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=MRAfyg=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "48"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/503,/bns/yb/borg/yb/bns/blobstore2/bitpusher/206.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=GcBYW6OTAYaAlQGZzKiwAw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/206.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/206:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqBO-cKiILEkR-QzsauYiH4kzEB5rZ1ClLjjWo6x5ejKFk8zGpPrujPlZ6ZckqAULzTnbLRv4i8yacVuPsqAg-5dYqhQl2sFqruJlGCk5V4BJS0h_k"
+ ]
+ },
+ "Body": "ol/0V5vpnDRTVN1jMBH2UiKwxNJmSk4fX1+sgbziNREyW6Zad/yqO+MJ5jt3egfo"
+ }
+ },
+ {
+ "ID": "6c4da20e0560d9a9",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=2242f0dfdc56fa7e53de8fc7c9bab59f08527bf0376340dc8438f3114506"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "3583df452bae8d2df96382fb8f1455fd/9618515664770568881;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0yMjQyZjBkZmRjNTZmYTdlNTNkZThmYzdjOWJhYjU5ZjA4NTI3YmYwMzc2MzQwZGM4NDM4ZjMxMTQ1MDYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNvbnRlbnRFbmNvZGluZyI6Imd6aXAiLCJuYW1lIjoiZ3ppcC10ZXN0In0KDQotLTIyNDJmMGRmZGM1NmZhN2U1M2RlOGZjN2M5YmFiNTlmMDg1MjdiZjAzNzYzNDBkYzg0MzhmMzExNDUwNg0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWd6aXANCg0KH4sIAAAAAAAA/2IgEgACAAD//7E97OkoAAAADQotLTIyNDJmMGRmZGM1NmZhN2U1M2RlOGZjN2M5YmFiNTlmMDg1MjdiZjAzNzYzNDBkYzg0MzhmMzExNDUwNi0tDQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3662"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:21 GMT"
+ ],
+ "Etag": [
+ "CLj61snvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543301000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabk16:4043,/bns/xi/borg/xi/bns/blobstore2/bitpusher/16.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=GcBYW7zYC4-wswbzhrDoBw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/16.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/16:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WnJJdFpGZkN5WHlQSmtlZEsxZlZNMDRUUDRhS1hPak96b0lCRUYyRXRmVVV1MXJwUk8yOXQtWTVueEFUbEU5QW5uOG1saml3VEhwaHhzTndrUGpsVXROb3JSMHBjaklyODJlOFlHRURuUWtDODBJTDdta0tCNFJEN0VvakRoam14eExKRTljVjBwaVNndTNWNVh3X1NITFlrX2M0U1JUOVVrLWdpU1NSWnR2NDBkdFhCeHZ1S3c1Wk0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpSovvaWd8EZ93kqnbtIHb2lXKKT121hU72i9W4yQPwMU7RUwMH1tAMcBEst-PRL-5oLmLKCB6uIrEyNWmSjPKsa2CMHA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9nemlwLXRlc3QvMTUzMjU0MzAwMTU0MTk0NCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2d6aXAtdGVzdCIsCiAibmFtZSI6ICJnemlwLXRlc3QiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMTU0MTk0NCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAiYXBwbGljYXRpb24veC1nemlwIiwKICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjIxLjU0MVoiLAogInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyMS41NDFaIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjEuNTQxWiIsCiAic2l6ZSI6ICIyNyIsCiAibWQ1SGFzaCI6ICJPdEN3K2FSUklScUtHRkFFT2F4K3F3PT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vZ3ppcC10ZXN0P2dlbmVyYXRpb249MTUzMjU0MzAwMTU0MTk0NCZhbHQ9bWVkaWEiLAogImNvbnRlbnRFbmNvZGluZyI6ICJnemlwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2d6aXAtdGVzdC8xNTMyNTQzMDAxNTQxOTQ0L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9nemlwLXRlc3QvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImd6aXAtdGVzdCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDE1NDE5NDQiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNMajYxc252dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvZ3ppcC10ZXN0LzE1MzI1NDMwMDE1NDE5NDQvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9nemlwLXRlc3QvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJnemlwLXRlc3QiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAxNTQxOTQ0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNMajYxc252dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvZ3ppcC10ZXN0LzE1MzI1NDMwMDE1NDE5NDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9nemlwLXRlc3QvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJnemlwLXRlc3QiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAxNTQxOTQ0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDTGo2MXNudnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2d6aXAtdGVzdC8xNTMyNTQzMDAxNTQxOTQ0L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2d6aXAtdGVzdC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJnemlwLXRlc3QiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAxNTQxOTQ0IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDTGo2MXNudnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiOURod0JBPT0iLAogImV0YWciOiAiQ0xqNjFzbnZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "ed1ef889c632edcd",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/gzip-test",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d804a06a8e0b4edd2ee15d8067399d81/17259478786424869837;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/gzip-test"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "none"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Type": [
+ "application/x-gzip"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:21 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:21 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:21 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Accept-Encoding"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:21 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532543001541944"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=9DhwBA==",
+ "md5=OtCw+aRRIRqKGFAEOax+qw=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "gzip"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "27"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/395,/bns/yb/borg/yb/bns/blobstore2/bitpusher/251.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=GcBYW8-RKIWdlAGykqnQAg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/251.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Body-Transformations": [
+ "gunzipped,chunked"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/251:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpE1zHQ8xJkqd2pTuKxfhkhEHBV1SqjUrk2q5cD7z3l_VqcqEb6BTxJnzcyKM44fUSDUy2dedYczL6MUg9k-iGiXo9JB_Xu__YlgRlPJrPKSQzKnR4"
+ ]
+ },
+ "Body": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
+ }
+ },
+ {
+ "ID": "509fd8554b688f33",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj-not-exists",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1bebb44d028afc4128bc83934ba79c1b/6453697834369619178;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/obj-not-exists"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "225"
+ ],
+ "Content-Type": [
+ "application/xml; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:21 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:21 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/151,/bns/yb/borg/yb/bns/blobstore2/bitpusher/680.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=GcBYW9vfLoGvlgGukrfgAw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/680.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/680:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpzylElkX6h-bIbtJV21deVGqlSsm0-7kKQFMVxNTNPb8daEDheOAETQg78urBeY-ekgJ_UUvNrwn1lq7n-Qi-YiAfs32jl2HD19-_f9d5Qu-lobkg"
+ ]
+ },
+ "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iai1ub3QtZXhpc3RzPC9EZXRhaWxzPjwvRXJyb3I+"
+ }
+ },
+ {
+ "ID": "c9ae3660a1098780",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=9609261e3f44d77c071b9e694e6b53feee2eba9536f3f9c97ab79379a8e3"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e01e2607a32412b064c11eda9d075112/10238290779493127288;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS05NjA5MjYxZTNmNDRkNzdjMDcxYjllNjk0ZTZiNTNmZWVlMmViYTk1MzZmM2Y5Yzk3YWI3OTM3OWE4ZTMNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJzaWduZWRVUkwifQoNCi0tOTYwOTI2MWUzZjQ0ZDc3YzA3MWI5ZTY5NGU2YjUzZmVlZTJlYmE5NTM2ZjNmOWM5N2FiNzkzNzlhOGUzDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCg0KVGhpcyBpcyBhIHRlc3Qgb2YgU2lnbmVkVVJMLgoNCi0tOTYwOTI2MWUzZjQ0ZDc3YzA3MWI5ZTY5NGU2YjUzZmVlZTJlYmE5NTM2ZjNmOWM5N2FiNzkzNzlhOGUzLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3665"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:22 GMT"
+ ],
+ "Etag": [
+ "CLPCjcrvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543302000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbh13:4060,/bns/xi/borg/xi/bns/blobstore2/bitpusher/65.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=GsBYW4u6BOSwswah7LfIBA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/65.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/65:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWNzZHdFYjhpLU5JVkFBRUNzcE1rRk1na1RzcF84bm5mOFNVbEc0dWZEU3Y2cDFHQVdDcV8yektNZFBKYVM4YmdmVzduc29nRFczNEw5bXE4dXc3WGh0MzJ6ZmJMYlg2bnNvU09sRm9BTG9LS0tKUTBESTNwMmZIenA3Mk9RQ0dHUzdja3RIRTllc3FhWGUxZ2x1OXZFM0hnU0xIY2FfcXZ3Skw3YTN5WFU1MFgzWWM5NEVtVVNSMU0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrSt42ZRTMPREtN5EEvwIPtNoUCwhvwYq9A7nsh5FrtXj9zZjTGtCMQo8LOs4qKIYUzZgGihNPZBY3i__Th3U8aCHgfLA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9zaWduZWRVUkwvMTUzMjU0MzAwMjQzNTg5MSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3NpZ25lZFVSTCIsCiAibmFtZSI6ICJzaWduZWRVUkwiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMjQzNTg5MSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyMi40MzRaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjIuNDM0WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjIyLjQzNFoiLAogInNpemUiOiAiMjkiLAogIm1kNUhhc2giOiAiSnl4dmd3bTluMk1zckdUTVBiTWVZQT09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3NpZ25lZFVSTD9nZW5lcmF0aW9uPTE1MzI1NDMwMDI0MzU4OTEmYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3NpZ25lZFVSTC8xNTMyNTQzMDAyNDM1ODkxL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9zaWduZWRVUkwvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInNpZ25lZFVSTCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDI0MzU4OTEiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNMUENqY3J2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvc2lnbmVkVVJMLzE1MzI1NDMwMDI0MzU4OTEvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9zaWduZWRVUkwvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJzaWduZWRVUkwiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAyNDM1ODkxIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNMUENqY3J2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvc2lnbmVkVVJMLzE1MzI1NDMwMDI0MzU4OTEvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9zaWduZWRVUkwvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJzaWduZWRVUkwiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAyNDM1ODkxIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDTFBDamNydnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3NpZ25lZFVSTC8xNTMyNTQzMDAyNDM1ODkxL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3NpZ25lZFVSTC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJzaWduZWRVUkwiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAyNDM1ODkxIiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDTFBDamNydnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiWlRxQUx3PT0iLAogImV0YWciOiAiQ0xQQ2pjcnZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "34d230ed114dabbc",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/defaultObjectAcl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "39f25e32680771ffa701442ec90a0fc1/17879253901147428244;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/defaultObjectAcl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "136"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:24 GMT"
+ ],
+ "Etag": [
+ "CAY="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543303000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadacl12:4133,/bns/xi/borg/xi/bns/blobstore2/bitpusher/104.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=G8BYW-iQFOy2swaUwyg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/104.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/104:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3WmpnbGZzeGtrNzhLS3U5el9mcjdvbVVCMFE0aGRfdkJia19rU29sV3I3b3BHanpSS2ZQTl9lU2R4LUNoZ0paRWx3ckF1cDFHdVJkMWF1Z0hubGkzc20tbENPYXl3RnBjOFdWZ1NSZl9iMkMyekdFLXZ6dzVRazZQYTBnSmN2ZkZBei1xbGdDa1NDZnEwTzd5eHMtYldSdHJNQ0JEdTh2dkNEbjJRcTI0XzhwbThjcEpGYXQ5WGJsZFEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoE4N1aZhNDY0sfO1sw2Y5LOSmc02nXtz1ZkzMpbR1qvwLYz8VrvZzXQAjl0xLfVDzLowpc_NCNMwvWGLJLJLBXYYoJpA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogInJvbGUiOiAiUkVBREVSIiwKICJkb21haW4iOiAiZ29vZ2xlLmNvbSIsCiAiZXRhZyI6ICJDQVk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "1ed58258516f07ea",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/defaultObjectAcl?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "87e7dcc420ed0e09da469ef2cf3b7662/7073471849597327025;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/defaultObjectAcl?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "860"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:25 GMT"
+ ],
+ "Etag": [
+ "CAY="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:25 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543304000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbac7:4350,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=HMBYW7DUOYaxswa5pbcI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/5:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3WmpnbGZzeGtrNzhLS3U5el9mcjdvbVVCMFE0aGRfdkJia19rU29sV3I3b3BHanpSS2ZQTl9lU2R4LUNoZ0paRWx3ckF1cDFHdVJkMWF1Z0hubGkzc20tbENPYXl3RnBjOFdWZ1NSZl9iMkMyekdFLXZ6dzVRazZQYTBnSmN2ZkZBei1xbGdDa1NDZnEwTzd5eHMtYldSdHJNQ0JEdTh2dkNEbjJRcTI0XzhwbThjcEpGYXQ5WGJsZFEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpSe_C0kHQwtFGTZSI7I7NOwokj6awIjEKU07_GRABotBdJxZreTb3Dt7BbnTitZ5Z9ufwVoMcjPYr4KN1NG3ep0DHrpg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNBWT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDQVk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBWT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogICAicm9sZSI6ICJSRUFERVIiLAogICAiZG9tYWluIjogImdvb2dsZS5jb20iLAogICAiZXRhZyI6ICJDQVk9IgogIH0KIF0KfQo="
+ }
+ },
+ {
+ "ID": "db5cfbe507963dc9",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=dedb4abe67e502256d7299ba655758ed48852ea95f3fac1a9b9fb8c691db"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "70fc6f61009ea8c06c2c4071c5b59712/10930122393020110655;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1kZWRiNGFiZTY3ZTUwMjI1NmQ3Mjk5YmE2NTU3NThlZDQ4ODUyZWE5NWYzZmFjMWE5YjlmYjhjNjkxZGINCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsIm5hbWUiOiJhY2wxIn0KDQotLWRlZGI0YWJlNjdlNTAyMjU2ZDcyOTliYTY1NTc1OGVkNDg4NTJlYTk1ZjNmYWMxYTliOWZiOGM2OTFkYg0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCq9AOYFSfof04oT16idFkq4NCi0tZGVkYjRhYmU2N2U1MDIyNTZkNzI5OWJhNjU1NzU4ZWQ0ODg1MmVhOTVmM2ZhYzFhOWI5ZmI4YzY5MWRiLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "4123"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:25 GMT"
+ ],
+ "Etag": [
+ "CN/qy8vvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543305000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaau9:4168,/bns/xi/borg/xi/bns/blobstore2/bitpusher/73.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=HcBYW7_1DMW9swa6lIW4AQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/73.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/73:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WmpnbGZzeGtrNzhLS3U5el9mcjdvbVVCMFE0aGRfdkJia19rU29sV3I3b3BHanpSS2ZQTl9lU2R4LUNoZ0paRWx3ckF1cDFHdVJkMWF1Z0hubGkzc20tbENPYXl3RnBjOFdWZ1NSZl9iMkMyekdFLXZ6dzVRazZQYTBnSmN2ZkZBei1xbGdDa1NDZnEwTzd5eHMtYldSdHJNQ0JEdTh2dkNEbjJRcTI0XzhwbThjcEpGYXQ5WGJsZFEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uoc8vzt6t776k8EtNIl74yv79EnCqSSwi_fMIxLXNdfq1abQ6r0LV9qHS8lBLXd-58TxaQaza59sd1_2ekpiRiNrvCArg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wxLzE1MzI1NDMwMDU1NTQwMTUiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hY2wxIiwKICJuYW1lIjogImFjbDEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwNTU1NDAxNSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyNS41NTJaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjUuNTUyWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjI1LjU1MloiLAogInNpemUiOiAiMTYiLAogIm1kNUhhc2giOiAiQXRlNS9sRENZanNiUFVhSXVoaE95UT09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2FjbDE/Z2VuZXJhdGlvbj0xNTMyNTQzMDA1NTU0MDE1JmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wxLzE1MzI1NDMwMDU1NTQwMTUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2FjbDEvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImFjbDEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA1NTU0MDE1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDTi9xeTh2dnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbDEvMTUzMjU0MzAwNTU1NDAxNS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2FjbDEvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJhY2wxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwNTU1NDAxNSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDTi9xeTh2dnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbDEvMTUzMjU0MzAwNTU1NDAxNS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2FjbDEvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJhY2wxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwNTU1NDAxNSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ04vcXk4dnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wxLzE1MzI1NDMwMDU1NTQwMTUvZG9tYWluLWdvb2dsZS5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2FjbDEvYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImFjbDEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA1NTU0MDE1IiwKICAgImVudGl0eSI6ICJkb21haW4tZ29vZ2xlLmNvbSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJkb21haW4iOiAiZ29vZ2xlLmNvbSIsCiAgICJldGFnIjogIkNOL3F5OHZ2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsMS8xNTMyNTQzMDA1NTU0MDE1L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2FjbDEvYWNsL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiYWNsMSIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDU1NTQwMTUiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNOL3F5OHZ2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtaU1Xcmc9PSIsCiAiZXRhZyI6ICJDTi9xeTh2dnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "8df66d29b9a963d8",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=81861b08306fdddea49e31c2eef5e0f86e7595fa7209670c64ced7ae9738"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1bf121c2aaedd69d845023c49b974d6f/14714434966939949261;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS04MTg2MWIwODMwNmZkZGRlYTQ5ZTMxYzJlZWY1ZTBmODZlNzU5NWZhNzIwOTY3MGM2NGNlZDdhZTk3MzgNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsIm5hbWUiOiJhY2wyIn0KDQotLTgxODYxYjA4MzA2ZmRkZGVhNDllMzFjMmVlZjVlMGY4NmU3NTk1ZmE3MjA5NjcwYzY0Y2VkN2FlOTczOA0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0Kb8akmmONOwKE8momL3681Q0KLS04MTg2MWIwODMwNmZkZGRlYTQ5ZTMxYzJlZWY1ZTBmODZlNzU5NWZhNzIwOTY3MGM2NGNlZDdhZTk3MzgtLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "4122"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:26 GMT"
+ ],
+ "Etag": [
+ "CNX46cvvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543305000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaad15:4167,/bns/xi/borg/xi/bns/blobstore2/bitpusher/1.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=HcBYW_G2KO2yswad5qDADg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/1.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/1:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WmpnbGZzeGtrNzhLS3U5el9mcjdvbVVCMFE0aGRfdkJia19rU29sV3I3b3BHanpSS2ZQTl9lU2R4LUNoZ0paRWx3ckF1cDFHdVJkMWF1Z0hubGkzc20tbENPYXl3RnBjOFdWZ1NSZl9iMkMyekdFLXZ6dzVRazZQYTBnSmN2ZkZBei1xbGdDa1NDZnEwTzd5eHMtYldSdHJNQ0JEdTh2dkNEbjJRcTI0XzhwbThjcEpGYXQ5WGJsZFEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqv4nuFMw_wsOgP9E7buUfGJf5Y8Yg1DhpllkaeX8XBjRTfSZCeyAyTh99I4Rl2wkfiK5IKoBQ0Oq2rKWmc7FFTAbhPew"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wyLzE1MzI1NDMwMDYwNDczMTciLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hY2wyIiwKICJuYW1lIjogImFjbDIiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwNjA0NzMxNyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjI2LjA0N1oiLAogInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyNi4wNDdaIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjYuMDQ3WiIsCiAic2l6ZSI6ICIxNiIsCiAibWQ1SGFzaCI6ICJDcUN1cXRjMldUQ08zWEpvMVYzREtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMj9nZW5lcmF0aW9uPTE1MzI1NDMwMDYwNDczMTcmYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbDIvMTUzMjU0MzAwNjA0NzMxNy9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiYWNsMiIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDYwNDczMTciLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNOWDQ2Y3Z2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsMi8xNTMyNTQzMDA2MDQ3MzE3L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImFjbDIiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA2MDQ3MzE3IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNOWDQ2Y3Z2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsMi8xNTMyNTQzMDA2MDQ3MzE3L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImFjbDIiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA2MDQ3MzE3IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDTlg0NmN2dnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbDIvMTUzMjU0MzAwNjA0NzMxNy9kb21haW4tZ29vZ2xlLmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMi9hY2wvZG9tYWluLWdvb2dsZS5jb20iLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiYWNsMiIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDYwNDczMTciLAogICAiZW50aXR5IjogImRvbWFpbi1nb29nbGUuY29tIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICAgImV0YWciOiAiQ05YNDZjdnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wyLzE1MzI1NDMwMDYwNDczMTcvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMi9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJhY2wyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwNjA0NzMxNyIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ05YNDZjdnZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogInA0c2RKZz09IiwKICJldGFnIjogIkNOWDQ2Y3Z2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "31f89a3087e1b592",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/acl1/acl?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "455022b324b4a2a90b19ae6ccf2fb302/3908934386071591402;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/acl1/acl?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3177"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:26 GMT"
+ ],
+ "Etag": [
+ "CN/qy8vvutwCEAE="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:26 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543303000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcab8:4431,/bns/xi/borg/xi/bns/blobstore2/bitpusher/26.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=HsBYW9uQCaOxswak0oXADA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/26.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/26:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3WmpnbGZzeGtrNzhLS3U5el9mcjdvbVVCMFE0aGRfdkJia19rU29sV3I3b3BHanpSS2ZQTl9lU2R4LUNoZ0paRWx3ckF1cDFHdVJkMWF1Z0hubGkzc20tbENPYXl3RnBjOFdWZ1NSZl9iMkMyekdFLXZ6dzVRazZQYTBnSmN2ZkZBei1xbGdDa1NDZnEwTzd5eHMtYldSdHJNQ0JEdTh2dkNEbjJRcTI0XzhwbThjcEpGYXQ5WGJsZFEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrYafGORXLiLW4L4_G0-VtudhS0qbacDv-QbQ-BKEWUX0ZB9KkiCXtMD4XVTdeyFqlVgwKKh_dv8kk2QNZXelX7ISdw3w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbDEvMTUzMjU0MzAwNTU1NDAxNS9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiYWNsMSIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDU1NTQwMTUiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNOL3F5OHZ2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsMS8xNTMyNTQzMDA1NTU0MDE1L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImFjbDEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA1NTU0MDE1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNOL3F5OHZ2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsMS8xNTMyNTQzMDA1NTU0MDE1L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImFjbDEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA1NTU0MDE1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDTi9xeTh2dnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbDEvMTUzMjU0MzAwNTU1NDAxNS9kb21haW4tZ29vZ2xlLmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMS9hY2wvZG9tYWluLWdvb2dsZS5jb20iLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiYWNsMSIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDU1NTQwMTUiLAogICAiZW50aXR5IjogImRvbWFpbi1nb29nbGUuY29tIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICAgImV0YWciOiAiQ04vcXk4dnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wxLzE1MzI1NDMwMDU1NTQwMTUvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJhY2wxIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwNTU1NDAxNSIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ04vcXk4dnZ1dHdDRUFFPSIKICB9CiBdCn0K"
+ }
+ },
+ {
+ "ID": "09162f1bab36a403",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/acl1/acl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "4b13b8a76e27bd179a89fea910302509/11549897507725892102;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/acl1/acl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:26 GMT"
+ ],
+ "Etag": [
+ "CN/qy8vvutwCEAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543303000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabj12:4211,/bns/xi/borg/xi/bns/blobstore2/bitpusher/39.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=HsBYW-KsEM-0swaFr7fwAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/39.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/39:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3WmpnbGZzeGtrNzhLS3U5el9mcjdvbVVCMFE0aGRfdkJia19rU29sV3I3b3BHanpSS2ZQTl9lU2R4LUNoZ0paRWx3ckF1cDFHdVJkMWF1Z0hubGkzc20tbENPYXl3RnBjOFdWZ1NSZl9iMkMyekdFLXZ6dzVRazZQYTBnSmN2ZkZBei1xbGdDa1NDZnEwTzd5eHMtYldSdHJNQ0JEdTh2dkNEbjJRcTI0XzhwbThjcEpGYXQ5WGJsZFEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpQEGtI-URwVAUYDDIDDMjgIuZneGZaMQImJQGZO6BCPULsyyjGD_hKs2Z4QAAmLqijRqLWp1Ao6RGtreG8QoLtdCmuXg"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "d67ab39089f6d6de",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/defaultObjectAcl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "9957ec015f4af8f87933324e104aa32a/744396926857534243;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/defaultObjectAcl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:28 GMT"
+ ],
+ "Etag": [
+ "CAc="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543303000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabr1:4172,/bns/xi/borg/xi/bns/blobstore2/bitpusher/41.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=HsBYW7GFI-yzswaYlLDIBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/41.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/41:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3WmpnbGZzeGtrNzhLS3U5el9mcjdvbVVCMFE0aGRfdkJia19rU29sV3I3b3BHanpSS2ZQTl9lU2R4LUNoZ0paRWx3ckF1cDFHdVJkMWF1Z0hubGkzc20tbENPYXl3RnBjOFdWZ1NSZl9iMkMyekdFLXZ6dzVRazZQYTBnSmN2ZkZBei1xbGdDa1NDZnEwTzd5eHMtYldSdHJNQ0JEdTh2dkNEbjJRcTI0XzhwbThjcEpGYXQ5WGJsZFEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UogvcLURK4JL-P3EEanT2x4wbCFoua_pQT3vB6swIC_fHKT77WPcXUd8a9vNJrcAfzoO4J8cpwqFgCAUAA5wh4fjLEIYA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "e4eae7318336d7e1",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/acl/user-jbd%40google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "109"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "3a4dc13415eb4f1e6c3ac762ef0fc4b4/8385360044216933439;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/acl/user-jbd%40google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLCJlbnRpdHkiOiJ1c2VyLWpiZEBnb29nbGUuY29tIiwicm9sZSI6IlJFQURFUiJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "412"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:29 GMT"
+ ],
+ "Etag": [
+ "CAg="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543303000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaf2:4451,/bns/xi/borg/xi/bns/blobstore2/bitpusher/31.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=IMBYW-S-Dcq8swaH5K8g"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/31.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/31:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3WmpnbGZzeGtrNzhLS3U5el9mcjdvbVVCMFE0aGRfdkJia19rU29sV3I3b3BHanpSS2ZQTl9lU2R4LUNoZ0paRWx3ckF1cDFHdVJkMWF1Z0hubGkzc20tbENPYXl3RnBjOFdWZ1NSZl9iMkMyekdFLXZ6dzVRazZQYTBnSmN2ZkZBei1xbGdDa1NDZnEwTzd5eHMtYldSdHJNQ0JEdTh2dkNEbjJRcTI0XzhwbThjcEpGYXQ5WGJsZFEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqTLfCiTa5aa0NDNPcQdKTbEtIb-AVCkhJZ-lUK9E8XQVkEq4bVihjXNRtNSr8Pm1Nro6tQeld5zWixc10-5heFC7Y80Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvdXNlci1qYmRAZ29vZ2xlLmNvbSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvdXNlci1qYmRAZ29vZ2xlLmNvbSIsCiAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAiZW50aXR5IjogInVzZXItamJkQGdvb2dsZS5jb20iLAogInJvbGUiOiAiUkVBREVSIiwKICJlbWFpbCI6ICJqYmRAZ29vZ2xlLmNvbSIsCiAiZXRhZyI6ICJDQWc9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "cd575eefceb15a26",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/acl?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b42edfa0edb660fd8b620935680e6a99/16026322062081416540;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/acl?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2019"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:30 GMT"
+ ],
+ "Etag": [
+ "CAg="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:30 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543303000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaai14:4184,/bns/xi/borg/xi/bns/blobstore2/bitpusher/101.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=IcBYW8C0MY23swaa1JGICA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/101.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/101:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3WmpnbGZzeGtrNzhLS3U5el9mcjdvbVVCMFE0aGRfdkJia19rU29sV3I3b3BHanpSS2ZQTl9lU2R4LUNoZ0paRWx3ckF1cDFHdVJkMWF1Z0hubGkzc20tbENPYXl3RnBjOFdWZ1NSZl9iMkMyekdFLXZ6dzVRazZQYTBnSmN2ZkZBei1xbGdDa1NDZnEwTzd5eHMtYldSdHJNQ0JEdTh2dkNEbjJRcTI0XzhwbThjcEpGYXQ5WGJsZFEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpYoWJRV3QWpc4HoiGtw54TOmenCeEax9lzbH1LJXh5-i2-bq62blM6ZRRnz99ExhBEWcivcZ3FAl-d9vG6OSFBULzO0A"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNBZz0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNBZz0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQWc9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3VzZXItamJkQGdvb2dsZS5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvdXNlci1qYmRAZ29vZ2xlLmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImVudGl0eSI6ICJ1c2VyLWpiZEBnb29nbGUuY29tIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImVtYWlsIjogImpiZEBnb29nbGUuY29tIiwKICAgImV0YWciOiAiQ0FnPSIKICB9CiBdCn0K"
+ }
+ },
+ {
+ "ID": "75209ddeb80ae80b",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/acl/user-jbd%40google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "42d53f282f38d567e7247e68aa302b55/5220541114321133176;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/acl/user-jbd%40google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:31 GMT"
+ ],
+ "Etag": [
+ "CAk="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543303000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcba13:4101,/bns/xi/borg/xi/bns/blobstore2/bitpusher/35.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=IsBYW6e2BqqyswarpK3gCg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/35.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/35:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3WmpnbGZzeGtrNzhLS3U5el9mcjdvbVVCMFE0aGRfdkJia19rU29sV3I3b3BHanpSS2ZQTl9lU2R4LUNoZ0paRWx3ckF1cDFHdVJkMWF1Z0hubGkzc20tbENPYXl3RnBjOFdWZ1NSZl9iMkMyekdFLXZ6dzVRazZQYTBnSmN2ZkZBei1xbGdDa1NDZnEwTzd5eHMtYldSdHJNQ0JEdTh2dkNEbjJRcTI0XzhwbThjcEpGYXQ5WGJsZFEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpvGzxBtF8xfBAA-IM1B_u4U3sTOJXFQJ6mNeMfCs1qOH6eSa5arokcEoEdCpkJ32CtPep6LOPtogBFm6msRxV2m5bxyA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "e4dc25886d647739",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=a633a895d168ac03b22412d7443dea3f4e17ba1a972ea6af3eff6587bb22"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "4355b82c1349a63823f1170932e005a5/9077191653465726471;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1hNjMzYTg5NWQxNjhhYzAzYjIyNDEyZDc0NDNkZWEzZjRlMTdiYTFhOTcyZWE2YWYzZWZmNjU4N2JiMjINCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsIm5hbWUiOiJnb3BoZXIifQoNCi0tYTYzM2E4OTVkMTY4YWMwM2IyMjQxMmQ3NDQzZGVhM2Y0ZTE3YmExYTk3MmVhNmFmM2VmZjY1ODdiYjIyDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KZGF0YQ0KLS1hNjMzYTg5NWQxNjhhYzAzYjIyNDEyZDc0NDNkZWEzZjRlMTdiYTFhOTcyZWE2YWYzZWZmNjU4N2JiMjItLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3631"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:32 GMT"
+ ],
+ "Etag": [
+ "CMG/2M7vutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543311000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcah5:4482,/bns/xi/borg/xi/bns/blobstore2/bitpusher/33.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=I8BYW9H-Ke-wswb5qKXgCA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/33.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/33:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoSxyGAO1k8wpP7zchp1NAxwA6rXBDQqUpBgM_r4roTXGMk_NSkRNpJTgZnmvyBLQ7qQ-6aOV9VXX8q87zMG43pbezg1w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9nb3BoZXIvMTUzMjU0MzAxMjA1MjkyOSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2dvcGhlciIsCiAibmFtZSI6ICJnb3BoZXIiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxMjA1MjkyOSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozMi4wNTJaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzIuMDUyWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjMyLjA1MloiLAogInNpemUiOiAiNCIsCiAibWQ1SGFzaCI6ICJqWGQvT0YwOS9zaUJYU0QzU1dBbTNBPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vZ29waGVyP2dlbmVyYXRpb249MTUzMjU0MzAxMjA1MjkyOSZhbHQ9bWVkaWEiLAogImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvZ29waGVyLzE1MzI1NDMwMTIwNTI5MjkvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2dvcGhlci9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiZ29waGVyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxMjA1MjkyOSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ01HLzJNN3Z1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9nb3BoZXIvMTUzMjU0MzAxMjA1MjkyOS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2dvcGhlci9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImdvcGhlciIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTIwNTI5MjkiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ01HLzJNN3Z1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9nb3BoZXIvMTUzMjU0MzAxMjA1MjkyOS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2dvcGhlci9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImdvcGhlciIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTIwNTI5MjkiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNNRy8yTTd2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvZ29waGVyLzE1MzI1NDMwMTIwNTI5MjkvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vZ29waGVyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImdvcGhlciIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTIwNTI5MjkiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNNRy8yTTd2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJydGg5MFE9PSIsCiAiZXRhZyI6ICJDTUcvMk03dnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "b96ffecd56c5a26f",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=f7882199118429810eeab53c9a41330141755fc6e05d8648cad02fc04f0d"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "6211c8a0087edce45cc773ab9a2c849e/12861504231680466837;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1mNzg4MjE5OTExODQyOTgxMGVlYWI1M2M5YTQxMzMwMTQxNzU1ZmM2ZTA1ZDg2NDhjYWQwMmZjMDRmMGQNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsIm5hbWUiOiLQk9C+0YTQtdGA0L7QstC4In0KDQotLWY3ODgyMTk5MTE4NDI5ODEwZWVhYjUzYzlhNDEzMzAxNDE3NTVmYzZlMDVkODY0OGNhZDAyZmMwNGYwZA0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCmRhdGENCi0tZjc4ODIxOTkxMTg0Mjk4MTBlZWFiNTNjOWE0MTMzMDE0MTc1NWZjNmUwNWQ4NjQ4Y2FkMDJmYzA0ZjBkLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3983"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:32 GMT"
+ ],
+ "Etag": [
+ "CKy1+87vutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543311000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaap16:4483,/bns/xi/borg/xi/bns/blobstore2/bitpusher/99.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=JMBYW83eEOu4swbCgq_QBw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/99.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/99:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uorytdl2du98lgWpNhJW-Rpi24g6ev6dW3S7aVp8AIDp2BALCdEsrIV51DedkBCw-fToXeTbh-7iVYO7Gy2Qcok_yi6yw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC/Qk9C+0YTQtdGA0L7QstC4LzE1MzI1NDMwMTI2MjUwNjgiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby8lRDAlOTMlRDAlQkUlRDElODQlRDAlQjUlRDElODAlRDAlQkUlRDAlQjIlRDAlQjgiLAogIm5hbWUiOiAi0JPQvtGE0LXRgNC+0LLQuCIsCiAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDEyNjI1MDY4IiwKICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICJjb250ZW50VHlwZSI6ICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwKICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjMyLjYyNFoiLAogInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozMi42MjRaIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzIuNjI0WiIsCiAic2l6ZSI6ICI0IiwKICJtZDVIYXNoIjogImpYZC9PRjA5L3NpQlhTRDNTV0FtM0E9PSIsCiAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby8lRDAlOTMlRDAlQkUlRDElODQlRDAlQjUlRDElODAlRDAlQkUlRDAlQjIlRDAlQjg/Z2VuZXJhdGlvbj0xNTMyNTQzMDEyNjI1MDY4JmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC/Qk9C+0YTQtdGA0L7QstC4LzE1MzI1NDMwMTI2MjUwNjgvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vLyVEMCU5MyVEMCVCRSVEMSU4NCVEMCVCNSVEMSU4MCVEMCVCRSVEMCVCMiVEMCVCOC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAi0JPQvtGE0LXRgNC+0LLQuCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTI2MjUwNjgiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNLeTErODd2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAv0JPQvtGE0LXRgNC+0LLQuC8xNTMyNTQzMDEyNjI1MDY4L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vJUQwJTkzJUQwJUJFJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUJFJUQwJUIyJUQwJUI4L2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAi0JPQvtGE0LXRgNC+0LLQuCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTI2MjUwNjgiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0t5MSs4N3Z1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC/Qk9C+0YTQtdGA0L7QstC4LzE1MzI1NDMwMTI2MjUwNjgvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby8lRDAlOTMlRDAlQkUlRDElODQlRDAlQjUlRDElODAlRDAlQkUlRDAlQjIlRDAlQjgvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICLQk9C+0YTQtdGA0L7QstC4IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxMjYyNTA2OCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0t5MSs4N3Z1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC/Qk9C+0YTQtdGA0L7QstC4LzE1MzI1NDMwMTI2MjUwNjgvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vJUQwJTkzJUQwJUJFJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUJFJUQwJUIyJUQwJUI4L2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogItCT0L7RhNC10YDQvtCy0LgiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDEyNjI1MDY4IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDS3kxKzg3dnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAicnRoOTBRPT0iLAogImV0YWciOiAiQ0t5MSs4N3Z1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "549cf75955bf3b0d",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=0f54028d82e7250f0872506276a4eeb9d3eff7e11280ac01aa554f4c1847"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bc633081b84092d758cbd8dc209505e6/16646097181082099747;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0wZjU0MDI4ZDgyZTcyNTBmMDg3MjUwNjI3NmE0ZWViOWQzZWZmN2UxMTI4MGFjMDFhYTU1NGY0YzE4NDcNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsIm5hbWUiOiJhIn0KDQotLTBmNTQwMjhkODJlNzI1MGYwODcyNTA2Mjc2YTRlZWI5ZDNlZmY3ZTExMjgwYWMwMWFhNTU0ZjRjMTg0Nw0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCmRhdGENCi0tMGY1NDAyOGQ4MmU3MjUwZjA4NzI1MDYyNzZhNGVlYjlkM2VmZjdlMTEyODBhYzAxYWE1NTRmNGMxODQ3LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3551"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:33 GMT"
+ ],
+ "Etag": [
+ "CNaPlM/vutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543311000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadacc2:4342,/bns/xi/borg/xi/bns/blobstore2/bitpusher/54.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=JMBYW4vSLbC6swam3qWoCQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/54.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/54:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrQYxyKFUyjUGs4Bj2vnkmCac121m-vYiY3S3wBVli-a35qu3I7S1mWeUb_Rd7cDsiqZ_ghS89VObjLZPsyLgrBZFcBZg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hLzE1MzI1NDMwMTMwMjk4NDYiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hIiwKICJuYW1lIjogImEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxMzAyOTg0NiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozMy4wMjlaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzMuMDI5WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjMzLjAyOVoiLAogInNpemUiOiAiNCIsCiAibWQ1SGFzaCI6ICJqWGQvT0YwOS9zaUJYU0QzU1dBbTNBPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYT9nZW5lcmF0aW9uPTE1MzI1NDMwMTMwMjk4NDYmYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2EvMTUzMjU0MzAxMzAyOTg0Ni9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiYSIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTMwMjk4NDYiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNOYVBsTS92dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYS8xNTMyNTQzMDEzMDI5ODQ2L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDEzMDI5ODQ2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNOYVBsTS92dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYS8xNTMyNTQzMDEzMDI5ODQ2L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDEzMDI5ODQ2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDTmFQbE0vdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2EvMTUzMjU0MzAxMzAyOTg0Ni91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDEzMDI5ODQ2IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDTmFQbE0vdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAicnRoOTBRPT0iLAogImV0YWciOiAiQ05hUGxNL3Z1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "72796e5ef625f008",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=c4fffefd7fc7129af88cce08f2e27777fe090d42defbc89d05a02b6b6179"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "16a96790b6946115a778c90c964264d5/2056003650812174513;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1jNGZmZmVmZDdmYzcxMjlhZjg4Y2NlMDhmMmUyNzc3N2ZlMDkwZDQyZGVmYmM4OWQwNWEwMmI2YjYxNzkNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsIm5hbWUiOiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIn0KDQotLWM0ZmZmZWZkN2ZjNzEyOWFmODhjY2UwOGYyZTI3Nzc3ZmUwOTBkNDJkZWZiYzg5ZDA1YTAyYjZiNjE3OQ0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCmRhdGENCi0tYzRmZmZlZmQ3ZmM3MTI5YWY4OGNjZTA4ZjJlMjc3NzdmZTA5MGQ0MmRlZmJjODlkMDVhMDJiNmI2MTc5LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "19919"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:33 GMT"
+ ],
+ "Etag": [
+ "CPWOrs/vutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543313000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcad8:4117,/bns/xi/borg/xi/bns/blobstore2/bitpusher/24.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=JcBYW_L_B4y9swaXoYfwAw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/24.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/24:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uomi8aXUHJWrwqijjgmPkAUkv5ZbkaDB0ao0P4HQNqaQIGnLJcdS2XrXi16-62GOPH6g5Zc-fyrAMbJryzqCpZcxjjkWQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhLzE1MzI1NDMwMTM0NTU3MzMiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIiwKICJuYW1lIjogImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxMzQ1NTczMyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozMy40NTVaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzMuNDU1WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjMzLjQ1NVoiLAogInNpemUiOiAiNCIsCiAibWQ1SGFzaCI6ICJqWGQvT0YwOS9zaUJYU0QzU1dBbTNBPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYT9nZW5lcmF0aW9uPTE1MzI1NDMwMTM0NTU3MzMmYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvMTUzMjU0MzAxMzQ1NTczMy9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTM0NTU3MzMiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNQV09ycy92dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS8xNTMyNTQzMDEzNDU1NzMzL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDEzNDU1NzMzIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNQV09ycy92dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS8xNTMyNTQzMDEzNDU1NzMzL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDEzNDU1NzMzIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDUFdPcnMvdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvMTUzMjU0MzAxMzQ1NTczMy91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDEzNDU1NzMzIiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDUFdPcnMvdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAicnRoOTBRPT0iLAogImV0YWciOiAiQ1BXT3JzL3Z1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "8ae864339834163e",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=540b08b3256c33c812937a3408591a13cd249c97721b90c26fc4c7eb0eb1"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1370416201f6de87e2fd86d1426bfdb1/5840597699708592448;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS01NDBiMDhiMzI1NmMzM2M4MTI5MzdhMzQwODU5MWExM2NkMjQ5Yzk3NzIxYjkwYzI2ZmM0YzdlYjBlYjENCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCJ9Cg0KLS01NDBiMDhiMzI1NmMzM2M4MTI5MzdhMzQwODU5MWExM2NkMjQ5Yzk3NzIxYjkwYzI2ZmM0YzdlYjBlYjENCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOA0KDQpkYXRhDQotLTU0MGIwOGIzMjU2YzMzYzgxMjkzN2EzNDA4NTkxYTEzY2QyNDljOTc3MjFiOTBjMjZmYzRjN2ViMGViMS0tDQo="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "2986"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:33 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543311000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcby9:4035,/bns/xi/borg/xi/bns/blobstore2/bitpusher/28.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=JcBYW_msI4G2swaN3piQDw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/28.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/28:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpCrAcNtfQkwPDiwASApTywX62P8NJe5xdwkO2Ok-Woo5zHbELA8p2CSilWxiYDfnmzsDRUdgZEhoCYbhBCF7FslUC4JQ"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiUmVxdWlyZWQiLAogICAgImRlYnVnSW5mbyI6ICJjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9UkVRVUlSRUQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1udWxsLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9YmFkUmVxdWVzdCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uUkVRVUlSRUQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPW51bGwsIGVycm9yUHJvdG9Db2RlPVJFUVVJUkVELCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPWVudGl0eS5yZXNvdXJjZS5pZC5uYW1lLCBtZXNzYWdlPW51bGwsIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2UuaWQubmFtZSwgbWVzc2FnZT1SZXF1aXJlZCwgcmVhc29uPXJlcXVpcmVkLCBycGNDb2RlPTQwMH0gUmVxdWlyZWRcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDAwLAogICJtZXNzYWdlIjogIlJlcXVpcmVkIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "66ac152ea13f75a1",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=0f0fb700fcd404eaccee70674127b4abd4358733b6e2482318a93c8538b0"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "108b66ef6a05b8469431f35d0847d3cf/9696966768171508174;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0wZjBmYjcwMGZjZDQwNGVhY2NlZTcwNjc0MTI3YjRhYmQ0MzU4NzMzYjZlMjQ4MjMxOGE5M2M4NTM4YjANCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsIm5hbWUiOiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSJ9Cg0KLS0wZjBmYjcwMGZjZDQwNGVhY2NlZTcwNjc0MTI3YjRhYmQ0MzU4NzMzYjZlMjQ4MjMxOGE5M2M4NTM4YjANCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOA0KDQpkYXRhDQotLTBmMGZiNzAwZmNkNDA0ZWFjY2VlNzA2NzQxMjdiNGFiZDQzNTg3MzNiNmUyNDgyMzE4YTkzYzg1MzhiMC0tDQo="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "4823"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:33 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543311000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabk16:4043,/bns/xi/borg/xi/bns/blobstore2/bitpusher/67.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=JcBYW73RJeG8swaRqa_QBQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/67.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/67:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoQjeAcUwURmk4sRbur3zUujnF9Smpjaf3H30AO-w7DC-WjV4UZ_Z2-zcv8UDLM5eW_tqHpJ3cDIjA5EG-e4IdeHS3GSw"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiaW52YWxpZCIsCiAgICAibWVzc2FnZSI6ICJUaGUgbWF4aW11bSBvYmplY3QgbGVuZ3RoIGlzIDEwMjQgY2hhcmFjdGVycywgYnV0IGdvdCBhIG5hbWUgd2l0aCAxMDI1IGNoYXJhY3RlcnM6ICcnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEuLi4nJyIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1JTlZBTElEX1ZBTFVFLCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89bnVsbCwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWJhZFJlcXVlc3QsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLklOVkFMSURfVkFMVUUsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPW51bGwsIGVycm9yUHJvdG9Db2RlPUlOVkFMSURfVkFMVUUsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlLmlkLm5hbWUsIG1lc3NhZ2U9VGhlIG1heGltdW0gb2JqZWN0IGxlbmd0aCBpcyAxMDI0IGNoYXJhY3RlcnMsIGJ1dCBnb3QgYSBuYW1lIHdpdGggMTAyNSBjaGFyYWN0ZXJzOiAnJ2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhLi4uJycsIHVubmFtZWRBcmd1bWVudHM9W2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhXX0sIGxvY2F0aW9uPWVudGl0eS5yZXNvdXJjZS5pZC5uYW1lLCBtZXNzYWdlPVRoZSBtYXhpbXVtIG9iamVjdCBsZW5ndGggaXMgMTAyNCBjaGFyYWN0ZXJzLCBidXQgZ290IGEgbmFtZSB3aXRoIDEwMjUgY2hhcmFjdGVyczogJydhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS4uLicnLCByZWFzb249aW52YWxpZCwgcnBjQ29kZT00MDB9IFRoZSBtYXhpbXVtIG9iamVjdCBsZW5ndGggaXMgMTAyNCBjaGFyYWN0ZXJzLCBidXQgZ290IGEgbmFtZSB3aXRoIDEwMjUgY2hhcmFjdGVyczogJydhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS4uLicnXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJUaGUgbWF4aW11bSBvYmplY3QgbGVuZ3RoIGlzIDEwMjQgY2hhcmFjdGVycywgYnV0IGdvdCBhIG5hbWUgd2l0aCAxMDI1IGNoYXJhY3RlcnM6ICcnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEuLi4nJyIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "59f03bb5a5baf79c",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=eddefd5e4750cc23c9d4686bb5018c4634b7e9525b2cbff32eac12e90804"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "875bdbc6d3008395970e0d6c347d26ad/13481278246891397724;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1lZGRlZmQ1ZTQ3NTBjYzIzYzlkNDY4NmJiNTAxOGM0NjM0YjdlOTUyNWIyY2JmZjMyZWFjMTJlOTA4MDQNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsIm5hbWUiOiJuZXdcbmxpbmVzIn0KDQotLWVkZGVmZDVlNDc1MGNjMjNjOWQ0Njg2YmI1MDE4YzQ2MzRiN2U5NTI1YjJjYmZmMzJlYWMxMmU5MDgwNA0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCmRhdGENCi0tZWRkZWZkNWU0NzUwY2MyM2M5ZDQ2ODZiYjUwMThjNDYzNGI3ZTk1MjViMmNiZmYzMmVhYzEyZTkwODA0LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "3308"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:33 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543311000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabh15:4103,/bns/xi/borg/xi/bns/blobstore2/bitpusher/9.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=JcBYW4njJ46xswa4jrSgDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/9.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/9:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrvMivc_cjsF9p9aqAtb09OOb7c6J-G8csUhZZasMT6gTX7Mi9SxTQ3S24e8myRpPtDHsm9VLFtNcVdIY1ldl0AdHeOaA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiaW52YWxpZCIsCiAgICAibWVzc2FnZSI6ICJEaXNhbGxvd2VkIHVuaWNvZGUgY2hhcmFjdGVycyBwcmVzZW50IGluIG9iamVjdCBuYW1lICcnbmV3XG5saW5lcycnIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPUlOVkFMSURfVkFMVUUsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1udWxsLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9YmFkUmVxdWVzdCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uSU5WQUxJRF9WQUxVRSwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9bnVsbCwgZXJyb3JQcm90b0NvZGU9SU5WQUxJRF9WQUxVRSwgZXJyb3JQcm90b0RvbWFpbj1nZGF0YS5Db3JlRXJyb3JEb21haW4sIGZpbHRlcmVkTWVzc2FnZT1udWxsLCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2UuaWQubmFtZSwgbWVzc2FnZT1EaXNhbGxvd2VkIHVuaWNvZGUgY2hhcmFjdGVycyBwcmVzZW50IGluIG9iamVjdCBuYW1lICcnbmV3XG5saW5lcycnLCB1bm5hbWVkQXJndW1lbnRzPVtuZXdcbmxpbmVzXX0sIGxvY2F0aW9uPWVudGl0eS5yZXNvdXJjZS5pZC5uYW1lLCBtZXNzYWdlPURpc2FsbG93ZWQgdW5pY29kZSBjaGFyYWN0ZXJzIHByZXNlbnQgaW4gb2JqZWN0IG5hbWUgJyduZXdcbmxpbmVzJycsIHJlYXNvbj1pbnZhbGlkLCBycGNDb2RlPTQwMH0gRGlzYWxsb3dlZCB1bmljb2RlIGNoYXJhY3RlcnMgcHJlc2VudCBpbiBvYmplY3QgbmFtZSAnJ25ld1xubGluZXMnJ1xuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDAsCiAgIm1lc3NhZ2UiOiAiRGlzYWxsb3dlZCB1bmljb2RlIGNoYXJhY3RlcnMgcHJlc2VudCBpbiBvYmplY3QgbmFtZSAnJ25ld1xubGluZXMnJyIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "bf33043d4c0a21e4",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "4d399f474ad54c0abefb2b32b2c1c091/17337928790330958570;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:34 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543311000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaca8:4102,/bns/xi/borg/xi/bns/blobstore2/bitpusher/61.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=JcBYW8n6KY24swa_vo3gCg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/61.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/61:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqPOpGPdZNbeapUbzrOr-HModldQgVop8EJiEomkegn_aIt9f_1oFLRvBQsf0g-pYY4E3qoVPHpVhsXvlO9FIPRLRSfTQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "ace2660f20622ed5",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/a?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7b2a93b5cb16a5ff70bbdb8d9924d627/2675778765517890425;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/a?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:34 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543311000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaau9:4168,/bns/xi/borg/xi/bns/blobstore2/bitpusher/59.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=JsBYW4d80LOzBpGdlKAI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/59.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/59:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoaLNtZSj_-mazYm9wqUVzaRe4H2eIlLUXTOBmcfK3dLzGdNwPuU3vLgFp_PPMp-lXHGh0jPj1dGyeBLo6wWixG3dwHoQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "40f476713e140c7c",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/%D0%93%D0%BE%D1%84%D0%B5%D1%80%D0%BE%D0%B2%D0%B8?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "0bf02ab88b5e65a60cac43c319928d7d/6532429308957451015;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/%D0%93%D0%BE%D1%84%D0%B5%D1%80%D0%BE%D0%B2%D0%B8?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:34 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543311000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcah4:4081,/bns/xi/borg/xi/bns/blobstore2/bitpusher/74.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=JsBYW_P_FM6yswafrpjYBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/74.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/74:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up-thqPmhDRoumRBAbEzWUKDogXteVbb-1NAFWyIeE0MrV17MTMvQFrI4z19YgyAJ5PgXSLgykk4PWyFqpQrHkthgaSjg"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "1e9fbfa1f1956e6e",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/gopher?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7d4f27439b611a784dc64d03c58f89b6/10316740783382439061;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/gopher?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:35 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543311000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaad3:4296,/bns/xi/borg/xi/bns/blobstore2/bitpusher/48.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=JsBYW-7NL4S2swbxoazoAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/48.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/48:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WUo4M25nRG9UcTc4QUdwUi11bVZrQWYyTmZxNndpQlFaaDF1bWV5RUFmbkRPVWpsU1YwWUhhRnhvYmlTOE5yd0g2Wld4U0NrcWVJZFNPd3pDTGlBUV9nNWpjdy1xQlRGNER2LUFVZklOSkxaMHpuZGh4SjIzMmZxbWdobGExQzM5QkF3VUVzVUFCOGhqNnF3bG1jWFlTR1lBb1RhcEhSdTB2UjhFZi1TWWVWWEQzZl9NNGNabU9GQncwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoS5nlK66lOaeeVwEPcgjaOOFHueykAIFz4uiGRLrFoY1XN8CfirBsL9R7Um9L1CppMsQ_CbTcpwzenv67nQWaN7H1aDA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "b215903b3387dccd",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=d42eaf5298f2bcb267ec8b2a39080925407198921ce98227f444cbb8e862"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "4996fa075047a0c5351cdbd9ee712d4a/14173109856140256291;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1kNDJlYWY1Mjk4ZjJiY2IyNjdlYzhiMmEzOTA4MDkyNTQwNzE5ODkyMWNlOTgyMjdmNDQ0Y2JiOGU4NjINCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsIm5hbWUiOiJjb250ZW50In0KDQotLWQ0MmVhZjUyOThmMmJjYjI2N2VjOGIyYTM5MDgwOTI1NDA3MTk4OTIxY2U5ODIyN2Y0NDRjYmI4ZTg2Mg0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCkl0IHdhcyB0aGUgYmVzdCBvZiB0aW1lcywgaXQgd2FzIHRoZSB3b3JzdCBvZiB0aW1lcy4NCi0tZDQyZWFmNTI5OGYyYmNiMjY3ZWM4YjJhMzkwODA5MjU0MDcxOTg5MjFjZTk4MjI3ZjQ0NGNiYjhlODYyLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3648"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:35 GMT"
+ ],
+ "Etag": [
+ "COmorNDvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543315000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabq10:4444,/bns/xi/borg/xi/bns/blobstore2/bitpusher/86.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=J8BYW5qtDK-1swbWtbjQDQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/86.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/86:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YWU3M2NLRER5T200NU12TFJXeHZyNzlGU3d5R1ZZdDBfazJNQ2c3ZEZBZkxFcXJ6YWVUSkY1Z1RZMVBoNmhyR1FYMl9TOG5EaE02ZDQweGRGSmh2Nk9OWm5aNDdxUGtOWGh6UVBnZGdsR2RvRDE0S3U4ckFDcF9nT3JPSGpkMEFNYVlSNWE0OHNUMW1sQWZjQ0tOWFEzd1E5V3pNYm9NZ1VTeF92cEhUdnBsS3RBZUNXS0NyQ0VGRmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrJfcVu3i85YIc7lmSyHm3Jd_8wzSiiwZYTQmn0YrVdTBdX9yZjE2kQIsFtHUuZDPnb2Q6k_kVkUB_1DT2y1ZmE5JWsSQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTU1MjM0MzMiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50IiwKICJuYW1lIjogImNvbnRlbnQiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNTUyMzQzMyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNS41MjNaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzUuNTIzWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM1LjUyM1oiLAogInNpemUiOiAiNTIiLAogIm1kNUhhc2giOiAiSzI4NUF3S1dXZlZSZEJjQ1VYaHpOZz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQ/Z2VuZXJhdGlvbj0xNTMyNTQzMDE1NTIzNDMzJmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTU1MjM0MzMvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE1NTIzNDMzIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDT21vck5EdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNTUyMzQzMy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNTUyMzQzMyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDT21vck5EdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNTUyMzQzMy9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNTUyMzQzMyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ09tb3JORHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTU1MjM0MzMvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNTUyMzQzMyIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ09tb3JORHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIkZjWE04UT09IiwKICJldGFnIjogIkNPbW9yTkR2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "494eb4be3cdce660",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/content?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "957f90abb32d5f4ff5b13bcd3fca4d63/3367610374766748992;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/content?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3648"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:35 GMT"
+ ],
+ "Etag": [
+ "COmorNDvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543315000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabo14:4091,/bns/xi/borg/xi/bns/blobstore2/bitpusher/37.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=J8BYW9vaKI60swa29rugDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/37.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/37:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YWU3M2NLRER5T200NU12TFJXeHZyNzlGU3d5R1ZZdDBfazJNQ2c3ZEZBZkxFcXJ6YWVUSkY1Z1RZMVBoNmhyR1FYMl9TOG5EaE02ZDQweGRGSmh2Nk9OWm5aNDdxUGtOWGh6UVBnZGdsR2RvRDE0S3U4ckFDcF9nT3JPSGpkMEFNYVlSNWE0OHNUMW1sQWZjQ0tOWFEzd1E5V3pNYm9NZ1VTeF92cEhUdnBsS3RBZUNXS0NyQ0VGRmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqtMTWiMVhM8ZyTaVG1Q7sq6umOm5KozX32gWJYQBjDyZlqoB_P-teJwjF4XXAh88dEOA8YOpwPQYtru3dEXA3It2I3vw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTU1MjM0MzMiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50IiwKICJuYW1lIjogImNvbnRlbnQiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNTUyMzQzMyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNS41MjNaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzUuNTIzWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM1LjUyM1oiLAogInNpemUiOiAiNTIiLAogIm1kNUhhc2giOiAiSzI4NUF3S1dXZlZSZEJjQ1VYaHpOZz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQ/Z2VuZXJhdGlvbj0xNTMyNTQzMDE1NTIzNDMzJmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTU1MjM0MzMvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE1NTIzNDMzIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDT21vck5EdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNTUyMzQzMy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNTUyMzQzMyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDT21vck5EdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNTUyMzQzMy9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNTUyMzQzMyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ09tb3JORHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTU1MjM0MzMvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNTUyMzQzMyIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ09tb3JORHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIkZjWE04UT09IiwKICJldGFnIjogIkNPbW9yTkR2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "0a957eebb634d1b4",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=99c4808e616f01f5c268884e5117507c30c375f9b88c0093134d42beb45c"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d73f8e6264a7cb68c6b29eca1f9f40e3/7152203324168382158;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS05OWM0ODA4ZTYxNmYwMWY1YzI2ODg4NGU1MTE3NTA3YzMwYzM3NWY5Yjg4YzAwOTMxMzRkNDJiZWI0NWMNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsIm5hbWUiOiJjb250ZW50In0KDQotLTk5YzQ4MDhlNjE2ZjAxZjVjMjY4ODg0ZTUxMTc1MDdjMzBjMzc1ZjliODhjMDA5MzEzNGQ0MmJlYjQ1Yw0KQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgNCg0KPGh0bWw+PGhlYWQ+PHRpdGxlPk15IGZpcnN0IHBhZ2U8L3RpdGxlPjwvaGVhZD48L2h0bWw+DQotLTk5YzQ4MDhlNjE2ZjAxZjVjMjY4ODg0ZTUxMTc1MDdjMzBjMzc1ZjliODhjMDA5MzEzNGQ0MmJlYjQ1Yy0tDQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3647"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:36 GMT"
+ ],
+ "Etag": [
+ "CMGEzdDvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543315000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabb16:4473,/bns/xi/borg/xi/bns/blobstore2/bitpusher/138.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=J8BYW4DQLcm8swae9r34Ag"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/138.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/138:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YWU3M2NLRER5T200NU12TFJXeHZyNzlGU3d5R1ZZdDBfazJNQ2c3ZEZBZkxFcXJ6YWVUSkY1Z1RZMVBoNmhyR1FYMl9TOG5EaE02ZDQweGRGSmh2Nk9OWm5aNDdxUGtOWGh6UVBnZGdsR2RvRDE0S3U4ckFDcF9nT3JPSGpkMEFNYVlSNWE0OHNUMW1sQWZjQ0tOWFEzd1E5V3pNYm9NZ1VTeF92cEhUdnBsS3RBZUNXS0NyQ0VGRmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrPjZEiVP6FkpO-M9UXaYJjodyIb8W1Kda1MwklxTek6BWuctbjdqemV2Qqqqh4c2-5PeI0aTH1Z9pi2vGZUylLUpqFaw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTYwNTk0NTciLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50IiwKICJuYW1lIjogImNvbnRlbnQiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNjA1OTQ1NyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiwKICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM2LjA1OVoiLAogInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNi4wNTlaIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzYuMDU5WiIsCiAic2l6ZSI6ICI1NCIsCiAibWQ1SGFzaCI6ICJOOHA4L3M5RndkQUFubHZyL2xFQWpRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudD9nZW5lcmF0aW9uPTE1MzI1NDMwMTYwNTk0NTcmYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNjA1OTQ1Ny9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY29udGVudCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTYwNTk0NTciLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNNR0V6ZER2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE2MDU5NDU3L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2MDU5NDU3IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNNR0V6ZER2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE2MDU5NDU3L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2MDU5NDU3IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDTUdFemREdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNjA1OTQ1Ny91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50L2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2MDU5NDU3IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDTUdFemREdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiR29VYnNRPT0iLAogImV0YWciOiAiQ01HRXpkRHZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "acbcc1d70678bad4",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/content?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "57063ad8edec0f85a3b5e42f77edc343/14793166441527715819;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/content?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3647"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:36 GMT"
+ ],
+ "Etag": [
+ "CMGEzdDvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543315000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae9:4327,/bns/xi/borg/xi/bns/blobstore2/bitpusher/56.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KMBYW8OCE62yswaCrJ3IBA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/56.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/56:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YWU3M2NLRER5T200NU12TFJXeHZyNzlGU3d5R1ZZdDBfazJNQ2c3ZEZBZkxFcXJ6YWVUSkY1Z1RZMVBoNmhyR1FYMl9TOG5EaE02ZDQweGRGSmh2Nk9OWm5aNDdxUGtOWGh6UVBnZGdsR2RvRDE0S3U4ckFDcF9nT3JPSGpkMEFNYVlSNWE0OHNUMW1sQWZjQ0tOWFEzd1E5V3pNYm9NZ1VTeF92cEhUdnBsS3RBZUNXS0NyQ0VGRmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpT1T6IHFHYsQDoRL8pDAa81op1SuSHlWEHnCkYlyYbPigHElKA78hhLgYZVC2WIs1oZqC7eUasO_bk6C2i4AyV_rJRpQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTYwNTk0NTciLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50IiwKICJuYW1lIjogImNvbnRlbnQiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNjA1OTQ1NyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiwKICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM2LjA1OVoiLAogInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNi4wNTlaIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzYuMDU5WiIsCiAic2l6ZSI6ICI1NCIsCiAibWQ1SGFzaCI6ICJOOHA4L3M5RndkQUFubHZyL2xFQWpRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudD9nZW5lcmF0aW9uPTE1MzI1NDMwMTYwNTk0NTcmYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNjA1OTQ1Ny9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY29udGVudCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTYwNTk0NTciLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNNR0V6ZER2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE2MDU5NDU3L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2MDU5NDU3IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNNR0V6ZER2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE2MDU5NDU3L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2MDU5NDU3IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDTUdFemREdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNjA1OTQ1Ny91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50L2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2MDU5NDU3IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDTUdFemREdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiR29VYnNRPT0iLAogImV0YWciOiAiQ01HRXpkRHZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "a142808b9cd19f23",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=c37c1d2a1d5d5048226d709eaade954077a555a3f5d0a53e6ef5baf27267"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "4799d504ad1e1bc268664a68f9cbae9e/203072915535915129;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1jMzdjMWQyYTFkNWQ1MDQ4MjI2ZDcwOWVhYWRlOTU0MDc3YTU1NWEzZjVkMGE1M2U2ZWY1YmFmMjcyNjcNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9odG1sIiwibmFtZSI6ImNvbnRlbnQifQoNCi0tYzM3YzFkMmExZDVkNTA0ODIyNmQ3MDllYWFkZTk1NDA3N2E1NTVhM2Y1ZDBhNTNlNmVmNWJhZjI3MjY3DQpDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KDQo8aHRtbD48aGVhZD48dGl0bGU+TXkgZmlyc3QgcGFnZTwvdGl0bGU+PC9oZWFkPjwvaHRtbD4NCi0tYzM3YzFkMmExZDVkNTA0ODIyNmQ3MDllYWFkZTk1NDA3N2E1NTVhM2Y1ZDBhNTNlNmVmNWJhZjI3MjY3LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3632"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:36 GMT"
+ ],
+ "Etag": [
+ "CIqD99DvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543315000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcae13:4169,/bns/xi/borg/xi/bns/blobstore2/bitpusher/144.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KMBYW93FF6W9swaUiID4Ag"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/144.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/144:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YWU3M2NLRER5T200NU12TFJXeHZyNzlGU3d5R1ZZdDBfazJNQ2c3ZEZBZkxFcXJ6YWVUSkY1Z1RZMVBoNmhyR1FYMl9TOG5EaE02ZDQweGRGSmh2Nk9OWm5aNDdxUGtOWGh6UVBnZGdsR2RvRDE0S3U4ckFDcF9nT3JPSGpkMEFNYVlSNWE0OHNUMW1sQWZjQ0tOWFEzd1E5V3pNYm9NZ1VTeF92cEhUdnBsS3RBZUNXS0NyQ0VGRmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqHURe1JwQh2-9aKOnOyLyrp_l2W1otv5TBFFDrGwPqb127i362e1BWQbv9lp5GdflrNH5EMwn9D2WMfu7MHfWU-Ho0yg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTY3NDc0MDIiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50IiwKICJuYW1lIjogImNvbnRlbnQiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNjc0NzQwMiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9odG1sIiwKICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM2Ljc0N1oiLAogInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNi43NDdaIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzYuNzQ3WiIsCiAic2l6ZSI6ICI1NCIsCiAibWQ1SGFzaCI6ICJOOHA4L3M5RndkQUFubHZyL2xFQWpRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudD9nZW5lcmF0aW9uPTE1MzI1NDMwMTY3NDc0MDImYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNjc0NzQwMi9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY29udGVudCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTY3NDc0MDIiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNJcUQ5OUR2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE2NzQ3NDAyL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2NzQ3NDAyIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNJcUQ5OUR2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE2NzQ3NDAyL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2NzQ3NDAyIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDSXFEOTlEdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNjc0NzQwMi91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50L2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2NzQ3NDAyIiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDSXFEOTlEdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiR29VYnNRPT0iLAogImV0YWciOiAiQ0lxRDk5RHZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "2b320c10051e4fa3",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/content?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "6c090d35d8909135c8612baccce6dcd6/7844034933400463765;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/content?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3632"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:37 GMT"
+ ],
+ "Etag": [
+ "CIqD99DvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543316000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcat14:4180,/bns/xi/borg/xi/bns/blobstore2/bitpusher/44.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KMBYW4OdNYq1swbFnpiwDw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/44.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/44:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YWU3M2NLRER5T200NU12TFJXeHZyNzlGU3d5R1ZZdDBfazJNQ2c3ZEZBZkxFcXJ6YWVUSkY1Z1RZMVBoNmhyR1FYMl9TOG5EaE02ZDQweGRGSmh2Nk9OWm5aNDdxUGtOWGh6UVBnZGdsR2RvRDE0S3U4ckFDcF9nT3JPSGpkMEFNYVlSNWE0OHNUMW1sQWZjQ0tOWFEzd1E5V3pNYm9NZ1VTeF92cEhUdnBsS3RBZUNXS0NyQ0VGRmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqJlSp0x1H4pS2hPr6G1KGIbsC_2EVbx0frgZP7ramtcFv2VZ99FHdBPxMM_l6ajQy6cixC1efJXFrlqyuNyJ7nCSaLTw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTY3NDc0MDIiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50IiwKICJuYW1lIjogImNvbnRlbnQiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNjc0NzQwMiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9odG1sIiwKICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM2Ljc0N1oiLAogInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNi43NDdaIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzYuNzQ3WiIsCiAic2l6ZSI6ICI1NCIsCiAibWQ1SGFzaCI6ICJOOHA4L3M5RndkQUFubHZyL2xFQWpRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudD9nZW5lcmF0aW9uPTE1MzI1NDMwMTY3NDc0MDImYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNjc0NzQwMi9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY29udGVudCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTY3NDc0MDIiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNJcUQ5OUR2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE2NzQ3NDAyL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2NzQ3NDAyIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNJcUQ5OUR2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE2NzQ3NDAyL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2NzQ3NDAyIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDSXFEOTlEdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNjc0NzQwMi91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50L2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE2NzQ3NDAyIiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDSXFEOTlEdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiR29VYnNRPT0iLAogImV0YWciOiAiQ0lxRDk5RHZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "97be49eeb031214f",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=14a1d8da837c7ec17817f5384029d989a962e73e483a8d3344247580a8f8"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "8624527f627ba0ad09ce27f8a3ab3fba/11628347511631915300;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0xNGExZDhkYTgzN2M3ZWMxNzgxN2Y1Mzg0MDI5ZDk4OWE5NjJlNzNlNDgzYThkMzM0NDI0NzU4MGE4ZjgNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoiaW1hZ2UvanBlZyIsIm5hbWUiOiJjb250ZW50In0KDQotLTE0YTFkOGRhODM3YzdlYzE3ODE3ZjUzODQwMjlkOTg5YTk2MmU3M2U0ODNhOGQzMzQ0MjQ3NTgwYThmOA0KQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnDQoNCjxodG1sPjxoZWFkPjx0aXRsZT5NeSBmaXJzdCBwYWdlPC90aXRsZT48L2hlYWQ+PC9odG1sPg0KLS0xNGExZDhkYTgzN2M3ZWMxNzgxN2Y1Mzg0MDI5ZDk4OWE5NjJlNzNlNDgzYThkMzM0NDI0NzU4MGE4ZjgtLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3633"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:37 GMT"
+ ],
+ "Etag": [
+ "CIaYmtHvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543315000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaam10:4277,/bns/xi/borg/xi/bns/blobstore2/bitpusher/46.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KcBYW7LPAa-zswb4gZ04"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/46.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/46:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YWU3M2NLRER5T200NU12TFJXeHZyNzlGU3d5R1ZZdDBfazJNQ2c3ZEZBZkxFcXJ6YWVUSkY1Z1RZMVBoNmhyR1FYMl9TOG5EaE02ZDQweGRGSmh2Nk9OWm5aNDdxUGtOWGh6UVBnZGdsR2RvRDE0S3U4ckFDcF9nT3JPSGpkMEFNYVlSNWE0OHNUMW1sQWZjQ0tOWFEzd1E5V3pNYm9NZ1VTeF92cEhUdnBsS3RBZUNXS0NyQ0VGRmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqjmHbtRIMiyoax4FkHRuxe_XZD5dYxjH8XSJWBNACalAqmwuRp5T9934s1qNnWM_mU3OGvQCq9Gz76sjwBIKRTajFkIw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTczMjM1MjYiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50IiwKICJuYW1lIjogImNvbnRlbnQiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNy4zMjNaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzcuMzIzWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM3LjMyM1oiLAogInNpemUiOiAiNTQiLAogIm1kNUhhc2giOiAiTjhwOC9zOUZ3ZEFBbmx2ci9sRUFqUT09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQ/Z2VuZXJhdGlvbj0xNTMyNTQzMDE3MzIzNTI2JmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTczMjM1MjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3MzIzNTI2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDSWFZbXRIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNzMyMzUyNi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDSWFZbXRIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNzMyMzUyNi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0lhWW10SHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTczMjM1MjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0lhWW10SHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIkdvVWJzUT09IiwKICJldGFnIjogIkNJYVltdEh2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "01ea6474ca3e1cb0",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/content?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "da31b16a27ba3dedc1276495a9fdb179/822848030258473536;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/content?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3633"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:37 GMT"
+ ],
+ "Etag": [
+ "CIaYmtHvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543316000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaa6:4260,/bns/xi/borg/xi/bns/blobstore2/bitpusher/78.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KcBYW8ziGq22swaWrLTYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/78.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/78:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YWU3M2NLRER5T200NU12TFJXeHZyNzlGU3d5R1ZZdDBfazJNQ2c3ZEZBZkxFcXJ6YWVUSkY1Z1RZMVBoNmhyR1FYMl9TOG5EaE02ZDQweGRGSmh2Nk9OWm5aNDdxUGtOWGh6UVBnZGdsR2RvRDE0S3U4ckFDcF9nT3JPSGpkMEFNYVlSNWE0OHNUMW1sQWZjQ0tOWFEzd1E5V3pNYm9NZ1VTeF92cEhUdnBsS3RBZUNXS0NyQ0VGRmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoVQF7Q-bbvUHhIoZCxZifsmIksg-K6APCRpuifyRgzvI3q63e5olEK3_kROJHlK0YMYRmKVqOAIrsyfavdTXeJc7wMyA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTczMjM1MjYiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50IiwKICJuYW1lIjogImNvbnRlbnQiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNy4zMjNaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzcuMzIzWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM3LjMyM1oiLAogInNpemUiOiAiNTQiLAogIm1kNUhhc2giOiAiTjhwOC9zOUZ3ZEFBbmx2ci9sRUFqUT09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQ/Z2VuZXJhdGlvbj0xNTMyNTQzMDE3MzIzNTI2JmFsdD1tZWRpYSIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTczMjM1MjYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNvbnRlbnQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3MzIzNTI2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDSWFZbXRIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNzMyMzUyNi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDSWFZbXRIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbnRlbnQvMTUzMjU0MzAxNzMyMzUyNi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0lhWW10SHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTczMjM1MjYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0lhWW10SHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIkdvVWJzUT09IiwKICJldGFnIjogIkNJYVltdEh2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "91aa229ea272fa98",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=22d06fe88539bb99ac9e6b0bfbde0ea5e4fcd2f0a38f5a2015beb5f767d3"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "47f0935af9749d3fad6d1c5b1944c281/4679497474186406862;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ]
+ },
+ "Body": "LS0yMmQwNmZlODg1MzliYjk5YWM5ZTZiMGJmYmRlMGVhNWU0ZmNkMmYwYTM4ZjVhMjAxNWJlYjVmNzY3ZDMNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm5hbWUiOiJjdXN0b21lci1lbmNyeXB0aW9uIn0KDQotLTIyZDA2ZmU4ODUzOWJiOTlhYzllNmIwYmZiZGUwZWE1ZTRmY2QyZjBhMzhmNWEyMDE1YmViNWY3NjdkMw0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCnRvcCBzZWNyZXQuDQotLTIyZDA2ZmU4ODUzOWJiOTlhYzllNmIwYmZiZGUwZWE1ZTRmY2QyZjBhMzhmNWEyMDE1YmViNWY3NjdkMy0tDQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3927"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:38 GMT"
+ ],
+ "Etag": [
+ "CP2Sv9HvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543317000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcay15:4104,/bns/xi/borg/xi/bns/blobstore2/bitpusher/108.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KcBYW8KwI6u_swaTlJmwBg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/108.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/108:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoNpnFpoVoomWq_UCeh53h7T1BUuAwyCVRDxc_tmhWaL64r_3HYCRhBa1-F5ChwSrSOYPcYg3NwMAzitBSGoNZKaudVfQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uIiwKICJuYW1lIjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNy45MjhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzcuOTI4WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM3LjkyOFoiLAogInNpemUiOiAiMTEiLAogIm1kNUhhc2giOiAieHdXTkZhMFZkWFBtbEF3cmxjQUpjZz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24/Z2VuZXJhdGlvbj0xNTMyNTQzMDE3OTI5MDg1JmFsdD1tZWRpYSIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24vYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDUDJTdjlIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24vMTUzMjU0MzAxNzkyOTA4NS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24vYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDUDJTdjlIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24vMTUzMjU0MzAxNzkyOTA4NS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24vYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogInIwTkdyZz09IiwKICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBRT0iLAogImN1c3RvbWVyRW5jcnlwdGlvbiI6IHsKICAiZW5jcnlwdGlvbkFsZ29yaXRobSI6ICJBRVMyNTYiLAogICJrZXlTaGEyNTYiOiAiSCtMbW5YaFJvZUk2VE1XNWJzVjZIeVVrNnB5R2MySU1icVliQVhCY3BzMD0iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "fd41a9285b09277d",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d55e5fdfaa3215c7655d8bf277424ef6/12320179120863997163;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3864"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:38 GMT"
+ ],
+ "Etag": [
+ "CP2Sv9HvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabj12:4211,/bns/xi/borg/xi/bns/blobstore2/bitpusher/123.scotty,aclgag4:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KsBYW8rJA4GGygPZjIDwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/123.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/123:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrIsqy64GDxmByUpl6wAtg4BD_uvEOoETvbNxYXNC2l-Fg0s9D65wxbDUGTZVcJ_bgflrj0r6wTAKFbFCETNlKdp418Pg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uIiwKICJuYW1lIjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNy45MjhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzcuOTI4WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM3LjkyOFoiLAogInNpemUiOiAiMTEiLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbj9nZW5lcmF0aW9uPTE1MzI1NDMwMTc5MjkwODUmYWx0PW1lZGlhIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24vMTUzMjU0MzAxNzkyOTA4NS9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbiIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTc5MjkwODUiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi8xNTMyNTQzMDE3OTI5MDg1L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi8xNTMyNTQzMDE3OTI5MDg1L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDUDJTdjlIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24vMTUzMjU0MzAxNzkyOTA4NS91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDUDJTdjlIdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBRT0iLAogImN1c3RvbWVyRW5jcnlwdGlvbiI6IHsKICAiZW5jcnlwdGlvbkFsZ29yaXRobSI6ICJBRVMyNTYiLAogICJrZXlTaGEyNTYiOiAiSCtMbW5YaFJvZUk2VE1XNWJzVjZIeVVrNnB5R2MySU1icVliQVhCY3BzMD0iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "58808ecdb47fb585",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "3c249efd768fcf8fed2923abc80ed7d8/1442622045469404423;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3927"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:38 GMT"
+ ],
+ "Etag": [
+ "CP2Sv9HvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbm4:4122,/bns/xi/borg/xi/bns/blobstore2/bitpusher/71.scotty,aclgag4:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KsBYW6vmB-u5swaj8KQw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/71.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/71:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpJisqQVUFL79mgSu3-VUf4VEhKZFGiFd8RMe25TdywWfMYRxQUuvt7p6DAfsQSCJVEFJOH3DMKXysXLoujNEJWL-SR8A"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uIiwKICJuYW1lIjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNy45MjhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzcuOTI4WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM3LjkyOFoiLAogInNpemUiOiAiMTEiLAogIm1kNUhhc2giOiAieHdXTkZhMFZkWFBtbEF3cmxjQUpjZz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24/Z2VuZXJhdGlvbj0xNTMyNTQzMDE3OTI5MDg1JmFsdD1tZWRpYSIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24vYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDUDJTdjlIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24vMTUzMjU0MzAxNzkyOTA4NS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24vYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDUDJTdjlIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24vMTUzMjU0MzAxNzkyOTA4NS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24vYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogInIwTkdyZz09IiwKICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBRT0iLAogImN1c3RvbWVyRW5jcnlwdGlvbiI6IHsKICAiZW5jcnlwdGlvbkFsZ29yaXRobSI6ICJBRVMyNTYiLAogICJrZXlTaGEyNTYiOiAiSCtMbW5YaFJvZUk2VE1XNWJzVjZIeVVrNnB5R2MySU1icVliQVhCY3BzMD0iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "5d526677b4073510",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "85"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "343287c883c7d3864e6a4106b84ad531/9083585162828738084;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLCJjb250ZW50TGFuZ3VhZ2UiOiJlbiJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3890"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:38 GMT"
+ ],
+ "Etag": [
+ "CP2Sv9HvutwCEAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaay12:4070,/bns/xi/borg/xi/bns/blobstore2/bitpusher/7.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KsBYW9yhDcGEygODroiYBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/7.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/7:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UquE7zC_xOmYjYj_m_2hrhHYhQ0sOPpOpe04WTv07a4YkZlzxCeVKNrgtmQJEJnYE6dQ91Q7fkutrBPPMJTMyvKsS4njA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uIiwKICJuYW1lIjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMiIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNy45MjhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzguMjk2WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM3LjkyOFoiLAogInNpemUiOiAiMTEiLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbj9nZW5lcmF0aW9uPTE1MzI1NDMwMTc5MjkwODUmYWx0PW1lZGlhIiwKICJjb250ZW50TGFuZ3VhZ2UiOiAiZW4iLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi8xNTMyNTQzMDE3OTI5MDg1L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbiIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTc5MjkwODUiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbiIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTc5MjkwODUiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBST0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi8xNTMyNTQzMDE3OTI5MDg1L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24vYWNsL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbiIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTc5MjkwODUiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBST0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFJPSIsCiAiY3VzdG9tZXJFbmNyeXB0aW9uIjogewogICJlbmNyeXB0aW9uQWxnb3JpdGhtIjogIkFFUzI1NiIsCiAgImtleVNoYTI1NiI6ICJIK0xtblhoUm9lSTZUTVc1YnNWNkh5VWs2cHlHYzJJTWJxWWJBWEJjcHMwPSIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "36a311f22a1634af",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "85"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7a1108d06b8066d601c1a8bc45d72d9a/16724547184988188480;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLCJjb250ZW50TGFuZ3VhZ2UiOiJlbiJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3953"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:38 GMT"
+ ],
+ "Etag": [
+ "CP2Sv9HvutwCEAM="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbi14:4273,/bns/xi/borg/xi/bns/blobstore2/bitpusher/95.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KsBYW6XfGKy0swbR3ovADQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/95.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/95:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UppKgYcZaTZPOno6YYTeMmvy0WPGaHI1903UWPe325oJJhX0TkDEmupAoUZVEzyiX3g4MZUTO4b8fnNs3_y5BxM00iePg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uIiwKICJuYW1lIjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMyIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNy45MjhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MzguNTIxWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM3LjkyOFoiLAogInNpemUiOiAiMTEiLAogIm1kNUhhc2giOiAieHdXTkZhMFZkWFBtbEF3cmxjQUpjZz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24/Z2VuZXJhdGlvbj0xNTMyNTQzMDE3OTI5MDg1JmFsdD1tZWRpYSIsCiAiY29udGVudExhbmd1YWdlIjogImVuIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24vMTUzMjU0MzAxNzkyOTA4NS9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbiIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTc5MjkwODUiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBTT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi8xNTMyNTQzMDE3OTI5MDg1L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBTT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi8xNTMyNTQzMDE3OTI5MDg1L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDUDJTdjlIdnV0d0NFQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24vMTUzMjU0MzAxNzkyOTA4NS91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDUDJTdjlIdnV0d0NFQU09IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAicjBOR3JnPT0iLAogImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFNPSIsCiAiY3VzdG9tZXJFbmNyeXB0aW9uIjogewogICJlbmNyeXB0aW9uQWxnb3JpdGhtIjogIkFFUzI1NiIsCiAgImtleVNoYTI1NiI6ICJIK0xtblhoUm9lSTZUTVc1YnNWNkh5VWs2cHlHYzJJTWJxWWJBWEJjcHMwPSIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "4f966173e198bc87",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "31b5a4f42dcae029ea98d3d005428655/5919047703614681181;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "277"
+ ],
+ "Content-Type": [
+ "application/xml; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:38 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:38 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/31,/bns/yb/borg/yb/bns/blobstore2/bitpusher/797.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KsBYW9rGJ8WzlAHKlZXYBw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/797.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/797:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqC_Jsi8jwVsMcv34r01EaiYJD4-zDDLA9YzIZmvG_yG2qHkG7FlxTDXQrOy020SQQaOFV92xae5_0Ja_gsiFafkVoKtMutkyzBLHLP8HSBflKknzA"
+ ]
+ },
+ "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+UmVzb3VyY2VJc0VuY3J5cHRlZFdpdGhDdXN0b21lckVuY3J5cHRpb25LZXk8L0NvZGU+PE1lc3NhZ2U+VGhlIHJlc291cmNlIGlzIGVuY3J5cHRlZCB3aXRoIGEgY3VzdG9tZXIgZW5jcnlwdGlvbiBrZXkuPC9NZXNzYWdlPjxEZXRhaWxzPlRoZSByZXF1ZXN0ZWQgb2JqZWN0IGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LjwvRGV0YWlscz48L0Vycm9yPg=="
+ }
+ },
+ {
+ "ID": "f93d5182c10dc0b5",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bdde22738c81e4e837ce4c85011c3b19/13560010820974080377;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Language": [
+ "en"
+ ],
+ "Content-Length": [
+ "11"
+ ],
+ "Content-Type": [
+ "text/plain; charset=utf-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:38 GMT"
+ ],
+ "Etag": [
+ "\"-CP2Sv9HvutwCEAM=\""
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:37 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:37 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532543017929085"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=r0NGrg==",
+ "md5=xwWNFa0VdXPmlAwrlcAJcg=="
+ ],
+ "X-Goog-Metageneration": [
+ "3"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "11"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/158,/bns/yb/borg/yb/bns/blobstore2/bitpusher/14.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KsBYW77NK9e-lAG6wbywDg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/14.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/14:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqlAzF8N9ysYRje8oYKVC0Oalr39Mvt1y0ukpPY4sL115zPi-56oyy6QL5xXlBGHQFRqRkAYhG6ipoZEKgkq622joWWc0MrmCKBVtXxIVZk-gbuQ_A"
+ ]
+ },
+ "Body": "dG9wIHNlY3JldC4="
+ }
+ },
+ {
+ "ID": "28c1915d503f9694",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "9904c9ac44ff11cf812fa359fec1ad73/2754510240105722518;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "14415"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:39 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaj8:4280,/bns/xi/borg/xi/bns/blobstore2/bitpusher/134.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=KsBYW-i2Mcq9swamsaLwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/134.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/134:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq5CAKF6dYmzvfNT0IEeB-oL8XnVfDdvDjbB2uQMI0dy0Zyw4JOTTL1zVdnJrhrCgcg5X3dynC__CoqG36aVy1sdPKewA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVzb3VyY2VJc0VuY3J5cHRlZFdpdGhDdXN0b21lckVuY3J5cHRpb25LZXkiLAogICAgIm1lc3NhZ2UiOiAiVGhlIHRhcmdldCBvYmplY3QgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuIiwKICAgICJleHRlbmRlZEhlbHAiOiAiaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3N0b3JhZ2UvZG9jcy9lbmNyeXB0aW9uI2N1c3RvbWVyLXN1cHBsaWVkX2VuY3J5cHRpb25fa2V5cyIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFRoZSByZXF1ZXN0ZWQgb2JqZWN0IGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMxMSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLnJld3JpdGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyNClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBUaGUgcmVxdWVzdGVkIG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUHJlcGFyZVJld3JpdGVPcGVyYXRpb24udmFsaWRhdGVTb3VyY2VFbmNyeXB0aW9uKFByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLmphdmE6NTg1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5QcmVwYXJlUmV3cml0ZU9wZXJhdGlvbi5ydW4oUHJlcGFyZVJld3JpdGVPcGVyYXRpb24uamF2YTozMzApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlJld3JpdGVyLnJld3JpdGVPYmplY3RJbnRlcm5hbChSZXdyaXRlci5qYXZhOjM1NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUmV3cml0ZXIucmV3cml0ZU9iamVjdChSZXdyaXRlci5qYXZhOjMyNClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QucmV3cml0ZUluRnJvbnRlbmQoUmV3cml0ZU9iamVjdC5qYXZhOjIyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFJld3JpdGVPYmplY3QuamF2YToyMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6NTIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0Li4uIDE0IG1vcmVcblxuY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPUlOVkFMSURfVkFMVUUsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBUaGUgcmVxdWVzdGVkIG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMTEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5yZXdyaXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogVGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLnZhbGlkYXRlU291cmNlRW5jcnlwdGlvbihQcmVwYXJlUmV3cml0ZU9wZXJhdGlvbi5qYXZhOjU4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUHJlcGFyZVJld3JpdGVPcGVyYXRpb24ucnVuKFByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLmphdmE6MzMwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5SZXdyaXRlci5yZXdyaXRlT2JqZWN0SW50ZXJuYWwoUmV3cml0ZXIuamF2YTozNTQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlJld3JpdGVyLnJld3JpdGVPYmplY3QoUmV3cml0ZXIuamF2YTozMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LnJld3JpdGVJbkZyb250ZW5kKFJld3JpdGVPYmplY3QuamF2YToyMjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6MjA2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjUyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdC4uLiAxNCBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1odHRwczovL2Nsb3VkLmdvb2dsZS5jb20vc3RvcmFnZS9kb2NzL2VuY3J5cHRpb24jY3VzdG9tZXItc3VwcGxpZWRfZW5jcnlwdGlvbl9rZXlzLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWNsb3VkLmJpZ3N0b3JlLmFwaS5CaWdzdG9yZUVycm9yRG9tYWluLlJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBUaGUgcmVxdWVzdGVkIG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMTEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5yZXdyaXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogVGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLnZhbGlkYXRlU291cmNlRW5jcnlwdGlvbihQcmVwYXJlUmV3cml0ZU9wZXJhdGlvbi5qYXZhOjU4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUHJlcGFyZVJld3JpdGVPcGVyYXRpb24ucnVuKFByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLmphdmE6MzMwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5SZXdyaXRlci5yZXdyaXRlT2JqZWN0SW50ZXJuYWwoUmV3cml0ZXIuamF2YTozNTQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlJld3JpdGVyLnJld3JpdGVPYmplY3QoUmV3cml0ZXIuamF2YTozMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LnJld3JpdGVJbkZyb250ZW5kKFJld3JpdGVPYmplY3QuamF2YToyMjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6MjA2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjUyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdC4uLiAxNCBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPVJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZLCBlcnJvclByb3RvRG9tYWluPWNsb3VkLmJpZ3N0b3JlLmFwaS5CaWdzdG9yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1udWxsLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1UaGUgdGFyZ2V0IG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS4sIHJlYXNvbj1yZXNvdXJjZUlzRW5jcnlwdGVkV2l0aEN1c3RvbWVyRW5jcnlwdGlvbktleSwgcnBjQ29kZT00MDB9IFRoZSB0YXJnZXQgb2JqZWN0IGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LjogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogVGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzExKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IucmV3cml0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTI0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogUkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFRoZSByZXF1ZXN0ZWQgb2JqZWN0IGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5QcmVwYXJlUmV3cml0ZU9wZXJhdGlvbi52YWxpZGF0ZVNvdXJjZUVuY3J5cHRpb24oUHJlcGFyZVJld3JpdGVPcGVyYXRpb24uamF2YTo1ODUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLnJ1bihQcmVwYXJlUmV3cml0ZU9wZXJhdGlvbi5qYXZhOjMzMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUmV3cml0ZXIucmV3cml0ZU9iamVjdEludGVybmFsKFJld3JpdGVyLmphdmE6MzU0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5SZXdyaXRlci5yZXdyaXRlT2JqZWN0KFJld3JpdGVyLmphdmE6MzI0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5yZXdyaXRlSW5Gcm9udGVuZChSZXdyaXRlT2JqZWN0LmphdmE6MjI5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjIwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFJld3JpdGVPYmplY3QuamF2YTo1Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHQuLi4gMTQgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJUaGUgdGFyZ2V0IG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "3c0a99a209d461e2",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "0d7dd32ea3b1a4a0659a8161e626c794/10395191891078280114;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Copy-Source-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Copy-Source-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Copy-Source-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "4059"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:39 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadccb5:4366,/bns/xi/borg/xi/bns/blobstore2/bitpusher/76.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=K8BYW5xXsLmzBorWmfgJ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/76.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/76:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqOciRF8Rf2icl1S7tA3kj-9NxOo0-jlyVppNPx4f267xJfV4TMGrnijkLWY4vMdt7wls3EoncColBkIECC5k9Sewz8Ig"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiMTEiLAogIm9iamVjdFNpemUiOiAiMTEiLAogImRvbmUiOiB0cnVlLAogInJlc291cmNlIjogewogICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDE5NzY4MjgzIiwKICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMiIsCiAgIm5hbWUiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxOTc2ODI4MyIsCiAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICJjb250ZW50VHlwZSI6ICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwKICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozOS43NjhaIiwKICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM5Ljc2OFoiLAogICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM5Ljc2OFoiLAogICJzaXplIjogIjExIiwKICAibWQ1SGFzaCI6ICJ4d1dORmEwVmRYUG1sQXdybGNBSmNnPT0iLAogICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMj9nZW5lcmF0aW9uPTE1MzI1NDMwMTk3NjgyODMmYWx0PW1lZGlhIiwKICAiY29udGVudExhbmd1YWdlIjogImVuIiwKICAiYWNsIjogWwogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIvMTUzMjU0MzAxOTc2ODI4My9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uLTIiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxOTc2ODI4MyIsCiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAib3duZXJzIgogICAgfSwKICAgICJldGFnIjogIkNOdXpyOUx2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDE5NzY4MjgzL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTk3NjgyODMiLAogICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgfSwKICAgICJldGFnIjogIkNOdXpyOUx2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDE5NzY4MjgzL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTk3NjgyODMiLAogICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiUkVBREVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAidmlld2VycyIKICAgIH0sCiAgICAiZXRhZyI6ICJDTnV6cjlMdnV0d0NFQUU9IgogICB9LAogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIvMTUzMjU0MzAxOTc2ODI4My91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi0yL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTk3NjgyODMiLAogICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiZXRhZyI6ICJDTnV6cjlMdnV0d0NFQUU9IgogICB9CiAgXSwKICAib3duZXIiOiB7CiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICB9LAogICJjcmMzMmMiOiAicjBOR3JnPT0iLAogICJldGFnIjogIkNOdXpyOUx2dXR3Q0VBRT0iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "a721e505465a7f92",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption-2",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "260e85661fde781ca401a8cc29e0c8ba/18036153908942763215;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption-2"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Language": [
+ "en"
+ ],
+ "Content-Length": [
+ "11"
+ ],
+ "Content-Type": [
+ "text/plain; charset=utf-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:39 GMT"
+ ],
+ "Etag": [
+ "\"c7058d15ad157573e6940c2b95c00972\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:39 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:39 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:39 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532543019768283"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=r0NGrg==",
+ "md5=xwWNFa0VdXPmlAwrlcAJcg=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "11"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/312,/bns/yb/borg/yb/bns/blobstore2/bitpusher/999.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=K8BYW6f0OoawlAHthZ-YDA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/999.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/999:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpLk3H3nAU1_cdfyPe8-N6FX8Ae2laoRqBv7p4oF4gzePAydLiohwxJlkru_lXBZxAbrMQ_eDvN16ciunBNXngHlcfdpw"
+ ]
+ },
+ "Body": "dG9wIHNlY3JldC4="
+ }
+ },
+ {
+ "ID": "ec9e1289525a1949",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "dc80be488270431e36683aa5d40c48a7/7230654427569321451;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "FnBvfQ1dDsyS8kHD+aB6HHIglDoQ5Im7WYDm3XYTGrQ="
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "14415"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:40 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaba15:4126,/bns/xi/borg/xi/bns/blobstore2/bitpusher/58.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=LMBYW8XDA9C3swaYoYGgCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/58.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/58:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqO4dEOV0PPeeyCu3y29JlM1ao50dKz6v5ra65U2NDM5t5lLjSP-lGSK_ZF8dzgl2FqJrZWu1pDnwyLXbOANalwczC6ew"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVzb3VyY2VJc0VuY3J5cHRlZFdpdGhDdXN0b21lckVuY3J5cHRpb25LZXkiLAogICAgIm1lc3NhZ2UiOiAiVGhlIHRhcmdldCBvYmplY3QgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuIiwKICAgICJleHRlbmRlZEhlbHAiOiAiaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3N0b3JhZ2UvZG9jcy9lbmNyeXB0aW9uI2N1c3RvbWVyLXN1cHBsaWVkX2VuY3J5cHRpb25fa2V5cyIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFRoZSByZXF1ZXN0ZWQgb2JqZWN0IGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMxMSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLnJld3JpdGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyNClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBUaGUgcmVxdWVzdGVkIG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUHJlcGFyZVJld3JpdGVPcGVyYXRpb24udmFsaWRhdGVTb3VyY2VFbmNyeXB0aW9uKFByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLmphdmE6NTg1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5QcmVwYXJlUmV3cml0ZU9wZXJhdGlvbi5ydW4oUHJlcGFyZVJld3JpdGVPcGVyYXRpb24uamF2YTozMzApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlJld3JpdGVyLnJld3JpdGVPYmplY3RJbnRlcm5hbChSZXdyaXRlci5qYXZhOjM1NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUmV3cml0ZXIucmV3cml0ZU9iamVjdChSZXdyaXRlci5qYXZhOjMyNClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QucmV3cml0ZUluRnJvbnRlbmQoUmV3cml0ZU9iamVjdC5qYXZhOjIyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFJld3JpdGVPYmplY3QuamF2YToyMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6NTIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0Li4uIDE0IG1vcmVcblxuY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPUlOVkFMSURfVkFMVUUsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBUaGUgcmVxdWVzdGVkIG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMTEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5yZXdyaXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogVGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLnZhbGlkYXRlU291cmNlRW5jcnlwdGlvbihQcmVwYXJlUmV3cml0ZU9wZXJhdGlvbi5qYXZhOjU4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUHJlcGFyZVJld3JpdGVPcGVyYXRpb24ucnVuKFByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLmphdmE6MzMwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5SZXdyaXRlci5yZXdyaXRlT2JqZWN0SW50ZXJuYWwoUmV3cml0ZXIuamF2YTozNTQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlJld3JpdGVyLnJld3JpdGVPYmplY3QoUmV3cml0ZXIuamF2YTozMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LnJld3JpdGVJbkZyb250ZW5kKFJld3JpdGVPYmplY3QuamF2YToyMjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6MjA2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjUyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdC4uLiAxNCBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1odHRwczovL2Nsb3VkLmdvb2dsZS5jb20vc3RvcmFnZS9kb2NzL2VuY3J5cHRpb24jY3VzdG9tZXItc3VwcGxpZWRfZW5jcnlwdGlvbl9rZXlzLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWNsb3VkLmJpZ3N0b3JlLmFwaS5CaWdzdG9yZUVycm9yRG9tYWluLlJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBUaGUgcmVxdWVzdGVkIG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMTEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5yZXdyaXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogVGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLnZhbGlkYXRlU291cmNlRW5jcnlwdGlvbihQcmVwYXJlUmV3cml0ZU9wZXJhdGlvbi5qYXZhOjU4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUHJlcGFyZVJld3JpdGVPcGVyYXRpb24ucnVuKFByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLmphdmE6MzMwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5SZXdyaXRlci5yZXdyaXRlT2JqZWN0SW50ZXJuYWwoUmV3cml0ZXIuamF2YTozNTQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlJld3JpdGVyLnJld3JpdGVPYmplY3QoUmV3cml0ZXIuamF2YTozMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LnJld3JpdGVJbkZyb250ZW5kKFJld3JpdGVPYmplY3QuamF2YToyMjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6MjA2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjUyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdC4uLiAxNCBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPVJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZLCBlcnJvclByb3RvRG9tYWluPWNsb3VkLmJpZ3N0b3JlLmFwaS5CaWdzdG9yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1udWxsLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1UaGUgdGFyZ2V0IG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS4sIHJlYXNvbj1yZXNvdXJjZUlzRW5jcnlwdGVkV2l0aEN1c3RvbWVyRW5jcnlwdGlvbktleSwgcnBjQ29kZT00MDB9IFRoZSB0YXJnZXQgb2JqZWN0IGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LjogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogVGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzExKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IucmV3cml0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTI0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogUkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFRoZSByZXF1ZXN0ZWQgb2JqZWN0IGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5QcmVwYXJlUmV3cml0ZU9wZXJhdGlvbi52YWxpZGF0ZVNvdXJjZUVuY3J5cHRpb24oUHJlcGFyZVJld3JpdGVPcGVyYXRpb24uamF2YTo1ODUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlByZXBhcmVSZXdyaXRlT3BlcmF0aW9uLnJ1bihQcmVwYXJlUmV3cml0ZU9wZXJhdGlvbi5qYXZhOjMzMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUmV3cml0ZXIucmV3cml0ZU9iamVjdEludGVybmFsKFJld3JpdGVyLmphdmE6MzU0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5SZXdyaXRlci5yZXdyaXRlT2JqZWN0KFJld3JpdGVyLmphdmE6MzI0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5yZXdyaXRlSW5Gcm9udGVuZChSZXdyaXRlT2JqZWN0LmphdmE6MjI5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjIwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFJld3JpdGVPYmplY3QuamF2YTo1Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHQuLi4gMTQgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJUaGUgdGFyZ2V0IG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "e5ff54cdadff4c0d",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "6b08983f37c13dd7b80ed10c099c6dde/14871616445433804296;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Copy-Source-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Copy-Source-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Copy-Source-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "FnBvfQ1dDsyS8kHD+aB6HHIglDoQ5Im7WYDm3XYTGrQ="
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "4189"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:41 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabn7:4375,/bns/xi/borg/xi/bns/blobstore2/bitpusher/97.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=LMBYW8PTEoyzswa9zLiYAQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/97.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/97:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoUGsb7-FbVp0lfZMOvIVN3wPP_NnF9NYDN_TLDNMbBMO1ul5jy1Gxq0vPYikKejv7RMTmp15PQ6PVRHsfswjWLP7AgSQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiMTEiLAogIm9iamVjdFNpemUiOiAiMTEiLAogImRvbmUiOiB0cnVlLAogInJlc291cmNlIjogewogICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIxMTE0MDY3IiwKICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMiIsCiAgIm5hbWUiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyMTExNDA2NyIsCiAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICJjb250ZW50VHlwZSI6ICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwKICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0MS4xMTNaIiwKICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQxLjExM1oiLAogICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQxLjExM1oiLAogICJzaXplIjogIjExIiwKICAibWQ1SGFzaCI6ICJ4d1dORmEwVmRYUG1sQXdybGNBSmNnPT0iLAogICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMj9nZW5lcmF0aW9uPTE1MzI1NDMwMjExMTQwNjcmYWx0PW1lZGlhIiwKICAiY29udGVudExhbmd1YWdlIjogImVuIiwKICAiYWNsIjogWwogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIvMTUzMjU0MzAyMTExNDA2Ny9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uLTIiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyMTExNDA2NyIsCiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAib3duZXJzIgogICAgfSwKICAgICJldGFnIjogIkNOUEZnZFB2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIxMTE0MDY3L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjExMTQwNjciLAogICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgfSwKICAgICJldGFnIjogIkNOUEZnZFB2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIxMTE0MDY3L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjExMTQwNjciLAogICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiUkVBREVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAidmlld2VycyIKICAgIH0sCiAgICAiZXRhZyI6ICJDTlBGZ2RQdnV0d0NFQUU9IgogICB9LAogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIvMTUzMjU0MzAyMTExNDA2Ny91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi0yL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjExMTQwNjciLAogICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiZXRhZyI6ICJDTlBGZ2RQdnV0d0NFQUU9IgogICB9CiAgXSwKICAib3duZXIiOiB7CiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICB9LAogICJjcmMzMmMiOiAicjBOR3JnPT0iLAogICJldGFnIjogIkNOUEZnZFB2dXR3Q0VBRT0iLAogICJjdXN0b21lckVuY3J5cHRpb24iOiB7CiAgICJlbmNyeXB0aW9uQWxnb3JpdGhtIjogIkFFUzI1NiIsCiAgICJrZXlTaGEyNTYiOiAiRm5CdmZRMWREc3lTOGtIRCthQjZISElnbERvUTVJbTdXWURtM1hZVEdyUT0iCiAgfQogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "5cac631c8e1c4d34",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption-2",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "37de646d6ee27cfd302ff771f6dd2ece/4066116968338487332;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption-2"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "277"
+ ],
+ "Content-Type": [
+ "application/xml; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:41 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:41 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/379,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1067.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=LcBYW6TWGYXLlQHhi6CgDA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1067.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/1067:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq8dUGFJMxRmWVYae5NUejAxV91f86KkBZNRFEiCpx5bQkKJFLCnhc0V1YzhLToF7oqk_oOxfxI1WiSBtrDSC3U4WhJzA"
+ ]
+ },
+ "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+UmVzb3VyY2VJc0VuY3J5cHRlZFdpdGhDdXN0b21lckVuY3J5cHRpb25LZXk8L0NvZGU+PE1lc3NhZ2U+VGhlIHJlc291cmNlIGlzIGVuY3J5cHRlZCB3aXRoIGEgY3VzdG9tZXIgZW5jcnlwdGlvbiBrZXkuPC9NZXNzYWdlPjxEZXRhaWxzPlRoZSByZXF1ZXN0ZWQgb2JqZWN0IGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LjwvRGV0YWlscz48L0Vycm9yPg=="
+ }
+ },
+ {
+ "ID": "91d3b551b9b3f000",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption-2",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "04f7a694956d9bde0602618835166431/11707078986202970433;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption-2"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "FnBvfQ1dDsyS8kHD+aB6HHIglDoQ5Im7WYDm3XYTGrQ="
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Language": [
+ "en"
+ ],
+ "Content-Length": [
+ "11"
+ ],
+ "Content-Type": [
+ "text/plain; charset=utf-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:41 GMT"
+ ],
+ "Etag": [
+ "\"-CNPFgdPvutwCEAE=\""
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:41 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "FnBvfQ1dDsyS8kHD+aB6HHIglDoQ5Im7WYDm3XYTGrQ="
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:41 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532543021114067"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=r0NGrg==",
+ "md5=xwWNFa0VdXPmlAwrlcAJcg=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "11"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/110,/bns/yb/borg/yb/bns/blobstore2/bitpusher/74.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=LcBYW4uMHcGelAH-jJWoCw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/74.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/74:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpK9BucKJpgyFP2k4F2GwJMX-dxnLYjPHFS4YB2isFHF5LMJJ2hwKTMKRBT2mA-1KA6EImB7xzdMiNI-m3aladRSsFHKasp_T3z2UppMWTV_dw8tek"
+ ]
+ },
+ "Body": "dG9wIHNlY3JldC4="
+ }
+ },
+ {
+ "ID": "2eccba21305bb95f",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b15aa62052d0d7cee0a810e50122a363/901298034147785309;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Copy-Source-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Copy-Source-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Copy-Source-Encryption-Key-Sha256": [
+ "FnBvfQ1dDsyS8kHD+aB6HHIglDoQ5Im7WYDm3XYTGrQ="
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "4189"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:42 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae1:4085,/bns/xi/borg/xi/bns/blobstore2/bitpusher/110.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=LcBYW_3YI6i9swbA1rXICg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/110.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/110:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq4MXfPhHe7Cug8sSnmb0CO5IqmjdSfDUC6iy3-d49HphwfnVNlxBaw91ORYgrm2wZ6yiFrKsgmxo4JX-fHGzlB2AuJlQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiMTEiLAogIm9iamVjdFNpemUiOiAiMTEiLAogImRvbmUiOiB0cnVlLAogInJlc291cmNlIjogewogICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIyMjA4NjI2IiwKICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMiIsCiAgIm5hbWUiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyMjIwODYyNiIsCiAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICJjb250ZW50VHlwZSI6ICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwKICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0Mi4yMDhaIiwKICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQyLjIwOFoiLAogICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQyLjIwOFoiLAogICJzaXplIjogIjExIiwKICAibWQ1SGFzaCI6ICJ4d1dORmEwVmRYUG1sQXdybGNBSmNnPT0iLAogICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMj9nZW5lcmF0aW9uPTE1MzI1NDMwMjIyMDg2MjYmYWx0PW1lZGlhIiwKICAiY29udGVudExhbmd1YWdlIjogImVuIiwKICAiYWNsIjogWwogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIvMTUzMjU0MzAyMjIwODYyNi9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uLTIiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyMjIwODYyNiIsCiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAib3duZXJzIgogICAgfSwKICAgICJldGFnIjogIkNQS3N4TlB2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIyMjA4NjI2L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjIyMDg2MjYiLAogICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgfSwKICAgICJldGFnIjogIkNQS3N4TlB2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIyMjA4NjI2L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjIyMDg2MjYiLAogICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiUkVBREVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAidmlld2VycyIKICAgIH0sCiAgICAiZXRhZyI6ICJDUEtzeE5QdnV0d0NFQUU9IgogICB9LAogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIvMTUzMjU0MzAyMjIwODYyNi91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi0yL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjIyMDg2MjYiLAogICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiZXRhZyI6ICJDUEtzeE5QdnV0d0NFQUU9IgogICB9CiAgXSwKICAib3duZXIiOiB7CiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICB9LAogICJjcmMzMmMiOiAicjBOR3JnPT0iLAogICJldGFnIjogIkNQS3N4TlB2dXR3Q0VBRT0iLAogICJjdXN0b21lckVuY3J5cHRpb24iOiB7CiAgICJlbmNyeXB0aW9uQWxnb3JpdGhtIjogIkFFUzI1NiIsCiAgICJrZXlTaGEyNTYiOiAiSCtMbW5YaFJvZUk2VE1XNWJzVjZIeVVrNnB5R2MySU1icVliQVhCY3BzMD0iCiAgfQogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "b48eed060ac1eeee",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-3/compose?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "160"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "05e6a365f40000915a863bfd1c681526/8542260052012268410;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-3/compose?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAifSwic291cmNlT2JqZWN0cyI6W3sibmFtZSI6ImN1c3RvbWVyLWVuY3J5cHRpb24ifSx7Im5hbWUiOiJjdXN0b21lci1lbmNyeXB0aW9uLTIifV19Cg=="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "14106"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:42 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabn7:4375,/bns/xi/borg/xi/bns/blobstore2/bitpusher/131.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=LsBYW5f6F-u8swaT-aHwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/131.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/131:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq5OJTHLvdyYO_ZGZa2xuRerrunUlPs1OYcShjXHLfN4-j37WOw_gWkiQSlSPSUwc7v-QsAtR5wh864AiH1N0V7Dlw6CA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVzb3VyY2VJc0VuY3J5cHRlZFdpdGhDdXN0b21lckVuY3J5cHRpb25LZXkiLAogICAgIm1lc3NhZ2UiOiAiVGhlIHRhcmdldCBvYmplY3QgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuIiwKICAgICJleHRlbmRlZEhlbHAiOiAiaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3N0b3JhZ2UvZG9jcy9lbmNyeXB0aW9uI2N1c3RvbWVyLXN1cHBsaWVkX2VuY3J5cHRpb25fa2V5cyIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBDb21wb25lbnQgb2JqZWN0IChnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbikgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6MjAwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuQ29tcG9zZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoQ29tcG9zZU9iamVjdC5qYXZhOjQ3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5jb21wb3NlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IENvbXBvbmVudCBvYmplY3QgKGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uKSBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcblxuY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPUlOVkFMSURfVkFMVUUsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogQ29tcG9uZW50IG9iamVjdCAoZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24pIGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuQ29tcG9zZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoQ29tcG9zZU9iamVjdC5qYXZhOjIwMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YTo0Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuY29tcG9zZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTI5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogUkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBDb21wb25lbnQgb2JqZWN0IChnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbikgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1odHRwczovL2Nsb3VkLmdvb2dsZS5jb20vc3RvcmFnZS9kb2NzL2VuY3J5cHRpb24jY3VzdG9tZXItc3VwcGxpZWRfZW5jcnlwdGlvbl9rZXlzLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWNsb3VkLmJpZ3N0b3JlLmFwaS5CaWdzdG9yZUVycm9yRG9tYWluLlJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogQ29tcG9uZW50IG9iamVjdCAoZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24pIGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuQ29tcG9zZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoQ29tcG9zZU9iamVjdC5qYXZhOjIwMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YTo0Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuY29tcG9zZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTI5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogUkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBDb21wb25lbnQgb2JqZWN0IChnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbikgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPVJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZLCBlcnJvclByb3RvRG9tYWluPWNsb3VkLmJpZ3N0b3JlLmFwaS5CaWdzdG9yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1Db21wb25lbnQgb2JqZWN0IChnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbikgaXMgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1UaGUgdGFyZ2V0IG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS4sIHJlYXNvbj1yZXNvdXJjZUlzRW5jcnlwdGVkV2l0aEN1c3RvbWVyRW5jcnlwdGlvbktleSwgcnBjQ29kZT00MDB9IFRoZSB0YXJnZXQgb2JqZWN0IGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LjogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfSVNfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IENvbXBvbmVudCBvYmplY3QgKGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uKSBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YToyMDApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6NDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmNvbXBvc2UoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFJFU09VUkNFX0lTX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBSRVNPVVJDRV9JU19FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogQ29tcG9uZW50IG9iamVjdCAoZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24pIGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJUaGUgdGFyZ2V0IG9iamVjdCBpcyBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "43d20220aa0482d1",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-3/compose?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "160"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "418a165c76984b2a16fd19f1c252391b/1521354619552021541;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-3/compose?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAifSwic291cmNlT2JqZWN0cyI6W3sibmFtZSI6ImN1c3RvbWVyLWVuY3J5cHRpb24ifSx7Im5hbWUiOiJjdXN0b21lci1lbmNyeXB0aW9uLTIifV19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "974"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:42 GMT"
+ ],
+ "Etag": [
+ "CIiS6dPvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabp15:4495,/bns/xi/borg/xi/bns/blobstore2/bitpusher/148.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=LsBYW5mHHMe9swaP-5fwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/148.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/148:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrOJcor9CfA4bGa8a2BQTWOesMsCLPIAiahFPBLbzm_ddQeIl6G2Qa7RNC3wrMcXrB_lNWHcSykl2XHsdrst0BERICAuQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTMvMTUzMjU0MzAyMjgxMTQwMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMyIsCiAibmFtZSI6ICJjdXN0b21lci1lbmNyeXB0aW9uLTMiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyMjgxMTQwMCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0Mi44MTFaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDIuODExWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQyLjgxMVoiLAogInNpemUiOiAiMjIiLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi0zP2dlbmVyYXRpb249MTUzMjU0MzAyMjgxMTQwMCZhbHQ9bWVkaWEiLAogImNyYzMyYyI6ICI1ajF5cGc9PSIsCiAiY29tcG9uZW50Q291bnQiOiAyLAogImV0YWciOiAiQ0lpUzZkUHZ1dHdDRUFFPSIsCiAiY3VzdG9tZXJFbmNyeXB0aW9uIjogewogICJlbmNyeXB0aW9uQWxnb3JpdGhtIjogIkFFUzI1NiIsCiAgImtleVNoYTI1NiI6ICJIK0xtblhoUm9lSTZUTVc1YnNWNkh5VWs2cHlHYzJJTWJxWWJBWEJjcHMwPSIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "84119a5e66a5f1ad",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption-3",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "55a3bd2bafdc4dd9f46980fe0fb0fd9e/9162035166734826817;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption-3"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "277"
+ ],
+ "Content-Type": [
+ "application/xml; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:42 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:42 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/185,/bns/yb/borg/yb/bns/blobstore2/bitpusher/149.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=LsBYW7XLOJHzlgHcgqToBA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/149.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/149:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoeojkPEHBBZpKlGu2lmYrRaN42Kp0wHwRXD2_wa2cz5ltLIJ-EHY56cVUZsmr2xDdDTG8Si9KS8WmCNCXvh8jwSDCaI9cBQH-lOTxsCB7xGv3uZaI"
+ ]
+ },
+ "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+UmVzb3VyY2VJc0VuY3J5cHRlZFdpdGhDdXN0b21lckVuY3J5cHRpb25LZXk8L0NvZGU+PE1lc3NhZ2U+VGhlIHJlc291cmNlIGlzIGVuY3J5cHRlZCB3aXRoIGEgY3VzdG9tZXIgZW5jcnlwdGlvbiBrZXkuPC9NZXNzYWdlPjxEZXRhaWxzPlRoZSByZXF1ZXN0ZWQgb2JqZWN0IGlzIGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LjwvRGV0YWlscz48L0Vycm9yPg=="
+ }
+ },
+ {
+ "ID": "bbfd69c2be6a4c17",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption-3",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5af5102e0631c6db127aa6cc7b73da94/16802998288389062238;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/customer-encryption-3"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "22"
+ ],
+ "Content-Type": [
+ "application/octet-stream"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:43 GMT"
+ ],
+ "Etag": [
+ "\"-CIiS6dPvutwCEAE=\""
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:42 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Component-Count": [
+ "2"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:23:42 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532543022811400"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=5j1ypg=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "22"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/233,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1042.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=LsBYW42LPNedlAHel4n4Cw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1042.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/1042:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrgFKDTh88KRdGMqY14cM4LvByS0bU0y4XtNlcp7Udkqxt8Y32344QieJxs1G9PhVf8BAdx4EPDZCPozhDc7yqIDnvmZA"
+ ]
+ },
+ "Body": "dG9wIHNlY3JldC50b3Agc2VjcmV0Lg=="
+ }
+ },
+ {
+ "ID": "300a300b23a4335c",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "9f51df8e8c720e285a3ee5de218f86d6/5997497707520769914;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Copy-Source-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Copy-Source-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Copy-Source-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "4059"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:43 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaf2:4331,/bns/xi/borg/xi/bns/blobstore2/bitpusher/112.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=L8BYW9f1BOm8swbjuZeQDg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/112.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/112:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpBpilkap8Bxgs_8lHgcfjMld53lHihLHaZsw_mNqO4Ag2EXsEPCkFrkn6N0C465MXcjFxEiQraTf3bX2AKU69eA2dp9Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiMTEiLAogIm9iamVjdFNpemUiOiAiMTEiLAogImRvbmUiOiB0cnVlLAogInJlc291cmNlIjogewogICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIzODA4ODA0IiwKICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMiIsCiAgIm5hbWUiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyMzgwODgwNCIsCiAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICJjb250ZW50VHlwZSI6ICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwKICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0My44MDhaIiwKICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQzLjgwOFoiLAogICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQzLjgwOFoiLAogICJzaXplIjogIjExIiwKICAibWQ1SGFzaCI6ICJ4d1dORmEwVmRYUG1sQXdybGNBSmNnPT0iLAogICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMj9nZW5lcmF0aW9uPTE1MzI1NDMwMjM4MDg4MDQmYWx0PW1lZGlhIiwKICAiY29udGVudExhbmd1YWdlIjogImVuIiwKICAiYWNsIjogWwogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIvMTUzMjU0MzAyMzgwODgwNC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uLTIiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyMzgwODgwNCIsCiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAib3duZXJzIgogICAgfSwKICAgICJldGFnIjogIkNLU0NwdFR2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIzODA4ODA0L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjM4MDg4MDQiLAogICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgfSwKICAgICJldGFnIjogIkNLU0NwdFR2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIzODA4ODA0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjM4MDg4MDQiLAogICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiUkVBREVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAidmlld2VycyIKICAgIH0sCiAgICAiZXRhZyI6ICJDS1NDcHRUdnV0d0NFQUU9IgogICB9LAogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIvMTUzMjU0MzAyMzgwODgwNC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi0yL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0yIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjM4MDg4MDQiLAogICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiZXRhZyI6ICJDS1NDcHRUdnV0d0NFQUU9IgogICB9CiAgXSwKICAib3duZXIiOiB7CiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICB9LAogICJjcmMzMmMiOiAicjBOR3JnPT0iLAogICJldGFnIjogIkNLU0NwdFR2dXR3Q0VBRT0iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "69020dac345878df",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-3/compose?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "129"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d278ee93823326df9ef33a923ae61189/13638460824863326615;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-3/compose?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "H+LmnXhRoeI6TMW5bsV6HyUk6pyGc2IMbqYbAXBcps0="
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAifSwic291cmNlT2JqZWN0cyI6W3sibmFtZSI6ImN1c3RvbWVyLWVuY3J5cHRpb24tMiJ9XX0K"
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "14232"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:44 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543318000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaad3:4296,/bns/xi/borg/xi/bns/blobstore2/bitpusher/127.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=L8BYW8nUN8u8swbztoroAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/127.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/127:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlhVYjBnTEd2bV9Cbl9YQXNaSVplTm12VWpQRU1ZaFl2NVB4UXFTXzM3YTBBVTR2VHNqSW1sMWZUT3FRYmZOYW9wdm5wb1hjVUt1T3hUSTlwRHdPNXdBRzN2V3JDSHhWTUlGcjkxS0xndURQVm5Md3Eydmt4WS15SFA3R09HQ25OWWNiT2I5cDBRWXFGc04yNjI1SXE4WmJoRXI1WmZpY1hHWVJZaEZNNnptV01LTi1GQVh4M2VtaTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqU8wqxw4er6p9YWLTSpvHkIOFrBiaQeLE7i7U3qYEDRBY8XAbeR36fAlMQFxZ34JzQRdxZBWYwNqPtnBwPrRkxcOJ61g"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVzb3VyY2VOb3RFbmNyeXB0ZWRXaXRoQ3VzdG9tZXJFbmNyeXB0aW9uS2V5IiwKICAgICJtZXNzYWdlIjogIlRoZSB0YXJnZXQgb2JqZWN0IGlzIG5vdCBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS4iLAogICAgImV4dGVuZGVkSGVscCI6ICJodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vc3RvcmFnZS9kb2NzL2VuY3J5cHRpb24jY3VzdG9tZXItc3VwcGxpZWRfZW5jcnlwdGlvbl9rZXlzIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlJFU09VUkNFX05PVF9FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfTk9UX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBSRVNPVVJDRV9OT1RfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IENvbXBvbmVudCBvYmplY3QgKGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIpIHVzIG5vdCBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YToyMDApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6NDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmNvbXBvc2UoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFJFU09VUkNFX05PVF9FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfTk9UX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBDb21wb25lbnQgb2JqZWN0IChnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi0yKSB1cyBub3QgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1JTlZBTElEX1ZBTFVFLCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlJFU09VUkNFX05PVF9FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfTk9UX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBSRVNPVVJDRV9OT1RfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IENvbXBvbmVudCBvYmplY3QgKGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIpIHVzIG5vdCBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YToyMDApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6NDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmNvbXBvc2UoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFJFU09VUkNFX05PVF9FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfTk9UX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBDb21wb25lbnQgb2JqZWN0IChnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi0yKSB1cyBub3QgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1odHRwczovL2Nsb3VkLmdvb2dsZS5jb20vc3RvcmFnZS9kb2NzL2VuY3J5cHRpb24jY3VzdG9tZXItc3VwcGxpZWRfZW5jcnlwdGlvbl9rZXlzLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWNsb3VkLmJpZ3N0b3JlLmFwaS5CaWdzdG9yZUVycm9yRG9tYWluLlJFU09VUkNFX05PVF9FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWSwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlJFU09VUkNFX05PVF9FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfTk9UX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBSRVNPVVJDRV9OT1RfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IENvbXBvbmVudCBvYmplY3QgKGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIpIHVzIG5vdCBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YToyMDApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6NDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmNvbXBvc2UoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFJFU09VUkNFX05PVF9FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfTk9UX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBDb21wb25lbnQgb2JqZWN0IChnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi0yKSB1cyBub3QgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPVJFU09VUkNFX05PVF9FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWSwgZXJyb3JQcm90b0RvbWFpbj1jbG91ZC5iaWdzdG9yZS5hcGkuQmlnc3RvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPWVudGl0eS5lbmNyeXB0aW9uS2V5LCBtZXNzYWdlPUNvbXBvbmVudCBvYmplY3QgKGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIpIHVzIG5vdCBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkuZW5jcnlwdGlvbktleSwgbWVzc2FnZT1UaGUgdGFyZ2V0IG9iamVjdCBpcyBub3QgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuLCByZWFzb249cmVzb3VyY2VOb3RFbmNyeXB0ZWRXaXRoQ3VzdG9tZXJFbmNyeXB0aW9uS2V5LCBycGNDb2RlPTQwMH0gVGhlIHRhcmdldCBvYmplY3QgaXMgbm90IGVuY3J5cHRlZCBieSBhIGN1c3RvbWVyLXN1cHBsaWVkIGVuY3J5cHRpb24ga2V5LjogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlJFU09VUkNFX05PVF9FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfTk9UX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBSRVNPVVJDRV9OT1RfRU5DUllQVEVEX1dJVEhfQ1VTVE9NRVJfRU5DUllQVElPTl9LRVk6IENvbXBvbmVudCBvYmplY3QgKGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTIpIHVzIG5vdCBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YToyMDApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6NDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmNvbXBvc2UoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFJFU09VUkNFX05PVF9FTkNSWVBURURfV0lUSF9DVVNUT01FUl9FTkNSWVBUSU9OX0tFWTogUkVTT1VSQ0VfTk9UX0VOQ1JZUFRFRF9XSVRIX0NVU1RPTUVSX0VOQ1JZUFRJT05fS0VZOiBDb21wb25lbnQgb2JqZWN0IChnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi0yKSB1cyBub3QgZW5jcnlwdGVkIGJ5IGEgY3VzdG9tZXItc3VwcGxpZWQgZW5jcnlwdGlvbiBrZXkuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDAwLAogICJtZXNzYWdlIjogIlRoZSB0YXJnZXQgb2JqZWN0IGlzIG5vdCBlbmNyeXB0ZWQgYnkgYSBjdXN0b21lci1zdXBwbGllZCBlbmNyeXB0aW9uIGtleS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "57cebe350ad4b735",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b4c97551f0d3cdd4bacea30f79cf0bcb/2832960243995034291;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2951"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:44 GMT"
+ ],
+ "Etag": [
+ "CAk="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:44 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543324000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaac13:4010,/bns/xi/borg/xi/bns/blobstore2/bitpusher/149.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=MMBYW6DWC8y8swbYrr3oAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/149.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/149:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YmJLcUI1V3VlMmxucHZUTzJFdWh2M3VOdmlST2NXR1pKdUF5S2hYTTFOSHJqNDhVTVRVdElncmJvZVZRalpqTUJiZFRSeV9xZkRDNTg1VUNTSjRoa0tDTVMxR1NMenJWSUpuZzBxQjk2RE1lcEhvd3lpX0YwWEJQaF9EeXdsbXl5eTM2eWlOMTR4UXFjY2lPeHpHWkVwLUp3bEp5cTlvc095U0VNa1RubWJGRFd3Z0UxMURxWWlmbWMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrhC5_XlpOq4L32MvPIPuHqK7FWpsW0vVM37zyaThccYKLqbPD322Z_tO-vXc95DEdtaVhuiGMxN7q-529Fud4_eUppBw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuMDg0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjMxLjQyMFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjkiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FrPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FrPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBaz0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQWs9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FrPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQWs9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInZlcnNpb25pbmciOiB7CiAgImVuYWJsZWQiOiBmYWxzZQogfSwKICJsaWZlY3ljbGUiOiB7CiAgInJ1bGUiOiBbCiAgIHsKICAgICJhY3Rpb24iOiB7CiAgICAgInR5cGUiOiAiRGVsZXRlIgogICAgfSwKICAgICJjb25kaXRpb24iOiB7CiAgICAgImFnZSI6IDMwCiAgICB9CiAgIH0KICBdCiB9LAogImxhYmVscyI6IHsKICAibDEiOiAidjIiLAogICJuZXciOiAibmV3IgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FrPSIKfQo="
+ }
+ },
+ {
+ "ID": "2e8f5104310bfe85",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=9001ab8d43f75482dda33a0ee7f98dcfe353dfff3c828ca30af9a9dcb3b0"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2f36a66f4dc1427f87af81a35c7cc8ca/6689329316752785986;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS05MDAxYWI4ZDQzZjc1NDgyZGRhMzNhMGVlN2Y5OGRjZmUzNTNkZmZmM2M4MjhjYTMwYWY5YTlkY2IzYjANCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm5hbWUiOiJwb3NjIn0KDQotLTkwMDFhYjhkNDNmNzU0ODJkZGEzM2EwZWU3Zjk4ZGNmZTM1M2RmZmYzYzgyOGNhMzBhZjlhOWRjYjNiMA0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCmZvbw0KLS05MDAxYWI4ZDQzZjc1NDgyZGRhMzNhMGVlN2Y5OGRjZmUzNTNkZmZmM2M4MjhjYTMwYWY5YTlkY2IzYjAtLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3560"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:44 GMT"
+ ],
+ "Etag": [
+ "CIaI5NTvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543324000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaba15:4126,/bns/xi/borg/xi/bns/blobstore2/bitpusher/114.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=MMBYW5TdHqy9swbny6vAAQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/114.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/114:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YmJLcUI1V3VlMmxucHZUTzJFdWh2M3VOdmlST2NXR1pKdUF5S2hYTTFOSHJqNDhVTVRVdElncmJvZVZRalpqTUJiZFRSeV9xZkRDNTg1VUNTSjRoa0tDTVMxR1NMenJWSUpuZzBxQjk2RE1lcEhvd3lpX0YwWEJQaF9EeXdsbXl5eTM2eWlOMTR4UXFjY2lPeHpHWkVwLUp3bEp5cTlvc095U0VNa1RubWJGRFd3Z0UxMURxWWlmbWMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo13CdtfQL9ZMhaPcrW3YnAuOwBE2gvutfyihE4WFB5wD-zKHwrZfDHhdgttlUSiHDhx-ZYfxpq7M89G_R2wO6VI1lXZg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjLzE1MzI1NDMwMjQ4MjUzNTAiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjIiwKICJuYW1lIjogInBvc2MiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNDgyNTM1MCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0NC44MjRaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDQuODI0WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ0LjgyNFoiLAogInNpemUiOiAiMyIsCiAibWQ1SGFzaCI6ICJyTDBZMjB6QytGenQ3MlZQek1TazJBPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYz9nZW5lcmF0aW9uPTE1MzI1NDMwMjQ4MjUzNTAmYWx0PW1lZGlhIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MvMTUzMjU0MzAyNDgyNTM1MC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAicG9zYyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjQ4MjUzNTAiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNJYUk1TlR2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcG9zYy8xNTMyNTQzMDI0ODI1MzUwL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInBvc2MiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI0ODI1MzUwIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNJYUk1TlR2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcG9zYy8xNTMyNTQzMDI0ODI1MzUwL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInBvc2MiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI0ODI1MzUwIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDSWFJNU5UdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MvMTUzMjU0MzAyNDgyNTM1MC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInBvc2MiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI0ODI1MzUwIiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDSWFJNU5UdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiejhTdUhRPT0iLAogImV0YWciOiAiQ0lhSTVOVHZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "feca3f00c1046a73",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/posc?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "20101f7f4ace8b565d65a450ac476a76/14330291334617334622;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/posc?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3560"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:45 GMT"
+ ],
+ "Etag": [
+ "CIaI5NTvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543324000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadacc2:4342,/bns/xi/borg/xi/bns/blobstore2/bitpusher/142.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=MMBYW8iGOoq9swbt0Y3oAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/142.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/142:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YmJLcUI1V3VlMmxucHZUTzJFdWh2M3VOdmlST2NXR1pKdUF5S2hYTTFOSHJqNDhVTVRVdElncmJvZVZRalpqTUJiZFRSeV9xZkRDNTg1VUNTSjRoa0tDTVMxR1NMenJWSUpuZzBxQjk2RE1lcEhvd3lpX0YwWEJQaF9EeXdsbXl5eTM2eWlOMTR4UXFjY2lPeHpHWkVwLUp3bEp5cTlvc095U0VNa1RubWJGRFd3Z0UxMURxWWlmbWMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqj3DjJRgirmHvrKIU7eiHDANArEL6G-WUsLONGkdILniC7XlLJY0d8P6iSVCDz_YjxL8AddMCW4Pi4flL-YY5rfvCBbw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjLzE1MzI1NDMwMjQ4MjUzNTAiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjIiwKICJuYW1lIjogInBvc2MiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNDgyNTM1MCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0NC44MjRaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDQuODI0WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ0LjgyNFoiLAogInNpemUiOiAiMyIsCiAibWQ1SGFzaCI6ICJyTDBZMjB6QytGenQ3MlZQek1TazJBPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYz9nZW5lcmF0aW9uPTE1MzI1NDMwMjQ4MjUzNTAmYWx0PW1lZGlhIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MvMTUzMjU0MzAyNDgyNTM1MC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAicG9zYyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjQ4MjUzNTAiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNJYUk1TlR2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcG9zYy8xNTMyNTQzMDI0ODI1MzUwL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInBvc2MiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI0ODI1MzUwIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNJYUk1TlR2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcG9zYy8xNTMyNTQzMDI0ODI1MzUwL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInBvc2MiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI0ODI1MzUwIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDSWFJNU5UdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MvMTUzMjU0MzAyNDgyNTM1MC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInBvc2MiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI0ODI1MzUwIiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDSWFJNU5UdnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiejhTdUhRPT0iLAogImV0YWciOiAiQ0lhSTVOVHZ1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "312b8b926b1bbf92",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/posc/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/posc?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "34"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1ed78a47b8b4bf50c281c28af9471046/3524791857538729083;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/posc/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/posc?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJzdG9yYWdlQ2xhc3MiOiJNVUxUSV9SRUdJT05BTCJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3717"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:45 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543325000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabp15:4495,/bns/xi/borg/xi/bns/blobstore2/bitpusher/80.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=McBYW8CYAeyyswbR54r4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/80.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/80:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YmJLcUI1V3VlMmxucHZUTzJFdWh2M3VOdmlST2NXR1pKdUF5S2hYTTFOSHJqNDhVTVRVdElncmJvZVZRalpqTUJiZFRSeV9xZkRDNTg1VUNTSjRoa0tDTVMxR1NMenJWSUpuZzBxQjk2RE1lcEhvd3lpX0YwWEJQaF9EeXdsbXl5eTM2eWlOMTR4UXFjY2lPeHpHWkVwLUp3bEp5cTlvc095U0VNa1RubWJGRFd3Z0UxMURxWWlmbWMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up1ardVFhfrmXS-En3-8VYXDoSxaldxJuKtIVmgRZ96Lz0kBwixSHiLxuH9gURotJ75dXZ1wPG5UppUK7L3qO5qu5gy2Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiMyIsCiAib2JqZWN0U2l6ZSI6ICIzIiwKICJkb25lIjogdHJ1ZSwKICJyZXNvdXJjZSI6IHsKICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjLzE1MzI1NDMwMjU0NjE4MTAiLAogICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYyIsCiAgIm5hbWUiOiAicG9zYyIsCiAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjU0NjE4MTAiLAogICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0NS40NjFaIiwKICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ1LjQ2MVoiLAogICJzdG9yYWdlQ2xhc3MiOiAiTVVMVElfUkVHSU9OQUwiLAogICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ1LjQ2MVoiLAogICJzaXplIjogIjMiLAogICJtZDVIYXNoIjogInJMMFkyMHpDK0Z6dDcyVlB6TVNrMkE9PSIsCiAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYz9nZW5lcmF0aW9uPTE1MzI1NDMwMjU0NjE4MTAmYWx0PW1lZGlhIiwKICAiYWNsIjogWwogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjLzE1MzI1NDMwMjU0NjE4MTAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAib2JqZWN0IjogInBvc2MiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNTQ2MTgxMCIsCiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAib3duZXJzIgogICAgfSwKICAgICJldGFnIjogIkNMTDBpdFh2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MvMTUzMjU0MzAyNTQ2MTgxMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgIm9iamVjdCI6ICJwb3NjIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjU0NjE4MTAiLAogICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgfSwKICAgICJldGFnIjogIkNMTDBpdFh2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MvMTUzMjU0MzAyNTQ2MTgxMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgIm9iamVjdCI6ICJwb3NjIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjU0NjE4MTAiLAogICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiUkVBREVSIiwKICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgInRlYW0iOiAidmlld2VycyIKICAgIH0sCiAgICAiZXRhZyI6ICJDTEwwaXRYdnV0d0NFQUU9IgogICB9LAogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjLzE1MzI1NDMwMjU0NjE4MTAvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3Bvc2MvYWNsL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgIm9iamVjdCI6ICJwb3NjIiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjU0NjE4MTAiLAogICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiZXRhZyI6ICJDTEwwaXRYdnV0d0NFQUU9IgogICB9CiAgXSwKICAib3duZXIiOiB7CiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICB9LAogICJjcmMzMmMiOiAiejhTdUhRPT0iLAogICJldGFnIjogIkNMTDBpdFh2dXR3Q0VBRT0iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "83237be49e8c7a1d",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=0ce92c182e76e811b2f77fdb1cad255db3f89a0edaebe61b8b1757d75975"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "04f8146cc92bf375bfeabdd75bed176a/7309104431458567433;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0wY2U5MmMxODJlNzZlODExYjJmNzdmZGIxY2FkMjU1ZGIzZjg5YTBlZGFlYmU2MWI4YjE3NTdkNzU5NzUNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm5hbWUiOiJwb3NjMiIsInN0b3JhZ2VDbGFzcyI6Ik1VTFRJX1JFR0lPTkFMIn0KDQotLTBjZTkyYzE4MmU3NmU4MTFiMmY3N2ZkYjFjYWQyNTVkYjNmODlhMGVkYWViZTYxYjhiMTc1N2Q3NTk3NQ0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCnh4eA0KLS0wY2U5MmMxODJlNzZlODExYjJmNzdmZGIxY2FkMjU1ZGIzZjg5YTBlZGFlYmU2MWI4YjE3NTdkNzU5NzUtLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3582"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:46 GMT"
+ ],
+ "Etag": [
+ "CK6NqdXvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543324000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabd16:4032,/bns/xi/borg/xi/bns/blobstore2/bitpusher/93.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=McBYW8z_JKm0swaY5YzYCw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/93.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/93:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YmJLcUI1V3VlMmxucHZUTzJFdWh2M3VOdmlST2NXR1pKdUF5S2hYTTFOSHJqNDhVTVRVdElncmJvZVZRalpqTUJiZFRSeV9xZkRDNTg1VUNTSjRoa0tDTVMxR1NMenJWSUpuZzBxQjk2RE1lcEhvd3lpX0YwWEJQaF9EeXdsbXl5eTM2eWlOMTR4UXFjY2lPeHpHWkVwLUp3bEp5cTlvc095U0VNa1RubWJGRFd3Z0UxMURxWWlmbWMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqJYMMSmgS-kmMEzxzfki-62xFzGeerbvOWAqcFVLKTUxekbasykNpBZgG01WCk0KUvCrtCyIOsVPovUS4YRhEvJcK-Iw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjMi8xNTMyNTQzMDI1OTU2NTI2IiwKICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYzIiLAogIm5hbWUiOiAicG9zYzIiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNTk1NjUyNiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0NS45NTZaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDUuOTU2WiIsCiAic3RvcmFnZUNsYXNzIjogIk1VTFRJX1JFR0lPTkFMIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ1Ljk1NloiLAogInNpemUiOiAiMyIsCiAibWQ1SGFzaCI6ICI5V0dxOXU4TDhVMUNDTHRHcE15enJRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYzI/Z2VuZXJhdGlvbj0xNTMyNTQzMDI1OTU2NTI2JmFsdD1tZWRpYSIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjMi8xNTMyNTQzMDI1OTU2NTI2L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAicG9zYzIiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI1OTU2NTI2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDSzZOcWRYdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MyLzE1MzI1NDMwMjU5NTY1MjYvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInBvc2MyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNTk1NjUyNiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDSzZOcWRYdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MyLzE1MzI1NDMwMjU5NTY1MjYvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInBvc2MyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNTk1NjUyNiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0s2TnFkWHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjMi8xNTMyNTQzMDI1OTU2NTI2L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3Bvc2MyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInBvc2MyIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNTk1NjUyNiIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0s2TnFkWHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIjE3cUFCUT09IiwKICJldGFnIjogIkNLNk5xZFh2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "de5efa8b33013b80",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=0c8df84be5403d1d794faabb9b6ddc90372117abe059c74ad678b826a0cb"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c6a16b15f5dab53e01f72c4065bbc25f/11165754974898128279;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0wYzhkZjg0YmU1NDAzZDFkNzk0ZmFhYmI5YjZkZGM5MDM3MjExN2FiZTA1OWM3NGFkNjc4YjgyNmEwY2INCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm5hbWUiOiJidWNrZXRJbkNvcHlBdHRycyJ9Cg0KLS0wYzhkZjg0YmU1NDAzZDFkNzk0ZmFhYmI5YjZkZGM5MDM3MjExN2FiZTA1OWM3NGFkNjc4YjgyNmEwY2INCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOA0KDQpmb28NCi0tMGM4ZGY4NGJlNTQwM2QxZDc5NGZhYWJiOWI2ZGRjOTAzNzIxMTdhYmUwNTljNzRhZDY3OGI4MjZhMGNiLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3768"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:46 GMT"
+ ],
+ "Etag": [
+ "CKfExtXvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543326000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaak13:4444,/bns/xi/borg/xi/bns/blobstore2/bitpusher/146.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=MsBYW8S0B8W8swaY9Jb4Ag"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/146.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/146:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WkRXNkZrREc0T19kVlBudl9ZNTlNYTdycTQ1cFV6WDBDMXVtc3J5SGNiSE1CNXYxQi1lN1lhbEhwQ3Fya2NHZTF2aktrWUtkT2pnUkJKeHQ5SnBLOWx4aDFTaHpBbExCcGRVQ29faE1ONDNwWGdFSElWYU1mR3FSU3JEU3RRSzl3R21QN1FtcDI2T3lGQ3plUTlTbXZ6TXg2WmFYOGF3ZVZRd3R1LTA3OVpIUzMxeHM0cVNmUHBSdFkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqplvuw7ZGheP5vuUQfVy8d7Ckotw71-TgBPwZwQepMGUdmWCDuce8fFo1lluD-w5hEHswfA2-O6OAy52qeO14tsITcyg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9idWNrZXRJbkNvcHlBdHRycy8xNTMyNTQzMDI2NDM4Njk1IiwKICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYnVja2V0SW5Db3B5QXR0cnMiLAogIm5hbWUiOiAiYnVja2V0SW5Db3B5QXR0cnMiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNjQzODY5NSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0Ni40MzhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDYuNDM4WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ2LjQzOFoiLAogInNpemUiOiAiMyIsCiAibWQ1SGFzaCI6ICJyTDBZMjB6QytGenQ3MlZQek1TazJBPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYnVja2V0SW5Db3B5QXR0cnM/Z2VuZXJhdGlvbj0xNTMyNTQzMDI2NDM4Njk1JmFsdD1tZWRpYSIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9idWNrZXRJbkNvcHlBdHRycy8xNTMyNTQzMDI2NDM4Njk1L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9idWNrZXRJbkNvcHlBdHRycy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiYnVja2V0SW5Db3B5QXR0cnMiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI2NDM4Njk1IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDS2ZFeHRYdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2J1Y2tldEluQ29weUF0dHJzLzE1MzI1NDMwMjY0Mzg2OTUvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9idWNrZXRJbkNvcHlBdHRycy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImJ1Y2tldEluQ29weUF0dHJzIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNjQzODY5NSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDS2ZFeHRYdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2J1Y2tldEluQ29weUF0dHJzLzE1MzI1NDMwMjY0Mzg2OTUvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9idWNrZXRJbkNvcHlBdHRycy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImJ1Y2tldEluQ29weUF0dHJzIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNjQzODY5NSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0tmRXh0WHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9idWNrZXRJbkNvcHlBdHRycy8xNTMyNTQzMDI2NDM4Njk1L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2J1Y2tldEluQ29weUF0dHJzL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImJ1Y2tldEluQ29weUF0dHJzIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNjQzODY5NSIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0tmRXh0WHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIno4U3VIUT09IiwKICJldGFnIjogIkNLZkV4dFh2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "128f47925b60ccf0",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/bucketInCopyAttrs/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/bucketInCopyAttrs?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "62"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "a30dd152cfb60272f5cbc0daaf33c275/14950066449323116069;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/bucketInCopyAttrs/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/bucketInCopyAttrs?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAifQo="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "3010"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:46 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543326000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaah14:4439,/bns/xi/borg/xi/bns/blobstore2/bitpusher/13.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=MsBYW4-9I6u_swbmtYzYDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/13.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/13:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3WkRXNkZrREc0T19kVlBudl9ZNTlNYTdycTQ1cFV6WDBDMXVtc3J5SGNiSE1CNXYxQi1lN1lhbEhwQ3Fya2NHZTF2aktrWUtkT2pnUkJKeHQ5SnBLOWx4aDFTaHpBbExCcGRVQ29faE1ONDNwWGdFSElWYU1mR3FSU3JEU3RRSzl3R21QN1FtcDI2T3lGQ3plUTlTbXZ6TXg2WmFYOGF3ZVZRd3R1LTA3OVpIUzMxeHM0cVNmUHBSdFkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up_6SJzIe05XZNHiZD1_JDHC9J15hT0YvzJC33u7PERcG0q70qG9QJTDBTY6lM14e0BOzfI_0GH9cwqxJT6UzjULG8sjQ"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiUmVxdWlyZWQiLAogICAgImRlYnVnSW5mbyI6ICJjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9UkVRVUlSRUQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1udWxsLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9YmFkUmVxdWVzdCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uUkVRVUlSRUQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPW51bGwsIGVycm9yUHJvdG9Db2RlPVJFUVVJUkVELCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPWVudGl0eS5kZXN0aW5hdGlvbl9yZXNvdXJjZS5pZC5uYW1lLCBtZXNzYWdlPW51bGwsIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkuZGVzdGluYXRpb25fcmVzb3VyY2UuaWQubmFtZSwgbWVzc2FnZT1SZXF1aXJlZCwgcmVhc29uPXJlcXVpcmVkLCBycGNDb2RlPTQwMH0gUmVxdWlyZWRcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDAwLAogICJtZXNzYWdlIjogIlJlcXVpcmVkIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "01999eeeea870b34",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=935472e85ae798cf4b2d91705c397a11b28a3003d49ba4db3450b4d17c11"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "4cfc96a7d2cc78bf0fde3c2af9f48337/360254394029770420;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS05MzU0NzJlODVhZTc5OGNmNGIyZDkxNzA1YzM5N2ExMWIyOGEzMDAzZDQ5YmE0ZGIzNDUwYjRkMTdjMTENCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNyYzMyYyI6ImNIK0Erdz09IiwibmFtZSI6Imhhc2hlc09uVXBsb2FkLTEifQoNCi0tOTM1NDcyZTg1YWU3OThjZjRiMmQ5MTcwNWMzOTdhMTFiMjhhMzAwM2Q0OWJhNGRiMzQ1MGI0ZDE3YzExDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KSSBjYW4ndCB3YWl0IHRvIGJlIHZlcmlmaWVkDQotLTkzNTQ3MmU4NWFlNzk4Y2Y0YjJkOTE3MDVjMzk3YTExYjI4YTMwMDNkNDliYTRkYjM0NTBiNGQxN2MxMS0tDQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3753"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:47 GMT"
+ ],
+ "Etag": [
+ "CMTC69XvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543326000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcby9:4035,/bns/xi/borg/xi/bns/blobstore2/bitpusher/29.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=MsBYW_qJKoKyswbEgp2YDw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/29.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/29:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WkRXNkZrREc0T19kVlBudl9ZNTlNYTdycTQ1cFV6WDBDMXVtc3J5SGNiSE1CNXYxQi1lN1lhbEhwQ3Fya2NHZTF2aktrWUtkT2pnUkJKeHQ5SnBLOWx4aDFTaHpBbExCcGRVQ29faE1ONDNwWGdFSElWYU1mR3FSU3JEU3RRSzl3R21QN1FtcDI2T3lGQ3plUTlTbXZ6TXg2WmFYOGF3ZVZRd3R1LTA3OVpIUzMxeHM0cVNmUHBSdFkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpmbyA7wM4Y0p9ww8Ldju4LjWgVYwE852X2j5fsQoOcmTr1fgY4dP4yyNqY-kR0ffWEDfHADice5SKA1_dW2u1XpniI_w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjcwNDQ2NzYiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9oYXNoZXNPblVwbG9hZC0xIiwKICJuYW1lIjogImhhc2hlc09uVXBsb2FkLTEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNzA0NDY3NiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0Ny4wNDRaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDcuMDQ0WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ3LjA0NFoiLAogInNpemUiOiAiMjciLAogIm1kNUhhc2giOiAib2ZaakdsY1hQSmlHT0FmS0ZiSmwxUT09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTE/Z2VuZXJhdGlvbj0xNTMyNTQzMDI3MDQ0Njc2JmFsdD1tZWRpYSIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjcwNDQ2NzYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImhhc2hlc09uVXBsb2FkLTEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI3MDQ0Njc2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDTVRDNjlYdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2hhc2hlc09uVXBsb2FkLTEvMTUzMjU0MzAyNzA0NDY3Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNzA0NDY3NiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDTVRDNjlYdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2hhc2hlc09uVXBsb2FkLTEvMTUzMjU0MzAyNzA0NDY3Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNzA0NDY3NiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ01UQzY5WHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjcwNDQ2NzYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vaGFzaGVzT25VcGxvYWQtMS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNzA0NDY3NiIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ01UQzY5WHZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogImNIK0Erdz09IiwKICJldGFnIjogIkNNVEM2OVh2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "451064af554caf84",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=d82f40ea044c9ab8b1891c5cfa83b8886ba519fd8535eeb78ba0d134ba8d"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d7a562c048721881dba975eb1a6daba0/4144566972244510530;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1kODJmNDBlYTA0NGM5YWI4YjE4OTFjNWNmYTgzYjg4ODZiYTUxOWZkODUzNWVlYjc4YmEwZDEzNGJhOGQNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNyYzMyYyI6ImNIK0EvQT09IiwibmFtZSI6Imhhc2hlc09uVXBsb2FkLTEifQoNCi0tZDgyZjQwZWEwNDRjOWFiOGIxODkxYzVjZmE4M2I4ODg2YmE1MTlmZDg1MzVlZWI3OGJhMGQxMzRiYThkDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KSSBjYW4ndCB3YWl0IHRvIGJlIHZlcmlmaWVkDQotLWQ4MmY0MGVhMDQ0YzlhYjhiMTg5MWM1Y2ZhODNiODg4NmJhNTE5ZmQ4NTM1ZWViNzhiYTBkMTM0YmE4ZC0tDQo="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "3339"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:47 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543326000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcdk2:4016,/bns/xi/borg/xi/bns/blobstore2/bitpusher/140.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=M8BYW7S4CYa9swbN3qfoAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/140.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/140:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WkRXNkZrREc0T19kVlBudl9ZNTlNYTdycTQ1cFV6WDBDMXVtc3J5SGNiSE1CNXYxQi1lN1lhbEhwQ3Fya2NHZTF2aktrWUtkT2pnUkJKeHQ5SnBLOWx4aDFTaHpBbExCcGRVQ29faE1ONDNwWGdFSElWYU1mR3FSU3JEU3RRSzl3R21QN1FtcDI2T3lGQ3plUTlTbXZ6TXg2WmFYOGF3ZVZRd3R1LTA3OVpIUzMxeHM0cVNmUHBSdFkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpwjATFwpxRuCj0oWcnArdspu0PVIwhFkCs-3gEUDXnepb5oEcHs6JvFKYhQM18gLYnS7WJXiGeJVLZXFQGQUNBD9vZqA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiaW52YWxpZCIsCiAgICAibWVzc2FnZSI6ICJQcm92aWRlZCBDUkMzMkMgXCJjSCtBL0E9PVwiIGRvZXNuJ3QgbWF0Y2ggY2FsY3VsYXRlZCBDUkMzMkMgXCJjSCtBK3c9PVwiLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1JTlZBTElEX1ZBTFVFLCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89bnVsbCwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWJhZFJlcXVlc3QsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLklOVkFMSURfVkFMVUUsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPW51bGwsIGVycm9yUHJvdG9Db2RlPUlOVkFMSURfVkFMVUUsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlLmNyYzMyYywgbWVzc2FnZT1Qcm92aWRlZCBDUkMzMkMgXCJjSCtBL0E9PVwiIGRvZXNuJ3QgbWF0Y2ggY2FsY3VsYXRlZCBDUkMzMkMgXCJjSCtBK3c9PVwiLiwgdW5uYW1lZEFyZ3VtZW50cz1bY0grQS9BPT1dfSwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlLmNyYzMyYywgbWVzc2FnZT1Qcm92aWRlZCBDUkMzMkMgXCJjSCtBL0E9PVwiIGRvZXNuJ3QgbWF0Y2ggY2FsY3VsYXRlZCBDUkMzMkMgXCJjSCtBK3c9PVwiLiwgcmVhc29uPWludmFsaWQsIHJwY0NvZGU9NDAwfSBQcm92aWRlZCBDUkMzMkMgXCJjSCtBL0E9PVwiIGRvZXNuJ3QgbWF0Y2ggY2FsY3VsYXRlZCBDUkMzMkMgXCJjSCtBK3c9PVwiLlxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDAsCiAgIm1lc3NhZ2UiOiAiUHJvdmlkZWQgQ1JDMzJDIFwiY0grQS9BPT1cIiBkb2Vzbid0IG1hdGNoIGNhbGN1bGF0ZWQgQ1JDMzJDIFwiY0grQSt3PT1cIi4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "0d70b948b18d141b",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=62ef3b087965c363be706e82edffcbb01a97e3c088745845bcd085738d06"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e2b090ad860f5e4c42b810cd8832197b/7928879546181126096;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS02MmVmM2IwODc5NjVjMzYzYmU3MDZlODJlZGZmY2JiMDFhOTdlM2MwODg3NDU4NDViY2QwODU3MzhkMDYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm5hbWUiOiJoYXNoZXNPblVwbG9hZC0xIn0KDQotLTYyZWYzYjA4Nzk2NWMzNjNiZTcwNmU4MmVkZmZjYmIwMWE5N2UzYzA4ODc0NTg0NWJjZDA4NTczOGQwNg0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCkkgY2FuJ3Qgd2FpdCB0byBiZSB2ZXJpZmllZA0KLS02MmVmM2IwODc5NjVjMzYzYmU3MDZlODJlZGZmY2JiMDFhOTdlM2MwODg3NDU4NDViY2QwODU3MzhkMDYtLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3753"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:47 GMT"
+ ],
+ "Etag": [
+ "CNmZitbvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543326000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabq10:4444,/bns/xi/borg/xi/bns/blobstore2/bitpusher/91.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=M8BYW73-C8K8swaH0qagBg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/91.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/91:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WkRXNkZrREc0T19kVlBudl9ZNTlNYTdycTQ1cFV6WDBDMXVtc3J5SGNiSE1CNXYxQi1lN1lhbEhwQ3Fya2NHZTF2aktrWUtkT2pnUkJKeHQ5SnBLOWx4aDFTaHpBbExCcGRVQ29faE1ONDNwWGdFSElWYU1mR3FSU3JEU3RRSzl3R21QN1FtcDI2T3lGQ3plUTlTbXZ6TXg2WmFYOGF3ZVZRd3R1LTA3OVpIUzMxeHM0cVNmUHBSdFkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqr9OFRvVjwg6BAvUWHm5Nfi7IkEAab8iGt7x9mahy6J3g5O7fTosieTldNbRrwUVHQd03QxH1XTuere_Oauj-4_sxgBQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjc1NDczNTMiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9oYXNoZXNPblVwbG9hZC0xIiwKICJuYW1lIjogImhhc2hlc09uVXBsb2FkLTEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNzU0NzM1MyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0Ny41NDdaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDcuNTQ3WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ3LjU0N1oiLAogInNpemUiOiAiMjciLAogIm1kNUhhc2giOiAib2ZaakdsY1hQSmlHT0FmS0ZiSmwxUT09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTE/Z2VuZXJhdGlvbj0xNTMyNTQzMDI3NTQ3MzUzJmFsdD1tZWRpYSIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjc1NDczNTMvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImhhc2hlc09uVXBsb2FkLTEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI3NTQ3MzUzIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDTm1aaXRidnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2hhc2hlc09uVXBsb2FkLTEvMTUzMjU0MzAyNzU0NzM1My9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNzU0NzM1MyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDTm1aaXRidnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2hhc2hlc09uVXBsb2FkLTEvMTUzMjU0MzAyNzU0NzM1My9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNzU0NzM1MyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ05tWml0YnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjc1NDczNTMvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vaGFzaGVzT25VcGxvYWQtMS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNzU0NzM1MyIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ05tWml0YnZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogImNIK0Erdz09IiwKICJldGFnIjogIkNObVppdGJ2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "f2e1e0c818a5bdf0",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=864286ac34cb3a5dd1ec7c6b49ea9bdb8136fa8e730649b2e93e4edc7ab6"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "fc44c98154ac1438312605318a4551ba/11785528990109059166;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS04NjQyODZhYzM0Y2IzYTVkZDFlYzdjNmI0OWVhOWJkYjgxMzZmYThlNzMwNjQ5YjJlOTNlNGVkYzdhYjYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm1kNUhhc2giOiJvZlpqR2xjWFBKaUdPQWZLRmJKbDFRPT0iLCJuYW1lIjoiaGFzaGVzT25VcGxvYWQtMSJ9Cg0KLS04NjQyODZhYzM0Y2IzYTVkZDFlYzdjNmI0OWVhOWJkYjgxMzZmYThlNzMwNjQ5YjJlOTNlNGVkYzdhYjYNCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOA0KDQpJIGNhbid0IHdhaXQgdG8gYmUgdmVyaWZpZWQNCi0tODY0Mjg2YWMzNGNiM2E1ZGQxZWM3YzZiNDllYTliZGI4MTM2ZmE4ZTczMDY0OWIyZTkzZTRlZGM3YWI2LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3753"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:48 GMT"
+ ],
+ "Etag": [
+ "CPKzrdbvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543326000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaai14:4184,/bns/xi/borg/xi/bns/blobstore2/bitpusher/63.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=M8BYW8LZMM6zswbii4FI"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/63.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/63:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WkRXNkZrREc0T19kVlBudl9ZNTlNYTdycTQ1cFV6WDBDMXVtc3J5SGNiSE1CNXYxQi1lN1lhbEhwQ3Fya2NHZTF2aktrWUtkT2pnUkJKeHQ5SnBLOWx4aDFTaHpBbExCcGRVQ29faE1ONDNwWGdFSElWYU1mR3FSU3JEU3RRSzl3R21QN1FtcDI2T3lGQ3plUTlTbXZ6TXg2WmFYOGF3ZVZRd3R1LTA3OVpIUzMxeHM0cVNmUHBSdFkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpCtVU0WWwIrkQjUmRuh1gL9PhYDzDSxUQuhfNFPYlYiWW-xG2K-1nbfLIGUfNqjETkaR7yVoEO_ac8q8IEKh_UqBv2mg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjgxMjQxNDYiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9oYXNoZXNPblVwbG9hZC0xIiwKICJuYW1lIjogImhhc2hlc09uVXBsb2FkLTEiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyODEyNDE0NiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0OC4xMjNaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDguMTIzWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ4LjEyM1oiLAogInNpemUiOiAiMjciLAogIm1kNUhhc2giOiAib2ZaakdsY1hQSmlHT0FmS0ZiSmwxUT09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTE/Z2VuZXJhdGlvbj0xNTMyNTQzMDI4MTI0MTQ2JmFsdD1tZWRpYSIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjgxMjQxNDYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImhhc2hlc09uVXBsb2FkLTEiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI4MTI0MTQ2IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDUEt6cmRidnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2hhc2hlc09uVXBsb2FkLTEvMTUzMjU0MzAyODEyNDE0Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyODEyNDE0NiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDUEt6cmRidnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2hhc2hlc09uVXBsb2FkLTEvMTUzMjU0MzAyODEyNDE0Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyODEyNDE0NiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ1BLenJkYnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjgxMjQxNDYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vaGFzaGVzT25VcGxvYWQtMS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgIm9iamVjdCI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyODEyNDE0NiIsCiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ1BLenJkYnZ1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogImNIK0Erdz09IiwKICJldGFnIjogIkNQS3pyZGJ2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "3a2df00cf2e07ee2",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=96085bef3440b47b82d86f1506d14298a0c056f4e35488b6fed3847e9995"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1e217d8d6079d0fc302a215a999012c6/15569841568323733997;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS05NjA4NWJlZjM0NDBiNDdiODJkODZmMTUwNmQxNDI5OGEwYzA1NmY0ZTM1NDg4YjZmZWQzODQ3ZTk5OTUNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm1kNUhhc2giOiJvdlpqR2xjWFBKaUdPQWZLRmJKbDFRPT0iLCJuYW1lIjoiaGFzaGVzT25VcGxvYWQtMSJ9Cg0KLS05NjA4NWJlZjM0NDBiNDdiODJkODZmMTUwNmQxNDI5OGEwYzA1NmY0ZTM1NDg4YjZmZWQzODQ3ZTk5OTUNCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOA0KDQpJIGNhbid0IHdhaXQgdG8gYmUgdmVyaWZpZWQNCi0tOTYwODViZWYzNDQwYjQ3YjgyZDg2ZjE1MDZkMTQyOThhMGMwNTZmNGUzNTQ4OGI2ZmVkMzg0N2U5OTk1LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "3553"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:48 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543326000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaq16:4208,/bns/xi/borg/xi/bns/blobstore2/bitpusher/14.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=NMBYW9PEE8K5swbhtJyABg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/14.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/14:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WkRXNkZrREc0T19kVlBudl9ZNTlNYTdycTQ1cFV6WDBDMXVtc3J5SGNiSE1CNXYxQi1lN1lhbEhwQ3Fya2NHZTF2aktrWUtkT2pnUkJKeHQ5SnBLOWx4aDFTaHpBbExCcGRVQ29faE1ONDNwWGdFSElWYU1mR3FSU3JEU3RRSzl3R21QN1FtcDI2T3lGQ3plUTlTbXZ6TXg2WmFYOGF3ZVZRd3R1LTA3OVpIUzMxeHM0cVNmUHBSdFkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uoqu8g7QxUCVzoyt1kPwjxVKm1IgFuC4KHLV9fvG6vgUfNKBLOm7WPbpdzUAGJRweVosxRcMSM8rGRdyS0yJtEIwInnVA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiaW52YWxpZCIsCiAgICAibWVzc2FnZSI6ICJQcm92aWRlZCBNRDUgaGFzaCBcIm92WmpHbGNYUEppR09BZktGYkpsMVE9PVwiIGRvZXNuJ3QgbWF0Y2ggY2FsY3VsYXRlZCBNRDUgaGFzaCBcIm9mWmpHbGNYUEppR09BZktGYkpsMVE9PVwiLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1JTlZBTElEX1ZBTFVFLCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89bnVsbCwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWJhZFJlcXVlc3QsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLklOVkFMSURfVkFMVUUsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPW51bGwsIGVycm9yUHJvdG9Db2RlPUlOVkFMSURfVkFMVUUsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlLm1kNV9oYXNoX2Jhc2U2NCwgbWVzc2FnZT1Qcm92aWRlZCBNRDUgaGFzaCBcIm92WmpHbGNYUEppR09BZktGYkpsMVE9PVwiIGRvZXNuJ3QgbWF0Y2ggY2FsY3VsYXRlZCBNRDUgaGFzaCBcIm9mWmpHbGNYUEppR09BZktGYkpsMVE9PVwiLiwgdW5uYW1lZEFyZ3VtZW50cz1bb3ZaakdsY1hQSmlHT0FmS0ZiSmwxUT09XX0sIGxvY2F0aW9uPWVudGl0eS5yZXNvdXJjZS5tZDVfaGFzaF9iYXNlNjQsIG1lc3NhZ2U9UHJvdmlkZWQgTUQ1IGhhc2ggXCJvdlpqR2xjWFBKaUdPQWZLRmJKbDFRPT1cIiBkb2Vzbid0IG1hdGNoIGNhbGN1bGF0ZWQgTUQ1IGhhc2ggXCJvZlpqR2xjWFBKaUdPQWZLRmJKbDFRPT1cIi4sIHJlYXNvbj1pbnZhbGlkLCBycGNDb2RlPTQwMH0gUHJvdmlkZWQgTUQ1IGhhc2ggXCJvdlpqR2xjWFBKaUdPQWZLRmJKbDFRPT1cIiBkb2Vzbid0IG1hdGNoIGNhbGN1bGF0ZWQgTUQ1IGhhc2ggXCJvZlpqR2xjWFBKaUdPQWZLRmJKbDFRPT1cIi5cblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDAwLAogICJtZXNzYWdlIjogIlByb3ZpZGVkIE1ENSBoYXNoIFwib3ZaakdsY1hQSmlHT0FmS0ZiSmwxUT09XCIgZG9lc24ndCBtYXRjaCBjYWxjdWxhdGVkIE1ENSBoYXNoIFwib2ZaakdsY1hQSmlHT0FmS0ZiSmwxUT09XCIuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "336207a4723b81be",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/iam?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ef18f665f1e772b2347e7ced44f457bb/4764342086950291977;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/iam?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "412"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:48 GMT"
+ ],
+ "Etag": [
+ "CAk="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:48 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543328000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbbo16:4203,/bns/xi/borg/xi/bns/blobstore2/bitpusher/11.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=NMBYW-3hGZC3swb1pLGIDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/11.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/11:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YWpYMjlBaS1VX0tPWWU5NWhwRV9ZUko1eXJSclhFMXFSNURaR2pFX1A0RTRQdFR5UkRwOVQ0bHVNRDY1Y0gtTVJYMnBMVlF2TU9DWEhEQ0JCRENvQ2h1VWc0ZzExakp6VjdJQ1NCRC1JQkZJQ2I4OHpxQ1poX095YkM3Z0R2V1JXTlBYbHdyWEF4VHNwc0pPUDB5aXhUckV6M18yRDhCX0RUdTlwelNMTGhzWFFlc3c1N1NyUEJQbmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up6-i70pAaPBTmNnL0hYV-8M03a-taRkj3D1XvBQr8TPEt6EAZi8N6Sr3uXBzw8-Z0ekhGQtEJqLyHglthrka8ojBSjLA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNwb2xpY3kiLAogInJlc291cmNlSWQiOiAicHJvamVjdHMvXy9idWNrZXRzL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAiYmluZGluZ3MiOiBbCiAgewogICAicm9sZSI6ICJyb2xlcy9zdG9yYWdlLmxlZ2FjeUJ1Y2tldE93bmVyIiwKICAgIm1lbWJlcnMiOiBbCiAgICAicHJvamVjdEVkaXRvcjpkdWxjZXQtcG9ydC03NjIiLAogICAgInByb2plY3RPd25lcjpkdWxjZXQtcG9ydC03NjIiCiAgIF0KICB9LAogIHsKICAgInJvbGUiOiAicm9sZXMvc3RvcmFnZS5sZWdhY3lCdWNrZXRSZWFkZXIiLAogICAibWVtYmVycyI6IFsKICAgICJwcm9qZWN0Vmlld2VyOmR1bGNldC1wb3J0LTc2MiIKICAgXQogIH0KIF0sCiAiZXRhZyI6ICJDQWs9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "f610cfe1412df16b",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/iam?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "317"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "727dc0efc7ca0ca5b60aac7cd89bf106/12405304104814775078;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/iam?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJiaW5kaW5ncyI6W3sibWVtYmVycyI6WyJwcm9qZWN0RWRpdG9yOmR1bGNldC1wb3J0LTc2MiIsInByb2plY3RPd25lcjpkdWxjZXQtcG9ydC03NjIiXSwicm9sZSI6InJvbGVzL3N0b3JhZ2UubGVnYWN5QnVja2V0T3duZXIifSx7Im1lbWJlcnMiOlsicHJvamVjdFZpZXdlcjpkdWxjZXQtcG9ydC03NjIiXSwicm9sZSI6InJvbGVzL3N0b3JhZ2UubGVnYWN5QnVja2V0UmVhZGVyIn0seyJtZW1iZXJzIjpbInByb2plY3RWaWV3ZXI6ZHVsY2V0LXBvcnQtNzYyIl0sInJvbGUiOiJyb2xlcy9zdG9yYWdlLm9iamVjdFZpZXdlciJ9XSwiZXRhZyI6IkNBaz0ifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "519"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:49 GMT"
+ ],
+ "Etag": [
+ "CAo="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543328000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabr1:4172,/bns/xi/borg/xi/bns/blobstore2/bitpusher/118.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=NMBYW87LKuGEygPhuovwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/118.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/118:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YWpYMjlBaS1VX0tPWWU5NWhwRV9ZUko1eXJSclhFMXFSNURaR2pFX1A0RTRQdFR5UkRwOVQ0bHVNRDY1Y0gtTVJYMnBMVlF2TU9DWEhEQ0JCRENvQ2h1VWc0ZzExakp6VjdJQ1NCRC1JQkZJQ2I4OHpxQ1poX095YkM3Z0R2V1JXTlBYbHdyWEF4VHNwc0pPUDB5aXhUckV6M18yRDhCX0RUdTlwelNMTGhzWFFlc3c1N1NyUEJQbmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UojUAn0dIO7yqfNQMNzmBlxy7AwFx5NcItsuZARDtEjbvQBssGDfxewBg6M1ZcFDFt9uAj1gthRqRAxtu85Un1kYbHCBQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNwb2xpY3kiLAogInJlc291cmNlSWQiOiAicHJvamVjdHMvXy9idWNrZXRzL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAiYmluZGluZ3MiOiBbCiAgewogICAicm9sZSI6ICJyb2xlcy9zdG9yYWdlLmxlZ2FjeUJ1Y2tldE93bmVyIiwKICAgIm1lbWJlcnMiOiBbCiAgICAicHJvamVjdEVkaXRvcjpkdWxjZXQtcG9ydC03NjIiLAogICAgInByb2plY3RPd25lcjpkdWxjZXQtcG9ydC03NjIiCiAgIF0KICB9LAogIHsKICAgInJvbGUiOiAicm9sZXMvc3RvcmFnZS5sZWdhY3lCdWNrZXRSZWFkZXIiLAogICAibWVtYmVycyI6IFsKICAgICJwcm9qZWN0Vmlld2VyOmR1bGNldC1wb3J0LTc2MiIKICAgXQogIH0sCiAgewogICAicm9sZSI6ICJyb2xlcy9zdG9yYWdlLm9iamVjdFZpZXdlciIsCiAgICJtZW1iZXJzIjogWwogICAgInByb2plY3RWaWV3ZXI6ZHVsY2V0LXBvcnQtNzYyIgogICBdCiAgfQogXSwKICJldGFnIjogIkNBbz0iCn0K"
+ }
+ },
+ {
+ "ID": "b893fc4885265f33",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/iam?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "8e0b7106d81eb7a2e55af83cb1a11eab/1599804623441333314;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/iam?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "519"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:50 GMT"
+ ],
+ "Etag": [
+ "CAo="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:50 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543329000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcad8:4117,/bns/xi/borg/xi/bns/blobstore2/bitpusher/82.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=NcBYW5OSKtC2swaw7bzYBQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/82.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/82:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YWpYMjlBaS1VX0tPWWU5NWhwRV9ZUko1eXJSclhFMXFSNURaR2pFX1A0RTRQdFR5UkRwOVQ0bHVNRDY1Y0gtTVJYMnBMVlF2TU9DWEhEQ0JCRENvQ2h1VWc0ZzExakp6VjdJQ1NCRC1JQkZJQ2I4OHpxQ1poX095YkM3Z0R2V1JXTlBYbHdyWEF4VHNwc0pPUDB5aXhUckV6M18yRDhCX0RUdTlwelNMTGhzWFFlc3c1N1NyUEJQbmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpGxHwZSbzumOYPqGAicJV6xECbKExmxCs8WccbAvYtCqP_jKsaOL_6UozYUK2EFRTiij5LUgAWBqko8g0ZnM65WOUqCQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNwb2xpY3kiLAogInJlc291cmNlSWQiOiAicHJvamVjdHMvXy9idWNrZXRzL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAiYmluZGluZ3MiOiBbCiAgewogICAicm9sZSI6ICJyb2xlcy9zdG9yYWdlLmxlZ2FjeUJ1Y2tldE93bmVyIiwKICAgIm1lbWJlcnMiOiBbCiAgICAicHJvamVjdEVkaXRvcjpkdWxjZXQtcG9ydC03NjIiLAogICAgInByb2plY3RPd25lcjpkdWxjZXQtcG9ydC03NjIiCiAgIF0KICB9LAogIHsKICAgInJvbGUiOiAicm9sZXMvc3RvcmFnZS5sZWdhY3lCdWNrZXRSZWFkZXIiLAogICAibWVtYmVycyI6IFsKICAgICJwcm9qZWN0Vmlld2VyOmR1bGNldC1wb3J0LTc2MiIKICAgXQogIH0sCiAgewogICAicm9sZSI6ICJyb2xlcy9zdG9yYWdlLm9iamVjdFZpZXdlciIsCiAgICJtZW1iZXJzIjogWwogICAgInByb2plY3RWaWV3ZXI6ZHVsY2V0LXBvcnQtNzYyIgogICBdCiAgfQogXSwKICJldGFnIjogIkNBbz0iCn0K"
+ }
+ },
+ {
+ "ID": "7187cbf11dddde2d",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/iam/testPermissions?alt=json\u0026permissions=storage.buckets.get\u0026permissions=storage.buckets.delete",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7eb7cd69643c8bb2e0a91f67e6ee62ca/9240766645600718175;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/iam/testPermissions?alt=json\u0026permissions=storage.buckets.get\u0026permissions=storage.buckets.delete"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "124"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:50 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:50 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543328000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbag11:4146,/bns/xi/borg/xi/bns/blobstore2/bitpusher/16.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=NsBYW5yGBo-wswbzhrDoBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/16.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/16:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YWpYMjlBaS1VX0tPWWU5NWhwRV9ZUko1eXJSclhFMXFSNURaR2pFX1A0RTRQdFR5UkRwOVQ0bHVNRDY1Y0gtTVJYMnBMVlF2TU9DWEhEQ0JCRENvQ2h1VWc0ZzExakp6VjdJQ1NCRC1JQkZJQ2I4OHpxQ1poX095YkM3Z0R2V1JXTlBYbHdyWEF4VHNwc0pPUDB5aXhUckV6M18yRDhCX0RUdTlwelNMTGhzWFFlc3c1N1NyUEJQbmswBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up2NJNcTeg4PkVreCV7HWTapCbiEjm7FcqN3p_Trrq1ysG1vl5ps8ickUgMUHd78IT_duQOron_OeTbPoSAMce3oRwc3g"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSN0ZXN0SWFtUGVybWlzc2lvbnNSZXNwb25zZSIsCiAicGVybWlzc2lvbnMiOiBbCiAgInN0b3JhZ2UuYnVja2V0cy5nZXQiLAogICJzdG9yYWdlLmJ1Y2tldHMuZGVsZXRlIgogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "fc300a7ab10eaa03",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "93"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2e73179517ecd5bf66d34d8e1cce56c8/16881729762960117371;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJiaWxsaW5nIjp7InJlcXVlc3RlclBheXMiOnRydWV9LCJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIn0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "503"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:51 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaq12:4105,/bns/xi/borg/xi/bns/blobstore2/bitpusher/26.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=NsBYW6qfGKOxswak0oXADA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/26.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/26:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UovQncLDRByqbtYY6k0tJyirnTwP43jsmxO-bWtS5cOMRq-IDJpvTtaHYAlYZVYH6zDgu24POqwZjnGQe00Rpg1aBvzcQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTEuMDAxWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjUxLjAwMVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImJpbGxpbmciOiB7CiAgInJlcXVlc3RlclBheXMiOiB0cnVlCiB9LAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "895c38c0e42a8762",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/user-integration%40gcloud-golang-firestore-tests.iam.gserviceaccount.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "159"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c931f777157dd4c2b9687d61719d9670/6075947711410016152;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/user-integration%40gcloud-golang-firestore-tests.iam.gserviceaccount.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJ1c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwicm9sZSI6Ik9XTkVSIn0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "615"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:52 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadacd12:4335,/bns/xi/borg/xi/bns/blobstore2/bitpusher/103.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=N8BYW_6NDe60swb07ZvYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/103.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/103:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrcYP1EpemtR3VhaxQ9zAHeN5x9WvI-tryfrwCWG_kK0b2JPW2ps_uZQ62AXIKZfacjWGIaVUgs7wdsU0UEAiGtJimhiA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogInJvbGUiOiAiT1dORVIiLAogImVtYWlsIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICJldGFnIjogIkNBST0iCn0K"
+ }
+ },
+ {
+ "ID": "9c73e5987d1217c3",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "66dd6f3ce793903f994df51358f92a2c/13716910828769415348;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3412"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:53 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:53 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543332000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabn9:4397,/bns/xi/borg/xi/bns/blobstore2/bitpusher/39.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=OMBYW5TpLM-0swaFr7fwAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/39.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/39:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrAHg940GJAwuyDfArVs9m7duhykmU7MlpLkpZAKkFwmtIZuUEFjxyLaGDgKKxiuUhqvCbCe5Y0XPSwpmdyL2HW22NRmw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTEuMDAxWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjUyLjUzOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2FjbC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiYmlsbGluZyI6IHsKICAicmVxdWVzdGVyUGF5cyI6IHRydWUKIH0sCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "c07e87d06af0b9e5",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json\u0026projection=full\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "276c9bf4a00578f77bd791d4452caeac/2911410252195959249;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json\u0026projection=full\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3412"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:53 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:53 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543332000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcai3:4242,/bns/xi/borg/xi/bns/blobstore2/bitpusher/3.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=OcBYW4ykAaKFygOmqoPoBA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/3.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/3:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqqLBpAlweZeX1W1sNgkv11IXsRmYv-3kf_EYleDTVMSda-5raWMODcH6LHIH2Ive70-sDnvNZN1PXgTvVcjPdomwkJFA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTEuMDAxWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjUyLjUzOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2FjbC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiYmlsbGluZyI6IHsKICAicmVxdWVzdGVyUGF5cyI6IHRydWUKIH0sCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "16f872e332148771",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "add6289dc444b7a098381cc6ba3b7663/10552373369555358445;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "12857"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:53 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:53 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543333000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbl14:4360,/bns/xi/borg/xi/bns/blobstore2/bitpusher/22.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=OcBYW87QF824swaRxZCoAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/22.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/22:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOIrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpV2o5CUEPHIdZGjsP1pXG8LwIxPyNFhYM83n--deosnp35YEJjKW9I7e0MNNSQ2Ji7HkaUIiGFIyUg8Dy5-Ayok-63Vg"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5HZXRCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldEJ1Y2tldC5qYXZhOjEwMilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkdldEJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0QnVja2V0LmphdmE6MzEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5CdWNrZXRzRGVsZWdhdG9yLmdldChCdWNrZXRzRGVsZWdhdG9yLmphdmE6NzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTggbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9UkVRVUlSRUQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuR2V0QnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRCdWNrZXQuamF2YToxMDIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5HZXRCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldEJ1Y2tldC5qYXZhOjMxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5nZXQoQnVja2V0c0RlbGVnYXRvci5qYXZhOjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWJhZFJlcXVlc3QsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLlJFUVVJUkVELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuR2V0QnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRCdWNrZXQuamF2YToxMDIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5HZXRCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldEJ1Y2tldC5qYXZhOjMxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5nZXQoQnVja2V0c0RlbGVnYXRvci5qYXZhOjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuR2V0QnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRCdWNrZXQuamF2YToxMDIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5HZXRCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldEJ1Y2tldC5qYXZhOjMxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5nZXQoQnVja2V0c0RlbGVnYXRvci5qYXZhOjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDAsCiAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "524e5f8e1a2ef43e",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json\u0026projection=full\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5458bf1259676412694f55c73db5e4b6/18193335387419841290;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json\u0026projection=full\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3412"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:53 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:53 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543333000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcae13:4169,/bns/xi/borg/xi/bns/blobstore2/bitpusher/104.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=OcBYW_q7Jey2swaUwyg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/104.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/104:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOIrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up6my0KlZmVnpGpOyNnSPLDdho2KTAgd-6ffZdkwTI6_-EpZrSCJXIDT03NRSOk-Gy-O1wOn3s7b-hIDC7FAEpTNcB-lw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTEuMDAxWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjUyLjUzOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2FjbC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiYmlsbGluZyI6IHsKICAicmVxdWVzdGVyUGF5cyI6IHRydWUKIH0sCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "3c5e1f0a6967e2b4",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json\u0026projection=full\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "06ae3ba89b63b63c5e254490ce43bd03/7387835906046399526;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json\u0026projection=full\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13809"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:53 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:53 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543333000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcar15:4207,/bns/xi/borg/xi/bns/blobstore2/bitpusher/43.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=OcBYW-HCK-65swarrY6wBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/43.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/43:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOIrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrVhqvgAK2NWiXo9U-X2u_fj_DiB_olSd9wgk689MDcgISY63Cz8io2Qx0DGMjpHgtMMK65LEOT46jDMMqThZiKtckR_g"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuR2V0QnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRCdWNrZXQuamF2YToxMDIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5HZXRCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldEJ1Y2tldC5qYXZhOjMxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5nZXQoQnVja2V0c0RlbGVnYXRvci5qYXZhOjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTggbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9Rk9SQklEREVOLCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuR2V0QnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRCdWNrZXQuamF2YToxMDIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5HZXRCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldEJ1Y2tldC5qYXZhOjMxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5nZXQoQnVja2V0c0RlbGVnYXRvci5qYXZhOjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTggbW9yZVxuLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9Zm9yYmlkZGVuLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5GT1JCSURERU4sIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkdldEJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0QnVja2V0LmphdmE6MTAyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuR2V0QnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRCdWNrZXQuamF2YTozMSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IuZ2V0KEJ1Y2tldHNEZWxlZ2F0b3IuamF2YTo3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkdldEJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0QnVja2V0LmphdmE6MTAyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuR2V0QnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRCdWNrZXQuamF2YTozMSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IuZ2V0KEJ1Y2tldHNEZWxlZ2F0b3IuamF2YTo3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDMsCiAgIm1lc3NhZ2UiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "170fdb6aaff7bc34",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=510897437a5255d909962e20380baa37ebfbc87e0eb27b72fe0760b3b233"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5dc4c892067265b7b8fe070db99d1f88/11172148484261139892;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS01MTA4OTc0MzdhNTI1NWQ5MDk5NjJlMjAzODBiYWEzN2ViZmJjODdlMGViMjdiNzJmZTA3NjBiM2IyMzMNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJmb28ifQoNCi0tNTEwODk3NDM3YTUyNTVkOTA5OTYyZTIwMzgwYmFhMzdlYmZiYzg3ZTBlYjI3YjcyZmUwNzYwYjNiMjMzDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCg0KaGVsbG8NCi0tNTEwODk3NDM3YTUyNTVkOTA5OTYyZTIwMzgwYmFhMzdlYmZiYzg3ZTBlYjI3YjcyZmUwNzYwYjNiMjMzLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3568"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:54 GMT"
+ ],
+ "Etag": [
+ "CM/motnvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcah4:4081,/bns/xi/borg/xi/bns/blobstore2/bitpusher/119.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=OcBYW4KMOOGFygOT4obwAg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/119.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/119:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqRxh-Gvcm9zxhGm-CHhhJQ-ae9y-RxL9sJce2ZtntafqowxeS-ZvjvBM3RNFBVxhM_meodeXMD0edOjuUsEDsLAswZNQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNDI0MTg3MSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNDI0MTg3MSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo1NC4yNDFaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTQuMjQxWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjU0LjI0MVoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzAzNDI0MTg3MSZhbHQ9bWVkaWEiLAogImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzQyNDE4NzEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNDI0MTg3MSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ00vbW90bnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNDI0MTg3MS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzQyNDE4NzEiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ00vbW90bnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNDI0MTg3MS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzQyNDE4NzEiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNNL21vdG52dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzQyNDE4NzEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzQyNDE4NzEiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNNL21vdG52dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDTS9tb3RudnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "e92f2bfc5459d4f3",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=3fd5e62606cff6d076b5801c6fe51ad6273d007680a37538399c531d22b8"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "98bee4785ba711a96fff5380269da46b/15028516457524041027;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0zZmQ1ZTYyNjA2Y2ZmNmQwNzZiNTgwMWM2ZmU1MWFkNjI3M2QwMDc2ODBhMzc1MzgzOTljNTMxZDIyYjgNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJmb28ifQoNCi0tM2ZkNWU2MjYwNmNmZjZkMDc2YjU4MDFjNmZlNTFhZDYyNzNkMDA3NjgwYTM3NTM4Mzk5YzUzMWQyMmI4DQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCg0KaGVsbG8NCi0tM2ZkNWU2MjYwNmNmZjZkMDc2YjU4MDFjNmZlNTFhZDYyNzNkMDA3NjgwYTM3NTM4Mzk5YzUzMWQyMmI4LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3568"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:54 GMT"
+ ],
+ "Etag": [
+ "CPDPwNnvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabl14:4307,/bns/xi/borg/xi/bns/blobstore2/bitpusher/136.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=OsBYW-yoFca8swbts4roAg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/136.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/136:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo1kREAmljM5QKt9nWn0-0OXrBghCxi6bjHUoqRZk496l2yl_gQEZTdEBPo9fnK89Pif35AD99tt-DRhjbngfQzxSgjxA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNDczMDQ4MCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNDczMDQ4MCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo1NC43MzBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTQuNzMwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjU0LjczMFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzAzNDczMDQ4MCZhbHQ9bWVkaWEiLAogImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzQ3MzA0ODAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNDczMDQ4MCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ1BEUHdObnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNDczMDQ4MC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzQ3MzA0ODAiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ1BEUHdObnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNDczMDQ4MC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzQ3MzA0ODAiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNQRFB3Tm52dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzQ3MzA0ODAvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzQ3MzA0ODAiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNQRFB3Tm52dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDUERQd05udnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "0caaec30c4b2683e",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=e52b863954ed7fbd3129e9a20da917307b7991802f9eb32549624dbda384"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "287c6d07cf3faaecad7231df5a2c78b9/366647903392782033;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1lNTJiODYzOTU0ZWQ3ZmJkMzEyOWU5YTIwZGE5MTczMDdiNzk5MTgwMmY5ZWIzMjU0OTYyNGRiZGEzODQNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJmb28ifQoNCi0tZTUyYjg2Mzk1NGVkN2ZiZDMxMjllOWEyMGRhOTE3MzA3Yjc5OTE4MDJmOWViMzI1NDk2MjRkYmRhMzg0DQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCg0KaGVsbG8NCi0tZTUyYjg2Mzk1NGVkN2ZiZDMxMjllOWEyMGRhOTE3MzA3Yjc5OTE4MDJmOWViMzI1NDk2MjRkYmRhMzg0LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "12529"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543334000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaas16:4136,/bns/xi/borg/xi/bns/blobstore2/bitpusher/1.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=OsBYW8m1M-2yswad5qDADg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/1.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/1:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOMrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrtUtMPo5nXFxieIXQQ002qT8wwYc-u_Qi0Vdd2FhPYEncUzpEHtF_ZufKFKua-1ekcnnNZJSl9fHQKRAXpS9ZS0-JgqA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6Mjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YTo2MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuaW5zZXJ0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo5NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1SRVFVSVJFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6Mjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YTo2MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuaW5zZXJ0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo5NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5SRVFVSVJFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YToyNzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjYxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5pbnNlcnQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjk1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjI3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6NjEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmluc2VydChPYmplY3RzRGVsZWdhdG9yLmphdmE6OTUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "134af582553a9a9d",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=8eb0120f3c9e1d2328cfe39bd332743aa2088323c2c6a1e5f78c8e42055a"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "fc159c6e997c99fda15ced92850629f3/4223016976150599263;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS04ZWIwMTIwZjNjOWUxZDIzMjhjZmUzOWJkMzMyNzQzYWEyMDg4MzIzYzJjNmExZTVmNzhjOGU0MjA1NWENCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJmb28ifQoNCi0tOGViMDEyMGYzYzllMWQyMzI4Y2ZlMzliZDMzMjc0M2FhMjA4ODMyM2MyYzZhMWU1Zjc4YzhlNDIwNTVhDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCg0KaGVsbG8NCi0tOGViMDEyMGYzYzllMWQyMzI4Y2ZlMzliZDMzMjc0M2FhMjA4ODMyM2MyYzZhMWU1Zjc4YzhlNDIwNTVhLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3523"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543334000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaar8:4444,/bns/xi/borg/xi/bns/blobstore2/bitpusher/65.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=O8BYW8SHAeSwswah7LfIBA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/65.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/65:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOMrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoxcqJN3KbQHJR795Bw0Ey3YFJ-Y75swhhYJUBCOiA6kr3_kkN5tw9bYExTYkCiVlM2nCGVIQIeFyzFT0UVSquFkkrSlQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo1NS4xMzBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTUuMTMwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjU1LjEzMFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzAzNTEzMDI1NCZhbHQ9bWVkaWEiLAogImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "741e7c986c07ccf3",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=cc2eaae9a6895bd0046bd8abe39e11d3ef8e9dc0286d39a686ac10419121"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b0af29ed8b930923249802cbccb7208d/8007611020752181229;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1jYzJlYWFlOWE2ODk1YmQwMDQ2YmQ4YWJlMzllMTFkM2VmOGU5ZGMwMjg2ZDM5YTY4NmFjMTA0MTkxMjENCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJmb28ifQoNCi0tY2MyZWFhZTlhNjg5NWJkMDA0NmJkOGFiZTM5ZTExZDNlZjhlOWRjMDI4NmQzOWE2ODZhYzEwNDE5MTIxDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCg0KaGVsbG8NCi0tY2MyZWFhZTlhNjg5NWJkMDA0NmJkOGFiZTM5ZTExZDNlZjhlOWRjMDI4NmQzOWE2ODZhYzEwNDE5MTIxLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "13481"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543334000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae1:4085,/bns/xi/borg/xi/bns/blobstore2/bitpusher/125.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=O8BYW4zyEMGFygP35YHoAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/125.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/125:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOMrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uow-R0wLJclAGswXui5hJ8z9XWeq9JVPPfSSepvqZNeN-6tExuIc1AWwEz_cBJB5P1mbdkqD7fbhaz02WVw-g7CYf3ixA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjI3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6NjEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmluc2VydChPYmplY3RzRGVsZWdhdG9yLmphdmE6OTUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1GT1JCSURERU4sIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6Mjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YTo2MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuaW5zZXJ0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo5NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWZvcmJpZGRlbiwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uRk9SQklEREVOLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6Mjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YTo2MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuaW5zZXJ0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo5NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YToyNzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjYxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5pbnNlcnQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjk1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMywKICAibWVzc2FnZSI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "87792100daeb1b18",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0002/foo",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "96f0d27299f8fc2761c91722f341648d/15648573042911565834;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0002/foo"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "5"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Etag": [
+ "\"5d41402abc4b2a76b9719d911017c592\""
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Generation": [
+ "1532543035130254"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=mnG7TA==",
+ "md5=XUFAKrxLKna5cZ2REBfFkg=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "5"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/22,/bns/yb/borg/yb/bns/blobstore2/bitpusher/58.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=O8BYW4_fH4KxlgG8jo-oCw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/58.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/58:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UraNjBAm0NEOopfvjKUUJgm_ZSm1O5zodtQQi27hqHNi-xBcuNl9DSUSRhbNFBg-k8fy4WM-B6VHN09WqlGceN0JSUZzImf_o6hnYdbmdq_2eDWSQE"
+ ]
+ },
+ "Body": "aGVsbG8="
+ }
+ },
+ {
+ "ID": "20f0b06ca86b2545",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0002/foo",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "a04178fb8ff3e150fead82279b795a16/4842792090856380710;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0002/foo"
+ ],
+ "X-Goog-User-Project": [
+ "dulcet-port-762"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "5"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Etag": [
+ "\"5d41402abc4b2a76b9719d911017c592\""
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Generation": [
+ "1532543035130254"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=mnG7TA==",
+ "md5=XUFAKrxLKna5cZ2REBfFkg=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "5"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/172,/bns/yb/borg/yb/bns/blobstore2/bitpusher/279.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=O8BYW7nJJ4i7lgGFtKfoCw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/279.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/279:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoZL6vUXnoZ5l8lLTcvs3qgn-6Qx1nSTE2CgwuETgE5aQeY0e9h05s2bBfYCSBcq7rh_ult9zaYDElEuauG8d2Cuxq8CxV_C2MvRrOLBmIwb6gUHRU"
+ ]
+ },
+ "Body": "aGVsbG8="
+ }
+ },
+ {
+ "ID": "e2b9c8a66119fd5f",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0002/foo",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "fe14bb251e8879948b239712527b5e2a/12483754108720863811;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0002/foo"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "266"
+ ],
+ "Content-Type": [
+ "application/xml; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/260,/bns/yb/borg/yb/bns/blobstore2/bitpusher/518.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=O8BYW7aULI6WlAG62ZfIAw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/518.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/518:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UreBt_iJXKRgajw5-xYZFyhA_4fY2SRlIz9vfag2-QkOeTL1Cfqt53Z16FtZFrRulGd7bhdSbMG7914JCQyD3Jz19R_6DXbdvhOZLHpKrzLhfUZaZ0"
+ ]
+ },
+ "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+VXNlclByb2plY3RNaXNzaW5nPC9Db2RlPjxNZXNzYWdlPkJ1Y2tldCBpcyBhIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLjwvTWVzc2FnZT48RGV0YWlscz5CdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci48L0RldGFpbHM+PC9FcnJvcj4="
+ }
+ },
+ {
+ "ID": "8fbed1e42919d77f",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0002/foo",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b000d62549197c428c622cece24a9e42/1678254627347422047;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0002/foo"
+ ],
+ "X-Goog-User-Project": [
+ "gcloud-golang-firestore-tests"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "5"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Etag": [
+ "\"5d41402abc4b2a76b9719d911017c592\""
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:23:55 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Generation": [
+ "1532543035130254"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=mnG7TA==",
+ "md5=XUFAKrxLKna5cZ2REBfFkg=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "5"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/267,/bns/yb/borg/yb/bns/blobstore2/bitpusher/687.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=O8BYW-adOMaDlAHtjbrgBQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/687.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/687:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqN1SaD_XSL43RrLlHOuL29sCHHZ8utazQExiGjT0sAFJPuVZaGkp-nYnUGqCyMIyF3P7mqWgCnTdP-Un3_ED_-BYfZzHAWUJHF9mZZLEMKfTT8LsM"
+ ]
+ },
+ "Body": "aGVsbG8="
+ }
+ },
+ {
+ "ID": "5ff53ab59a0e3f5c",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0002/foo",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c4a61d7b83af76d4ae01bd17b22bfb78/9319216649506806908;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0002/foo"
+ ],
+ "X-Goog-User-Project": [
+ "veener-jba"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "342"
+ ],
+ "Content-Type": [
+ "application/xml; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:56 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:56 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/105,/bns/yb/borg/yb/bns/blobstore2/bitpusher/897.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PMBYW7fjAYbjlgGksJ2YDA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/897.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/897:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrFKrtR11lxGP7In0z7H9aZj5psaXFlrrhAp5ts-5l0KtFgrVT1Zg9VPoxtLAHWQIvzPQXo00erD0Phwxp71kLjogdQjg"
+ ]
+ },
+ "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+VXNlclByb2plY3RBY2Nlc3NEZW5pZWQ8L0NvZGU+PE1lc3NhZ2U+UmVxdWVzdGVyIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBwZXJtaXNzaW9ucyBvbiB1c2VyIHByb2plY3QuPC9NZXNzYWdlPjxEZXRhaWxzPmludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuPC9EZXRhaWxzPjwvRXJyb3I+"
+ }
+ },
+ {
+ "ID": "68a2fa12fc3d76fa",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1d2f9ca620b485165c31b233a567aeca/16960179766866206104;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3523"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:56 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543336000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbao9:4166,/bns/xi/borg/xi/bns/blobstore2/bitpusher/50.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PMBYW5n8DMKwswbo-qroCQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/50.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/50:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoTl_kDuP62HoKA0RF0SXad-vvZ2_dExsDZidyrmUHbfvDqvKDRdOYBaZgMwIsxRm9gXn90w6pASSryr2U4uwzt29NRDA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo1NS4xMzBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTUuMTMwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjU1LjEzMFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzAzNTEzMDI1NCZhbHQ9bWVkaWEiLAogImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "6dacd2b7e9b175e7",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c6a1f1d94f0010236d3ac98fb0e30791/6154679185997848245;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3523"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:56 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543332000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaad3:4296,/bns/xi/borg/xi/bns/blobstore2/bitpusher/20.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PMBYW8CNEq6wswbUmaUY"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/20.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/20:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upnvgot0iqhjIurAagBlXEhs9ae0sWfm1zVBLQoM1cEB_Eiom_iGHDsUQienh3tBOYeYAEXXahcxlnECqZIH9QYsdVvsA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo1NS4xMzBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTUuMTMwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjU1LjEzMFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzAzNTEzMDI1NCZhbHQ9bWVkaWEiLAogImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "7f10c5dde122f210",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "113083ce96c0378572ab390acccba90d/13795642303357247441;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "12469"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:56 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:56 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543333000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaay15:4155,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PMBYW5uKF4axswa5pbcI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/5:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOIrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqViGxP3bCyuReQrS55Wa-DOfL1hKAmwt6xGytqlIljgDk_DjBMl7URriPQm8D1on_AkIJc3Ie4IAA6pNtOyl16XiNNpA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkdldE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0T2JqZWN0LmphdmE6MzMzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuR2V0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRPYmplY3QuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZ2V0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo4MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1SRVFVSVJFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkdldE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0T2JqZWN0LmphdmE6MzMzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuR2V0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRPYmplY3QuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZ2V0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo4MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5SRVFVSVJFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuR2V0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRPYmplY3QuamF2YTozMzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5HZXRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldE9iamVjdC5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5nZXQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjgxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5HZXRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldE9iamVjdC5qYXZhOjMzMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkdldE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0T2JqZWN0LmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmdldChPYmplY3RzRGVsZWdhdG9yLmphdmE6ODEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "9644550f9edf9dfa",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "0d00091aaa2fcdb08ccb7ecad67ddbe4/2989860256085271022;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3523"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:56 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543333000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaao15:4469,/bns/xi/borg/xi/bns/blobstore2/bitpusher/52.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PMBYW4TvJcWxswbvo6bYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/52.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/52:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOIrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrCqay25oPalD-_KLUL5Z-kAJFhakccRfH-vRtQvhsrHUewRSrt2tF5fhAn--vSOVcPlhX2U0zMdT4n22P-BdMVYX2DuA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo1NS4xMzBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTUuMTMwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjU1LjEzMFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzAzNTEzMDI1NCZhbHQ9bWVkaWEiLAogImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "a54e129ea537ccea",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "efc09ce8b07fcec6e40b83765c27f4b4/10630823373444669962;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13421"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:56 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:23:56 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543333000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadabf13:4076,/bns/xi/borg/xi/bns/blobstore2/bitpusher/106.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PMBYW7SDK8m9swbZ6qrAAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/106.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/106:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOIrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqhGakngrNYdpaq_Vp_Bl6RLUnMHvxVhFp4EsNtqkE4G_3_oCYt3vNfpOpX19B9JY3Bues6diM-cnqp6CrvN9kGyeM6Sw"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5HZXRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldE9iamVjdC5qYXZhOjMzMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkdldE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0T2JqZWN0LmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmdldChPYmplY3RzRGVsZWdhdG9yLmphdmE6ODEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1GT1JCSURERU4sIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkdldE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0T2JqZWN0LmphdmE6MzMzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuR2V0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRPYmplY3QuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZ2V0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo4MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWZvcmJpZGRlbiwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uRk9SQklEREVOLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkdldE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0T2JqZWN0LmphdmE6MzMzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuR2V0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRPYmplY3QuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZ2V0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo4MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuR2V0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRPYmplY3QuamF2YTozMzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5HZXRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldE9iamVjdC5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5nZXQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjgxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMywKICAibWVzc2FnZSI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "bc712f85fc88cdde",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "85"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "db226b6be665a194ccb068be680d1c32/18271785391309153063;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJjb250ZW50TGFuZ3VhZ2UiOiJlbiJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3549"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:57 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543336000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbad13:4405,/bns/xi/borg/xi/bns/blobstore2/bitpusher/88.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PMBYW8ziN862swbPnpToAQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/88.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/88:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq2k5M3OLqcIYXARS9RVGTMFz-N8JyRZhindbRNrtMqXEUCWvpwDbJMcMPUDFYQHYwiJbKX5OH0XzXa6ENSKKR_sbdSOg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMiIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo1NS4xMzBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTcuMDE4WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjU1LjEzMFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzAzNTEzMDI1NCZhbHQ9bWVkaWEiLAogImNvbnRlbnRMYW5ndWFnZSI6ICJlbiIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3VzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAidXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFJPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIm1uRzdUQT09IiwKICJldGFnIjogIkNJNkQyZG52dXR3Q0VBST0iCn0K"
+ }
+ },
+ {
+ "ID": "a51da56158271f0e",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "85"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d6f64d1040bd96375454928af306e37b/7466285909935711299;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJjb250ZW50TGFuZ3VhZ2UiOiJlbiJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3549"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:57 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAM="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaan8:4230,/bns/xi/borg/xi/bns/blobstore2/bitpusher/33.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PcBYW8ScD--wswb5qKXgCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/33.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/33:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo2rlljfNQ_Q8dOCE4sFV4VfeNZw3O5kl7mZLi8R-RzXBw1_oFb1iMEW9hnHFTCY67T6m7WEzXaw9kbkoY7zM5RkysMoA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMyIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo1NS4xMzBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTcuMzMzWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjU1LjEzMFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzAzNTEzMDI1NCZhbHQ9bWVkaWEiLAogImNvbnRlbnRMYW5ndWFnZSI6ICJlbiIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFNPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3VzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAidXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFNPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIm1uRzdUQT09IiwKICJldGFnIjogIkNJNkQyZG52dXR3Q0VBTT0iCn0K"
+ }
+ },
+ {
+ "ID": "a6e99aea876f8bac",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "85"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "88a48b803332aca6897fbdf63b2b5d16/15107249031589946720;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJjb250ZW50TGFuZ3VhZ2UiOiJlbiJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "12661"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:57 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadacb9:4281,/bns/xi/borg/xi/bns/blobstore2/bitpusher/129.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PcBYW7nMI-e8swagtYXwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/129.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/129:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqFh9-HupG3FA_CyC7fOCayJ5VOgKdNLDBc244hP8ikOZOkfSUZVeb8abIqaldLyb4SoIDyyptNXDslRbEfBLEFur3aeA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlVwZGF0ZUFuZFBhdGNoT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBbmRQYXRjaE9iamVjdC5qYXZhOjM0NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlVwZGF0ZUFuZFBhdGNoT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBbmRQYXRjaE9iamVjdC5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci51cGRhdGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1SRVFVSVJFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlVwZGF0ZUFuZFBhdGNoT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBbmRQYXRjaE9iamVjdC5qYXZhOjM0NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlVwZGF0ZUFuZFBhdGNoT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBbmRQYXRjaE9iamVjdC5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci51cGRhdGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5SRVFVSVJFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuVXBkYXRlQW5kUGF0Y2hPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFuZFBhdGNoT2JqZWN0LmphdmE6MzQ1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuVXBkYXRlQW5kUGF0Y2hPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFuZFBhdGNoT2JqZWN0LmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLnVwZGF0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTA2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5VcGRhdGVBbmRQYXRjaE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQW5kUGF0Y2hPYmplY3QuamF2YTozNDUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5VcGRhdGVBbmRQYXRjaE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQW5kUGF0Y2hPYmplY3QuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IudXBkYXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "2c3e0afb48e13b90",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "85"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "3bb565e1b78e167ff6b569a422190cbd/4301748450721654396;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJjb250ZW50TGFuZ3VhZ2UiOiJlbiJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3549"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:58 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAQ="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaab2:4240,/bns/xi/borg/xi/bns/blobstore2/bitpusher/101.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PcBYW9HdMY23swaa1JGICA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/101.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/101:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrmPrUODY7WaDfG55ZoYvSCo0Cq5K3TSKapUciVB9QATIs2HhKDb6JKlwTpv4S6iWyT-gWQgkMKoW-BcFFlErx-UDvEew"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAibWV0YWdlbmVyYXRpb24iOiAiNCIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo1NS4xMzBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NTcuOTE1WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjU1LjEzMFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzAzNTEzMDI1NCZhbHQ9bWVkaWEiLAogImNvbnRlbnRMYW5ndWFnZSI6ICJlbiIsCiAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAiYWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQVE9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQVE9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFRPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzAzNTEzMDI1NC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3VzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAzNTEzMDI1NCIsCiAgICJlbnRpdHkiOiAidXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgImVtYWlsIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFRPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIm1uRzdUQT09IiwKICJldGFnIjogIkNJNkQyZG52dXR3Q0VBUT0iCn0K"
+ }
+ },
+ {
+ "ID": "407554bf3c7e3c01",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "85"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b1f5e48236be3f7f643ca8337e2e1ca5/11942430097399244697;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026projection=full\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJjb250ZW50TGFuZ3VhZ2UiOiJlbiJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "13613"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:58 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaax14:4175,/bns/xi/borg/xi/bns/blobstore2/bitpusher/99.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PsBYW6voAeu4swbCgq_QBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/99.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/99:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrK5gNHxYuF386PL8smAQSOnt7cL5EvfiCVU8YcG8stkN0mh8tQwAnqcag4F92H1Q_FinPNBU5Zq-2JdMrjEi2zWkT1qg"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5VcGRhdGVBbmRQYXRjaE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQW5kUGF0Y2hPYmplY3QuamF2YTozNDUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5VcGRhdGVBbmRQYXRjaE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQW5kUGF0Y2hPYmplY3QuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IudXBkYXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1GT1JCSURERU4sIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlVwZGF0ZUFuZFBhdGNoT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBbmRQYXRjaE9iamVjdC5qYXZhOjM0NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlVwZGF0ZUFuZFBhdGNoT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBbmRQYXRjaE9iamVjdC5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci51cGRhdGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWZvcmJpZGRlbiwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uRk9SQklEREVOLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlVwZGF0ZUFuZFBhdGNoT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBbmRQYXRjaE9iamVjdC5qYXZhOjM0NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlVwZGF0ZUFuZFBhdGNoT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBbmRQYXRjaE9iamVjdC5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci51cGRhdGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuVXBkYXRlQW5kUGF0Y2hPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFuZFBhdGNoT2JqZWN0LmphdmE6MzQ1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuVXBkYXRlQW5kUGF0Y2hPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFuZFBhdGNoT2JqZWN0LmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLnVwZGF0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTA2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMywKICAibWVzc2FnZSI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "30d1a15aaa7d6346",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "fd52a6013b2dc536f0b0964b6b37a9d3/1136929516530952373;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "403"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:59 GMT"
+ ],
+ "Etag": [
+ "CAM="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543336000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcdk2:4016,/bns/xi/borg/xi/bns/blobstore2/bitpusher/59.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=PsBYW8P8DNCzswaRnZSgCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/59.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/59:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UooWb8sPakriOUlHxFjtCPaoBxrRQP-xW-3aav80KVwVNlG7UOGPZFfgipkGSDpvAnQbjyjC85lXieAQTdFyy9ZpLId_A"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZG9tYWluLWdvb2dsZS5jb20iLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogInJvbGUiOiAiUkVBREVSIiwKICJkb21haW4iOiAiZ29vZ2xlLmNvbSIsCiAiZXRhZyI6ICJDQU09Igp9Cg=="
+ }
+ },
+ {
+ "ID": "c9cd0577537cdb7c",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b9e959452c6ad75fbf269ca372caa852/8777892638185187794;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "403"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:23:59 GMT"
+ ],
+ "Etag": [
+ "CAM="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaa7:4091,/bns/xi/borg/xi/bns/blobstore2/bitpusher/56.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=P8BYW4LXJa2yswaCrJ3IBA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/56.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/56:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up82rqEhCFLut4vrHOYRNRORNJHfcgsNl0xVDGYnAjIkwfwNasD8EB7ByCyJSzRV8J009uJLhqVrg3g2raMeaxdH7IUZQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZG9tYWluLWdvb2dsZS5jb20iLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogInJvbGUiOiAiUkVBREVSIiwKICJkb21haW4iOiAiZ29vZ2xlLmNvbSIsCiAiZXRhZyI6ICJDQU09Igp9Cg=="
+ }
+ },
+ {
+ "ID": "d077143a650c70fa",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "da0c1d3c32df40e3e66f1f7e9f28fb6d/16418854656049736430;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "13913"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:00 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaar8:4444,/bns/xi/borg/xi/bns/blobstore2/bitpusher/121.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=P8BYW5_NN8KFygPBwIT4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/121.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/121:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur_GHAp08L8nZ7W9u_7_Sb6fAN2lBiasp3YiGYfF0EDUetpQVhC3EcKhhuzCzV1rA2y1g9pakq6FNKjTFAAFxlZUeA31Q"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkQnVja2V0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzEwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5VcGRhdGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBY2xzLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5VcGRhdGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBY2xzLmphdmE6MTYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci51cGRhdGUoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YToxMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9UkVRVUlSRUQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWJhZFJlcXVlc3QsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLlJFUVVJUkVELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDAsCiAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "0fc59fdb0a0970f4",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "05e6433a787ccfc7de0ee9554e5c4870/5613355174676228875;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "403"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:00 GMT"
+ ],
+ "Etag": [
+ "CAM="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbh15:4099,/bns/xi/borg/xi/bns/blobstore2/bitpusher/54.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=QMBYW_THB7C6swam3qWoCQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/54.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/54:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo86Hgu73n1vcKEeA7drKDFDojpJ4vWWtAHB51gGdx0ADZKSG5c7RJ0zbpByNPbLofKOzPmaIuV0xnqo8vO6wz8thW54A"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZG9tYWluLWdvb2dsZS5jb20iLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogInJvbGUiOiAiUkVBREVSIiwKICJkb21haW4iOiAiZ29vZ2xlLmNvbSIsCiAiZXRhZyI6ICJDQU09Igp9Cg=="
+ }
+ },
+ {
+ "ID": "0590aa7e67c37ede",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b805291952dffe414d40d9a2ad6c2828/13254317192540777511;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "14865"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:00 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbm4:4122,/bns/xi/borg/xi/bns/blobstore2/bitpusher/69.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=QMBYW4y_DaO9swa9vaKYDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/69.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/69:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqEB4auiOtBE3dLWghF8zNhxES_Q7_XNJ54Zbiohe8FQr2CQDu7aQWJuJn4ER4zlgrw811fmiwr3zalmBArHNtkPeePhQ"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9Rk9SQklEREVOLCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9Zm9yYmlkZGVuLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5GT1JCSURERU4sIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YToxNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLnVwZGF0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YToxNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLnVwZGF0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDMsCiAgIm1lc3NhZ2UiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "9af0c48121d2d9c4",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "58205735aa12ef69c82419885895e5db/2448817715462171972;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2646"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:00 GMT"
+ ],
+ "Etag": [
+ "CAM="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:00 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabr1:4172,/bns/xi/borg/xi/bns/blobstore2/bitpusher/28.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=QMBYW5L9GYG2swaN3piQDw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/28.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/28:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpdC8vkHbcANO9hlLiqvUQXOemd_UOy2SU8XvowillUZuXXSJs_lhzOv_gFt0KKkoCOVWQySI12MsRge39wa0Z4fyOR-w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNBTT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNBTT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL3VzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgImVudGl0eSI6ICJ1c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2RvbWFpbi1nb29nbGUuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogImRvbWFpbi1nb29nbGUuY29tIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICAgImV0YWciOiAiQ0FNPSIKICB9CiBdCn0K"
+ }
+ },
+ {
+ "ID": "666892fbbf519a8f",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "09a241f026e8348aee6ab3ba8fb38395/10017441768118677088;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2646"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:01 GMT"
+ ],
+ "Etag": [
+ "CAM="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:01 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabb16:4473,/bns/xi/borg/xi/bns/blobstore2/bitpusher/9.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=QMBYW-DXK46xswa4jrSgDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/9.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/9:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoI-ZUeC1v-R4CmxRPyKDA9R_L69h9bmbyFORTVWcnxmC4S5Evq2_aqGDprgbresCvCS0NOu6jLDAyD3eI5A3mz_1-fUA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNBTT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNBTT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL3VzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgImVudGl0eSI6ICJ1c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2RvbWFpbi1nb29nbGUuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogImRvbWFpbi1nb29nbGUuY29tIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICAgImV0YWciOiAiQ0FNPSIKICB9CiBdCn0K"
+ }
+ },
+ {
+ "ID": "bee179c9b102655a",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5af66f17ffade6126c7cc50802caa142/17658404885478010749;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13869"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:01 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:01 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaau9:4168,/bns/xi/borg/xi/bns/blobstore2/bitpusher/46.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=QcBYW__aAa-zswb4gZ04"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/46.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/46:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrUOuwp8k4elN0xl8oXyu-Svv2sQgN4cmLVc7Rv-lrmWx3MbKWYWeSXLfSDON91JEsHEQO2xMixHNJAMq6XB3YTnb-6Jw"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkQnVja2V0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzEwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YTo4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IubGlzdChBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjg5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPVJFUVVJUkVELCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjg1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5saXN0KEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6ODkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9YmFkUmVxdWVzdCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uUkVRVUlSRUQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkQnVja2V0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzEwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YTo4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IubGlzdChBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjg5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6ODUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmxpc3QoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YTo4OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAyMCBtb3JlXG5cblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDAwLAogICJtZXNzYWdlIjogIkJ1Y2tldCBpcyByZXF1ZXN0ZXIgcGF5cyBidWNrZXQgYnV0IG5vIHVzZXIgcHJvamVjdCBwcm92aWRlZC4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "22a9ef676472fa9c",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "71b6a46a930897d5ea84b44e0ba0292d/6852904304592941465;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2646"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:01 GMT"
+ ],
+ "Etag": [
+ "CAM="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:01 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaak13:4444,/bns/xi/borg/xi/bns/blobstore2/bitpusher/67.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=QcBYW7OtDOG8swaRqa_QBQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/67.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/67:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur7Kfc4EsJB2ImfNmu_eqLJjnP_R9F3fj6Kvxs_rbA_RRvxBms2-77sbr_UhRYWyYVAe4jrkQW4J0JR6rvyFJNmaGTeDA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNBTT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNBTT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL3VzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9hY2wvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgImVudGl0eSI6ICJ1c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2RvbWFpbi1nb29nbGUuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAiZW50aXR5IjogImRvbWFpbi1nb29nbGUuY29tIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICAgImV0YWciOiAiQ0FNPSIKICB9CiBdCn0K"
+ }
+ },
+ {
+ "ID": "89a4864533efd2d3",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f5785d54f598c817fc2b1b341287c2ad/14493867426247176886;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "14821"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:01 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:01 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaf2:4451,/bns/xi/borg/xi/bns/blobstore2/bitpusher/74.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=QcBYW4T_EM6yswafrpjYBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/74.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/74:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpJBVGN0IyKu7azdJKREf2LVt936smeDLwgxvifBwGAvTTU27x_5pqHd7E5qk03mwwnpdQcpQ690GOKyNLUFJEv5Cuq-w"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6ODUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmxpc3QoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YTo4OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPUZPUkJJRERFTiwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjg1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5saXN0KEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6ODkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAyMCBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1mb3JiaWRkZW4sIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLkZPUkJJRERFTiwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6ODUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmxpc3QoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YTo4OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjg1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5saXN0KEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6ODkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAyMCBtb3JlXG5cblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDAzLAogICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "96fdb1c3dd4ffb81",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ec34031758ad8ebd4f74c33267fc5e1b/3688366845378884562;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:03 GMT"
+ ],
+ "Etag": [
+ "CAQ="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbz6:4375,/bns/xi/borg/xi/bns/blobstore2/bitpusher/86.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=QcBYW_-tH6-1swbWtbjQDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/86.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/86:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo4z2628xvOY1GWS0BfhZbQj_ry0ryiTpK1Xkb9g9RIkhQ1kG5QI3xJPG_zntw3x-a_2mREk8Bszu4jZ0QHKUPDhKZYdw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "6c82ea5001c111d8",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "dd94241cece09c51771d7844576bdca8/11329329962738218223;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "2993"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:03 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:03 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabf15:4445,/bns/xi/borg/xi/bns/blobstore2/bitpusher/89.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=Q8BYW-LGFIO9swaYg4XIAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/89.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/89:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpltT-f8w2WIuOHiVXaKhi1niEfAuqhwpGiqof3OHjir8gn1cx0onXDaua72oCriLeVjj3Uw_pcc-oTp_xaFoqtNbeSCQ"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm90IEZvdW5kIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPU5PVF9GT1VORCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPW51bGwsIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1ub3RGb3VuZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uTk9UX0ZPVU5ELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1udWxsLCBlcnJvclByb3RvQ29kZT1OT1RfRk9VTkQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlX2lkLnNjb3BlLCBtZXNzYWdlPW51bGwsIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQuc2NvcGUsIG1lc3NhZ2U9Tm90IEZvdW5kLCByZWFzb249bm90Rm91bmQsIHJwY0NvZGU9NDA0fSBOb3QgRm91bmRcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDA0LAogICJtZXNzYWdlIjogIk5vdCBGb3VuZCIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "bc42fe60fbcc8554",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f7280cdb2b2f8c4f6835127fbb07f85f/523547911188182283;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13913"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:03 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:03 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbj15:4375,/bns/xi/borg/xi/bns/blobstore2/bitpusher/71.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=Q8BYW-SAJeu5swaj8KQw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/71.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/71:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqkz43ZCWYYRaPJHQQ1X51SggvNbuQ4jiFOa-L2Z5iqvOc_g4JQRT6YMmVrKB2xO9GQRCaBLCh_uBXQgBTii0rH50GqIg"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkQnVja2V0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzEwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5EZWxldGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVBY2xzLmphdmE6NzEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5EZWxldGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5kZWxldGUoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YToxMDkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9UkVRVUlSRUQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWJhZFJlcXVlc3QsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLlJFUVVJUkVELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDAsCiAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "528f77a90ac106f3",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e1691f16784fff9fbf15ced7c5eac3e2/8164511032842417704;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "2993"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:03 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:03 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaas16:4136,/bns/xi/borg/xi/bns/blobstore2/bitpusher/37.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=Q8BYW6u2MY60swa29rugDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/37.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/37:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqlu7z4Tm-wUrEkXJnN0QAb9IKoldDHPcM8SYswD4dnxTFT2V_soWYpGog22JTzvtpnf3J1o7uzfRa4MZCf4LCCU3BYyQ"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm90IEZvdW5kIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPU5PVF9GT1VORCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPW51bGwsIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1ub3RGb3VuZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uTk9UX0ZPVU5ELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1udWxsLCBlcnJvclByb3RvQ29kZT1OT1RfRk9VTkQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlX2lkLnNjb3BlLCBtZXNzYWdlPW51bGwsIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQuc2NvcGUsIG1lc3NhZ2U9Tm90IEZvdW5kLCByZWFzb249bm90Rm91bmQsIHJwY0NvZGU9NDA0fSBOb3QgRm91bmRcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDA0LAogICJtZXNzYWdlIjogIk5vdCBGb3VuZCIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "be0c555587eb16e9",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "481a840dda3a55c9f2138a707540addb/15805474150201816900;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/acl/domain-google.com?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "14865"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:04 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:04 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadabl14:4307,/bns/xi/borg/xi/bns/blobstore2/bitpusher/48.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=Q8BYW5XwNoS2swbxoazoAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/48.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/48:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpcSOg0vo-Az8dBIFSHxCfjnwWUC0r-8KxnrDUghv6QTEgwqtLuVfnT_8Z9Q_sezsh_8jGEp4C410wpf0q3LWI7rRhJ6w"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9Rk9SQklEREVOLCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9Zm9yYmlkZGVuLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5GT1JCSURERU4sIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YTo3MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmRlbGV0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YTo3MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmRlbGV0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDMsCiAgIm1lc3NhZ2UiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "d8a4a5aea69667fe",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c1899415d39d7df827f2ca8fbda87756/4999973569333459041;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "136"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:05 GMT"
+ ],
+ "Etag": [
+ "CAU="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbb15:4178,/bns/xi/borg/xi/bns/blobstore2/bitpusher/97.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=RMBYW7PaB4yzswa9zLiYAQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/97.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/97:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq7Gaaw2rjaJAso66LrEG-jIPmpSmJXi3ZwO1CWEvOVlcKb8fB9V-LDLraSFm7hXfPR5xvFl-PKnYJ_zNJ3WdDQhuUk1w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogInJvbGUiOiAiUkVBREVSIiwKICJkb21haW4iOiAiZ29vZ2xlLmNvbSIsCiAiZXRhZyI6ICJDQVU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "b89df7c0dfb559c7",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "73ff1544882aaa690cb7bebbe834cfb9/12640936686692858237;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "136"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:05 GMT"
+ ],
+ "Etag": [
+ "CAU="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae1:4085,/bns/xi/borg/xi/bns/blobstore2/bitpusher/133.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=RcBYW_ueGam9swaeo4b4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/133.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/133:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqsHmD4_ys2LeJu4M6bbw-ViF39q6fobveKQrH0kJaVyMmPq4lFqLhMJchLZt-DwNkhlYtw0hAe4aINsoltSS6bDEpr6w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogInJvbGUiOiAiUkVBREVSIiwKICJkb21haW4iOiAiZ29vZ2xlLmNvbSIsCiAiZXRhZyI6ICJDQVU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "9173f4dea25c840c",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "90c5d6ec02b98f3bc40b44656b6db9b1/1835436110119402138;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "13913"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaj8:4280,/bns/xi/borg/xi/bns/blobstore2/bitpusher/41.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=RcBYW-atMeyzswaYlLDIBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/41.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/41:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqO6pakKW5-FVGFDHFqTq1a3A7HB6hf4k7Q3Pg0MaOKYKKIL9BzorGED7zjmn1mgOlZsraXPzJa-1XezNi0VzYPRrZSSw"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkQnVja2V0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzEwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5VcGRhdGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBY2xzLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5VcGRhdGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBY2xzLmphdmE6MTYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci51cGRhdGUoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YToxMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9UkVRVUlSRUQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWJhZFJlcXVlc3QsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLlJFUVVJUkVELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDAsCiAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "c9bc977593071fc2",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c3dd8889a404f69b0ec98d4065631986/9476399227478801334;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "136"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:06 GMT"
+ ],
+ "Etag": [
+ "CAU="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae2:4286,/bns/xi/borg/xi/bns/blobstore2/bitpusher/95.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=RsBYW79frLSzBtHei8AN"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/95.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/95:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqc2M0c9-g-Ti0OADip3_Tyuu4SmCXuFZoa8YkZbycWpeIEmqkPr0OOWtBQ_7bLFVGWB1byFCNxoiYL1WWegZtVSbWP_Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogInJvbGUiOiAiUkVBREVSIiwKICJkb21haW4iOiAiZ29vZ2xlLmNvbSIsCiAiZXRhZyI6ICJDQVU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "984e551d271ea1f2",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f3f5ffe06c034bde3a69a4b4ca470b5b/17117079774661541075;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "14865"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadccc1:4324,/bns/xi/borg/xi/bns/blobstore2/bitpusher/18.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=RsBYW-P9BeK8swbW8bjYCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/18.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/18:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrwL7EB9CupMusht-YghFcGTkF4QPRuh_qJTmld90jzzTXG3dp8n3nySa3Wsp7gNgEqEdVXrtLAaRU-HM5YPH7ilwJEyA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9Rk9SQklEREVOLCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9Zm9yYmlkZGVuLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5GT1JCSURERU4sIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YToxNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLnVwZGF0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YToxNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLnVwZGF0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDMsCiAgIm1lc3NhZ2UiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "5c82c4d0ceb6e709",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1d384b1134ac4843c0bb2709b565a566/6311580293288099311;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "860"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:06 GMT"
+ ],
+ "Etag": [
+ "CAU="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabh15:4103,/bns/xi/borg/xi/bns/blobstore2/bitpusher/7.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=RsBYW4nbEsGEygODroiYBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/7.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/7:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrwtgkGc2OC3PMEA1Ery28t4i1pWUv8e9qHbBrBZvNCfMd8GBSgSKFRW0ORn84eaoURGGZjIzzOdvv2baI7492Q2UYnQw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogICAicm9sZSI6ICJSRUFERVIiLAogICAiZG9tYWluIjogImdvb2dsZS5jb20iLAogICAiZXRhZyI6ICJDQVU9IgogIH0KIF0KfQo="
+ }
+ },
+ {
+ "ID": "9cc7e459369c6b2c",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2a3d12ef364281613c3007b4ba62f3e1/13952542315447483916;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "860"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:06 GMT"
+ ],
+ "Etag": [
+ "CAU="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:06 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaau9:4168,/bns/xi/borg/xi/bns/blobstore2/bitpusher/35.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=RsBYW9qlJaqyswarpK3gCg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/35.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/35:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqf10SHAQpvShmPzdAZJilBsTLsfInAwO9m2FTz7QLUQ3-rj65dMCkwp4UE2BT2kwSGitHEbvMXaeUkCgV4CVkw8dE_ZQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogICAicm9sZSI6ICJSRUFERVIiLAogICAiZG9tYWluIjogImdvb2dsZS5jb20iLAogICAiZXRhZyI6ICJDQVU9IgogIH0KIF0KfQo="
+ }
+ },
+ {
+ "ID": "5a082fd79a82dadb",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "13603e7ba6e3923184cdb87a746b716b/3147042834074042152;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13869"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:07 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaa1:4385,/bns/xi/borg/xi/bns/blobstore2/bitpusher/61.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=RsBYW6ieOI24swa_vo3gCg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/61.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/61:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up-xcG-Wb73ZE8iMhJ_SdSGoEzLmxUuVoWQx1QsHA8cCigcCXByMXVOfay0xzn9bjmUm5YwxBEdhgnmcockgYQBVa_b9A"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkQnVja2V0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzEwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YTo4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IubGlzdChBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjg5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPVJFUVVJUkVELCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjg1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5saXN0KEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6ODkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9YmFkUmVxdWVzdCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uUkVRVUlSRUQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkQnVja2V0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzEwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YTo4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IubGlzdChBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjg5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6ODUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmxpc3QoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YTo4OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAyMCBtb3JlXG5cblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDAwLAogICJtZXNzYWdlIjogIkJ1Y2tldCBpcyByZXF1ZXN0ZXIgcGF5cyBidWNrZXQgYnV0IG5vIHVzZXIgcHJvamVjdCBwcm92aWRlZC4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "59e60d0da7d292d2",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b887b267736570e2dfb5dc4245323524/10788004851938525253;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "860"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:07 GMT"
+ ],
+ "Etag": [
+ "CAU="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaf2:4451,/bns/xi/borg/xi/bns/blobstore2/bitpusher/93.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=R8BYW8vBBqm0swaY5YzYCw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/93.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/93:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upzmt9Tz05Wus8LSgUNf-63A93wmhfRmgclE6mfu-W_ejWPMXE_IwaSYTDx4V-IdfGRp5NtzzPE6K75bgvEIZ1SShi-Lw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJlbnRpdHkiOiAiZG9tYWluLWdvb2dsZS5jb20iLAogICAicm9sZSI6ICJSRUFERVIiLAogICAiZG9tYWluIjogImdvb2dsZS5jb20iLAogICAiZXRhZyI6ICJDQVU9IgogIH0KIF0KfQo="
+ }
+ },
+ {
+ "ID": "6b733c2f778d8e8d",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2d32d8cf3676c9698ebcf0716654df6c/18428967969281081954;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "14821"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:07 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcar15:4207,/bns/xi/borg/xi/bns/blobstore2/bitpusher/58.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=R8BYW53eC9C3swaYoYGgCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/58.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/58:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur50aSzxidgBWIbtujDcq53K-CYDXWSUshGLNeOH_QWQrwOrQv_P8Xc3EZcZeYddiaCJkZ6UtOHmbLYS32YVb67jZgU_g"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6ODUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmxpc3QoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YTo4OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPUZPUkJJRERFTiwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjg1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5saXN0KEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6ODkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAyMCBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1mb3JiaWRkZW4sIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLkZPUkJJRERFTiwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6ODUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmxpc3QoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YTo4OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjg1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5saXN0KEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6ODkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAyMCBtb3JlXG5cblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDAzLAogICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "3712f0e13e33ab11",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1d69187e7b9ab5ee3749a796bc47ffa3/7623467392707691390;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:08 GMT"
+ ],
+ "Etag": [
+ "CAY="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabp15:4495,/bns/xi/borg/xi/bns/blobstore2/bitpusher/78.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=R8BYW9j_GK22swaWrLTYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/78.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/78:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UopO1kDptA-7EF3xozlU7qqWbTzSwfzt_HiFMZmfvAhqQDq_g1Yt9rCADk2HX2E-n4X67AMpv2xeJVq2iBjlYZk3S0LWA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "53cbea91cd73699d",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "57d88cfd0e40b02834b6f075e3812078/15264149039385281691;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "2993"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:09 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:09 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabp15:4495,/bns/xi/borg/xi/bns/blobstore2/bitpusher/31.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=SMBYW8LgMcq8swaH5K8g"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/31.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/31:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrR4pEhRfziGCwifU35g3rwwZeNqVEOcUAZJKyOYByiaj9goQV73x-TTsT6Arskc1CnhMUdwDViqVapuUBxqGq2l-EzOQ"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm90IEZvdW5kIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPU5PVF9GT1VORCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPW51bGwsIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1ub3RGb3VuZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uTk9UX0ZPVU5ELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1udWxsLCBlcnJvclByb3RvQ29kZT1OT1RfRk9VTkQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlX2lkLnNjb3BlLCBtZXNzYWdlPW51bGwsIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQuc2NvcGUsIG1lc3NhZ2U9Tm90IEZvdW5kLCByZWFzb249bm90Rm91bmQsIHJwY0NvZGU9NDA0fSBOb3QgRm91bmRcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDA0LAogICJtZXNzYWdlIjogIk5vdCBGb3VuZCIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "245a59074562f553",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "96d4049c9dd32e3f4a40cec6c4221a7a/4458648458516989367;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13913"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:09 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:09 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543349000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xhiadbcj11:4136,/bns/xi/borg/xi/bns/blobstore2/bitpusher/144.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ScBYW_2sBqW9swaUiID4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/144.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/144:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq2hPeFC1f0S_0T0W1KlM17JuyNCKsH7yEohHHWQHSJV9kRhzkiXytxaxEDW30rZ3o205jzXSDLPbAXYqVyq6U1pDURmw"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkQnVja2V0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzEwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5EZWxldGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVBY2xzLmphdmE6NzEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5EZWxldGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5kZWxldGUoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YToxMDkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9UkVRVUlSRUQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWJhZFJlcXVlc3QsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLlJFUVVJUkVELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDAsCiAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "1e3c8abfb671f1c7",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ea9f9c895a7164c1261a372abf853050/12099611575876323028;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "2993"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:09 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:09 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae9:4327,/bns/xi/borg/xi/bns/blobstore2/bitpusher/73.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ScBYW92YFMW9swa6lIW4AQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/73.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/73:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo9Zf318OF14VmNyd9UV-URwZGO3jnGI8ZfSdSqI4fU5dIGCiP0dr_nbflVHkMkcmSK-OkUa1UKUAvezLvudG29AWpg8A"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm90IEZvdW5kIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPU5PVF9GT1VORCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPW51bGwsIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1ub3RGb3VuZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uTk9UX0ZPVU5ELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1udWxsLCBlcnJvclByb3RvQ29kZT1OT1RfRk9VTkQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlX2lkLnNjb3BlLCBtZXNzYWdlPW51bGwsIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQuc2NvcGUsIG1lc3NhZ2U9Tm90IEZvdW5kLCByZWFzb249bm90Rm91bmQsIHJwY0NvZGU9NDA0fSBOb3QgRm91bmRcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDA0LAogICJtZXNzYWdlIjogIk5vdCBGb3VuZCIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "6eadd6a2e5f68301",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "49d21f882d625d3173d803c05558b6a7/1294110999302932464;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/defaultObjectAcl/domain-google.com?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "14865"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:09 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:09 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadabr1:4172,/bns/xi/borg/xi/bns/blobstore2/bitpusher/24.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ScBYW6-CGoy9swaXoYfwAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/24.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/24:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoJmzpjPRafoGKXIRh9otGBVfFl3FsgAQigPX9Mr50esArtKspaUiGdLLlj8o1PylHKqbUYj1MGh0jK3HwX2O3U_0fGyg"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9Rk9SQklEREVOLCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZEJ1Y2tldChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjc4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMjAgbW9yZVxuLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9Zm9yYmlkZGVuLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5GT1JCSURERU4sIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YTo3MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmRlbGV0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRCdWNrZXQoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YTo3MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmRlbGV0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDIwIG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDMsCiAgIm1lc3NhZ2UiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "f7f69b4547114f18",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "aa451d72c02127fb7c292513ea58de0f/8935074116662265869;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "495"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:09 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAU="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaca8:4102,/bns/xi/borg/xi/bns/blobstore2/bitpusher/76.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ScBYW7qYJbC5swaK1pn4CQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/76.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/76:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrSnFSPTNwMQFJH2Doc9B4O32Rem7sPZOxW_z3g9DUNVfKrs1-A9Chaqn6tKkeQWYJBoiaSdB_DiARQ0Q0GDy2zQVSZPw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvZG9tYWluLWdvb2dsZS5jb20iLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICJvYmplY3QiOiAiZm9vIiwKICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogImVudGl0eSI6ICJkb21haW4tZ29vZ2xlLmNvbSIsCiAicm9sZSI6ICJSRUFERVIiLAogImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICJldGFnIjogIkNJNkQyZG52dXR3Q0VBVT0iCn0K"
+ }
+ },
+ {
+ "ID": "c63758e82cf88a02",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "9ece2e39833dda787325a9a7d4e953f6/16503979640000514345;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "495"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAU="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabj12:4211,/bns/xi/borg/xi/bns/blobstore2/bitpusher/14.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ScBYW6n3OMK5swbhtJyABg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/14.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/14:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UojWgmkNuNWd3twj2ujtKBgR67Jc0KFqKwJbPjYOAsQucBlNkgICbyxYX8Kk6DnOat52Uhucj9VJEcfpxkGYpuhZa_XUg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvZG9tYWluLWdvb2dsZS5jb20iLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICJvYmplY3QiOiAiZm9vIiwKICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogImVudGl0eSI6ICJkb21haW4tZ29vZ2xlLmNvbSIsCiAicm9sZSI6ICJSRUFERVIiLAogImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICJldGFnIjogIkNJNkQyZG52dXR3Q0VBVT0iCn0K"
+ }
+ },
+ {
+ "ID": "d4c355baebf4c4b7",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e5f20e379707a195a99d9af05a2c577d/5698198687945263686;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "13525"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaca8:4102,/bns/xi/borg/xi/bns/blobstore2/bitpusher/114.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=SsBYW7mnCay9swbny6vAAQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/114.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/114:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upl_muW-9xM6KnfvTMBaKLUC7cdek_E85KPKyeqsdRqwrxLx0aMKdcvKOexxMc0glRXY5l6uC8TKWa-jZCMVMKpza161Q"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRPYmplY3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMzkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo2OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YToxNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLnVwZGF0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOSBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1SRVFVSVJFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRPYmplY3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMzkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo2OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YToxNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLnVwZGF0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOSBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5SRVFVSVJFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZE9iamVjdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMzOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjY4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkT2JqZWN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzM5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NjgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5VcGRhdGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBY2xzLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5VcGRhdGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBY2xzLmphdmE6MTYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci51cGRhdGUoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YToxMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTkgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "561b0185dff62924",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "460a77a2484444567c80c62b65022132/13339161809599564642;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "495"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAU="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543349000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadccc1:4324,/bns/xi/borg/xi/bns/blobstore2/bitpusher/84.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=SsBYW_e8E426swaDrquQCQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/84.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/84:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo8U14Xt2nOM0l2U1siSCRO3vnBsGPGwQQd7d_p8ywkBQSqxNP2BsPCYJdof33U_ingKB5_MjeFtJHBouhA0mmHYpYrGg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvZG9tYWluLWdvb2dsZS5jb20iLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICJvYmplY3QiOiAiZm9vIiwKICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogImVudGl0eSI6ICJkb21haW4tZ29vZ2xlLmNvbSIsCiAicm9sZSI6ICJSRUFERVIiLAogImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICJldGFnIjogIkNJNkQyZG52dXR3Q0VBVT0iCn0K"
+ }
+ },
+ {
+ "ID": "306b64bcc7889e72",
+ "Request": {
+ "Method": "PUT",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "107"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "9420d81244ebc97f49dd3f3310f3f4a8/2533661228731206783;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLCJlbnRpdHkiOiJkb21haW4tZ29vZ2xlLmNvbSIsInJvbGUiOiJSRUFERVIifQo="
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "14477"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543349000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xhiadbaw16:4120,/bns/xi/borg/xi/bns/blobstore2/bitpusher/63.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=SsBYW9meGM6zswbii4FI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/63.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/63:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo93B2Ww5xpqlBFPtKvRyvV1yVrrBlfI2CZWpl-am_2hnln-HM-vPnRiMc82L4pxy11qjBODmG-bexRE8pBw1EpvW0lfw"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkT2JqZWN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzM5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NjgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5VcGRhdGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBY2xzLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5VcGRhdGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVBY2xzLmphdmE6MTYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci51cGRhdGUoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YToxMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOSBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1GT1JCSURERU4sIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRPYmplY3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMzkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo2OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YToxNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLnVwZGF0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWZvcmJpZGRlbiwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uRk9SQklEREVOLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRPYmplY3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMzkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo2OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLlVwZGF0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUFjbHMuamF2YToxNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLnVwZGF0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZE9iamVjdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMzOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjY4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuVXBkYXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQWNscy5qYXZhOjE2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IudXBkYXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTkgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMywKICAibWVzc2FnZSI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "d06f132e9ec7b96d",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5b5eda7ba23eb972a9bf2520a3a02174/10174624346090605979;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3126"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAU="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaa9:4028,/bns/xi/borg/xi/bns/blobstore2/bitpusher/44.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=SsBYW_mjJYq1swbFnpiwDw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/44.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/44:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqSc734xQW8pa8LKW0flGdgJksu272ZE9TecP_tBabBaP2npvm2Exj9t3OAeZgmRrH_8FzhMRM8EjC8--hFec00u_s46g"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3VzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJ1c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L2RvbWFpbi1nb29nbGUuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogImRvbWFpbi1nb29nbGUuY29tIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFVPSIKICB9CiBdCn0K"
+ }
+ },
+ {
+ "ID": "ef223085c07ea8d5",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "dba9cd35abd117d0720a31ccf494044b/17815586363955089080;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3126"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAU="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabf13:4076,/bns/xi/borg/xi/bns/blobstore2/bitpusher/131.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=SsBYW87hKeu8swaT-aHwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/131.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/131:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up7DJJXlZ_juEw311a2a9WjdFbK5OawWULKNZiw6W44034uNT2raatzegz165bZicMRPM2VXmlPobib92DaBRyktl8kjA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3VzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJ1c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L2RvbWFpbi1nb29nbGUuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogImRvbWFpbi1nb29nbGUuY29tIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFVPSIKICB9CiBdCn0K"
+ }
+ },
+ {
+ "ID": "e119001f798374a8",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "974ca3e6818e29670f6ca0db1d9163db/7010086886876549076;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13481"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcao13:4325,/bns/xi/borg/xi/bns/blobstore2/bitpusher/142.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=SsBYW4_dLoq9swbt0Y3oAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/142.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/142:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq8DFk5TtLnYZjjsRPmICtkdRv-IgWsp1W5DO8uD5ACMRGABuenNgK7Q75HxjU8OKgX4jh2dPdfqOoajqn-FqmgcCl50Q"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRPYmplY3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMzkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo2OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjg1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5saXN0KEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6ODkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTkgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9UkVRVUlSRUQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkT2JqZWN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzM5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NjgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YTo4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IubGlzdChBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjg5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWJhZFJlcXVlc3QsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLlJFUVVJUkVELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkT2JqZWN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzM5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NjgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YTo4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IubGlzdChBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjg5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkT2JqZWN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzM5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NjgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YTo4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IubGlzdChBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjg5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDAsCiAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "f742ec460c5fc6b3",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1cd6e817ec3b9ca6b0206fdb5da55d67/14651048904741032177;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "3126"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAU="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:10 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcab8:4431,/bns/xi/borg/xi/bns/blobstore2/bitpusher/26.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=SsBYW-PrN6Oxswak0oXADA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/26.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/26:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqJK0Y50K7I1CohjIQqY8fs2eH64aelxRPOmBGliAZUJc04A8fyHJS1aDOC-CRIKz9qd-q9rkRzr5u_uw08zGK87xRhBQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9scyIsCiAiaXRlbXMiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNJNkQyZG52dXR3Q0VBVT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwMzUxMzAyNTQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L3VzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgIm9iamVjdCI6ICJmb28iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDM1MTMwMjU0IiwKICAgImVudGl0eSI6ICJ1c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDSTZEMmRudnV0d0NFQVU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2Zvby8xNTMyNTQzMDM1MTMwMjU0L2RvbWFpbi1nb29nbGUuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9mb28vYWNsL2RvbWFpbi1nb29nbGUuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMzUxMzAyNTQiLAogICAiZW50aXR5IjogImRvbWFpbi1nb29nbGUuY29tIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImRvbWFpbiI6ICJnb29nbGUuY29tIiwKICAgImV0YWciOiAiQ0k2RDJkbnZ1dHdDRUFVPSIKICB9CiBdCn0K"
+ }
+ },
+ {
+ "ID": "94c266d54a938f32",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "a9ee8120fe2c44631fd09ce8148f493c/3845267952669069837;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "14433"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:11 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:11 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaac13:4010,/bns/xi/borg/xi/bns/blobstore2/bitpusher/148.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=SsBYW92DPMe9swaP-5fwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/148.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/148:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpURM332A0PxG9fkJ3Us1VJF336fZvXJT7hDl6wYZt-DxDYSDyXFOhQ115sw2QaAzShAJbJd7udPk6q7LeghFaW9fyT-Q"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkT2JqZWN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzM5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NjgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YTo4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IubGlzdChBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjg5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTkgbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9Rk9SQklEREVOLCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkT2JqZWN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzM5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NjgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YTo4NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkxpc3RBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0QWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IubGlzdChBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjg5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTkgbW9yZVxuLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9Zm9yYmlkZGVuLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5GT1JCSURERU4sIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZE9iamVjdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMzOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjY4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6ODUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmxpc3QoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YTo4OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZE9iamVjdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMzOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjY4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuTGlzdEFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RBY2xzLmphdmE6ODUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5MaXN0QWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdEFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmxpc3QoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YTo4OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDMsCiAgIm1lc3NhZ2UiOiAiaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "d12fbdb92a11998c",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f2049be0c832c930be0114777f5baffd/11486229970533552938;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:11 GMT"
+ ],
+ "Etag": [
+ "CI6D2dnvutwCEAY="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543331000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaap16:4483,/bns/xi/borg/xi/bns/blobstore2/bitpusher/146.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=S8BYW7WODcW8swaY9Jb4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/146.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/146:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo9vm1Ncr2FyTvAdr4tpQOMEfab8Bu8lEi07lnZectDj4jF3_ZSr5e2lK-fgKXMRx7zKQGDlyq1y6XUgIZ1MKXUY1W7Uw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "06a8c3d277055637",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "de464c770136e7205d2b5050aa0f7d54/680730493455012934;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "2993"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:11 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:11 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543336000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcah5:4482,/bns/xi/borg/xi/bns/blobstore2/bitpusher/123.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=S8BYW96KJYGGygPZjIDwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/123.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/123:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqekL5FlaQsZNtC_uoJ4UxCx8Gu-eb1xUo0aACyoku1Lw0OiT5gahTcP3E8RBkcnNwcY3ACnfNoIuRhztk1BM7bknA-2g"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm90IEZvdW5kIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPU5PVF9GT1VORCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPW51bGwsIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1ub3RGb3VuZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uTk9UX0ZPVU5ELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1udWxsLCBlcnJvclByb3RvQ29kZT1OT1RfRk9VTkQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlX2lkLnNjb3BlLCBtZXNzYWdlPW51bGwsIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQuc2NvcGUsIG1lc3NhZ2U9Tm90IEZvdW5kLCByZWFzb249bm90Rm91bmQsIHJwY0NvZGU9NDA0fSBOb3QgRm91bmRcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDA0LAogICJtZXNzYWdlIjogIk5vdCBGb3VuZCIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "4a435971e1e422d1",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "093587f6951ee94ffabc84f4c875c908/8321692511319496035;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13525"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:11 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:11 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbo12:4395,/bns/xi/borg/xi/bns/blobstore2/bitpusher/138.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=S8BYW9_qKcm8swae9r34Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/138.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/138:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upq_yGzF_n77ASH-WiKRWXBOBJeUv_SUpGi9Pj1A0eYlnFCxdEYFRttj7B6CdxCq1z59CF0oz6P3tHH0no11bov4eC-Ow"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRPYmplY3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMzkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo2OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YTo3MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmRlbGV0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOSBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1SRVFVSVJFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRPYmplY3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMzkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo2OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YTo3MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmRlbGV0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOSBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5SRVFVSVJFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZE9iamVjdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMzOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjY4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkT2JqZWN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzM5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NjgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5EZWxldGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVBY2xzLmphdmE6NzEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5EZWxldGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5kZWxldGUoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YToxMDkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTkgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "2050b862036d1dc8",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "13f7f464e5983ae68c34543dc5f99a0b/15962655628678895231;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "2993"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:11 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:11 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadabn6:4066,/bns/xi/borg/xi/bns/blobstore2/bitpusher/118.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=S8BYW9K3N-GEygPhuovwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/118.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/118:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpYsqXxmTbL_i5UFMK6NIWRcNThEmhG4svOq7srkpcFih7bz_0iTqP9qhJSaFNgmdVOVjmHKy6w2zTRsd1GOG2qYS6UAw"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm90IEZvdW5kIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPU5PVF9GT1VORCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPW51bGwsIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1ub3RGb3VuZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uTk9UX0ZPVU5ELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1udWxsLCBlcnJvclByb3RvQ29kZT1OT1RfRk9VTkQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlX2lkLnNjb3BlLCBtZXNzYWdlPW51bGwsIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQuc2NvcGUsIG1lc3NhZ2U9Tm90IEZvdW5kLCByZWFzb249bm90Rm91bmQsIHJwY0NvZGU9NDA0fSBOb3QgRm91bmRcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDA0LAogICJtZXNzYWdlIjogIk5vdCBGb3VuZCIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "c72d72a702fa554b",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "584db496f99454349b61b55ca8cc52df/5157155047810537372;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/acl/domain-google.com?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "14477"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:12 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:12 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543337000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaw12:4143,/bns/xi/borg/xi/bns/blobstore2/bitpusher/140.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=S8BYW6-iPIa9swbN3qfoAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/140.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/140:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATo_ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoMa42rM_Khs_QVlU9gf4LiwnZx8qKV0UL2GIJflFNNRmLyVbbHxc64VxyVnt70pNWyA0FdJJaVYgdwLMXvDaAgDrs8tg"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5sb2FkT2JqZWN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6MzM5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIuZ2V0QWNsUmVzb3VyY2VGb3JSZXF1ZXN0KEFjY2Vzc0NvbnRyb2xzSGVscGVyLmphdmE6NjgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5EZWxldGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVBY2xzLmphdmE6NzEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5EZWxldGVBY2xzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVBY2xzLmphdmE6MjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5BY2Nlc3NDb250cm9sc0RlbGVnYXRvci5kZWxldGUoQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuamF2YToxMDkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOSBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1GT1JCSURERU4sIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRPYmplY3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMzkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo2OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YTo3MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmRlbGV0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWZvcmJpZGRlbiwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uRk9SQklEREVOLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmxvYWRPYmplY3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTozMzkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYWNscy5BY2Nlc3NDb250cm9sc0hlbHBlci5nZXRBY2xSZXNvdXJjZUZvclJlcXVlc3QoQWNjZXNzQ29udHJvbHNIZWxwZXIuamF2YTo2OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YTo3MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkRlbGV0ZUFjbHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUFjbHMuamF2YToyMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmRlbGV0ZShBY2Nlc3NDb250cm9sc0RlbGVnYXRvci5qYXZhOjEwOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE5IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuQWNjZXNzQ29udHJvbHNIZWxwZXIubG9hZE9iamVjdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjMzOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5hY2xzLkFjY2Vzc0NvbnRyb2xzSGVscGVyLmdldEFjbFJlc291cmNlRm9yUmVxdWVzdChBY2Nlc3NDb250cm9sc0hlbHBlci5qYXZhOjY4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjcxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmFjbHMuRGVsZXRlQWNscy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQWNscy5qYXZhOjIwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQWNjZXNzQ29udHJvbHNEZWxlZ2F0b3IuZGVsZXRlKEFjY2Vzc0NvbnRyb2xzRGVsZWdhdG9yLmphdmE6MTA5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTkgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMywKICAibWVzc2FnZSI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "d679b4e6505004b9",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/rewriteTo/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "06a1c39b6a607c4ba2b0bdcc7378228f/12797836698783094968;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/rewriteTo/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3809"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:12 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543352000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabj12:4211,/bns/xi/borg/xi/bns/blobstore2/bitpusher/39.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=TMBYW-iEDc-0swaFr7fwAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/39.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/39:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrQrcLPKw1kEVeKWvq9Dke_NzAf6WgnnOeMQkC449pWCd4QHO9bYcri_mr43j7_6Lm_QDnHASDc7tUGrzuAaZ5aR1v6IA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiNSIsCiAib2JqZWN0U2l6ZSI6ICI1IiwKICJkb25lIjogdHJ1ZSwKICJyZXNvdXJjZSI6IHsKICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9jb3B5LzE1MzI1NDMwNTI1NDI5MzUiLAogICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vY29weSIsCiAgIm5hbWUiOiAiY29weSIsCiAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTI1NDI5MzUiLAogICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTIuNTQyWiIsCiAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxMi41NDJaIiwKICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxMi41NDJaIiwKICAic2l6ZSI6ICI1IiwKICAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHk/Z2VuZXJhdGlvbj0xNTMyNTQzMDUyNTQyOTM1JmFsdD1tZWRpYSIsCiAgImNvbnRlbnRMYW5ndWFnZSI6ICJlbiIsCiAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICJhY2wiOiBbCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2NvcHkvMTUzMjU0MzA1MjU0MjkzNS9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHkvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgICJvYmplY3QiOiAiY29weSIsCiAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDUyNTQyOTM1IiwKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJvd25lcnMiCiAgICB9LAogICAgImV0YWciOiAiQ05mbi8rSHZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvY29weS8xNTMyNTQzMDUyNTQyOTM1L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHkvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICAib2JqZWN0IjogImNvcHkiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1MjU0MjkzNSIsCiAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJPV05FUiIsCiAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICB9LAogICAgImV0YWciOiAiQ05mbi8rSHZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvY29weS8xNTMyNTQzMDUyNTQyOTM1L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHkvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICAib2JqZWN0IjogImNvcHkiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1MjU0MjkzNSIsCiAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJSRUFERVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgfSwKICAgICJldGFnIjogIkNOZm4vK0h2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2NvcHkvMTUzMjU0MzA1MjU0MjkzNS91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vY29weS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICAib2JqZWN0IjogImNvcHkiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1MjU0MjkzNSIsCiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJldGFnIjogIkNOZm4vK0h2dXR3Q0VBRT0iCiAgIH0KICBdLAogICJvd25lciI6IHsKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogIH0sCiAgImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAgImV0YWciOiAiQ05mbi8rSHZ1dHdDRUFFPSIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "86cfa7cd7316cc37",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/rewriteTo/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026projection=full\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "3e6fc17a1afe02dc20a3817bbeb50ccb/1992336117914737109;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/rewriteTo/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026projection=full\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3809"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:13 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543352000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbo12:4395,/bns/xi/borg/xi/bns/blobstore2/bitpusher/91.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=TMBYW7qxLMK8swaH0qagBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/91.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/91:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrX8RI_R8PYV9tPoYZo_KbJDjxqEd8MydbLHf0_vG4-N7TKd0jy2mdvPJ8J4GZTXi1S0Gc0ImvJUw49SN8MLj0kiEjstg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiNSIsCiAib2JqZWN0U2l6ZSI6ICI1IiwKICJkb25lIjogdHJ1ZSwKICJyZXNvdXJjZSI6IHsKICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9jb3B5LzE1MzI1NDMwNTMyMTkyNjAiLAogICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vY29weSIsCiAgIm5hbWUiOiAiY29weSIsCiAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTMyMTkyNjAiLAogICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTMuMjE5WiIsCiAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxMy4yMTlaIiwKICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxMy4yMTlaIiwKICAic2l6ZSI6ICI1IiwKICAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHk/Z2VuZXJhdGlvbj0xNTMyNTQzMDUzMjE5MjYwJmFsdD1tZWRpYSIsCiAgImNvbnRlbnRMYW5ndWFnZSI6ICJlbiIsCiAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICJhY2wiOiBbCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2NvcHkvMTUzMjU0MzA1MzIxOTI2MC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHkvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgICJvYmplY3QiOiAiY29weSIsCiAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDUzMjE5MjYwIiwKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJvd25lcnMiCiAgICB9LAogICAgImV0YWciOiAiQ0x5THFlTHZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvY29weS8xNTMyNTQzMDUzMjE5MjYwL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHkvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICAib2JqZWN0IjogImNvcHkiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1MzIxOTI2MCIsCiAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJPV05FUiIsCiAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICB9LAogICAgImV0YWciOiAiQ0x5THFlTHZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvY29weS8xNTMyNTQzMDUzMjE5MjYwL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHkvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICAib2JqZWN0IjogImNvcHkiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1MzIxOTI2MCIsCiAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJSRUFERVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgfSwKICAgICJldGFnIjogIkNMeUxxZUx2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2NvcHkvMTUzMjU0MzA1MzIxOTI2MC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vY29weS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICAib2JqZWN0IjogImNvcHkiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1MzIxOTI2MCIsCiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJldGFnIjogIkNMeUxxZUx2dXR3Q0VBRT0iCiAgIH0KICBdLAogICJvd25lciI6IHsKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogIH0sCiAgImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAgImV0YWciOiAiQ0x5THFlTHZ1dHdDRUFFPSIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "8887b68bad486b9d",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/rewriteTo/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ce69347057de7d4378748fb260c519ab/9633299235274136305;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/rewriteTo/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "13465"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:13 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543353000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcba13:4101,/bns/xi/borg/xi/bns/blobstore2/bitpusher/149.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=TcBYW8-wFcy8swbYrr3oAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/149.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/149:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpCChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqeMRMsS_uCUWbnoCyuNHN91FsGGt2jPIUHCAp53wvU93arB__oDYPRczupKCR178sFy2lvP9nhSnC0u2BNnppRH9PCVA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMTEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5yZXdyaXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLkZyb250ZW5kUmV3cml0ZUFjdGlvbnMuZ2V0U291cmNlT2JqZWN0KEZyb250ZW5kUmV3cml0ZUFjdGlvbnMuamF2YToxNDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlJld3JpdGVyLnJld3JpdGVPYmplY3QoUmV3cml0ZXIuamF2YTozMjMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LnJld3JpdGVJbkZyb250ZW5kKFJld3JpdGVPYmplY3QuamF2YToyMjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6MjA2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjUyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdC4uLiAxNCBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1SRVFVSVJFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMTEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5yZXdyaXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLkZyb250ZW5kUmV3cml0ZUFjdGlvbnMuZ2V0U291cmNlT2JqZWN0KEZyb250ZW5kUmV3cml0ZUFjdGlvbnMuamF2YToxNDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlJld3JpdGVyLnJld3JpdGVPYmplY3QoUmV3cml0ZXIuamF2YTozMjMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LnJld3JpdGVJbkZyb250ZW5kKFJld3JpdGVPYmplY3QuamF2YToyMjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6MjA2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjUyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdC4uLiAxNCBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5SRVFVSVJFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMxMSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLnJld3JpdGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyNClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuRnJvbnRlbmRSZXdyaXRlQWN0aW9ucy5nZXRTb3VyY2VPYmplY3QoRnJvbnRlbmRSZXdyaXRlQWN0aW9ucy5qYXZhOjE0Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUmV3cml0ZXIucmV3cml0ZU9iamVjdChSZXdyaXRlci5qYXZhOjMyMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QucmV3cml0ZUluRnJvbnRlbmQoUmV3cml0ZU9iamVjdC5qYXZhOjIyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFJld3JpdGVPYmplY3QuamF2YToyMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6NTIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0Li4uIDE0IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzExKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IucmV3cml0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTI0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5Gcm9udGVuZFJld3JpdGVBY3Rpb25zLmdldFNvdXJjZU9iamVjdChGcm9udGVuZFJld3JpdGVBY3Rpb25zLmphdmE6MTQ3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5SZXdyaXRlci5yZXdyaXRlT2JqZWN0KFJld3JpdGVyLmphdmE6MzIzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5yZXdyaXRlSW5Gcm9udGVuZChSZXdyaXRlT2JqZWN0LmphdmE6MjI5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjIwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFJld3JpdGVPYmplY3QuamF2YTo1Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHQuLi4gMTQgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "e579d592c0e54171",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/rewriteTo/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026projection=full\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "08875a54f9267114334c417fd0b106ce/17274261253138619150;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/rewriteTo/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026projection=full\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3764"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:13 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543353000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbm4:4122,/bns/xi/borg/xi/bns/blobstore2/bitpusher/1.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=TcBYW5zlH-2yswad5qDADg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/1.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/1:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpCChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrfczQ-aaWFOlyxeTpFwzv2qiz1CYNP8Aif4RfYJuha4459Y2DVPAJM0ncj9hSqFypG_Aa7-jMkJiTYKKp0gm2eL2nQOA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiNSIsCiAib2JqZWN0U2l6ZSI6ICI1IiwKICJkb25lIjogdHJ1ZSwKICJyZXNvdXJjZSI6IHsKICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9jb3B5LzE1MzI1NDMwNTM2NTE0NzQiLAogICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vY29weSIsCiAgIm5hbWUiOiAiY29weSIsCiAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTM2NTE0NzQiLAogICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTMuNjUwWiIsCiAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxMy42NTBaIiwKICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxMy42NTBaIiwKICAic2l6ZSI6ICI1IiwKICAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHk/Z2VuZXJhdGlvbj0xNTMyNTQzMDUzNjUxNDc0JmFsdD1tZWRpYSIsCiAgImNvbnRlbnRMYW5ndWFnZSI6ICJlbiIsCiAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICJhY2wiOiBbCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2NvcHkvMTUzMjU0MzA1MzY1MTQ3NC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHkvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyIiwKICAgICJvYmplY3QiOiAiY29weSIsCiAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDUzNjUxNDc0IiwKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJvd25lcnMiCiAgICB9LAogICAgImV0YWciOiAiQ0pLOHcrTHZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvY29weS8xNTMyNTQzMDUzNjUxNDc0L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHkvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICAib2JqZWN0IjogImNvcHkiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1MzY1MTQ3NCIsCiAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJPV05FUiIsCiAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICB9LAogICAgImV0YWciOiAiQ0pLOHcrTHZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvY29weS8xNTMyNTQzMDUzNjUxNDc0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2NvcHkvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICAib2JqZWN0IjogImNvcHkiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1MzY1MTQ3NCIsCiAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJSRUFERVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgfSwKICAgICJldGFnIjogIkNKSzh3K0x2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL2NvcHkvMTUzMjU0MzA1MzY1MTQ3NC91c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vY29weS9hY2wvdXNlci1pbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICAib2JqZWN0IjogImNvcHkiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1MzY1MTQ3NCIsCiAgICAiZW50aXR5IjogInVzZXItaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgImVtYWlsIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJldGFnIjogIkNKSzh3K0x2dXR3Q0VBRT0iCiAgIH0KICBdLAogICJvd25lciI6IHsKICAgImVudGl0eSI6ICJ1c2VyLWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIgogIH0sCiAgImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAgImV0YWciOiAiQ0pLOHcrTHZ1dHdDRUFFPSIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "6d1e7aee7e1daa9f",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/rewriteTo/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026projection=full\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c0afb1b96b143405b729e0ecd96b5e91/6468761776060079146;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo/rewriteTo/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026projection=full\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "14417"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:13 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543353000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadabj12:4211,/bns/xi/borg/xi/bns/blobstore2/bitpusher/22.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=TcBYW7P6M824swaRxZCoAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/22.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/22:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpCChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrKaX60Ffh5xOc3GnLDhRIx_eLvb6hG-6VGeIK9A5ul0QhYvvGl5hPAqyOAE-MN8nTxP3eB_Rd9dH9cVPTbVbbl8rurqg"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzExKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IucmV3cml0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTI0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLkZyb250ZW5kUmV3cml0ZUFjdGlvbnMuZ2V0U291cmNlT2JqZWN0KEZyb250ZW5kUmV3cml0ZUFjdGlvbnMuamF2YToxNDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLnJld3JpdGVyLlJld3JpdGVyLnJld3JpdGVPYmplY3QoUmV3cml0ZXIuamF2YTozMjMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LnJld3JpdGVJbkZyb250ZW5kKFJld3JpdGVPYmplY3QuamF2YToyMjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6MjA2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjUyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdC4uLiAxNCBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1GT1JCSURERU4sIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMTEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5yZXdyaXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuRnJvbnRlbmRSZXdyaXRlQWN0aW9ucy5nZXRTb3VyY2VPYmplY3QoRnJvbnRlbmRSZXdyaXRlQWN0aW9ucy5qYXZhOjE0Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUmV3cml0ZXIucmV3cml0ZU9iamVjdChSZXdyaXRlci5qYXZhOjMyMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QucmV3cml0ZUluRnJvbnRlbmQoUmV3cml0ZU9iamVjdC5qYXZhOjIyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFJld3JpdGVPYmplY3QuamF2YToyMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6NTIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0Li4uIDE0IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWZvcmJpZGRlbiwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uRk9SQklEREVOLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMTEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5yZXdyaXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuRnJvbnRlbmRSZXdyaXRlQWN0aW9ucy5nZXRTb3VyY2VPYmplY3QoRnJvbnRlbmRSZXdyaXRlQWN0aW9ucy5qYXZhOjE0Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24ucmV3cml0ZXIuUmV3cml0ZXIucmV3cml0ZU9iamVjdChSZXdyaXRlci5qYXZhOjMyMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QucmV3cml0ZUluRnJvbnRlbmQoUmV3cml0ZU9iamVjdC5qYXZhOjIyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFJld3JpdGVPYmplY3QuamF2YToyMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5SZXdyaXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChSZXdyaXRlT2JqZWN0LmphdmE6NTIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0Li4uIDE0IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMxMSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLnJld3JpdGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyNClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5Gcm9udGVuZFJld3JpdGVBY3Rpb25zLmdldFNvdXJjZU9iamVjdChGcm9udGVuZFJld3JpdGVBY3Rpb25zLmphdmE6MTQ3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5yZXdyaXRlci5SZXdyaXRlci5yZXdyaXRlT2JqZWN0KFJld3JpdGVyLmphdmE6MzIzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5yZXdyaXRlSW5Gcm9udGVuZChSZXdyaXRlT2JqZWN0LmphdmE6MjI5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuUmV3cml0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoUmV3cml0ZU9iamVjdC5qYXZhOjIwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLlJld3JpdGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFJld3JpdGVPYmplY3QuamF2YTo1Milcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHQuLi4gMTQgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMywKICAibWVzc2FnZSI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "ac9a3b3c0947b825",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose/compose?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "127"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f83ca7832b4388ae8f0d6d861a168610/14109723793924562247;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose/compose?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIifSwic291cmNlT2JqZWN0cyI6W3sibmFtZSI6ImZvbyJ9LHsibmFtZSI6ImNvcHkifV19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "792"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:14 GMT"
+ ],
+ "Etag": [
+ "CLXG+OLvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543352000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadadk2:4007,/bns/xi/borg/xi/bns/blobstore2/bitpusher/110.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=TsBYW70bqL2zBsDWtcgK"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/110.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/110:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrTW24PnVSUbcQ_t-ZYqWNVDtORVWGzcZFT7jfgKgB1gaYMMua1ZaOy8KNKmooC2ONEeWMXn2_v1TLcbBthPHyfU2R9tQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9jb21wb3NlLzE1MzI1NDMwNTQ1MjExNDEiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9jb21wb3NlIiwKICJuYW1lIjogImNvbXBvc2UiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1NDUyMTE0MSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxNC41MjBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTQuNTIwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjE0LjUyMFoiLAogInNpemUiOiAiMTAiLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vY29tcG9zZT9nZW5lcmF0aW9uPTE1MzI1NDMwNTQ1MjExNDEmYWx0PW1lZGlhIiwKICJjcmMzMmMiOiAiL1JDT2dnPT0iLAogImNvbXBvbmVudENvdW50IjogMiwKICJldGFnIjogIkNMWEcrT0x2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "c47cd24c460332cc",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose/compose?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "127"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1695aa492711cdf66132df7670129368/3304224312551120483;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose/compose?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIifSwic291cmNlT2JqZWN0cyI6W3sibmFtZSI6ImZvbyJ9LHsibmFtZSI6ImNvcHkifV19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "792"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:15 GMT"
+ ],
+ "Etag": [
+ "CMbdnuPvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543352000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbz6:4375,/bns/xi/borg/xi/bns/blobstore2/bitpusher/127.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=TsBYW83ALsu8swbztoroAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/127.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/127:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq94wooWvDGiAcNecqebZ-cqoKxYhgLbobV3Ml-eqXObVm9SWbXgZgZPKfO08oomPsa1QbGYhEj24duCct9ZrIo2ax4-w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9jb21wb3NlLzE1MzI1NDMwNTUxNDY2OTQiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9jb21wb3NlIiwKICJuYW1lIjogImNvbXBvc2UiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1NTE0NjY5NCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxNS4xNDZaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTUuMTQ2WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjE1LjE0NloiLAogInNpemUiOiAiMTAiLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vY29tcG9zZT9nZW5lcmF0aW9uPTE1MzI1NDMwNTUxNDY2OTQmYWx0PW1lZGlhIiwKICJjcmMzMmMiOiAiL1JDT2dnPT0iLAogImNvbXBvbmVudENvdW50IjogMiwKICJldGFnIjogIkNNYmRudVB2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "7943d4a62df7055b",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose/compose?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "127"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ba8c8a7a3e92dd92664d3db84571dda5/10944905959228710784;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose/compose?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIifSwic291cmNlT2JqZWN0cyI6W3sibmFtZSI6ImZvbyJ9LHsibmFtZSI6ImNvcHkifV19Cg=="
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "12553"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:15 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543353000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaai14:4184,/bns/xi/borg/xi/bns/blobstore2/bitpusher/16.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=T8BYW7mgD4-wswbzhrDoBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/16.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/16:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpCChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrcMBdPlipnVdHzyMio_q3Vr_lCFR9zkAN3vJARKKAfXdwcdKEA34r140Z1PyDmXF9uhFArTyI0fRaukvdEzo-RHdkP8g"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YToyMDApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6NDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmNvbXBvc2UoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1SRVFVSVJFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YToyMDApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6NDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmNvbXBvc2UoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5SRVFVSVJFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuQ29tcG9zZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoQ29tcG9zZU9iamVjdC5qYXZhOjIwMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YTo0Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuY29tcG9zZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTI5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6MjAwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuQ29tcG9zZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoQ29tcG9zZU9iamVjdC5qYXZhOjQ3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5jb21wb3NlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "5e048e77292ce730",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose/compose?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "127"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "8e687cedf9e2c59cf632f3c3aad57b5e/139405382655320220;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose/compose?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIifSwic291cmNlT2JqZWN0cyI6W3sibmFtZSI6ImZvbyJ9LHsibmFtZSI6ImNvcHkifV19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "792"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:15 GMT"
+ ],
+ "Etag": [
+ "CKL7tePvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543353000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaar8:4444,/bns/xi/borg/xi/bns/blobstore2/bitpusher/103.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=T8BYW9v8GO60swb07ZvYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/103.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/103:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpCChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpFaR9oavJ8LTEeltNRuvjfENfgA1IrTthTpvoWmS1PrUDOO-MSY0AYJvrAaSyMexJfiyvmy1CKW9LidAVNQxnJJhYY3Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9jb21wb3NlLzE1MzI1NDMwNTU1MjczMzAiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvby9jb21wb3NlIiwKICJuYW1lIjogImNvbXBvc2UiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1NTUyNzMzMCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxNS41MjZaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTUuNTI2WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjE1LjUyNloiLAogInNpemUiOiAiMTAiLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vY29tcG9zZT9nZW5lcmF0aW9uPTE1MzI1NDMwNTU1MjczMzAmYWx0PW1lZGlhIiwKICJjcmMzMmMiOiAiL1JDT2dnPT0iLAogImNvbXBvbmVudENvdW50IjogMiwKICJldGFnIjogIkNLTDd0ZVB2dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "9ce6185bf69f5ce5",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose/compose?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "127"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d5eb6bf309da2537bfadb3b4afe1a195/7780368499997876921;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose/compose?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIifSwic291cmNlT2JqZWN0cyI6W3sibmFtZSI6ImZvbyJ9LHsibmFtZSI6ImNvcHkifV19Cg=="
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "13505"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:16 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543353000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadccc1:4324,/bns/xi/borg/xi/bns/blobstore2/bitpusher/3.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=T8BYW_j_LqKFygOmqoPoBA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/3.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/3:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpCChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpCPBirMfvVf-gNM9AblMh5FXVK9TtWz9LXHuIZNs75_TXQjQdaeUbikpmW5u4BN1EVTrEoFAV1dCJFr0OJK0nkF4jTew"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6MjAwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuQ29tcG9zZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoQ29tcG9zZU9iamVjdC5qYXZhOjQ3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5jb21wb3NlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1GT1JCSURERU4sIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YToyMDApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6NDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmNvbXBvc2UoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWZvcmJpZGRlbiwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uRk9SQklEREVOLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YToyMDApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5Db21wb3NlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChDb21wb3NlT2JqZWN0LmphdmE6NDcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmNvbXBvc2UoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjEyOSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuQ29tcG9zZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoQ29tcG9zZU9iamVjdC5qYXZhOjIwMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkNvbXBvc2VPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKENvbXBvc2VPYmplY3QuamF2YTo0Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuY29tcG9zZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTI5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMywKICAibWVzc2FnZSI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "15debde7c8cac885",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=008eb2bc6eeb5bf7d7cba62171bcbb4ef8514ca1fb6da098f9809215a455"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1859bee56f9a897a0270a243cef68695/11564961445121385031;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0wMDhlYjJiYzZlZWI1YmY3ZDdjYmE2MjE3MWJjYmI0ZWY4NTE0Y2ExZmI2ZGEwOThmOTgwOTIxNWE0NTUNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsIm5hbWUiOiJmb28ifQoNCi0tMDA4ZWIyYmM2ZWViNWJmN2Q3Y2JhNjIxNzFiY2JiNGVmODUxNGNhMWZiNmRhMDk4Zjk4MDkyMTVhNDU1DQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KaGVsbG8NCi0tMDA4ZWIyYmM2ZWViNWJmN2Q3Y2JhNjIxNzFiY2JiNGVmODUxNGNhMWZiNmRhMDk4Zjk4MDkyMTVhNDU1LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3544"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:16 GMT"
+ ],
+ "Etag": [
+ "CISz6OPvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaab3:4050,/bns/xi/borg/xi/bns/blobstore2/bitpusher/56.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=UMBYW_93rbKzBoKsncgE"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/56.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/56:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo4NJj__roCXg1rkrf9C_WBvMbhChyrJwBR_6uiF8m209gbGSR4XCMLbg2RKj6lBkl4K5GkK02kgj1aGSU_VpduF-jTJA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1NjM1MzY2OCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1NjM1MzY2OCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxNi4zNTNaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTYuMzUzWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjE2LjM1M1oiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzA1NjM1MzY2OCZhbHQ9bWVkaWEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwNTYzNTM2NjgvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1NjM1MzY2OCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0lTejZPUHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1NjM1MzY2OC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTYzNTM2NjgiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0lTejZPUHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1NjM1MzY2OC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTYzNTM2NjgiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNJU3o2T1B2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwNTYzNTM2NjgvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTYzNTM2NjgiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNJU3o2T1B2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDSVN6Nk9QdnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "c2acb9dbe5fa073d",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "69a22c35f5e6d49b564427b82119f32c/15349274023336125397;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:16 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabr1:4172,/bns/xi/borg/xi/bns/blobstore2/bitpusher/99.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=UMBYW5_bHOu4swbCgq_QBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/99.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/99:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrX4m8D-4A6whAVBy6HcDlDoWXjpWWB9mjI-R9lgmGKt_bUhIkkSsy0A6q3XYFq_4oQsJoLLZ6_MUt06wgrKmPNthikSw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "0cbce451ebd2db31",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=bde6c1612d9fd5ae9d6dd732749f3958478381faf3f17783756211f4f64f"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ec287cd47b8881880f9d7dc83bac96e7/759180497361101667;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1iZGU2YzE2MTJkOWZkNWFlOWQ2ZGQ3MzI3NDlmMzk1ODQ3ODM4MWZhZjNmMTc3ODM3NTYyMTFmNGY2NGYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsIm5hbWUiOiJmb28ifQoNCi0tYmRlNmMxNjEyZDlmZDVhZTlkNmRkNzMyNzQ5ZjM5NTg0NzgzODFmYWYzZjE3NzgzNzU2MjExZjRmNjRmDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KaGVsbG8NCi0tYmRlNmMxNjEyZDlmZDVhZTlkNmRkNzMyNzQ5ZjM5NTg0NzgzODFmYWYzZjE3NzgzNzU2MjExZjRmNjRmLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3544"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:17 GMT"
+ ],
+ "Etag": [
+ "CIXhmOTvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaai14:4184,/bns/xi/borg/xi/bns/blobstore2/bitpusher/59.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=UMBYW6mpMtCzswaRnZSgCA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/59.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/59:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqIEjep3TBSw7voUEGwh1L1AwP-FFI1tZFvYRs2BNufh94tYfsBFaHh6sbWn4ldMuvwCkH-7qiaB41sJZib7QHniBJwRQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1NzE0NTk4OSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1NzE0NTk4OSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxNy4xNDVaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTcuMTQ1WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjE3LjE0NVoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzA1NzE0NTk4OSZhbHQ9bWVkaWEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwNTcxNDU5ODkvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1NzE0NTk4OSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0lYaG1PVHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1NzE0NTk4OS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTcxNDU5ODkiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0lYaG1PVHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1NzE0NTk4OS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTcxNDU5ODkiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNJWGhtT1R2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwNTcxNDU5ODkvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTcxNDU5ODkiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNJWGhtT1R2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDSVhobU9UdnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "c61b873d27ccf2db",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e36222c97d2f642918ddc9fa4dd2d1c6/4543774541962618098;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:17 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaat15:4084,/bns/xi/borg/xi/bns/blobstore2/bitpusher/121.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=UcBYW6jFD8KFygPBwIT4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/121.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/121:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrP9zw0ZMPafIseXO6DfoMrPJYwFtAuq_P9UsunmDLQXTcsAyp5PrFoYpr4EgkwLqsRXbf4ptSv0qAEmV9hNkH89VsB9w"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "1efcbaee91c3f290",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=19875f2a1947ab00591bba7e9ea921186d18c0978fefa6f9385eb438a271"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b154e41e55daa83a3f6bdbf7eae46896/8400142515225584768;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0xOTg3NWYyYTE5NDdhYjAwNTkxYmJhN2U5ZWE5MjExODZkMThjMDk3OGZlZmE2ZjkzODVlYjQzOGEyNzENCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsIm5hbWUiOiJmb28ifQoNCi0tMTk4NzVmMmExOTQ3YWIwMDU5MWJiYTdlOWVhOTIxMTg2ZDE4YzA5NzhmZWZhNmY5Mzg1ZWI0MzhhMjcxDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KaGVsbG8NCi0tMTk4NzVmMmExOTQ3YWIwMDU5MWJiYTdlOWVhOTIxMTg2ZDE4YzA5NzhmZWZhNmY5Mzg1ZWI0MzhhMjcxLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3544"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:17 GMT"
+ ],
+ "Etag": [
+ "CNeRw+TvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaao15:4469,/bns/xi/borg/xi/bns/blobstore2/bitpusher/134.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=UcBYW4DuH8q9swamsaLwAg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/134.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/134:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo0qHhY0wFfyqUAonUlPCHmlD1SHLZfFUWC3xahUU7nkXL8LZR8Yc-KesjtDiGp1GsJPBEG3yJ450Rab222ED4ll9fAJg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1Nzg0MDM0MyIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1Nzg0MDM0MyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxNy44NDBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTcuODQwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjE3Ljg0MFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzA1Nzg0MDM0MyZhbHQ9bWVkaWEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwNTc4NDAzNDMvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1Nzg0MDM0MyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ05lUncrVHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1Nzg0MDM0My9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTc4NDAzNDMiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ05lUncrVHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1Nzg0MDM0My9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTc4NDAzNDMiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNOZVJ3K1R2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwNTc4NDAzNDMvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTc4NDAzNDMiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNOZVJ3K1R2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDTmVSdytUdnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "34830018d66ef52b",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "fd89c1ae3abc08f39bb03b1badec7bfe/12184736564122068238;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 400,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "12529"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:18 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:18 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543334000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xiiadcca7:4401,/bns/xi/borg/xi/bns/blobstore2/bitpusher/50.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=UcBYW9ilOcKwswbo-qroCQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/50.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/50:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOMrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoW3uBPO8ytkFF6mIcseEIwDnxexpiD3NjebFgC7_3LlIXGAvDTgcCqK9cRmbCF95j4GdrqY2SKx5XwEmQHTyGkPYWcKw"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQnVja2V0IGlzIHJlcXVlc3RlciBwYXlzIGJ1Y2tldCBidXQgbm8gdXNlciBwcm9qZWN0IHByb3ZpZGVkLiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1SRVFVSVJFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1iYWRSZXF1ZXN0LCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5SRVFVSVJFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YTo4NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6MjcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmRlbGV0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTEzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBCdWNrZXQgaXMgUmVxdWVzdGVyIFBheXMgYnVja2V0IGJ1dCBubyBiaWxsaW5nIHByb2plY3QgaWQgcHJvdmlkZWQgZm9yIG5vbi1vd25lci5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1CdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAwfSBCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX01JU1NJTkc6IFVTRVJfUFJPSkVDVF9NSVNTSU5HOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogQnVja2V0IGlzIFJlcXVlc3RlciBQYXlzIGJ1Y2tldCBidXQgbm8gYmlsbGluZyBwcm9qZWN0IGlkIHByb3ZpZGVkIGZvciBub24tb3duZXIuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjg0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YToyNylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZGVsZXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMTMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfTUlTU0lORzogVVNFUl9QUk9KRUNUX01JU1NJTkc6IEJ1Y2tldCBpcyBSZXF1ZXN0ZXIgUGF5cyBidWNrZXQgYnV0IG5vIGJpbGxpbmcgcHJvamVjdCBpZCBwcm92aWRlZCBmb3Igbm9uLW93bmVyLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMCwKICAibWVzc2FnZSI6ICJCdWNrZXQgaXMgcmVxdWVzdGVyIHBheXMgYnVja2V0IGJ1dCBubyB1c2VyIHByb2plY3QgcHJvdmlkZWQuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "6f769db46afd9819",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=839e5a22f123eb26a6c203321ec720ffbd6e50572bd4d5ffb7d9654931b6"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "a3e9776c290180536d4304a61917a0e9/16041105632584983964;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS04MzllNWEyMmYxMjNlYjI2YTZjMjAzMzIxZWM3MjBmZmJkNmU1MDU3MmJkNGQ1ZmZiN2Q5NjU0OTMxYjYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsIm5hbWUiOiJmb28ifQoNCi0tODM5ZTVhMjJmMTIzZWIyNmE2YzIwMzMyMWVjNzIwZmZiZDZlNTA1NzJiZDRkNWZmYjdkOTY1NDkzMWI2DQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KaGVsbG8NCi0tODM5ZTVhMjJmMTIzZWIyNmE2YzIwMzMyMWVjNzIwZmZiZDZlNTA1NzJiZDRkNWZmYjdkOTY1NDkzMWI2LS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3544"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:18 GMT"
+ ],
+ "Etag": [
+ "CJfu5+TvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543358000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbab3:4111,/bns/xi/borg/xi/bns/blobstore2/bitpusher/80.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=UsBYW8yaBuyyswbR54r4Ag"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/80.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/80:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Urx3_KGXnGjW7mk95RdQgUWeX9pNW-6YCksE1ydc4pu3vqfvXosyJ9DOiLgNNgTe2shKS1SDY1Pjm2pMpJ9qjivxE2wYw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1ODQ0MjAwNyIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1ODQ0MjAwNyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxOC40NDFaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTguNDQxWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjE4LjQ0MVoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzA1ODQ0MjAwNyZhbHQ9bWVkaWEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwNTg0NDIwMDcvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1ODQ0MjAwNyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0pmdTUrVHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1ODQ0MjAwNy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTg0NDIwMDciLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0pmdTUrVHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1ODQ0MjAwNy9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTg0NDIwMDciLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNKZnU1K1R2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwNTg0NDIwMDcvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTg0NDIwMDciLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNKZnU1K1R2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDSmZ1NStUdnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "b94ea2e42fa9f139",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026userProject=gcloud-golang-firestore-tests",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "12e41a1156db46fe3dc788ff0e6127e0/1378955612066817579;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026userProject=gcloud-golang-firestore-tests"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:18 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543334000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadaap16:4483,/bns/xi/borg/xi/bns/blobstore2/bitpusher/11.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=UsBYW5HNIZC3swb1pLGIDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/11.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/11:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOMrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UosmGmgYmy6swVybJTesCQsS-onut6HdaOBOBYgHEhdUVecblMV9TYF2e2RMupiVE_7_23w5rzUEIa7CcPLzFdTrYRGzQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "2d79258945c4f25c",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=4c3f9e195038a23b1168c899f673137fee02e405c75b4a5ccc3dd08a1e62"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f0d51e89b6eac738ddc611b1333eef75/5235605051716626105;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS00YzNmOWUxOTUwMzhhMjNiMTE2OGM4OTlmNjczMTM3ZmVlMDJlNDA1Yzc1YjRhNWNjYzNkZDA4YTFlNjINCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsIm5hbWUiOiJmb28ifQoNCi0tNGMzZjllMTk1MDM4YTIzYjExNjhjODk5ZjY3MzEzN2ZlZTAyZTQwNWM3NWI0YTVjY2MzZGQwOGExZTYyDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KaGVsbG8NCi0tNGMzZjllMTk1MDM4YTIzYjExNjhjODk5ZjY3MzEzN2ZlZTAyZTQwNWM3NWI0YTVjY2MzZGQwOGExZTYyLS0NCg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3544"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:19 GMT"
+ ],
+ "Etag": [
+ "CO7Ti+XvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae2:4286,/bns/xi/borg/xi/bns/blobstore2/bitpusher/88.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=UsBYW82aLM62swbPnpToAQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/88.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/88:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur6sLFSPpJsyOxEKX9xlyoDK_T5mm8-KpE96pDKVFHaWYVWSsRber1nTryu5yh2I39_6dnQyDOMifXX6rVgb-QrVvHaPA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1OTAyODQ2MiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2ZvbyIsCiAibmFtZSI6ICJmb28iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1OTAyODQ2MiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDoxOS4wMjhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MTkuMDI4WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjE5LjAyOFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vP2dlbmVyYXRpb249MTUzMjU0MzA1OTAyODQ2MiZhbHQ9bWVkaWEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwNTkwMjg0NjIvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMiIsCiAgICJvYmplY3QiOiAiZm9vIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA1OTAyODQ2MiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ083VGkrWHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1OTAyODQ2Mi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTkwMjg0NjIiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ083VGkrWHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9mb28vMTUzMjU0MzA1OTAyODQ2Mi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMi9vL2Zvby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTkwMjg0NjIiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNPN1RpK1h2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIvZm9vLzE1MzI1NDMwNTkwMjg0NjIvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAyL28vZm9vL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDIiLAogICAib2JqZWN0IjogImZvbyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwNTkwMjg0NjIiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNPN1RpK1h2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJtbkc3VEE9PSIsCiAiZXRhZyI6ICJDTzdUaStYdnV0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "f3e1568bdb0e8f1d",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026userProject=veener-jba",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7b1e4b4fba7ac31cc9bd19a0215bda42/9019917629931366215;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json\u0026userProject=veener-jba"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13481"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:19 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:19 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543334000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "471383502717"
+ ],
+ "X-Google-Backends": [
+ "xgiadabo14:4091,/bns/xi/borg/xi/bns/blobstore2/bitpusher/125.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=U8BYW9ebCMGFygP35YHoAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/125.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/125:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CP3elYXcDRoCGAYoATpFChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGM6ropHgHCIVMTE3MjM4MDU4ODYxOTM3NTE5MTQ0MOArMOErMOMrSp8BEoIBeWEyOS5jLkVsb0RCbWJYWkNBUFhpSkR3eDFqV09jMXJNcUxjS0xJN29MUElaNjRuRHJJczNjWVFZZkVJLUxaa0ZZcVpxcXpjMmhJSWJuVnlENmdvMWQwTUNxUmg3RFRpMFZ0aGg0NVItQ2hCVlZNeVFPN1VCQjdiak96cFZib29EMDAEOhZOT1RfQV9QRVJTSVNURU5UX1RPS0VO"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoNFf2Jrs5ndejT9b0nKs4zqukpcyDKBakaCrmU_RZBkCnPKbrT4RKSBVM1huRJQ1oWoR5BugNhcfTaTBUgCj1Jxen6Ng"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogImludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjg0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YToyNylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZGVsZXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMTMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IGludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1GT1JCSURERU4sIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPWZvcmJpZGRlbiwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uRk9SQklEREVOLCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6VVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Rk9SQklEREVOLCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPW51bGwsIG1lc3NhZ2U9aW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPWludGVncmF0aW9uQGdjbG91ZC1nb2xhbmctZmlyZXN0b3JlLXRlc3RzLmlhbS5nc2VydmljZWFjY291bnQuY29tIGRvZXMgbm90IGhhdmUgc2VydmljZXVzYWdlLnNlcnZpY2VzLnVzZSBhY2Nlc3MgdG8gcHJvamVjdCA2NDIwODA5MTgxMDEuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gaW50ZWdyYXRpb25AZ2Nsb3VkLWdvbGFuZy1maXJlc3RvcmUtdGVzdHMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20gZG9lcyBub3QgaGF2ZSBzZXJ2aWNldXNhZ2Uuc2VydmljZXMudXNlIGFjY2VzcyB0byBwcm9qZWN0IDY0MjA4MDkxODEwMS46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpVU0VSX1BST0pFQ1RfQUNDRVNTX0RFTklFRDogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YTo4NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6MjcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmRlbGV0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTEzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogVVNFUl9QUk9KRUNUX0FDQ0VTU19ERU5JRUQ6IFVTRVJfUFJPSkVDVF9BQ0NFU1NfREVOSUVEOiBpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMywKICAibWVzc2FnZSI6ICJpbnRlZ3JhdGlvbkBnY2xvdWQtZ29sYW5nLWZpcmVzdG9yZS10ZXN0cy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSBkb2VzIG5vdCBoYXZlIHNlcnZpY2V1c2FnZS5zZXJ2aWNlcy51c2UgYWNjZXNzIHRvIHByb2plY3QgNjQyMDgwOTE4MTAxLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "6ec50519fd63bfa0",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2f38ffa256b00b09268332b1fd024b6f/12876568173370927061;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/foo?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:19 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabn7:4375,/bns/xi/borg/xi/bns/blobstore2/bitpusher/108.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=U8BYW5fXE6u_swaTlJmwBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/108.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/108:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up6diQMzH0UiC2UYYGZ8zDfFkUmII2rn9ijfO6PoiMFmcHEr8KqurgK2w3T-cy8MYGgw8nsx2Bz55Dnq9q7gOzDsyeDhw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "a99968d338a0876b",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bd9214bf4eb85f57b13b38d18fac73d3/16660880747290699876;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/copy?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:19 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543358000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadccj12:4107,/bns/xi/borg/xi/bns/blobstore2/bitpusher/52.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=U8BYW6CJJsWxswbvo6bYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/52.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/52:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpRFckoYHMOgWlBtSyLxSuG8Z9_fAYUFVZIRjMUzsBgAiDadIqn_YxyoPi5uEAPdhgb25iw3QJ7fz5sLDk3iKRLl4zLMA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "47296f2e00d451fc",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose?alt=json\u0026userProject=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "9d460f1fa9e8358d6e2ca54007763a23/2071067592502569202;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002/o/compose?alt=json\u0026userProject=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:20 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543330000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaay12:4070,/bns/xi/borg/xi/bns/blobstore2/bitpusher/54.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=U8BYW6ieObC6swam3qWoCQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/54.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/54:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqFHLDSCb-csWH9WsaYNazbnu7LNYnxxoUiLxNDIFeKd85fOsx0oGGtiVErk6_FUNMqeOnUX8WkaKPzr3Aham7EihdAJA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "26684fb0d90fb09b",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b95db39788040c2882e8c64071813b20/9711749239163447822;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0002?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:20 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543358000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaw14:4032,/bns/xi/borg/xi/bns/blobstore2/bitpusher/101.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=VMBYW_-TDY23swaa1JGICA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/101.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/101:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnR4MGN0a0VlUHJWM2gtOThTWlJRTndqUXZVUW42UVR1YlI0Wk5Mb1hybXppTFFIRW1DeWZzWV9LY3JvaE1YdElpdTFxc0NEWlNmOTVkS29nYjIwTU9LSHNqeWplTkJkN3FrUUVPaTVSSkRwYi1FMFJXclhFYUNUazNZd3E3QUJkdGE3NVpsMDNDeVZwMktGSFJnU1hiSm9fM3kyTmVyTmJIdDV3RkpNWmdjZmV6Qlh3TVpmcnEtRW8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqIaRWESlmCt0SRhh5cYqRu4PmRGL0Abk2a1Xnf3ZUrhWpHO_xYzwxASUCoqxtKa2vvaDTeXjP85lkFd5lXPFl8xYv2DQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "0ef1ca5f73bd493d",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/notificationConfigs?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b7099022d4c856535f269bec588ce23c/17352712356522781483;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/notificationConfigs?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "37"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:20 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:20 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543360000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbay15:4202,/bns/xi/borg/xi/bns/blobstore2/bitpusher/119.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=VMBYW7WLK-GFygOT4obwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/119.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/119:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WVpNZGpKdFBodkk0eFVOTnVmRHgxQWdYLUhpbkZldzVPSnphTkdCY2RpLVFIZ3NRSkFzb1J4c3dsU25LOGVhSzdzWDdadHY5OVBkMnYteWxzSW5hbTZ3cGZrZlE3UFRGWjkyMkFwMkc1YnFlNEQ3ZEU3Zk5kUl9fdmM2ZGVfdUEzRFJsQ1ZnZF9EZ0JGeUZ3dVY5SXRIaUFTU0Iydk96VWsyejF0WEpXVGZ3V3RNZ2ZITVFDZkRjc2cwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Urvoxn90HKMNmrlKUpdDoeCI8frIFqTfFjX024JaHuXkeEhFHd90tqKSvP5kSZSq8-yllwEAWuRyAX3PTmHMKf0nu8IDQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNub3RpZmljYXRpb25zIgp9Cg=="
+ }
+ },
+ {
+ "ID": "249f77727bb8fde7",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/notificationConfigs?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "121"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "8d5e790560c2e4a36826625bb9f6907b/6547211779949390919;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/notificationConfigs?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJwYXlsb2FkX2Zvcm1hdCI6Ik5PTkUiLCJ0b3BpYyI6Ii8vcHVic3ViLmdvb2dsZWFwaXMuY29tL3Byb2plY3RzL2R1bGNldC1wb3J0LTc2Mi90b3BpY3MvZ28tc3RvcmFnZS1ub3RpZmljYXRpb24tdGVzdCJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "302"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:21 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543360000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadacc2:4342,/bns/xi/borg/xi/bns/blobstore2/bitpusher/33.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=VMBYW9WcN--wswb5qKXgCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/33.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/33:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3WVpNZGpKdFBodkk0eFVOTnVmRHgxQWdYLUhpbkZldzVPSnphTkdCY2RpLVFIZ3NRSkFzb1J4c3dsU25LOGVhSzdzWDdadHY5OVBkMnYteWxzSW5hbTZ3cGZrZlE3UFRGWjkyMkFwMkc1YnFlNEQ3ZEU3Zk5kUl9fdmM2ZGVfdUEzRFJsQ1ZnZF9EZ0JGeUZ3dVY5SXRIaUFTU0Iydk96VWsyejF0WEpXVGZ3V3RNZ2ZITVFDZkRjc2cwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UokE8LcpdeTAE2F38L7hn2gWNsZAqlHAp_0dz7bnjlp4gXuwSyyGKJj-o5ylUzElhe9QeJDgqSBTonoLQa7Q3QdfuzMNg"
+ ]
+ },
+ "Body": "ewogImlkIjogIjEwIiwKICJ0b3BpYyI6ICIvL3B1YnN1Yi5nb29nbGVhcGlzLmNvbS9wcm9qZWN0cy9kdWxjZXQtcG9ydC03NjIvdG9waWNzL2dvLXN0b3JhZ2Utbm90aWZpY2F0aW9uLXRlc3QiLAogInBheWxvYWRfZm9ybWF0IjogIk5PTkUiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm90aWZpY2F0aW9uQ29uZmlncy8xMCIsCiAia2luZCI6ICJzdG9yYWdlI25vdGlmaWNhdGlvbiIKfQo="
+ }
+ },
+ {
+ "ID": "18bd5add97c23e4d",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/notificationConfigs?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "73e9ba9a5c9a19c8f768a5ba285eb867/14188174897308724580;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/notificationConfigs?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "369"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:21 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:21 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543361000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaai14:4184,/bns/xi/borg/xi/bns/blobstore2/bitpusher/28.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=VcBYW-mZMoG2swaN3piQDw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/28.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/28:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WVpNZGpKdFBodkk0eFVOTnVmRHgxQWdYLUhpbkZldzVPSnphTkdCY2RpLVFIZ3NRSkFzb1J4c3dsU25LOGVhSzdzWDdadHY5OVBkMnYteWxzSW5hbTZ3cGZrZlE3UFRGWjkyMkFwMkc1YnFlNEQ3ZEU3Zk5kUl9fdmM2ZGVfdUEzRFJsQ1ZnZF9EZ0JGeUZ3dVY5SXRIaUFTU0Iydk96VWsyejF0WEpXVGZ3V3RNZ2ZITVFDZkRjc2cwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur8OKpLAbDrYMY7ReKKlCOil0atoW-ZAl-Q8_u49LzhjNzXf6Df21aI1Yt4f0UJE3itY4fZ22cceaGv_aLDTdE3Hn9PIQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNub3RpZmljYXRpb25zIiwKICJpdGVtcyI6IFsKICB7CiAgICJpZCI6ICIxMCIsCiAgICJ0b3BpYyI6ICIvL3B1YnN1Yi5nb29nbGVhcGlzLmNvbS9wcm9qZWN0cy9kdWxjZXQtcG9ydC03NjIvdG9waWNzL2dvLXN0b3JhZ2Utbm90aWZpY2F0aW9uLXRlc3QiLAogICAicGF5bG9hZF9mb3JtYXQiOiAiTk9ORSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL25vdGlmaWNhdGlvbkNvbmZpZ3MvMTAiLAogICAia2luZCI6ICJzdG9yYWdlI25vdGlmaWNhdGlvbiIKICB9CiBdCn0K"
+ }
+ },
+ {
+ "ID": "e3f555209e89e6cb",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/notificationConfigs/10?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d9a6e8cc2e953b12d9ced579ad05a03d/3382674316440432256;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/notificationConfigs/10?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:22 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543362000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbav14:4088,/bns/xi/borg/xi/bns/blobstore2/bitpusher/29.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=VsBYW9g4grKzBsSCnZgP"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/29.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/29:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WVpNZGpKdFBodkk0eFVOTnVmRHgxQWdYLUhpbkZldzVPSnphTkdCY2RpLVFIZ3NRSkFzb1J4c3dsU25LOGVhSzdzWDdadHY5OVBkMnYteWxzSW5hbTZ3cGZrZlE3UFRGWjkyMkFwMkc1YnFlNEQ3ZEU3Zk5kUl9fdmM2ZGVfdUEzRFJsQ1ZnZF9EZ0JGeUZ3dVY5SXRIaUFTU0Iydk96VWsyejF0WEpXVGZ3V3RNZ2ZITVFDZkRjc2cwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqSUkVlQ7hKgK9fqyiCmRjVqRJiZtqW6g0nRmxjIzQ5qFeQpZ6qZ2_UKlGNKm4j_3akPIkuBZPwfShnRRG4-xJ5byR2-w"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "c090f1d8032896bd",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/notificationConfigs?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "91f33ba12a3d8d7ebf35c97b5f708c8b/11023637433799765917;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/notificationConfigs?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "37"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:22 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:22 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543361000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabg14:4408,/bns/xi/borg/xi/bns/blobstore2/bitpusher/20.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=VsBYW-TTK66wswbUmaUY"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/20.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/20:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WVpNZGpKdFBodkk0eFVOTnVmRHgxQWdYLUhpbkZldzVPSnphTkdCY2RpLVFIZ3NRSkFzb1J4c3dsU25LOGVhSzdzWDdadHY5OVBkMnYteWxzSW5hbTZ3cGZrZlE3UFRGWjkyMkFwMkc1YnFlNEQ3ZEU3Zk5kUl9fdmM2ZGVfdUEzRFJsQ1ZnZF9EZ0JGeUZ3dVY5SXRIaUFTU0Iydk96VWsyejF0WEpXVGZ3V3RNZ2ZITVFDZkRjc2cwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrPq5UDcB6hY3Yr7mpWS4eDWLgryILpllaFJHiEIvkc5YuRMJ_ksG5xuGpwU0LxYD1b1q51AmqntyWQpOFIGe4VAbu-sw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNub3RpZmljYXRpb25zIgp9Cg=="
+ }
+ },
+ {
+ "ID": "05d72cbc8bce64ef",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/044/034/LC80440342016259LGN00/LC80440342016259LGN00_MTL.txt",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5ddd3f8f6efee9a23fb0995b1d19e0c3/146080362700075193;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/044/034/LC80440342016259LGN00/LC80440342016259LGN00_MTL.txt"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Length": [
+ "7903"
+ ],
+ "Content-Type": [
+ "application/octet-stream"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:22 GMT"
+ ],
+ "Etag": [
+ "\"7a5fd4743bd647485f88496fadb05c51\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:24:22 GMT"
+ ],
+ "Last-Modified": [
+ "Tue, 04 Oct 2016 16:42:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Generation": [
+ "1475599327662000"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=PWBt8g==",
+ "md5=el/UdDvWR0hfiElvrbBcUQ=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "7903"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/293,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1119.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=VsBYW-3RN8WslwHu7a6ADA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "570399209098"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/1119.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/1119:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo5mFL-EZMM9OKDSnSGq4gia4ybXCB2KVSwwxq1hwVdMmYsTM1FeqHag5MiTlTxM9PdaLFJsevdeTTj8buAkuuozX6GCg"
+ ]
+ },
+ "Body": "R1JPVVAgPSBMMV9NRVRBREFUQV9GSUxFCiAgR1JPVVAgPSBNRVRBREFUQV9GSUxFX0lORk8KICAgIE9SSUdJTiA9ICJJbWFnZSBjb3VydGVzeSBvZiB0aGUgVS5TLiBHZW9sb2dpY2FsIFN1cnZleSIKICAgIFJFUVVFU1RfSUQgPSAiMDcwMTYwOTE5MTA1MV8wMDAwNCIKICAgIExBTkRTQVRfU0NFTkVfSUQgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwIgogICAgRklMRV9EQVRFID0gMjAxNi0wOS0yMFQwMzoxMzowMloKICAgIFNUQVRJT05fSUQgPSAiTEdOIgogICAgUFJPQ0VTU0lOR19TT0ZUV0FSRV9WRVJTSU9OID0gIkxQR1NfMi42LjIiCiAgRU5EX0dST1VQID0gTUVUQURBVEFfRklMRV9JTkZPCiAgR1JPVVAgPSBQUk9EVUNUX01FVEFEQVRBCiAgICBEQVRBX1RZUEUgPSAiTDFUIgogICAgRUxFVkFUSU9OX1NPVVJDRSA9ICJHTFMyMDAwIgogICAgT1VUUFVUX0ZPUk1BVCA9ICJHRU9USUZGIgogICAgU1BBQ0VDUkFGVF9JRCA9ICJMQU5EU0FUXzgiCiAgICBTRU5TT1JfSUQgPSAiT0xJX1RJUlMiCiAgICBXUlNfUEFUSCA9IDQ0CiAgICBXUlNfUk9XID0gMzQKICAgIE5BRElSX09GRk5BRElSID0gIk5BRElSIgogICAgVEFSR0VUX1dSU19QQVRIID0gNDQKICAgIFRBUkdFVF9XUlNfUk9XID0gMzQKICAgIERBVEVfQUNRVUlSRUQgPSAyMDE2LTA5LTE1CiAgICBTQ0VORV9DRU5URVJfVElNRSA9ICIxODo0NjoxOC42ODY3MzgwWiIKICAgIENPUk5FUl9VTF9MQVRfUFJPRFVDVCA9IDM4LjUyODE5CiAgICBDT1JORVJfVUxfTE9OX1BST0RVQ1QgPSAtMTIzLjQwODQzCiAgICBDT1JORVJfVVJfTEFUX1BST0RVQ1QgPSAzOC41MDc2NQogICAgQ09STkVSX1VSX0xPTl9QUk9EVUNUID0gLTEyMC43NjkzMwogICAgQ09STkVSX0xMX0xBVF9QUk9EVUNUID0gMzYuNDE2MzMKICAgIENPUk5FUl9MTF9MT05fUFJPRFVDVCA9IC0xMjMuMzk3MDkKICAgIENPUk5FUl9MUl9MQVRfUFJPRFVDVCA9IDM2LjM5NzI5CiAgICBDT1JORVJfTFJfTE9OX1BST0RVQ1QgPSAtMTIwLjgzMTE3CiAgICBDT1JORVJfVUxfUFJPSkVDVElPTl9YX1BST0RVQ1QgPSA0NjQ0MDAuMDAwCiAgICBDT1JORVJfVUxfUFJPSkVDVElPTl9ZX1BST0RVQ1QgPSA0MjY0NTAwLjAwMAogICAgQ09STkVSX1VSX1BST0pFQ1RJT05fWF9QUk9EVUNUID0gNjk0NTAwLjAwMAogICAgQ09STkVSX1VSX1BST0pFQ1RJT05fWV9QUk9EVUNUID0gNDI2NDUwMC4wMDAKICAgIENPUk5FUl9MTF9QUk9KRUNUSU9OX1hfUFJPRFVDVCA9IDQ2NDQwMC4wMDAKICAgIENPUk5FUl9MTF9QUk9KRUNUSU9OX1lfUFJPRFVDVCA9IDQwMzAyMDAuMDAwCiAgICBDT1JORVJfTFJfUFJPSkVDVElPTl9YX1BST0RVQ1QgPSA2OTQ1MDAuMDAwCiAgICBDT1JORVJfTFJfUFJPSkVDVElPTl9ZX1BST0RVQ1QgPSA0MDMwMjAwLjAwMAogICAgUEFOQ0hST01BVElDX0xJTkVTID0gMTU2MjEKICAgIFBBTkNIUk9NQVRJQ19TQU1QTEVTID0gMTUzNDEKICAgIFJFRkxFQ1RJVkVfTElORVMgPSA3ODExCiAgICBSRUZMRUNUSVZFX1NBTVBMRVMgPSA3NjcxCiAgICBUSEVSTUFMX0xJTkVTID0gNzgxMQogICAgVEhFUk1BTF9TQU1QTEVTID0gNzY3MQogICAgRklMRV9OQU1FX0JBTkRfMSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjEuVElGIgogICAgRklMRV9OQU1FX0JBTkRfMiA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjIuVElGIgogICAgRklMRV9OQU1FX0JBTkRfMyA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjMuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNCA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjQuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjUuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNiA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjYuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNyA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjcuVElGIgogICAgRklMRV9OQU1FX0JBTkRfOCA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjguVElGIgogICAgRklMRV9OQU1FX0JBTkRfOSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjkuVElGIgogICAgRklMRV9OQU1FX0JBTkRfMTAgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IxMC5USUYiCiAgICBGSUxFX05BTUVfQkFORF8xMSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjExLlRJRiIKICAgIEZJTEVfTkFNRV9CQU5EX1FVQUxJVFkgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0JRQS5USUYiCiAgICBNRVRBREFUQV9GSUxFX05BTUUgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX01UTC50eHQiCiAgICBCUEZfTkFNRV9PTEkgPSAiTE84QlBGMjAxNjA5MTUxODMwNTdfMjAxNjA5MTUyMDA5NTAuMDEiCiAgICBCUEZfTkFNRV9USVJTID0gIkxUOEJQRjIwMTYwOTAyMDg0MTIyXzIwMTYwOTE3MDc0MDI3LjAyIgogICAgQ1BGX05BTUUgPSAiTDhDUEYyMDE2MDcwMV8yMDE2MDkzMC4wMiIKICAgIFJMVVRfRklMRV9OQU1FID0gIkw4UkxVVDIwMTUwMzAzXzIwNDMxMjMxdjExLmg1IgogIEVORF9HUk9VUCA9IFBST0RVQ1RfTUVUQURBVEEKICBHUk9VUCA9IElNQUdFX0FUVFJJQlVURVMKICAgIENMT1VEX0NPVkVSID0gMjkuNTYKICAgIENMT1VEX0NPVkVSX0xBTkQgPSAzLjMzCiAgICBJTUFHRV9RVUFMSVRZX09MSSA9IDkKICAgIElNQUdFX1FVQUxJVFlfVElSUyA9IDkKICAgIFRJUlNfU1NNX01PREVMID0gIkZJTkFMIgogICAgVElSU19TU01fUE9TSVRJT05fU1RBVFVTID0gIkVTVElNQVRFRCIKICAgIFJPTExfQU5HTEUgPSAtMC4wMDEKICAgIFNVTl9BWklNVVRIID0gMTQ4LjQ4MDQ5Mzk2CiAgICBTVU5fRUxFVkFUSU9OID0gNTAuOTM3NjgzOTkKICAgIEVBUlRIX1NVTl9ESVNUQU5DRSA9IDEuMDA1Mzc1MgogICAgR1JPVU5EX0NPTlRST0xfUE9JTlRTX1ZFUlNJT04gPSA0CiAgICBHUk9VTkRfQ09OVFJPTF9QT0lOVFNfTU9ERUwgPSA1NDgKICAgIEdFT01FVFJJQ19STVNFX01PREVMID0gNS44NTcKICAgIEdFT01FVFJJQ19STVNFX01PREVMX1kgPSAzLjg0MQogICAgR0VPTUVUUklDX1JNU0VfTU9ERUxfWCA9IDQuNDIyCiAgICBHUk9VTkRfQ09OVFJPTF9QT0lOVFNfVkVSSUZZID0gMjI4CiAgICBHRU9NRVRSSUNfUk1TRV9WRVJJRlkgPSAzLjM4MgogIEVORF9HUk9VUCA9IElNQUdFX0FUVFJJQlVURVMKICBHUk9VUCA9IE1JTl9NQVhfUkFESUFOQ0UKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF8xID0gNzUxLjk1NzA5CiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfMSA9IC02Mi4wOTY4NgogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzIgPSA3NzAuMDEzMTgKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF8yID0gLTYzLjU4Nzk0CiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfMyA9IDcwOS41NjA2MQogICAgUkFESUFOQ0VfTUlOSU1VTV9CQU5EXzMgPSAtNTguNTk1NzUKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF80ID0gNTk4LjM0MTQ5CiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfNCA9IC00OS40MTEyMwogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzUgPSAzNjYuMTU1MTUKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF81ID0gLTMwLjIzNzIxCiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfNiA9IDkxLjA1OTQ2CiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfNiA9IC03LjUxOTcyCiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfNyA9IDMwLjY5MTkxCiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfNyA9IC0yLjUzNDU1CiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfOCA9IDY3Ny4xNTc4NAogICAgUkFESUFOQ0VfTUlOSU1VTV9CQU5EXzggPSAtNTUuOTE5OTIKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF85ID0gMTQzLjEwMTczCiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfOSA9IC0xMS44MTczOQogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzEwID0gMjIuMDAxODAKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF8xMCA9IDAuMTAwMzMKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF8xMSA9IDIyLjAwMTgwCiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfMTEgPSAwLjEwMDMzCiAgRU5EX0dST1VQID0gTUlOX01BWF9SQURJQU5DRQogIEdST1VQID0gTUlOX01BWF9SRUZMRUNUQU5DRQogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzEgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzEgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF8yID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF8yID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfMyA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfMyA9IC0wLjA5OTk4MAogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzQgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzQgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF81ID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF81ID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfNiA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfNiA9IC0wLjA5OTk4MAogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzcgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzcgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF84ID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF84ID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfOSA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfOSA9IC0wLjA5OTk4MAogIEVORF9HUk9VUCA9IE1JTl9NQVhfUkVGTEVDVEFOQ0UKICBHUk9VUCA9IE1JTl9NQVhfUElYRUxfVkFMVUUKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF8xID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF8xID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzIgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzIgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfMyA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfMyA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF80ID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF80ID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzUgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzUgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfNiA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfNiA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF83ID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF83ID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzggPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzggPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfOSA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfOSA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF8xMCA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfMTAgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfMTEgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzExID0gMQogIEVORF9HUk9VUCA9IE1JTl9NQVhfUElYRUxfVkFMVUUKICBHUk9VUCA9IFJBRElPTUVUUklDX1JFU0NBTElORwogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzEgPSAxLjI0MjJFLTAyCiAgICBSQURJQU5DRV9NVUxUX0JBTkRfMiA9IDEuMjcyMEUtMDIKICAgIFJBRElBTkNFX01VTFRfQkFORF8zID0gMS4xNzIxRS0wMgogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzQgPSA5Ljg4NDJFLTAzCiAgICBSQURJQU5DRV9NVUxUX0JBTkRfNSA9IDYuMDQ4N0UtMDMKICAgIFJBRElBTkNFX01VTFRfQkFORF82ID0gMS41MDQyRS0wMwogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzcgPSA1LjA3MDFFLTA0CiAgICBSQURJQU5DRV9NVUxUX0JBTkRfOCA9IDEuMTE4NkUtMDIKICAgIFJBRElBTkNFX01VTFRfQkFORF85ID0gMi4zNjQwRS0wMwogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzEwID0gMy4zNDIwRS0wNAogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzExID0gMy4zNDIwRS0wNAogICAgUkFESUFOQ0VfQUREX0JBTkRfMSA9IC02Mi4xMDkyOAogICAgUkFESUFOQ0VfQUREX0JBTkRfMiA9IC02My42MDA2NgogICAgUkFESUFOQ0VfQUREX0JBTkRfMyA9IC01OC42MDc0NwogICAgUkFESUFOQ0VfQUREX0JBTkRfNCA9IC00OS40MjExMgogICAgUkFESUFOQ0VfQUREX0JBTkRfNSA9IC0zMC4yNDMyNgogICAgUkFESUFOQ0VfQUREX0JBTkRfNiA9IC03LjUyMTIyCiAgICBSQURJQU5DRV9BRERfQkFORF83ID0gLTIuNTM1MDUKICAgIFJBRElBTkNFX0FERF9CQU5EXzggPSAtNTUuOTMxMTAKICAgIFJBRElBTkNFX0FERF9CQU5EXzkgPSAtMTEuODE5NzUKICAgIFJBRElBTkNFX0FERF9CQU5EXzEwID0gMC4xMDAwMAogICAgUkFESUFOQ0VfQUREX0JBTkRfMTEgPSAwLjEwMDAwCiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfMSA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF8yID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzMgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfNCA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF81ID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzYgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfNyA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF84ID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzkgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF8xID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF8yID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF8zID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF80ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF81ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF82ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF83ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF84ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF85ID0gLTAuMTAwMDAwCiAgRU5EX0dST1VQID0gUkFESU9NRVRSSUNfUkVTQ0FMSU5HCiAgR1JPVVAgPSBUSVJTX1RIRVJNQUxfQ09OU1RBTlRTCiAgICBLMV9DT05TVEFOVF9CQU5EXzEwID0gNzc0Ljg4NTMKICAgIEsxX0NPTlNUQU5UX0JBTkRfMTEgPSA0ODAuODg4MwogICAgSzJfQ09OU1RBTlRfQkFORF8xMCA9IDEzMjEuMDc4OQogICAgSzJfQ09OU1RBTlRfQkFORF8xMSA9IDEyMDEuMTQ0MgogIEVORF9HUk9VUCA9IFRJUlNfVEhFUk1BTF9DT05TVEFOVFMKICBHUk9VUCA9IFBST0pFQ1RJT05fUEFSQU1FVEVSUwogICAgTUFQX1BST0pFQ1RJT04gPSAiVVRNIgogICAgREFUVU0gPSAiV0dTODQiCiAgICBFTExJUFNPSUQgPSAiV0dTODQiCiAgICBVVE1fWk9ORSA9IDEwCiAgICBHUklEX0NFTExfU0laRV9QQU5DSFJPTUFUSUMgPSAxNS4wMAogICAgR1JJRF9DRUxMX1NJWkVfUkVGTEVDVElWRSA9IDMwLjAwCiAgICBHUklEX0NFTExfU0laRV9USEVSTUFMID0gMzAuMDAKICAgIE9SSUVOVEFUSU9OID0gIk5PUlRIX1VQIgogICAgUkVTQU1QTElOR19PUFRJT04gPSAiQ1VCSUNfQ09OVk9MVVRJT04iCiAgRU5EX0dST1VQID0gUFJPSkVDVElPTl9QQVJBTUVURVJTCkVORF9HUk9VUCA9IEwxX01FVEFEQVRBX0ZJTEUKRU5ECg=="
+ }
+ },
+ {
+ "ID": "484926fd154dfaa7",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/gcp-public-data-landsat/o?alt=json\u0026delimiter=\u0026pageToken=\u0026prefix=LC08%2FPRE%2F044%2F034%2FLC80440342016259LGN00%2F\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "6ba307aab01605b95b1dcc8ef59b2cca/4002449431162925128;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/gcp-public-data-landsat/o?alt=json\u0026delimiter=\u0026pageToken=\u0026prefix=LC08%2FPRE%2F044%2F034%2FLC80440342016259LGN00%2F\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "13825"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:23 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:23 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Backends": [
+ "xgiadacd12:4335,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=V8BYW9__BYaxswa5pbcI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/5:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "GgIYBiAB"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpARcdyRRq7Ezlc_UDqc4hHaZ1DVej9_ev5b4tHCnGy-lhK08HXg_FoI7WW8NYqDVDVxWtWy1KOz84HKc3l5-B0PJY-Hw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdjcC1wdWJsaWMtZGF0YS1sYW5kc2F0L0xDMDgvUFJFLzA0NC8wMzQvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwL0xDODA0NDAzNDIwMTYyNTlMR04wMF9CMS5USUYvMTQ3NTU5OTE0NDU3OTAwMCIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvby9MQzA4JTJGUFJFJTJGMDQ0JTJGMDM0JTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwJTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IxLlRJRiIsCiAgICJuYW1lIjogIkxDMDgvUFJFLzA0NC8wMzQvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwL0xDODA0NDAzNDIwMTYyNTlMR04wMF9CMS5USUYiLAogICAiYnVja2V0IjogImdjcC1wdWJsaWMtZGF0YS1sYW5kc2F0IiwKICAgImdlbmVyYXRpb24iOiAiMTQ3NTU5OTE0NDU3OTAwMCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjM5OjA0LjU0NVoiLAogICAidXBkYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjM5OjA0LjU0NVoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6Mzk6MDQuNTQ1WiIsCiAgICJzaXplIjogIjc0NzIxNzM2IiwKICAgIm1kNUhhc2giOiAiODM1TDZCNWZyQjB6Q0I2czIycjJTdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvby9MQzA4JTJGUFJFJTJGMDQ0JTJGMDM0JTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwJTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IxLlRJRj9nZW5lcmF0aW9uPTE0NzU1OTkxNDQ1NzkwMDAmYWx0PW1lZGlhIiwKICAgImNyYzMyYyI6ICI5MzRCcmc9PSIsCiAgICJldGFnIjogIkNMamYzNWJMd2M4Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdjcC1wdWJsaWMtZGF0YS1sYW5kc2F0L0xDMDgvUFJFLzA0NC8wMzQvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwL0xDODA0NDAzNDIwMTYyNTlMR04wMF9CMTAuVElGLzE0NzU1OTkzMTAwNDIwMDAiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2djcC1wdWJsaWMtZGF0YS1sYW5kc2F0L28vTEMwOCUyRlBSRSUyRjA0NCUyRjAzNCUyRkxDODA0NDAzNDIwMTYyNTlMR04wMCUyRkxDODA0NDAzNDIwMTYyNTlMR04wMF9CMTAuVElGIiwKICAgIm5hbWUiOiAiTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IxMC5USUYiLAogICAiYnVja2V0IjogImdjcC1wdWJsaWMtZGF0YS1sYW5kc2F0IiwKICAgImdlbmVyYXRpb24iOiAiMTQ3NTU5OTMxMDA0MjAwMCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjQxOjUwLjAwMloiLAogICAidXBkYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjQxOjUwLjAwMloiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDE6NTAuMDAyWiIsCiAgICJzaXplIjogIjU4NjgxMjI4IiwKICAgIm1kNUhhc2giOiAiQlc2MjN4SGcxNUloVjI0bWJyTCtBdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvby9MQzA4JTJGUFJFJTJGMDQ0JTJGMDM0JTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwJTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IxMC5USUY/Z2VuZXJhdGlvbj0xNDc1NTk5MzEwMDQyMDAwJmFsdD1tZWRpYSIsCiAgICJjcmMzMmMiOiAieHpWMmZnPT0iLAogICAiZXRhZyI6ICJDSkRuMHVYTHdjOENFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnY3AtcHVibGljLWRhdGEtbGFuZHNhdC9MQzA4L1BSRS8wNDQvMDM0L0xDODA0NDAzNDIwMTYyNTlMR04wMC9MQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjExLlRJRi8xNDc1NTk5MzE5MTg4MDAwIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjExLlRJRiIsCiAgICJuYW1lIjogIkxDMDgvUFJFLzA0NC8wMzQvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwL0xDODA0NDAzNDIwMTYyNTlMR04wMF9CMTEuVElGIiwKICAgImJ1Y2tldCI6ICJnY3AtcHVibGljLWRhdGEtbGFuZHNhdCIsCiAgICJnZW5lcmF0aW9uIjogIjE0NzU1OTkzMTkxODgwMDAiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJjb250ZW50VHlwZSI6ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLAogICAidGltZUNyZWF0ZWQiOiAiMjAxNi0xMC0wNFQxNjo0MTo1OS4xNDlaIiwKICAgInVwZGF0ZWQiOiAiMjAxNi0xMC0wNFQxNjo0MTo1OS4xNDlaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjQxOjU5LjE0OVoiLAogICAic2l6ZSI6ICI1Njc5NjQzOSIsCiAgICJtZDVIYXNoIjogIkZPeGl5eEpYcUFmbFJUOGxGblNkT2c9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2djcC1wdWJsaWMtZGF0YS1sYW5kc2F0L28vTEMwOCUyRlBSRSUyRjA0NCUyRjAzNCUyRkxDODA0NDAzNDIwMTYyNTlMR04wMCUyRkxDODA0NDAzNDIwMTYyNTlMR04wMF9CMTEuVElGP2dlbmVyYXRpb249MTQ3NTU5OTMxOTE4ODAwMCZhbHQ9bWVkaWEiLAogICAiY3JjMzJjIjogInAvSEZWdz09IiwKICAgImV0YWciOiAiQ0tDRWdlckx3YzhDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IyLlRJRi8xNDc1NTk5MTYxMjI0MDAwIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjIuVElGIiwKICAgIm5hbWUiOiAiTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IyLlRJRiIsCiAgICJidWNrZXQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNDc1NTk5MTYxMjI0MDAwIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTYtMTAtMDRUMTY6Mzk6MjEuMTYwWiIsCiAgICJ1cGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6Mzk6MjEuMTYwWiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxNi0xMC0wNFQxNjozOToyMS4xNjBaIiwKICAgInNpemUiOiAiNzcxNDk3NzEiLAogICAibWQ1SGFzaCI6ICJNUDIyempPbzJOczBpWTRNVFBKUndBPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjIuVElGP2dlbmVyYXRpb249MTQ3NTU5OTE2MTIyNDAwMCZhbHQ9bWVkaWEiLAogICAiY3JjMzJjIjogInJJOFlSZz09IiwKICAgImV0YWciOiAiQ01EVzE1N0x3YzhDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IzLlRJRi8xNDc1NTk5MTc4NDM1MDAwIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjMuVElGIiwKICAgIm5hbWUiOiAiTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IzLlRJRiIsCiAgICJidWNrZXQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNDc1NTk5MTc4NDM1MDAwIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTYtMTAtMDRUMTY6Mzk6MzguMzc2WiIsCiAgICJ1cGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6Mzk6MzguMzc2WiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxNi0xMC0wNFQxNjozOTozOC4zNzZaIiwKICAgInNpemUiOiAiODAyOTM2ODciLAogICAibWQ1SGFzaCI6ICJ2UU1pR2VEdUJnNmNyM1hzZklFam9RPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjMuVElGP2dlbmVyYXRpb249MTQ3NTU5OTE3ODQzNTAwMCZhbHQ9bWVkaWEiLAogICAiY3JjMzJjIjogInVaQnJuQT09IiwKICAgImV0YWciOiAiQ0xpVDhxYkx3YzhDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I0LlRJRi8xNDc1NTk5MTk0MjY4MDAwIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjQuVElGIiwKICAgIm5hbWUiOiAiTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I0LlRJRiIsCiAgICJidWNrZXQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNDc1NTk5MTk0MjY4MDAwIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTYtMTAtMDRUMTY6Mzk6NTQuMjExWiIsCiAgICJ1cGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6Mzk6NTQuMjExWiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxNi0xMC0wNFQxNjozOTo1NC4yMTFaIiwKICAgInNpemUiOiAiODQ0OTQzNzUiLAogICAibWQ1SGFzaCI6ICJGV2VWQTAxWk8wK21BK0VSRmN6dWhBPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjQuVElGP2dlbmVyYXRpb249MTQ3NTU5OTE5NDI2ODAwMCZhbHQ9bWVkaWEiLAogICAiY3JjMzJjIjogIldlczVvUT09IiwKICAgImV0YWciOiAiQ09EQ3VLN0x3YzhDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I1LlRJRi8xNDc1NTk5MjAyOTc5MDAwIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjUuVElGIiwKICAgIm5hbWUiOiAiTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I1LlRJRiIsCiAgICJidWNrZXQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNDc1NTk5MjAyOTc5MDAwIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDA6MDIuOTM3WiIsCiAgICJ1cGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDA6MDIuOTM3WiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxNi0xMC0wNFQxNjo0MDowMi45MzdaIiwKICAgInNpemUiOiAiODkzMTg0NjciLAogICAibWQ1SGFzaCI6ICJwNG95S0hBR281S3kzS2cxVEsxWlF3PT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjUuVElGP2dlbmVyYXRpb249MTQ3NTU5OTIwMjk3OTAwMCZhbHQ9bWVkaWEiLAogICAiY3JjMzJjIjogInBUWXV1dz09IiwKICAgImV0YWciOiAiQ0xpWnpMTEx3YzhDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I2LlRJRi8xNDc1NTk5MjMzNDgxMDAwIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjYuVElGIiwKICAgIm5hbWUiOiAiTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I2LlRJRiIsCiAgICJidWNrZXQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNDc1NTk5MjMzNDgxMDAwIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDA6MzMuMzQ5WiIsCiAgICJ1cGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDA6MzMuMzQ5WiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxNi0xMC0wNFQxNjo0MDozMy4zNDlaIiwKICAgInNpemUiOiAiODk0NjU3NjciLAogICAibWQ1SGFzaCI6ICIyWjcyR1VPS3RsZ3pUOVZSU0dZWGpBPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjYuVElGP2dlbmVyYXRpb249MTQ3NTU5OTIzMzQ4MTAwMCZhbHQ9bWVkaWEiLAogICAiY3JjMzJjIjogIklOWEhiUT09IiwKICAgImV0YWciOiAiQ0tqeWtjSEx3YzhDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I3LlRJRi8xNDc1NTk5MjQxMDU1MDAwIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjcuVElGIiwKICAgIm5hbWUiOiAiTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I3LlRJRiIsCiAgICJidWNrZXQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNDc1NTk5MjQxMDU1MDAwIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDA6NDEuMDIxWiIsCiAgICJ1cGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDA6NDEuMDIxWiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxNi0xMC0wNFQxNjo0MDo0MS4wMjFaIiwKICAgInNpemUiOiAiODY0NjI2MTQiLAogICAibWQ1SGFzaCI6ICI4Z1BOUTdRWm9GMkNOWlo5RW1ybG9nPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjcuVElGP2dlbmVyYXRpb249MTQ3NTU5OTI0MTA1NTAwMCZhbHQ9bWVkaWEiLAogICAiY3JjMzJjIjogInV3Q0QrQT09IiwKICAgImV0YWciOiAiQ0ppVzRNVEx3YzhDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I4LlRJRi8xNDc1NTk5MjgxMzM4MDAwIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjguVElGIiwKICAgIm5hbWUiOiAiTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I4LlRJRiIsCiAgICJidWNrZXQiOiAiZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQiLAogICAiZ2VuZXJhdGlvbiI6ICIxNDc1NTk5MjgxMzM4MDAwIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDE6MjEuMzAwWiIsCiAgICJ1cGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDE6MjEuMzAwWiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxNi0xMC0wNFQxNjo0MToyMS4zMDBaIiwKICAgInNpemUiOiAiMzE4ODg3Nzc0IiwKICAgIm1kNUhhc2giOiAieTc5NUxyVXpCd2sydEw2UE0wMWNFQT09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvby9MQzA4JTJGUFJFJTJGMDQ0JTJGMDM0JTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwJTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I4LlRJRj9nZW5lcmF0aW9uPTE0NzU1OTkyODEzMzgwMDAmYWx0PW1lZGlhIiwKICAgImNyYzMyYyI6ICJaMytaaFE9PSIsCiAgICJldGFnIjogIkNKRHQrdGZMd2M4Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdjcC1wdWJsaWMtZGF0YS1sYW5kc2F0L0xDMDgvUFJFLzA0NC8wMzQvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwL0xDODA0NDAzNDIwMTYyNTlMR04wMF9COS5USUYvMTQ3NTU5OTI5MTQyNTAwMCIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvby9MQzA4JTJGUFJFJTJGMDQ0JTJGMDM0JTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwJTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I5LlRJRiIsCiAgICJuYW1lIjogIkxDMDgvUFJFLzA0NC8wMzQvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwL0xDODA0NDAzNDIwMTYyNTlMR04wMF9COS5USUYiLAogICAiYnVja2V0IjogImdjcC1wdWJsaWMtZGF0YS1sYW5kc2F0IiwKICAgImdlbmVyYXRpb24iOiAiMTQ3NTU5OTI5MTQyNTAwMCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjQxOjMxLjM2MVoiLAogICAidXBkYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjQxOjMxLjM2MVoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDE6MzEuMzYxWiIsCiAgICJzaXplIjogIjQ0MzA4MjA1IiwKICAgIm1kNUhhc2giOiAiNUI0MUUyREJiWTUycFlQVUdWaDk1Zz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ2NwLXB1YmxpYy1kYXRhLWxhbmRzYXQvby9MQzA4JTJGUFJFJTJGMDQ0JTJGMDM0JTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwJTJGTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0I5LlRJRj9nZW5lcmF0aW9uPTE0NzU1OTkyOTE0MjUwMDAmYWx0PW1lZGlhIiwKICAgImNyYzMyYyI6ICJhME9EUXc9PSIsCiAgICJldGFnIjogIkNPakI0dHpMd2M4Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdjcC1wdWJsaWMtZGF0YS1sYW5kc2F0L0xDMDgvUFJFLzA0NC8wMzQvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwL0xDODA0NDAzNDIwMTYyNTlMR04wMF9CUUEuVElGLzE0NzU1OTkzMjcyMjIwMDAiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2djcC1wdWJsaWMtZGF0YS1sYW5kc2F0L28vTEMwOCUyRlBSRSUyRjA0NCUyRjAzNCUyRkxDODA0NDAzNDIwMTYyNTlMR04wMCUyRkxDODA0NDAzNDIwMTYyNTlMR04wMF9CUUEuVElGIiwKICAgIm5hbWUiOiAiTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0JRQS5USUYiLAogICAiYnVja2V0IjogImdjcC1wdWJsaWMtZGF0YS1sYW5kc2F0IiwKICAgImdlbmVyYXRpb24iOiAiMTQ3NTU5OTMyNzIyMjAwMCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjQyOjA3LjE1OVoiLAogICAidXBkYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjQyOjA3LjE1OVoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDI6MDcuMTU5WiIsCiAgICJzaXplIjogIjMzNTQ3MTkiLAogICAibWQ1SGFzaCI6ICJ6cWlndmw1RW52bWkvR0xjOHlINTFBPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQlFBLlRJRj9nZW5lcmF0aW9uPTE0NzU1OTkzMjcyMjIwMDAmYWx0PW1lZGlhIiwKICAgImNyYzMyYyI6ICJXT0JnS0E9PSIsCiAgICJldGFnIjogIkNQQ3g2KzNMd2M4Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdjcC1wdWJsaWMtZGF0YS1sYW5kc2F0L0xDMDgvUFJFLzA0NC8wMzQvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwL0xDODA0NDAzNDIwMTYyNTlMR04wMF9NVEwudHh0LzE0NzU1OTkzMjc2NjIwMDAiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2djcC1wdWJsaWMtZGF0YS1sYW5kc2F0L28vTEMwOCUyRlBSRSUyRjA0NCUyRjAzNCUyRkxDODA0NDAzNDIwMTYyNTlMR04wMCUyRkxDODA0NDAzNDIwMTYyNTlMR04wMF9NVEwudHh0IiwKICAgIm5hbWUiOiAiTEMwOC9QUkUvMDQ0LzAzNC9MQzgwNDQwMzQyMDE2MjU5TEdOMDAvTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX01UTC50eHQiLAogICAiYnVja2V0IjogImdjcC1wdWJsaWMtZGF0YS1sYW5kc2F0IiwKICAgImdlbmVyYXRpb24iOiAiMTQ3NTU5OTMyNzY2MjAwMCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjQyOjA3LjYxOFoiLAogICAidXBkYXRlZCI6ICIyMDE2LTEwLTA0VDE2OjQyOjA3LjYxOFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTYtMTAtMDRUMTY6NDI6MDcuNjE4WiIsCiAgICJzaXplIjogIjc5MDMiLAogICAibWQ1SGFzaCI6ICJlbC9VZER2V1IwaGZpRWx2cmJCY1VRPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nY3AtcHVibGljLWRhdGEtbGFuZHNhdC9vL0xDMDglMkZQUkUlMkYwNDQlMkYwMzQlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDAlMkZMQzgwNDQwMzQyMDE2MjU5TEdOMDBfTVRMLnR4dD9nZW5lcmF0aW9uPTE0NzU1OTkzMjc2NjIwMDAmYWx0PW1lZGlhIiwKICAgImNyYzMyYyI6ICJQV0J0OGc9PSIsCiAgICJldGFnIjogIkNMQ2ZodTdMd2M4Q0VBRT0iCiAgfQogXQp9Cg=="
+ }
+ },
+ {
+ "ID": "a8abe0f7374ed544",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/noauth",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "259121fbdae714ba3b7e78771d50a123/11643411449027473764;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/noauth"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "247"
+ ],
+ "Content-Type": [
+ "application/xml; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:23 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:23 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/483,/bns/yb/borg/yb/bns/blobstore2/bitpusher/523.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=V8BYW9K4FsuWlAHb5ZnwAw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/523.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/523:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrhsF8AjXK8hnUz8HsC2jhRBWJvPSXx9i_lvao-JCyQtE9r6OXKk1pv_Pj2FA_8N0ssjBcE7wXm7RFEMKV5k3R5mBF_sfVNzLnNwzMNzlLLG6UJOLY"
+ ]
+ },
+ "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+QWNjZXNzRGVuaWVkPC9Db2RlPjxNZXNzYWdlPkFjY2VzcyBkZW5pZWQuPC9NZXNzYWdlPjxEZXRhaWxzPkFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuZ2V0IGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLjwvRGV0YWlscz48L0Vycm9yPg=="
+ }
+ },
+ {
+ "ID": "cd15305e871a0a78",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=2f4c457f8993f7211b60f612dd75d3620433d07973d91ccc066fbef76306"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e9c8bf6887f95f2f880fe6b5d5057c7d/15427724027242214130;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS0yZjRjNDU3Zjg5OTNmNzIxMWI2MGY2MTJkZDc1ZDM2MjA0MzNkMDc5NzNkOTFjY2MwNjZmYmVmNzYzMDYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJub2F1dGgifQoNCi0tMmY0YzQ1N2Y4OTkzZjcyMTFiNjBmNjEyZGQ3NWQzNjIwNDMzZDA3OTczZDkxY2NjMDY2ZmJlZjc2MzA2DQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCg0KYg0KLS0yZjRjNDU3Zjg5OTNmNzIxMWI2MGY2MTJkZDc1ZDM2MjA0MzNkMDc5NzNkOTFjY2MwNjZmYmVmNzYzMDYtLQ0K"
+ },
+ "Response": {
+ "StatusCode": 401,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "30809"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:23 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "Www-Authenticate": [
+ "Bearer realm=\"https://accounts.google.com/\""
+ ],
+ "X-Google-Backends": [
+ "xiiadcae13:4169,/bns/xi/borg/xi/bns/blobstore2/bitpusher/13.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=V8BYW9jNJKu_swbmtYzYDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/13.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/13:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "GgIYBiAB"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpTVxlAx6OVrsboJSyCWUFluSmZzFfGdnI_TEtBHw3SERG596NON8X_uMmNhzsWJuPIVdGztTts-JvqxhPKmkP2JAl74g"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAicmVxdWlyZWQiLAogICAgIm1lc3NhZ2UiOiAiQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguIiwKICAgICJsb2NhdGlvblR5cGUiOiAiaGVhZGVyIiwKICAgICJsb2NhdGlvbiI6ICJBdXRob3JpemF0aW9uIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YToyNzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjYxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5pbnNlcnQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjk1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1MT0dJTl9SRVFVSVJFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9Y29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRmF1bHQ6IEltbXV0YWJsZUVycm9yRGVmaW5pdGlvbntiYXNlPUxPR0lOX1JFUVVJUkVELCBjYXRlZ29yeT1VU0VSX0VSUk9SLCBjYXVzZT1udWxsLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YToyNzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjYxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5pbnNlcnQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjk1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz11bmF1dGhvcml6ZWQsIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLlJFUVVJUkVELCBjcmVhdGVkQnlCYWNrZW5kPXRydWUsIGRlYnVnTWVzc2FnZT1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjI3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6NjEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmluc2VydChPYmplY3RzRGVsZWdhdG9yLmphdmE6OTUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL25vYXV0aC5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9UkVRVUlSRUQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LmF1dGhlbnRpY2F0ZWRfdXNlciwgbWVzc2FnZT1Bbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL25vYXV0aC4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1oZWFkZXJzLkF1dGhvcml6YXRpb24sIG1lc3NhZ2U9QW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguLCByZWFzb249cmVxdWlyZWQsIHJwY0NvZGU9NDAxfSBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL25vYXV0aC46IGNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL25vYXV0aC5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6Mjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YTo2MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuaW5zZXJ0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo5NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuLCBkZWJ1Z0luZm89Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YToyNzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjYxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5pbnNlcnQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjk1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17V1dXLUF1dGhlbnRpY2F0ZT1bQmVhcmVyIHJlYWxtPVwiaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL1wiXX0sIGh0dHBTdGF0dXM9dW5hdXRob3JpemVkLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5SRVFVSVJFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YToyNzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjYxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5pbnNlcnQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjk1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPVJFUVVJUkVELCBlcnJvclByb3RvRG9tYWluPWdkYXRhLkNvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPWVudGl0eS5hdXRoZW50aWNhdGVkX3VzZXIsIG1lc3NhZ2U9QW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249aGVhZGVycy5BdXRob3JpemF0aW9uLCBtZXNzYWdlPUFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLiwgcmVhc29uPXJlcXVpcmVkLCBycGNDb2RlPTQwMX0gQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjI3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6NjEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmluc2VydChPYmplY3RzRGVsZWdhdG9yLmphdmE6OTUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL25vYXV0aC5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuYXV0aC5BdXRoZW50aWNhdG9ySW50ZXJjZXB0b3IuYWRkQ2hhbGxlbmdlSGVhZGVyKEF1dGhlbnRpY2F0b3JJbnRlcmNlcHRvci5qYXZhOjI2NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmF1dGguQXV0aGVudGljYXRvckludGVyY2VwdG9yLnByb2Nlc3NFcnJvclJlc3BvbnNlKEF1dGhlbnRpY2F0b3JJbnRlcmNlcHRvci5qYXZhOjIzMSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmF1dGguR2FpYU1pbnRJbnRlcmNlcHRvci5wcm9jZXNzRXJyb3JSZXNwb25zZShHYWlhTWludEludGVyY2VwdG9yLmphdmE6NzQ1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5pbnRlcmNlcHQuQXJvdW5kSW50ZXJjZXB0b3JXcmFwcGVyLnByb2Nlc3NFcnJvclJlc3BvbnNlKEFyb3VuZEludGVyY2VwdG9yV3JhcHBlci5qYXZhOjI4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc3RhdHMuU3RhdHNCb290c3RyYXAkSW50ZXJjZXB0b3JTdGF0c1JlY29yZGVyLnByb2Nlc3NFcnJvclJlc3BvbnNlKFN0YXRzQm9vdHN0cmFwLmphdmE6MzEyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5pbnRlcmNlcHQuSW50ZXJjZXB0aW9ucyRBcm91bmRJbnRlcmNlcHRpb24uaGFuZGxlRXJyb3JSZXNwb25zZShJbnRlcmNlcHRpb25zLmphdmE6MjAyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5pbnRlcmNlcHQuSW50ZXJjZXB0aW9ucyRBcm91bmRJbnRlcmNlcHRpb24uYWNjZXNzJDIwMChJbnRlcmNlcHRpb25zLmphdmE6MTAzKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5pbnRlcmNlcHQuSW50ZXJjZXB0aW9ucyRBcm91bmRJbnRlcmNlcHRpb24kMS5jYWxsKEludGVyY2VwdGlvbnMuamF2YToxNDQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLmludGVyY2VwdC5JbnRlcmNlcHRpb25zJEFyb3VuZEludGVyY2VwdGlvbiQxLmNhbGwoSW50ZXJjZXB0aW9ucy5qYXZhOjEzNylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0RXhjZXB0aW9uKEFic3RyYWN0RnV0dXJlLmphdmE6NzE2KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjY4KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9TE9HSU5fUkVRVUlSRUQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjI3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6NjEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmluc2VydChPYmplY3RzRGVsZWdhdG9yLmphdmE6OTUpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL25vYXV0aC5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPXVuYXV0aG9yaXplZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uUkVRVUlSRUQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBBbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL25vYXV0aC5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkluc2VydE9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoSW5zZXJ0T2JqZWN0LmphdmE6Mjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YTo2MSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuaW5zZXJ0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo5NSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuLCBlcnJvclByb3RvQ29kZT1SRVFVSVJFRCwgZXJyb3JQcm90b0RvbWFpbj1nZGF0YS5Db3JlRXJyb3JEb21haW4sIGZpbHRlcmVkTWVzc2FnZT1udWxsLCBsb2NhdGlvbj1lbnRpdHkuYXV0aGVudGljYXRlZF91c2VyLCBtZXNzYWdlPUFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLiwgdW5uYW1lZEFyZ3VtZW50cz1bXX0sIGxvY2F0aW9uPWhlYWRlcnMuQXV0aG9yaXphdGlvbiwgbWVzc2FnZT1Bbm9ueW1vdXMgY2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmNyZWF0ZSBhY2Nlc3MgdG8gZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL25vYXV0aC4sIHJlYXNvbj1yZXF1aXJlZCwgcnBjQ29kZT00MDF9IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLjogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuSW5zZXJ0T2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChJbnNlcnRPYmplY3QuamF2YToyNzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5JbnNlcnRPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEluc2VydE9iamVjdC5qYXZhOjYxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5pbnNlcnQoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjk1KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQW5vbnltb3VzIGNhbGxlciBkb2VzIG5vdCBoYXZlIHN0b3JhZ2Uub2JqZWN0cy5jcmVhdGUgYWNjZXNzIHRvIGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9ub2F1dGguXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdC4uLiAxOSBtb3JlXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDAxLAogICJtZXNzYWdlIjogIkFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuY3JlYXRlIGFjY2VzcyB0byBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvbm9hdXRoLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "3fdfe23f518a33c4",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/044/034/LC80440342016259LGN00/LC80440342016259LGN00_MTL.txt",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "9df0c8eb3ba90a5455799db8e152a0df/4622224545868706575;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/044/034/LC80440342016259LGN00/LC80440342016259LGN00_MTL.txt"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Length": [
+ "7903"
+ ],
+ "Content-Type": [
+ "application/octet-stream"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:23 GMT"
+ ],
+ "Etag": [
+ "\"7a5fd4743bd647485f88496fadb05c51\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:24:23 GMT"
+ ],
+ "Last-Modified": [
+ "Tue, 04 Oct 2016 16:42:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Generation": [
+ "1475599327662000"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=PWBt8g==",
+ "md5=el/UdDvWR0hfiElvrbBcUQ=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "7903"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/361,/bns/yb/borg/yb/bns/blobstore2/bitpusher/548.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=V8BYW8ziONXslQG005-QDg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "570399209098"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/548.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/548:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoixUGB17mkvbscCgZOegnvJ3_aVOjwZAIVD0kkUD5-4y1_EsNL1e23nCpRoEyqCiOhPLZuit7SGFKDStJsAT4U56DIU25SdGjPDIWiox8MjbOuZog"
+ ]
+ },
+ "Body": "R1JPVVAgPSBMMV9NRVRBREFUQV9GSUxFCiAgR1JPVVAgPSBNRVRBREFUQV9GSUxFX0lORk8KICAgIE9SSUdJTiA9ICJJbWFnZSBjb3VydGVzeSBvZiB0aGUgVS5TLiBHZW9sb2dpY2FsIFN1cnZleSIKICAgIFJFUVVFU1RfSUQgPSAiMDcwMTYwOTE5MTA1MV8wMDAwNCIKICAgIExBTkRTQVRfU0NFTkVfSUQgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwIgogICAgRklMRV9EQVRFID0gMjAxNi0wOS0yMFQwMzoxMzowMloKICAgIFNUQVRJT05fSUQgPSAiTEdOIgogICAgUFJPQ0VTU0lOR19TT0ZUV0FSRV9WRVJTSU9OID0gIkxQR1NfMi42LjIiCiAgRU5EX0dST1VQID0gTUVUQURBVEFfRklMRV9JTkZPCiAgR1JPVVAgPSBQUk9EVUNUX01FVEFEQVRBCiAgICBEQVRBX1RZUEUgPSAiTDFUIgogICAgRUxFVkFUSU9OX1NPVVJDRSA9ICJHTFMyMDAwIgogICAgT1VUUFVUX0ZPUk1BVCA9ICJHRU9USUZGIgogICAgU1BBQ0VDUkFGVF9JRCA9ICJMQU5EU0FUXzgiCiAgICBTRU5TT1JfSUQgPSAiT0xJX1RJUlMiCiAgICBXUlNfUEFUSCA9IDQ0CiAgICBXUlNfUk9XID0gMzQKICAgIE5BRElSX09GRk5BRElSID0gIk5BRElSIgogICAgVEFSR0VUX1dSU19QQVRIID0gNDQKICAgIFRBUkdFVF9XUlNfUk9XID0gMzQKICAgIERBVEVfQUNRVUlSRUQgPSAyMDE2LTA5LTE1CiAgICBTQ0VORV9DRU5URVJfVElNRSA9ICIxODo0NjoxOC42ODY3MzgwWiIKICAgIENPUk5FUl9VTF9MQVRfUFJPRFVDVCA9IDM4LjUyODE5CiAgICBDT1JORVJfVUxfTE9OX1BST0RVQ1QgPSAtMTIzLjQwODQzCiAgICBDT1JORVJfVVJfTEFUX1BST0RVQ1QgPSAzOC41MDc2NQogICAgQ09STkVSX1VSX0xPTl9QUk9EVUNUID0gLTEyMC43NjkzMwogICAgQ09STkVSX0xMX0xBVF9QUk9EVUNUID0gMzYuNDE2MzMKICAgIENPUk5FUl9MTF9MT05fUFJPRFVDVCA9IC0xMjMuMzk3MDkKICAgIENPUk5FUl9MUl9MQVRfUFJPRFVDVCA9IDM2LjM5NzI5CiAgICBDT1JORVJfTFJfTE9OX1BST0RVQ1QgPSAtMTIwLjgzMTE3CiAgICBDT1JORVJfVUxfUFJPSkVDVElPTl9YX1BST0RVQ1QgPSA0NjQ0MDAuMDAwCiAgICBDT1JORVJfVUxfUFJPSkVDVElPTl9ZX1BST0RVQ1QgPSA0MjY0NTAwLjAwMAogICAgQ09STkVSX1VSX1BST0pFQ1RJT05fWF9QUk9EVUNUID0gNjk0NTAwLjAwMAogICAgQ09STkVSX1VSX1BST0pFQ1RJT05fWV9QUk9EVUNUID0gNDI2NDUwMC4wMDAKICAgIENPUk5FUl9MTF9QUk9KRUNUSU9OX1hfUFJPRFVDVCA9IDQ2NDQwMC4wMDAKICAgIENPUk5FUl9MTF9QUk9KRUNUSU9OX1lfUFJPRFVDVCA9IDQwMzAyMDAuMDAwCiAgICBDT1JORVJfTFJfUFJPSkVDVElPTl9YX1BST0RVQ1QgPSA2OTQ1MDAuMDAwCiAgICBDT1JORVJfTFJfUFJPSkVDVElPTl9ZX1BST0RVQ1QgPSA0MDMwMjAwLjAwMAogICAgUEFOQ0hST01BVElDX0xJTkVTID0gMTU2MjEKICAgIFBBTkNIUk9NQVRJQ19TQU1QTEVTID0gMTUzNDEKICAgIFJFRkxFQ1RJVkVfTElORVMgPSA3ODExCiAgICBSRUZMRUNUSVZFX1NBTVBMRVMgPSA3NjcxCiAgICBUSEVSTUFMX0xJTkVTID0gNzgxMQogICAgVEhFUk1BTF9TQU1QTEVTID0gNzY3MQogICAgRklMRV9OQU1FX0JBTkRfMSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjEuVElGIgogICAgRklMRV9OQU1FX0JBTkRfMiA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjIuVElGIgogICAgRklMRV9OQU1FX0JBTkRfMyA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjMuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNCA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjQuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjUuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNiA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjYuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNyA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjcuVElGIgogICAgRklMRV9OQU1FX0JBTkRfOCA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjguVElGIgogICAgRklMRV9OQU1FX0JBTkRfOSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjkuVElGIgogICAgRklMRV9OQU1FX0JBTkRfMTAgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IxMC5USUYiCiAgICBGSUxFX05BTUVfQkFORF8xMSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjExLlRJRiIKICAgIEZJTEVfTkFNRV9CQU5EX1FVQUxJVFkgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0JRQS5USUYiCiAgICBNRVRBREFUQV9GSUxFX05BTUUgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX01UTC50eHQiCiAgICBCUEZfTkFNRV9PTEkgPSAiTE84QlBGMjAxNjA5MTUxODMwNTdfMjAxNjA5MTUyMDA5NTAuMDEiCiAgICBCUEZfTkFNRV9USVJTID0gIkxUOEJQRjIwMTYwOTAyMDg0MTIyXzIwMTYwOTE3MDc0MDI3LjAyIgogICAgQ1BGX05BTUUgPSAiTDhDUEYyMDE2MDcwMV8yMDE2MDkzMC4wMiIKICAgIFJMVVRfRklMRV9OQU1FID0gIkw4UkxVVDIwMTUwMzAzXzIwNDMxMjMxdjExLmg1IgogIEVORF9HUk9VUCA9IFBST0RVQ1RfTUVUQURBVEEKICBHUk9VUCA9IElNQUdFX0FUVFJJQlVURVMKICAgIENMT1VEX0NPVkVSID0gMjkuNTYKICAgIENMT1VEX0NPVkVSX0xBTkQgPSAzLjMzCiAgICBJTUFHRV9RVUFMSVRZX09MSSA9IDkKICAgIElNQUdFX1FVQUxJVFlfVElSUyA9IDkKICAgIFRJUlNfU1NNX01PREVMID0gIkZJTkFMIgogICAgVElSU19TU01fUE9TSVRJT05fU1RBVFVTID0gIkVTVElNQVRFRCIKICAgIFJPTExfQU5HTEUgPSAtMC4wMDEKICAgIFNVTl9BWklNVVRIID0gMTQ4LjQ4MDQ5Mzk2CiAgICBTVU5fRUxFVkFUSU9OID0gNTAuOTM3NjgzOTkKICAgIEVBUlRIX1NVTl9ESVNUQU5DRSA9IDEuMDA1Mzc1MgogICAgR1JPVU5EX0NPTlRST0xfUE9JTlRTX1ZFUlNJT04gPSA0CiAgICBHUk9VTkRfQ09OVFJPTF9QT0lOVFNfTU9ERUwgPSA1NDgKICAgIEdFT01FVFJJQ19STVNFX01PREVMID0gNS44NTcKICAgIEdFT01FVFJJQ19STVNFX01PREVMX1kgPSAzLjg0MQogICAgR0VPTUVUUklDX1JNU0VfTU9ERUxfWCA9IDQuNDIyCiAgICBHUk9VTkRfQ09OVFJPTF9QT0lOVFNfVkVSSUZZID0gMjI4CiAgICBHRU9NRVRSSUNfUk1TRV9WRVJJRlkgPSAzLjM4MgogIEVORF9HUk9VUCA9IElNQUdFX0FUVFJJQlVURVMKICBHUk9VUCA9IE1JTl9NQVhfUkFESUFOQ0UKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF8xID0gNzUxLjk1NzA5CiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfMSA9IC02Mi4wOTY4NgogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzIgPSA3NzAuMDEzMTgKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF8yID0gLTYzLjU4Nzk0CiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfMyA9IDcwOS41NjA2MQogICAgUkFESUFOQ0VfTUlOSU1VTV9CQU5EXzMgPSAtNTguNTk1NzUKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF80ID0gNTk4LjM0MTQ5CiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfNCA9IC00OS40MTEyMwogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzUgPSAzNjYuMTU1MTUKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF81ID0gLTMwLjIzNzIxCiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfNiA9IDkxLjA1OTQ2CiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfNiA9IC03LjUxOTcyCiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfNyA9IDMwLjY5MTkxCiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfNyA9IC0yLjUzNDU1CiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfOCA9IDY3Ny4xNTc4NAogICAgUkFESUFOQ0VfTUlOSU1VTV9CQU5EXzggPSAtNTUuOTE5OTIKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF85ID0gMTQzLjEwMTczCiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfOSA9IC0xMS44MTczOQogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzEwID0gMjIuMDAxODAKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF8xMCA9IDAuMTAwMzMKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF8xMSA9IDIyLjAwMTgwCiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfMTEgPSAwLjEwMDMzCiAgRU5EX0dST1VQID0gTUlOX01BWF9SQURJQU5DRQogIEdST1VQID0gTUlOX01BWF9SRUZMRUNUQU5DRQogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzEgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzEgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF8yID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF8yID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfMyA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfMyA9IC0wLjA5OTk4MAogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzQgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzQgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF81ID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF81ID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfNiA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfNiA9IC0wLjA5OTk4MAogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzcgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzcgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF84ID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF84ID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfOSA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfOSA9IC0wLjA5OTk4MAogIEVORF9HUk9VUCA9IE1JTl9NQVhfUkVGTEVDVEFOQ0UKICBHUk9VUCA9IE1JTl9NQVhfUElYRUxfVkFMVUUKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF8xID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF8xID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzIgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzIgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfMyA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfMyA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF80ID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF80ID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzUgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzUgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfNiA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfNiA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF83ID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF83ID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzggPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzggPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfOSA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfOSA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF8xMCA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfMTAgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfMTEgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzExID0gMQogIEVORF9HUk9VUCA9IE1JTl9NQVhfUElYRUxfVkFMVUUKICBHUk9VUCA9IFJBRElPTUVUUklDX1JFU0NBTElORwogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzEgPSAxLjI0MjJFLTAyCiAgICBSQURJQU5DRV9NVUxUX0JBTkRfMiA9IDEuMjcyMEUtMDIKICAgIFJBRElBTkNFX01VTFRfQkFORF8zID0gMS4xNzIxRS0wMgogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzQgPSA5Ljg4NDJFLTAzCiAgICBSQURJQU5DRV9NVUxUX0JBTkRfNSA9IDYuMDQ4N0UtMDMKICAgIFJBRElBTkNFX01VTFRfQkFORF82ID0gMS41MDQyRS0wMwogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzcgPSA1LjA3MDFFLTA0CiAgICBSQURJQU5DRV9NVUxUX0JBTkRfOCA9IDEuMTE4NkUtMDIKICAgIFJBRElBTkNFX01VTFRfQkFORF85ID0gMi4zNjQwRS0wMwogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzEwID0gMy4zNDIwRS0wNAogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzExID0gMy4zNDIwRS0wNAogICAgUkFESUFOQ0VfQUREX0JBTkRfMSA9IC02Mi4xMDkyOAogICAgUkFESUFOQ0VfQUREX0JBTkRfMiA9IC02My42MDA2NgogICAgUkFESUFOQ0VfQUREX0JBTkRfMyA9IC01OC42MDc0NwogICAgUkFESUFOQ0VfQUREX0JBTkRfNCA9IC00OS40MjExMgogICAgUkFESUFOQ0VfQUREX0JBTkRfNSA9IC0zMC4yNDMyNgogICAgUkFESUFOQ0VfQUREX0JBTkRfNiA9IC03LjUyMTIyCiAgICBSQURJQU5DRV9BRERfQkFORF83ID0gLTIuNTM1MDUKICAgIFJBRElBTkNFX0FERF9CQU5EXzggPSAtNTUuOTMxMTAKICAgIFJBRElBTkNFX0FERF9CQU5EXzkgPSAtMTEuODE5NzUKICAgIFJBRElBTkNFX0FERF9CQU5EXzEwID0gMC4xMDAwMAogICAgUkFESUFOQ0VfQUREX0JBTkRfMTEgPSAwLjEwMDAwCiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfMSA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF8yID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzMgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfNCA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF81ID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzYgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfNyA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF84ID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzkgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF8xID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF8yID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF8zID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF80ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF81ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF82ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF83ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF84ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF85ID0gLTAuMTAwMDAwCiAgRU5EX0dST1VQID0gUkFESU9NRVRSSUNfUkVTQ0FMSU5HCiAgR1JPVVAgPSBUSVJTX1RIRVJNQUxfQ09OU1RBTlRTCiAgICBLMV9DT05TVEFOVF9CQU5EXzEwID0gNzc0Ljg4NTMKICAgIEsxX0NPTlNUQU5UX0JBTkRfMTEgPSA0ODAuODg4MwogICAgSzJfQ09OU1RBTlRfQkFORF8xMCA9IDEzMjEuMDc4OQogICAgSzJfQ09OU1RBTlRfQkFORF8xMSA9IDEyMDEuMTQ0MgogIEVORF9HUk9VUCA9IFRJUlNfVEhFUk1BTF9DT05TVEFOVFMKICBHUk9VUCA9IFBST0pFQ1RJT05fUEFSQU1FVEVSUwogICAgTUFQX1BST0pFQ1RJT04gPSAiVVRNIgogICAgREFUVU0gPSAiV0dTODQiCiAgICBFTExJUFNPSUQgPSAiV0dTODQiCiAgICBVVE1fWk9ORSA9IDEwCiAgICBHUklEX0NFTExfU0laRV9QQU5DSFJPTUFUSUMgPSAxNS4wMAogICAgR1JJRF9DRUxMX1NJWkVfUkVGTEVDVElWRSA9IDMwLjAwCiAgICBHUklEX0NFTExfU0laRV9USEVSTUFMID0gMzAuMDAKICAgIE9SSUVOVEFUSU9OID0gIk5PUlRIX1VQIgogICAgUkVTQU1QTElOR19PUFRJT04gPSAiQ1VCSUNfQ09OVk9MVVRJT04iCiAgRU5EX0dST1VQID0gUFJPSkVDVElPTl9QQVJBTUVURVJTCkVORF9HUk9VUCA9IEwxX01FVEFEQVRBX0ZJTEUKRU5ECg=="
+ }
+ },
+ {
+ "ID": "a2321aa394b7a664",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/044/034/LC80440342016259LGN00/LC80440342016259LGN00_MTL.txt",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ca0dc402c90b3b86298a0a477b7181eb/12263186568028156971;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/044/034/LC80440342016259LGN00/LC80440342016259LGN00_MTL.txt"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Length": [
+ "7903"
+ ],
+ "Content-Type": [
+ "application/octet-stream"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:24 GMT"
+ ],
+ "Etag": [
+ "\"7a5fd4743bd647485f88496fadb05c51\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:24:24 GMT"
+ ],
+ "Last-Modified": [
+ "Tue, 04 Oct 2016 16:42:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Generation": [
+ "1475599327662000"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=PWBt8g==",
+ "md5=el/UdDvWR0hfiElvrbBcUQ=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "7903"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/189,/bns/yb/borg/yb/bns/blobstore2/bitpusher/37.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=V8BYW67APMKElgGSjJy4DQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "570399209098"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/37.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/37:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrDL7IMEOyeI_YQeKTKmJx59LOIJsMZW4hv3hTZ3038gysU0nNby2-wI1GDQe0IG6kHLiIu0NBU4omKwpxHm0-Be0iff_CDUshakXHd1nkRLtHmits"
+ ]
+ },
+ "Body": "R1JPVVAgPSBMMV9NRVRBREFUQV9GSUxFCiAgR1JPVVAgPSBNRVRBREFUQV9GSUxFX0lORk8KICAgIE9SSUdJTiA9ICJJbWFnZSBjb3VydGVzeSBvZiB0aGUgVS5TLiBHZW9sb2dpY2FsIFN1cnZleSIKICAgIFJFUVVFU1RfSUQgPSAiMDcwMTYwOTE5MTA1MV8wMDAwNCIKICAgIExBTkRTQVRfU0NFTkVfSUQgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwIgogICAgRklMRV9EQVRFID0gMjAxNi0wOS0yMFQwMzoxMzowMloKICAgIFNUQVRJT05fSUQgPSAiTEdOIgogICAgUFJPQ0VTU0lOR19TT0ZUV0FSRV9WRVJTSU9OID0gIkxQR1NfMi42LjIiCiAgRU5EX0dST1VQID0gTUVUQURBVEFfRklMRV9JTkZPCiAgR1JPVVAgPSBQUk9EVUNUX01FVEFEQVRBCiAgICBEQVRBX1RZUEUgPSAiTDFUIgogICAgRUxFVkFUSU9OX1NPVVJDRSA9ICJHTFMyMDAwIgogICAgT1VUUFVUX0ZPUk1BVCA9ICJHRU9USUZGIgogICAgU1BBQ0VDUkFGVF9JRCA9ICJMQU5EU0FUXzgiCiAgICBTRU5TT1JfSUQgPSAiT0xJX1RJUlMiCiAgICBXUlNfUEFUSCA9IDQ0CiAgICBXUlNfUk9XID0gMzQKICAgIE5BRElSX09GRk5BRElSID0gIk5BRElSIgogICAgVEFSR0VUX1dSU19QQVRIID0gNDQKICAgIFRBUkdFVF9XUlNfUk9XID0gMzQKICAgIERBVEVfQUNRVUlSRUQgPSAyMDE2LTA5LTE1CiAgICBTQ0VORV9DRU5URVJfVElNRSA9ICIxODo0NjoxOC42ODY3MzgwWiIKICAgIENPUk5FUl9VTF9MQVRfUFJPRFVDVCA9IDM4LjUyODE5CiAgICBDT1JORVJfVUxfTE9OX1BST0RVQ1QgPSAtMTIzLjQwODQzCiAgICBDT1JORVJfVVJfTEFUX1BST0RVQ1QgPSAzOC41MDc2NQogICAgQ09STkVSX1VSX0xPTl9QUk9EVUNUID0gLTEyMC43NjkzMwogICAgQ09STkVSX0xMX0xBVF9QUk9EVUNUID0gMzYuNDE2MzMKICAgIENPUk5FUl9MTF9MT05fUFJPRFVDVCA9IC0xMjMuMzk3MDkKICAgIENPUk5FUl9MUl9MQVRfUFJPRFVDVCA9IDM2LjM5NzI5CiAgICBDT1JORVJfTFJfTE9OX1BST0RVQ1QgPSAtMTIwLjgzMTE3CiAgICBDT1JORVJfVUxfUFJPSkVDVElPTl9YX1BST0RVQ1QgPSA0NjQ0MDAuMDAwCiAgICBDT1JORVJfVUxfUFJPSkVDVElPTl9ZX1BST0RVQ1QgPSA0MjY0NTAwLjAwMAogICAgQ09STkVSX1VSX1BST0pFQ1RJT05fWF9QUk9EVUNUID0gNjk0NTAwLjAwMAogICAgQ09STkVSX1VSX1BST0pFQ1RJT05fWV9QUk9EVUNUID0gNDI2NDUwMC4wMDAKICAgIENPUk5FUl9MTF9QUk9KRUNUSU9OX1hfUFJPRFVDVCA9IDQ2NDQwMC4wMDAKICAgIENPUk5FUl9MTF9QUk9KRUNUSU9OX1lfUFJPRFVDVCA9IDQwMzAyMDAuMDAwCiAgICBDT1JORVJfTFJfUFJPSkVDVElPTl9YX1BST0RVQ1QgPSA2OTQ1MDAuMDAwCiAgICBDT1JORVJfTFJfUFJPSkVDVElPTl9ZX1BST0RVQ1QgPSA0MDMwMjAwLjAwMAogICAgUEFOQ0hST01BVElDX0xJTkVTID0gMTU2MjEKICAgIFBBTkNIUk9NQVRJQ19TQU1QTEVTID0gMTUzNDEKICAgIFJFRkxFQ1RJVkVfTElORVMgPSA3ODExCiAgICBSRUZMRUNUSVZFX1NBTVBMRVMgPSA3NjcxCiAgICBUSEVSTUFMX0xJTkVTID0gNzgxMQogICAgVEhFUk1BTF9TQU1QTEVTID0gNzY3MQogICAgRklMRV9OQU1FX0JBTkRfMSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjEuVElGIgogICAgRklMRV9OQU1FX0JBTkRfMiA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjIuVElGIgogICAgRklMRV9OQU1FX0JBTkRfMyA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjMuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNCA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjQuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjUuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNiA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjYuVElGIgogICAgRklMRV9OQU1FX0JBTkRfNyA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjcuVElGIgogICAgRklMRV9OQU1FX0JBTkRfOCA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjguVElGIgogICAgRklMRV9OQU1FX0JBTkRfOSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjkuVElGIgogICAgRklMRV9OQU1FX0JBTkRfMTAgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0IxMC5USUYiCiAgICBGSUxFX05BTUVfQkFORF8xMSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjExLlRJRiIKICAgIEZJTEVfTkFNRV9CQU5EX1FVQUxJVFkgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX0JRQS5USUYiCiAgICBNRVRBREFUQV9GSUxFX05BTUUgPSAiTEM4MDQ0MDM0MjAxNjI1OUxHTjAwX01UTC50eHQiCiAgICBCUEZfTkFNRV9PTEkgPSAiTE84QlBGMjAxNjA5MTUxODMwNTdfMjAxNjA5MTUyMDA5NTAuMDEiCiAgICBCUEZfTkFNRV9USVJTID0gIkxUOEJQRjIwMTYwOTAyMDg0MTIyXzIwMTYwOTE3MDc0MDI3LjAyIgogICAgQ1BGX05BTUUgPSAiTDhDUEYyMDE2MDcwMV8yMDE2MDkzMC4wMiIKICAgIFJMVVRfRklMRV9OQU1FID0gIkw4UkxVVDIwMTUwMzAzXzIwNDMxMjMxdjExLmg1IgogIEVORF9HUk9VUCA9IFBST0RVQ1RfTUVUQURBVEEKICBHUk9VUCA9IElNQUdFX0FUVFJJQlVURVMKICAgIENMT1VEX0NPVkVSID0gMjkuNTYKICAgIENMT1VEX0NPVkVSX0xBTkQgPSAzLjMzCiAgICBJTUFHRV9RVUFMSVRZX09MSSA9IDkKICAgIElNQUdFX1FVQUxJVFlfVElSUyA9IDkKICAgIFRJUlNfU1NNX01PREVMID0gIkZJTkFMIgogICAgVElSU19TU01fUE9TSVRJT05fU1RBVFVTID0gIkVTVElNQVRFRCIKICAgIFJPTExfQU5HTEUgPSAtMC4wMDEKICAgIFNVTl9BWklNVVRIID0gMTQ4LjQ4MDQ5Mzk2CiAgICBTVU5fRUxFVkFUSU9OID0gNTAuOTM3NjgzOTkKICAgIEVBUlRIX1NVTl9ESVNUQU5DRSA9IDEuMDA1Mzc1MgogICAgR1JPVU5EX0NPTlRST0xfUE9JTlRTX1ZFUlNJT04gPSA0CiAgICBHUk9VTkRfQ09OVFJPTF9QT0lOVFNfTU9ERUwgPSA1NDgKICAgIEdFT01FVFJJQ19STVNFX01PREVMID0gNS44NTcKICAgIEdFT01FVFJJQ19STVNFX01PREVMX1kgPSAzLjg0MQogICAgR0VPTUVUUklDX1JNU0VfTU9ERUxfWCA9IDQuNDIyCiAgICBHUk9VTkRfQ09OVFJPTF9QT0lOVFNfVkVSSUZZID0gMjI4CiAgICBHRU9NRVRSSUNfUk1TRV9WRVJJRlkgPSAzLjM4MgogIEVORF9HUk9VUCA9IElNQUdFX0FUVFJJQlVURVMKICBHUk9VUCA9IE1JTl9NQVhfUkFESUFOQ0UKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF8xID0gNzUxLjk1NzA5CiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfMSA9IC02Mi4wOTY4NgogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzIgPSA3NzAuMDEzMTgKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF8yID0gLTYzLjU4Nzk0CiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfMyA9IDcwOS41NjA2MQogICAgUkFESUFOQ0VfTUlOSU1VTV9CQU5EXzMgPSAtNTguNTk1NzUKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF80ID0gNTk4LjM0MTQ5CiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfNCA9IC00OS40MTEyMwogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzUgPSAzNjYuMTU1MTUKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF81ID0gLTMwLjIzNzIxCiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfNiA9IDkxLjA1OTQ2CiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfNiA9IC03LjUxOTcyCiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfNyA9IDMwLjY5MTkxCiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfNyA9IC0yLjUzNDU1CiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfOCA9IDY3Ny4xNTc4NAogICAgUkFESUFOQ0VfTUlOSU1VTV9CQU5EXzggPSAtNTUuOTE5OTIKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF85ID0gMTQzLjEwMTczCiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfOSA9IC0xMS44MTczOQogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzEwID0gMjIuMDAxODAKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF8xMCA9IDAuMTAwMzMKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF8xMSA9IDIyLjAwMTgwCiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfMTEgPSAwLjEwMDMzCiAgRU5EX0dST1VQID0gTUlOX01BWF9SQURJQU5DRQogIEdST1VQID0gTUlOX01BWF9SRUZMRUNUQU5DRQogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzEgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzEgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF8yID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF8yID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfMyA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfMyA9IC0wLjA5OTk4MAogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzQgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzQgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF81ID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF81ID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfNiA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfNiA9IC0wLjA5OTk4MAogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzcgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzcgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF84ID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF84ID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfOSA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfOSA9IC0wLjA5OTk4MAogIEVORF9HUk9VUCA9IE1JTl9NQVhfUkVGTEVDVEFOQ0UKICBHUk9VUCA9IE1JTl9NQVhfUElYRUxfVkFMVUUKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF8xID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF8xID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzIgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzIgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfMyA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfMyA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF80ID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF80ID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzUgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzUgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfNiA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfNiA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF83ID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF83ID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzggPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzggPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfOSA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfOSA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF8xMCA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfMTAgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfMTEgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzExID0gMQogIEVORF9HUk9VUCA9IE1JTl9NQVhfUElYRUxfVkFMVUUKICBHUk9VUCA9IFJBRElPTUVUUklDX1JFU0NBTElORwogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzEgPSAxLjI0MjJFLTAyCiAgICBSQURJQU5DRV9NVUxUX0JBTkRfMiA9IDEuMjcyMEUtMDIKICAgIFJBRElBTkNFX01VTFRfQkFORF8zID0gMS4xNzIxRS0wMgogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzQgPSA5Ljg4NDJFLTAzCiAgICBSQURJQU5DRV9NVUxUX0JBTkRfNSA9IDYuMDQ4N0UtMDMKICAgIFJBRElBTkNFX01VTFRfQkFORF82ID0gMS41MDQyRS0wMwogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzcgPSA1LjA3MDFFLTA0CiAgICBSQURJQU5DRV9NVUxUX0JBTkRfOCA9IDEuMTE4NkUtMDIKICAgIFJBRElBTkNFX01VTFRfQkFORF85ID0gMi4zNjQwRS0wMwogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzEwID0gMy4zNDIwRS0wNAogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzExID0gMy4zNDIwRS0wNAogICAgUkFESUFOQ0VfQUREX0JBTkRfMSA9IC02Mi4xMDkyOAogICAgUkFESUFOQ0VfQUREX0JBTkRfMiA9IC02My42MDA2NgogICAgUkFESUFOQ0VfQUREX0JBTkRfMyA9IC01OC42MDc0NwogICAgUkFESUFOQ0VfQUREX0JBTkRfNCA9IC00OS40MjExMgogICAgUkFESUFOQ0VfQUREX0JBTkRfNSA9IC0zMC4yNDMyNgogICAgUkFESUFOQ0VfQUREX0JBTkRfNiA9IC03LjUyMTIyCiAgICBSQURJQU5DRV9BRERfQkFORF83ID0gLTIuNTM1MDUKICAgIFJBRElBTkNFX0FERF9CQU5EXzggPSAtNTUuOTMxMTAKICAgIFJBRElBTkNFX0FERF9CQU5EXzkgPSAtMTEuODE5NzUKICAgIFJBRElBTkNFX0FERF9CQU5EXzEwID0gMC4xMDAwMAogICAgUkFESUFOQ0VfQUREX0JBTkRfMTEgPSAwLjEwMDAwCiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfMSA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF8yID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzMgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfNCA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF81ID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzYgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfNyA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF84ID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzkgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF8xID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF8yID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF8zID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF80ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF81ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF82ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF83ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF84ID0gLTAuMTAwMDAwCiAgICBSRUZMRUNUQU5DRV9BRERfQkFORF85ID0gLTAuMTAwMDAwCiAgRU5EX0dST1VQID0gUkFESU9NRVRSSUNfUkVTQ0FMSU5HCiAgR1JPVVAgPSBUSVJTX1RIRVJNQUxfQ09OU1RBTlRTCiAgICBLMV9DT05TVEFOVF9CQU5EXzEwID0gNzc0Ljg4NTMKICAgIEsxX0NPTlNUQU5UX0JBTkRfMTEgPSA0ODAuODg4MwogICAgSzJfQ09OU1RBTlRfQkFORF8xMCA9IDEzMjEuMDc4OQogICAgSzJfQ09OU1RBTlRfQkFORF8xMSA9IDEyMDEuMTQ0MgogIEVORF9HUk9VUCA9IFRJUlNfVEhFUk1BTF9DT05TVEFOVFMKICBHUk9VUCA9IFBST0pFQ1RJT05fUEFSQU1FVEVSUwogICAgTUFQX1BST0pFQ1RJT04gPSAiVVRNIgogICAgREFUVU0gPSAiV0dTODQiCiAgICBFTExJUFNPSUQgPSAiV0dTODQiCiAgICBVVE1fWk9ORSA9IDEwCiAgICBHUklEX0NFTExfU0laRV9QQU5DSFJPTUFUSUMgPSAxNS4wMAogICAgR1JJRF9DRUxMX1NJWkVfUkVGTEVDVElWRSA9IDMwLjAwCiAgICBHUklEX0NFTExfU0laRV9USEVSTUFMID0gMzAuMDAKICAgIE9SSUVOVEFUSU9OID0gIk5PUlRIX1VQIgogICAgUkVTQU1QTElOR19PUFRJT04gPSAiQ1VCSUNfQ09OVk9MVVRJT04iCiAgRU5EX0dST1VQID0gUFJPSkVDVElPTl9QQVJBTUVURVJTCkVORF9HUk9VUCA9IEwxX01FVEFEQVRBX0ZJTEUKRU5ECg=="
+ }
+ },
+ {
+ "ID": "befe1478bf7bb6ab",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/044/034/LC80440342016259LGN00/LC80440342016259LGN00_MTL.txt",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Range": [
+ "bytes=1-"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "532fce0968017e56beedee83c93a5a9b/1457687086654649672;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/044/034/LC80440342016259LGN00/LC80440342016259LGN00_MTL.txt"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 206,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Length": [
+ "7902"
+ ],
+ "Content-Range": [
+ "bytes 1-7902/7903"
+ ],
+ "Content-Type": [
+ "application/octet-stream"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:24 GMT"
+ ],
+ "Etag": [
+ "\"7a5fd4743bd647485f88496fadb05c51\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:24:24 GMT"
+ ],
+ "Last-Modified": [
+ "Tue, 04 Oct 2016 16:42:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Generation": [
+ "1475599327662000"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=PWBt8g==",
+ "md5=el/UdDvWR0hfiElvrbBcUQ=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "7903"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/144,/bns/yb/borg/yb/bns/blobstore2/bitpusher/490.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=WMBYW6yyA8_XlgH5vbaoCg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "570399209098"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/490.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/490:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpB0k3pW9i2M7RifgzlFbsTwExYBlVK-IvquB4lLVF6FbYk7ybnTll4Kwkom86CVuRBb_uAaOExZWNNUE_cuz6fr2rqDz8nNnyWSGT5Zlw1CEvAokM"
+ ]
+ },
+ "Body": "Uk9VUCA9IEwxX01FVEFEQVRBX0ZJTEUKICBHUk9VUCA9IE1FVEFEQVRBX0ZJTEVfSU5GTwogICAgT1JJR0lOID0gIkltYWdlIGNvdXJ0ZXN5IG9mIHRoZSBVLlMuIEdlb2xvZ2ljYWwgU3VydmV5IgogICAgUkVRVUVTVF9JRCA9ICIwNzAxNjA5MTkxMDUxXzAwMDA0IgogICAgTEFORFNBVF9TQ0VORV9JRCA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDAiCiAgICBGSUxFX0RBVEUgPSAyMDE2LTA5LTIwVDAzOjEzOjAyWgogICAgU1RBVElPTl9JRCA9ICJMR04iCiAgICBQUk9DRVNTSU5HX1NPRlRXQVJFX1ZFUlNJT04gPSAiTFBHU18yLjYuMiIKICBFTkRfR1JPVVAgPSBNRVRBREFUQV9GSUxFX0lORk8KICBHUk9VUCA9IFBST0RVQ1RfTUVUQURBVEEKICAgIERBVEFfVFlQRSA9ICJMMVQiCiAgICBFTEVWQVRJT05fU09VUkNFID0gIkdMUzIwMDAiCiAgICBPVVRQVVRfRk9STUFUID0gIkdFT1RJRkYiCiAgICBTUEFDRUNSQUZUX0lEID0gIkxBTkRTQVRfOCIKICAgIFNFTlNPUl9JRCA9ICJPTElfVElSUyIKICAgIFdSU19QQVRIID0gNDQKICAgIFdSU19ST1cgPSAzNAogICAgTkFESVJfT0ZGTkFESVIgPSAiTkFESVIiCiAgICBUQVJHRVRfV1JTX1BBVEggPSA0NAogICAgVEFSR0VUX1dSU19ST1cgPSAzNAogICAgREFURV9BQ1FVSVJFRCA9IDIwMTYtMDktMTUKICAgIFNDRU5FX0NFTlRFUl9USU1FID0gIjE4OjQ2OjE4LjY4NjczODBaIgogICAgQ09STkVSX1VMX0xBVF9QUk9EVUNUID0gMzguNTI4MTkKICAgIENPUk5FUl9VTF9MT05fUFJPRFVDVCA9IC0xMjMuNDA4NDMKICAgIENPUk5FUl9VUl9MQVRfUFJPRFVDVCA9IDM4LjUwNzY1CiAgICBDT1JORVJfVVJfTE9OX1BST0RVQ1QgPSAtMTIwLjc2OTMzCiAgICBDT1JORVJfTExfTEFUX1BST0RVQ1QgPSAzNi40MTYzMwogICAgQ09STkVSX0xMX0xPTl9QUk9EVUNUID0gLTEyMy4zOTcwOQogICAgQ09STkVSX0xSX0xBVF9QUk9EVUNUID0gMzYuMzk3MjkKICAgIENPUk5FUl9MUl9MT05fUFJPRFVDVCA9IC0xMjAuODMxMTcKICAgIENPUk5FUl9VTF9QUk9KRUNUSU9OX1hfUFJPRFVDVCA9IDQ2NDQwMC4wMDAKICAgIENPUk5FUl9VTF9QUk9KRUNUSU9OX1lfUFJPRFVDVCA9IDQyNjQ1MDAuMDAwCiAgICBDT1JORVJfVVJfUFJPSkVDVElPTl9YX1BST0RVQ1QgPSA2OTQ1MDAuMDAwCiAgICBDT1JORVJfVVJfUFJPSkVDVElPTl9ZX1BST0RVQ1QgPSA0MjY0NTAwLjAwMAogICAgQ09STkVSX0xMX1BST0pFQ1RJT05fWF9QUk9EVUNUID0gNDY0NDAwLjAwMAogICAgQ09STkVSX0xMX1BST0pFQ1RJT05fWV9QUk9EVUNUID0gNDAzMDIwMC4wMDAKICAgIENPUk5FUl9MUl9QUk9KRUNUSU9OX1hfUFJPRFVDVCA9IDY5NDUwMC4wMDAKICAgIENPUk5FUl9MUl9QUk9KRUNUSU9OX1lfUFJPRFVDVCA9IDQwMzAyMDAuMDAwCiAgICBQQU5DSFJPTUFUSUNfTElORVMgPSAxNTYyMQogICAgUEFOQ0hST01BVElDX1NBTVBMRVMgPSAxNTM0MQogICAgUkVGTEVDVElWRV9MSU5FUyA9IDc4MTEKICAgIFJFRkxFQ1RJVkVfU0FNUExFUyA9IDc2NzEKICAgIFRIRVJNQUxfTElORVMgPSA3ODExCiAgICBUSEVSTUFMX1NBTVBMRVMgPSA3NjcxCiAgICBGSUxFX05BTUVfQkFORF8xID0gIkxDODA0NDAzNDIwMTYyNTlMR04wMF9CMS5USUYiCiAgICBGSUxFX05BTUVfQkFORF8yID0gIkxDODA0NDAzNDIwMTYyNTlMR04wMF9CMi5USUYiCiAgICBGSUxFX05BTUVfQkFORF8zID0gIkxDODA0NDAzNDIwMTYyNTlMR04wMF9CMy5USUYiCiAgICBGSUxFX05BTUVfQkFORF80ID0gIkxDODA0NDAzNDIwMTYyNTlMR04wMF9CNC5USUYiCiAgICBGSUxFX05BTUVfQkFORF81ID0gIkxDODA0NDAzNDIwMTYyNTlMR04wMF9CNS5USUYiCiAgICBGSUxFX05BTUVfQkFORF82ID0gIkxDODA0NDAzNDIwMTYyNTlMR04wMF9CNi5USUYiCiAgICBGSUxFX05BTUVfQkFORF83ID0gIkxDODA0NDAzNDIwMTYyNTlMR04wMF9CNy5USUYiCiAgICBGSUxFX05BTUVfQkFORF84ID0gIkxDODA0NDAzNDIwMTYyNTlMR04wMF9COC5USUYiCiAgICBGSUxFX05BTUVfQkFORF85ID0gIkxDODA0NDAzNDIwMTYyNTlMR04wMF9COS5USUYiCiAgICBGSUxFX05BTUVfQkFORF8xMCA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQjEwLlRJRiIKICAgIEZJTEVfTkFNRV9CQU5EXzExID0gIkxDODA0NDAzNDIwMTYyNTlMR04wMF9CMTEuVElGIgogICAgRklMRV9OQU1FX0JBTkRfUVVBTElUWSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfQlFBLlRJRiIKICAgIE1FVEFEQVRBX0ZJTEVfTkFNRSA9ICJMQzgwNDQwMzQyMDE2MjU5TEdOMDBfTVRMLnR4dCIKICAgIEJQRl9OQU1FX09MSSA9ICJMTzhCUEYyMDE2MDkxNTE4MzA1N18yMDE2MDkxNTIwMDk1MC4wMSIKICAgIEJQRl9OQU1FX1RJUlMgPSAiTFQ4QlBGMjAxNjA5MDIwODQxMjJfMjAxNjA5MTcwNzQwMjcuMDIiCiAgICBDUEZfTkFNRSA9ICJMOENQRjIwMTYwNzAxXzIwMTYwOTMwLjAyIgogICAgUkxVVF9GSUxFX05BTUUgPSAiTDhSTFVUMjAxNTAzMDNfMjA0MzEyMzF2MTEuaDUiCiAgRU5EX0dST1VQID0gUFJPRFVDVF9NRVRBREFUQQogIEdST1VQID0gSU1BR0VfQVRUUklCVVRFUwogICAgQ0xPVURfQ09WRVIgPSAyOS41NgogICAgQ0xPVURfQ09WRVJfTEFORCA9IDMuMzMKICAgIElNQUdFX1FVQUxJVFlfT0xJID0gOQogICAgSU1BR0VfUVVBTElUWV9USVJTID0gOQogICAgVElSU19TU01fTU9ERUwgPSAiRklOQUwiCiAgICBUSVJTX1NTTV9QT1NJVElPTl9TVEFUVVMgPSAiRVNUSU1BVEVEIgogICAgUk9MTF9BTkdMRSA9IC0wLjAwMQogICAgU1VOX0FaSU1VVEggPSAxNDguNDgwNDkzOTYKICAgIFNVTl9FTEVWQVRJT04gPSA1MC45Mzc2ODM5OQogICAgRUFSVEhfU1VOX0RJU1RBTkNFID0gMS4wMDUzNzUyCiAgICBHUk9VTkRfQ09OVFJPTF9QT0lOVFNfVkVSU0lPTiA9IDQKICAgIEdST1VORF9DT05UUk9MX1BPSU5UU19NT0RFTCA9IDU0OAogICAgR0VPTUVUUklDX1JNU0VfTU9ERUwgPSA1Ljg1NwogICAgR0VPTUVUUklDX1JNU0VfTU9ERUxfWSA9IDMuODQxCiAgICBHRU9NRVRSSUNfUk1TRV9NT0RFTF9YID0gNC40MjIKICAgIEdST1VORF9DT05UUk9MX1BPSU5UU19WRVJJRlkgPSAyMjgKICAgIEdFT01FVFJJQ19STVNFX1ZFUklGWSA9IDMuMzgyCiAgRU5EX0dST1VQID0gSU1BR0VfQVRUUklCVVRFUwogIEdST1VQID0gTUlOX01BWF9SQURJQU5DRQogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzEgPSA3NTEuOTU3MDkKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF8xID0gLTYyLjA5Njg2CiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfMiA9IDc3MC4wMTMxOAogICAgUkFESUFOQ0VfTUlOSU1VTV9CQU5EXzIgPSAtNjMuNTg3OTQKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF8zID0gNzA5LjU2MDYxCiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfMyA9IC01OC41OTU3NQogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzQgPSA1OTguMzQxNDkKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF80ID0gLTQ5LjQxMTIzCiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfNSA9IDM2Ni4xNTUxNQogICAgUkFESUFOQ0VfTUlOSU1VTV9CQU5EXzUgPSAtMzAuMjM3MjEKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF82ID0gOTEuMDU5NDYKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF82ID0gLTcuNTE5NzIKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF83ID0gMzAuNjkxOTEKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF83ID0gLTIuNTM0NTUKICAgIFJBRElBTkNFX01BWElNVU1fQkFORF84ID0gNjc3LjE1Nzg0CiAgICBSQURJQU5DRV9NSU5JTVVNX0JBTkRfOCA9IC01NS45MTk5MgogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzkgPSAxNDMuMTAxNzMKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF85ID0gLTExLjgxNzM5CiAgICBSQURJQU5DRV9NQVhJTVVNX0JBTkRfMTAgPSAyMi4wMDE4MAogICAgUkFESUFOQ0VfTUlOSU1VTV9CQU5EXzEwID0gMC4xMDAzMwogICAgUkFESUFOQ0VfTUFYSU1VTV9CQU5EXzExID0gMjIuMDAxODAKICAgIFJBRElBTkNFX01JTklNVU1fQkFORF8xMSA9IDAuMTAwMzMKICBFTkRfR1JPVVAgPSBNSU5fTUFYX1JBRElBTkNFCiAgR1JPVVAgPSBNSU5fTUFYX1JFRkxFQ1RBTkNFCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfMSA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfMSA9IC0wLjA5OTk4MAogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzIgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzIgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF8zID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF8zID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfNCA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfNCA9IC0wLjA5OTk4MAogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzUgPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzUgPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF82ID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF82ID0gLTAuMDk5OTgwCiAgICBSRUZMRUNUQU5DRV9NQVhJTVVNX0JBTkRfNyA9IDEuMjEwNzAwCiAgICBSRUZMRUNUQU5DRV9NSU5JTVVNX0JBTkRfNyA9IC0wLjA5OTk4MAogICAgUkVGTEVDVEFOQ0VfTUFYSU1VTV9CQU5EXzggPSAxLjIxMDcwMAogICAgUkVGTEVDVEFOQ0VfTUlOSU1VTV9CQU5EXzggPSAtMC4wOTk5ODAKICAgIFJFRkxFQ1RBTkNFX01BWElNVU1fQkFORF85ID0gMS4yMTA3MDAKICAgIFJFRkxFQ1RBTkNFX01JTklNVU1fQkFORF85ID0gLTAuMDk5OTgwCiAgRU5EX0dST1VQID0gTUlOX01BWF9SRUZMRUNUQU5DRQogIEdST1VQID0gTUlOX01BWF9QSVhFTF9WQUxVRQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzEgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzEgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfMiA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfMiA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF8zID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF8zID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzQgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzQgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfNSA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfNSA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF82ID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF82ID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzcgPSA2NTUzNQogICAgUVVBTlRJWkVfQ0FMX01JTl9CQU5EXzcgPSAxCiAgICBRVUFOVElaRV9DQUxfTUFYX0JBTkRfOCA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfOCA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF85ID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF85ID0gMQogICAgUVVBTlRJWkVfQ0FMX01BWF9CQU5EXzEwID0gNjU1MzUKICAgIFFVQU5USVpFX0NBTF9NSU5fQkFORF8xMCA9IDEKICAgIFFVQU5USVpFX0NBTF9NQVhfQkFORF8xMSA9IDY1NTM1CiAgICBRVUFOVElaRV9DQUxfTUlOX0JBTkRfMTEgPSAxCiAgRU5EX0dST1VQID0gTUlOX01BWF9QSVhFTF9WQUxVRQogIEdST1VQID0gUkFESU9NRVRSSUNfUkVTQ0FMSU5HCiAgICBSQURJQU5DRV9NVUxUX0JBTkRfMSA9IDEuMjQyMkUtMDIKICAgIFJBRElBTkNFX01VTFRfQkFORF8yID0gMS4yNzIwRS0wMgogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzMgPSAxLjE3MjFFLTAyCiAgICBSQURJQU5DRV9NVUxUX0JBTkRfNCA9IDkuODg0MkUtMDMKICAgIFJBRElBTkNFX01VTFRfQkFORF81ID0gNi4wNDg3RS0wMwogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzYgPSAxLjUwNDJFLTAzCiAgICBSQURJQU5DRV9NVUxUX0JBTkRfNyA9IDUuMDcwMUUtMDQKICAgIFJBRElBTkNFX01VTFRfQkFORF84ID0gMS4xMTg2RS0wMgogICAgUkFESUFOQ0VfTVVMVF9CQU5EXzkgPSAyLjM2NDBFLTAzCiAgICBSQURJQU5DRV9NVUxUX0JBTkRfMTAgPSAzLjM0MjBFLTA0CiAgICBSQURJQU5DRV9NVUxUX0JBTkRfMTEgPSAzLjM0MjBFLTA0CiAgICBSQURJQU5DRV9BRERfQkFORF8xID0gLTYyLjEwOTI4CiAgICBSQURJQU5DRV9BRERfQkFORF8yID0gLTYzLjYwMDY2CiAgICBSQURJQU5DRV9BRERfQkFORF8zID0gLTU4LjYwNzQ3CiAgICBSQURJQU5DRV9BRERfQkFORF80ID0gLTQ5LjQyMTEyCiAgICBSQURJQU5DRV9BRERfQkFORF81ID0gLTMwLjI0MzI2CiAgICBSQURJQU5DRV9BRERfQkFORF82ID0gLTcuNTIxMjIKICAgIFJBRElBTkNFX0FERF9CQU5EXzcgPSAtMi41MzUwNQogICAgUkFESUFOQ0VfQUREX0JBTkRfOCA9IC01NS45MzExMAogICAgUkFESUFOQ0VfQUREX0JBTkRfOSA9IC0xMS44MTk3NQogICAgUkFESUFOQ0VfQUREX0JBTkRfMTAgPSAwLjEwMDAwCiAgICBSQURJQU5DRV9BRERfQkFORF8xMSA9IDAuMTAwMDAKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF8xID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzIgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfMyA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF80ID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzUgPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfNiA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX01VTFRfQkFORF83ID0gMi4wMDAwRS0wNQogICAgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EXzggPSAyLjAwMDBFLTA1CiAgICBSRUZMRUNUQU5DRV9NVUxUX0JBTkRfOSA9IDIuMDAwMEUtMDUKICAgIFJFRkxFQ1RBTkNFX0FERF9CQU5EXzEgPSAtMC4xMDAwMDAKICAgIFJFRkxFQ1RBTkNFX0FERF9CQU5EXzIgPSAtMC4xMDAwMDAKICAgIFJFRkxFQ1RBTkNFX0FERF9CQU5EXzMgPSAtMC4xMDAwMDAKICAgIFJFRkxFQ1RBTkNFX0FERF9CQU5EXzQgPSAtMC4xMDAwMDAKICAgIFJFRkxFQ1RBTkNFX0FERF9CQU5EXzUgPSAtMC4xMDAwMDAKICAgIFJFRkxFQ1RBTkNFX0FERF9CQU5EXzYgPSAtMC4xMDAwMDAKICAgIFJFRkxFQ1RBTkNFX0FERF9CQU5EXzcgPSAtMC4xMDAwMDAKICAgIFJFRkxFQ1RBTkNFX0FERF9CQU5EXzggPSAtMC4xMDAwMDAKICAgIFJFRkxFQ1RBTkNFX0FERF9CQU5EXzkgPSAtMC4xMDAwMDAKICBFTkRfR1JPVVAgPSBSQURJT01FVFJJQ19SRVNDQUxJTkcKICBHUk9VUCA9IFRJUlNfVEhFUk1BTF9DT05TVEFOVFMKICAgIEsxX0NPTlNUQU5UX0JBTkRfMTAgPSA3NzQuODg1MwogICAgSzFfQ09OU1RBTlRfQkFORF8xMSA9IDQ4MC44ODgzCiAgICBLMl9DT05TVEFOVF9CQU5EXzEwID0gMTMyMS4wNzg5CiAgICBLMl9DT05TVEFOVF9CQU5EXzExID0gMTIwMS4xNDQyCiAgRU5EX0dST1VQID0gVElSU19USEVSTUFMX0NPTlNUQU5UUwogIEdST1VQID0gUFJPSkVDVElPTl9QQVJBTUVURVJTCiAgICBNQVBfUFJPSkVDVElPTiA9ICJVVE0iCiAgICBEQVRVTSA9ICJXR1M4NCIKICAgIEVMTElQU09JRCA9ICJXR1M4NCIKICAgIFVUTV9aT05FID0gMTAKICAgIEdSSURfQ0VMTF9TSVpFX1BBTkNIUk9NQVRJQyA9IDE1LjAwCiAgICBHUklEX0NFTExfU0laRV9SRUZMRUNUSVZFID0gMzAuMDAKICAgIEdSSURfQ0VMTF9TSVpFX1RIRVJNQUwgPSAzMC4wMAogICAgT1JJRU5UQVRJT04gPSAiTk9SVEhfVVAiCiAgICBSRVNBTVBMSU5HX09QVElPTiA9ICJDVUJJQ19DT05WT0xVVElPTiIKICBFTkRfR1JPVVAgPSBQUk9KRUNUSU9OX1BBUkFNRVRFUlMKRU5EX0dST1VQID0gTDFfTUVUQURBVEFfRklMRQpFTkQK"
+ }
+ },
+ {
+ "ID": "765945930b23e1ee",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/044/034/LC80440342016259LGN00/LC80440342016259LGN00_MTL.txt",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Range": [
+ "bytes=0-17"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "6f0eda8864181828fa1efa783b8981ec/9098649104519198308;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/044/034/LC80440342016259LGN00/LC80440342016259LGN00_MTL.txt"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 206,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Length": [
+ "18"
+ ],
+ "Content-Range": [
+ "bytes 0-17/7903"
+ ],
+ "Content-Type": [
+ "application/octet-stream"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:24 GMT"
+ ],
+ "Etag": [
+ "\"7a5fd4743bd647485f88496fadb05c51\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:24:24 GMT"
+ ],
+ "Last-Modified": [
+ "Tue, 04 Oct 2016 16:42:07 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Generation": [
+ "1475599327662000"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=PWBt8g==",
+ "md5=el/UdDvWR0hfiElvrbBcUQ=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "7903"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/565,/bns/yb/borg/yb/bns/blobstore2/bitpusher/79.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=WMBYW8LdBpSblAGTzYjgCw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "570399209098"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/79.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/79:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrMTL_fRzBD71r-l5WY7bKuSBaAqbXlOsIZjtklkSrq46-eW1usGQFvS2xM6ZhokGOYKZr--BkmUKPlezdFbuX9abcpcTr4oFMjfhlX4oagyt93vdU"
+ ]
+ },
+ "Body": "R1JPVVAgPSBMMV9NRVRBREFU"
+ }
+ },
+ {
+ "ID": "edfdb84a4ab5261c",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/storage-library-test-bucket/gzipped-text.txt",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "12aa0133df21dedf7a9e4bb6b5752a20/16739330751196788609;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/storage-library-test-bucket/gzipped-text.txt"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Encoding": [
+ "gzip"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:24 GMT"
+ ],
+ "Etag": [
+ "\"c6117833aa4d1510d09ef69144d56790\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:24:24 GMT"
+ ],
+ "Last-Modified": [
+ "Tue, 14 Nov 2017 13:07:32 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Accept-Encoding"
+ ],
+ "X-Goog-Generation": [
+ "1510664852486988"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=T1s5RQ==",
+ "md5=xhF4M6pNFRDQnvaRRNVnkA=="
+ ],
+ "X-Goog-Metageneration": [
+ "2"
+ ],
+ "X-Goog-Storage-Class": [
+ "MULTI_REGIONAL"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "gzip"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "31"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/359,/bns/yb/borg/yb/bns/blobstore2/bitpusher/112.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=WMBYW5eUCsWelAGf1bqYCA"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "149776848335"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/112.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Body-Transformations": [
+ "chunked"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/112:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UobFJ2YHREN1vtOifJzF81Ir0XhGYpstgtuqVGcLCp5lCBwSRZYs0W-inaYz8__6MwrHF38F79GnfEf7D3fnq06NTfUziFsmisHzsVnA5ODe8uP1fg"
+ ]
+ },
+ "Body": "H4sIAAAAAAAAC8tIzcnJVyjPL8pJAQCFEUoNCwAAAA=="
+ }
+ },
+ {
+ "ID": "bdc97fe18167c5e6",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/storage-library-test-bucket/gzipped-text.txt",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "cb69e18224cb8cb868de218f527b70b3/5933830174623398045;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/storage-library-test-bucket/gzipped-text.txt"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Encoding": [
+ "gzip"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:24 GMT"
+ ],
+ "Etag": [
+ "\"c6117833aa4d1510d09ef69144d56790\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:24:24 GMT"
+ ],
+ "Last-Modified": [
+ "Tue, 14 Nov 2017 13:07:32 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Accept-Encoding"
+ ],
+ "X-Goog-Generation": [
+ "1510664852486988"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=T1s5RQ==",
+ "md5=xhF4M6pNFRDQnvaRRNVnkA=="
+ ],
+ "X-Goog-Metageneration": [
+ "2"
+ ],
+ "X-Goog-Storage-Class": [
+ "MULTI_REGIONAL"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "gzip"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "31"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/460,/bns/yb/borg/yb/bns/blobstore2/bitpusher/252.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=WMBYW4PrD8HrlgGHwJiIBg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "149776848335"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/252.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Body-Transformations": [
+ "chunked"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/252:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpdxdiF31d4aqY5pixhPKg4aiqCAjiuk12-bYlRapi5jHw2x7JFMUMAc2UQQT8ZbykNDV08Q_MUhqfBgbTx2T4KqEaX8g_Fgn6k82JvgulPE3lG7bA"
+ ]
+ },
+ "Body": "H4sIAAAAAAAAC8tIzcnJVyjPL8pJAQCFEUoNCwAAAA=="
+ }
+ },
+ {
+ "ID": "e9f34757a04b439e",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/storage-library-test-bucket/gzipped-text.txt",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Range": [
+ "bytes=1-8"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bca6e47e7bd09389b0ee2f7481eb7bf6/13574793291982731706;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/storage-library-test-bucket/gzipped-text.txt"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Length": [
+ "11"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:24 GMT"
+ ],
+ "Etag": [
+ "W/\"c6117833aa4d1510d09ef69144d56790\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:24:24 GMT"
+ ],
+ "Last-Modified": [
+ "Tue, 14 Nov 2017 13:07:32 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Accept-Encoding"
+ ],
+ "Warning": [
+ "214 UploadServer gunzipped"
+ ],
+ "X-Goog-Generation": [
+ "1510664852486988"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=T1s5RQ==",
+ "md5=xhF4M6pNFRDQnvaRRNVnkA=="
+ ],
+ "X-Goog-Metageneration": [
+ "2"
+ ],
+ "X-Goog-Storage-Class": [
+ "MULTI_REGIONAL"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "gzip"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "31"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/125,/bns/yb/borg/yb/bns/blobstore2/bitpusher/225.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=WMBYW-W7E8K1lgHLuoaADQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "149776848335"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/225.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/225:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Response-Body-Transformations": [
+ "gunzipped"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UotK-AxACTaMVNNIM8LQP2a90oTw4TtmxT8VlizDWocXXDWSbdImu6HeynocBu5LUklCAAX1Y1wbrspQmwUft9tzPx3R9Wa541NC71t42j_rcavvRg"
+ ]
+ },
+ "Body": "aGVsbG8gd29ybGQ="
+ }
+ },
+ {
+ "ID": "e04632d6c1fa8131",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/storage-library-test-bucket/gzipped-text.txt",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Range": [
+ "bytes=1-8"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b48ba50477feb76be7634f96c6504a49/2769292711097662422;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/storage-library-test-bucket/gzipped-text.txt"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 206,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Encoding": [
+ "gzip"
+ ],
+ "Content-Range": [
+ "bytes 1-8/31"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:24 GMT"
+ ],
+ "Etag": [
+ "\"c6117833aa4d1510d09ef69144d56790\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:24:24 GMT"
+ ],
+ "Last-Modified": [
+ "Tue, 14 Nov 2017 13:07:32 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Accept-Encoding"
+ ],
+ "X-Goog-Generation": [
+ "1510664852486988"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=T1s5RQ==",
+ "md5=xhF4M6pNFRDQnvaRRNVnkA=="
+ ],
+ "X-Goog-Metageneration": [
+ "2"
+ ],
+ "X-Goog-Storage-Class": [
+ "MULTI_REGIONAL"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "gzip"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "31"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/42,/bns/yb/borg/yb/bns/blobstore2/bitpusher/651.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=WMBYW6KbF9eMlAH1wZXICg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "149776848335"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/651.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Body-Transformations": [
+ "chunked"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/651:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqlxxnCyYLjUtEC_JSttH2KbT20uF0f7YILBcCkd3oVPxwjmmcC65A-Cc4WbDk57M6qHff190YKO57F8C8kUe4ymwWdk63ZxIc6680olm5IumydF7g"
+ ]
+ },
+ "Body": "iwgAAAAAAAA="
+ }
+ },
+ {
+ "ID": "e529b4da27b6484b",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "168"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "6dc5c87b61f73a648379cdccece12801/14266624901214813313;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJjb3JzIjpbeyJtYXhBZ2VTZWNvbmRzIjozNjAwLCJtZXRob2QiOlsiUE9TVCJdLCJvcmlnaW4iOlsic29tZS1vcmlnaW4uY29tIl0sInJlc3BvbnNlSGVhZGVyIjpbImZvby1iYXIiXX1dLCJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAzIn0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "627"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:25 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543364000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbf12:4266,/bns/xi/borg/xi/bns/blobstore2/bitpusher/69.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=WMBYW_-SI6O9swa9vaKYDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/69.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/69:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqYXjZpHTlKC_3wSlMoS7KCFY4sTjDDbif2GwKa_aMoKzCfGNPBOeiGmhaluoEKV33c2mIZdDQmAtOD4KLmJ8kCMt7oMg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMyIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMyIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDMiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MjQuOTQwWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjI0Ljk0MFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJjb3JzIjogWwogIHsKICAgIm9yaWdpbiI6IFsKICAgICJzb21lLW9yaWdpbi5jb20iCiAgIF0sCiAgICJtZXRob2QiOiBbCiAgICAiUE9TVCIKICAgXSwKICAgInJlc3BvbnNlSGVhZGVyIjogWwogICAgImZvby1iYXIiCiAgIF0sCiAgICJtYXhBZ2VTZWNvbmRzIjogMzYwMAogIH0KIF0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "55116b203bd02008",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0003?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "99"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "86855146ed28c36b2797f3244523049f/3389067825820155294;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0003?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJjb3JzIjpbeyJtYXhBZ2VTZWNvbmRzIjozNjAwLCJtZXRob2QiOlsiR0VUIl0sIm9yaWdpbiI6WyIqIl0sInJlc3BvbnNlSGVhZGVyIjpbInNvbWUtaGVhZGVyIl19XX0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2889"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:26 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543365000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaal14:4213,/bns/xi/borg/xi/bns/blobstore2/bitpusher/136.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=WcBYW4H_CMa8swbts4roAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/136.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/136:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up-jkk9j-hhaOIq9Xi2AZvPbFxvwsmwwCH12qx0eH5fb8qLsote7cIB3viVi-zNspdhLBaHfIdIbFT42mPZukZFUrzZaQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMyIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMyIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDMiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MjQuOTQwWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjI2LjU0NVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDMvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDMiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMy9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDMiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogImNvcnMiOiBbCiAgewogICAib3JpZ2luIjogWwogICAgIioiCiAgIF0sCiAgICJtZXRob2QiOiBbCiAgICAiR0VUIgogICBdLAogICAicmVzcG9uc2VIZWFkZXIiOiBbCiAgICAic29tZS1oZWFkZXIiCiAgIF0sCiAgICJtYXhBZ2VTZWNvbmRzIjogMzYwMAogIH0KIF0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBST0iCn0K"
+ }
+ },
+ {
+ "ID": "bfdd40c0bccf9162",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0003?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "63429b47f9ef6826864260e5eb046329/11030030943179554490;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0003?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2889"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:26 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:26 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543365000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaah14:4439,/bns/xi/borg/xi/bns/blobstore2/bitpusher/48.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=WsBYW9KtLYS2swbxoazoAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/48.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/48:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrlnZLlyhwiR698nwy5E29VjQ_PtWSDNV6-Qojd9YcKyHPPrwD-dKGmF_YVRT5G4X-Jato643JI29tos0FphLqQNIDFjA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMyIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMyIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDMiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MjQuOTQwWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjI2LjU0NVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDMvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDMiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMy9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDMiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogImNvcnMiOiBbCiAgewogICAib3JpZ2luIjogWwogICAgIioiCiAgIF0sCiAgICJtZXRob2QiOiBbCiAgICAiR0VUIgogICBdLAogICAicmVzcG9uc2VIZWFkZXIiOiBbCiAgICAic29tZS1oZWFkZXIiCiAgIF0sCiAgICJtYXhBZ2VTZWNvbmRzIjogMzYwMAogIH0KIF0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBST0iCn0K"
+ }
+ },
+ {
+ "ID": "73983c386a762312",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "168"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1386603ee75472a755f2c43d3dd83584/224530366606098391;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJjb3JzIjpbeyJtYXhBZ2VTZWNvbmRzIjozNjAwLCJtZXRob2QiOlsiUE9TVCJdLCJvcmlnaW4iOlsic29tZS1vcmlnaW4uY29tIl0sInJlc3BvbnNlSGVhZGVyIjpbImZvby1iYXIiXX1dLCJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDA0In0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "627"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:27 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543366000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaal14:4213,/bns/xi/borg/xi/bns/blobstore2/bitpusher/97.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=WsBYW_ykN4yzswa9zLiYAQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/97.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/97:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrC70PQBsofTjbFUM8ebHJU__SGRpFmk5CC-9os78NZ5zkvFEGmWHi3VSw3EpOvoubCJfirGi-owPz_zvVkmGnoYgKjtw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDQiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MjcuNTAwWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjI3LjUwMFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJjb3JzIjogWwogIHsKICAgIm9yaWdpbiI6IFsKICAgICJzb21lLW9yaWdpbi5jb20iCiAgIF0sCiAgICJtZXRob2QiOiBbCiAgICAiUE9TVCIKICAgXSwKICAgInJlc3BvbnNlSGVhZGVyIjogWwogICAgImZvby1iYXIiCiAgIF0sCiAgICJtYXhBZ2VTZWNvbmRzIjogMzYwMAogIH0KIF0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "946fc9c44128c438",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0004?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "12"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1c3ba4c3d1dca18e14065ae26a3cc4f0/7865493483965497587;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0004?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJjb3JzIjpbXX0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:29 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543365000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaa6:4260,/bns/xi/borg/xi/bns/blobstore2/bitpusher/104.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=W8BYW-jBM-y2swaUwyg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/104.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/104:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uobw2l1Z9I24tQdVMSsl0eNuj8mJStbA5WicW1kLIDHeRCyM6k_F5UGSkgNMto668xrzj5WZKpkfeImXdC8UM88bnDMCQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDQiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MjcuNTAwWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjI5LjExOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDQiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "9f4670be5ecf6562",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0004?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e80837ce5b5a0f803e4658635d7e31e0/15506455501829980432;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0004?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:29 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:29 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543365000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaag10:4269,/bns/xi/borg/xi/bns/blobstore2/bitpusher/71.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=XcBYW4XvEuu5swaj8KQw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/71.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/71:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrxoTiN5VChW46MwZGVVo8k3rb9ovG2cfIhEu-V9AnsOXKm6hCd4i7g9_OoVmjZ8WqZUnmHgTkjx4uc6g0CCzwxmC6jVA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDQiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MjcuNTAwWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjI5LjExOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDQiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "6c1dab1f7b2f5c29",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "168"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5088cb935ed1d2af22bfbd54e5eb05d9/4700674549758018348;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJjb3JzIjpbeyJtYXhBZ2VTZWNvbmRzIjozNjAwLCJtZXRob2QiOlsiUE9TVCJdLCJvcmlnaW4iOlsic29tZS1vcmlnaW4uY29tIl0sInJlc3BvbnNlSGVhZGVyIjpbImZvby1iYXIiXX1dLCJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDA1In0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "627"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:30 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543366000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaay15:4155,/bns/xi/borg/xi/bns/blobstore2/bitpusher/95.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=XcBYW43vJKy0swbR3ovADQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/95.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/95:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoXhwo91oFAiB4oEDEdGHlD-W0g1PcRAwSwz-myyX3Nva8OxTEknPJmZgvztO1T5cU4VtBI3xKOfcHBRpfwcCUtsKMYVA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDUiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzAuMjAwWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjMwLjIwMFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJjb3JzIjogWwogIHsKICAgIm9yaWdpbiI6IFsKICAgICJzb21lLW9yaWdpbi5jb20iCiAgIF0sCiAgICJtZXRob2QiOiBbCiAgICAiUE9TVCIKICAgXSwKICAgInJlc3BvbnNlSGVhZGVyIjogWwogICAgImZvby1iYXIiCiAgIF0sCiAgICJtYXhBZ2VTZWNvbmRzIjogMzYwMAogIH0KIF0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "666fb45a49a59a15",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0005?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2e864ff81d2045f03ef2087c7d9262f0/12341636571917403209;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0005?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2900"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:31 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543365000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaa2:4364,/bns/xi/borg/xi/bns/blobstore2/bitpusher/41.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=XsBYW4acG-yzswaYlLDIBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/41.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/41:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpEgXFDbalZbzlbSP50TRNkqzsui-9jwPJZoSF9EJ5DW-CffUlLmS-0Wk0J2SYEgCZD2PTAZVzpyNi9T7QNCBVFw91m_A"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDUiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzAuMjAwWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjMxLjcxOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDUiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDUiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogImNvcnMiOiBbCiAgewogICAib3JpZ2luIjogWwogICAgInNvbWUtb3JpZ2luLmNvbSIKICAgXSwKICAgIm1ldGhvZCI6IFsKICAgICJQT1NUIgogICBdLAogICAicmVzcG9uc2VIZWFkZXIiOiBbCiAgICAiZm9vLWJhciIKICAgXSwKICAgIm1heEFnZVNlY29uZHMiOiAzNjAwCiAgfQogXSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FJPSIKfQo="
+ }
+ },
+ {
+ "ID": "8cc4e399cb936ee5",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0005?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "21f4403eb7cee5ff77894aee23079f5f/1536137090543961445;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0005?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2900"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:32 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:32 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543371000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcba13:4101,/bns/xi/borg/xi/bns/blobstore2/bitpusher/43.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=X8BYW5nXN-65swarrY6wBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/43.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/43:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoUjuTJpUcjmmEAPpXY3BED0V5cLIv-5h6_xm-R1BdCkuwwSsB0p8a_lvmXFvytHjO7dUp35HtQ3Q1dLXxWZ98meTdLoA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDUiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzAuMjAwWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjMxLjcxOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDUiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDUiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogImNvcnMiOiBbCiAgewogICAib3JpZ2luIjogWwogICAgInNvbWUtb3JpZ2luLmNvbSIKICAgXSwKICAgIm1ldGhvZCI6IFsKICAgICJQT1NUIgogICBdLAogICAicmVzcG9uc2VIZWFkZXIiOiBbCiAgICAiZm9vLWJhciIKICAgXSwKICAgIm1heEFnZVNlY29uZHMiOiAzNjAwCiAgfQogXSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FJPSIKfQo="
+ }
+ },
+ {
+ "ID": "55f614ed7dcee0ed",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0005?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "fa099a7c36639b53e0b467a21297b1dc/9177099108408444546;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0005?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:32 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543364000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcap15:4034,/bns/xi/borg/xi/bns/blobstore2/bitpusher/37.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=YMBYW_CZDI60swa29rugDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/37.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/37:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upc3lOpemXTAVuLxn3CKH955cnbjMbYG0bx1pXI48GDgtjlJRCL9j6qK-CSUi4cjrrGttNnWFb27PiqxxdjfWcj9vcyvA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "c1bc43755348ae98",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0004?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "9a075239d10c3e15cad767e36cb4b0cd/16818062225767843742;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0004?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:33 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543366000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcau12:4238,/bns/xi/borg/xi/bns/blobstore2/bitpusher/112.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=YMBYW5ynKOm8swbjuZeQDg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/112.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/112:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UowEXWHLUZci6PrRq4oxQYcKn6JS0VDqDpf5ti0I18DKGhFPthQQJx3XvFxymWIlEp31fXJ4HxzGQKwt4Q3HEM01WyzXQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "83d14ac19b6b1568",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0003?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "53288bb69ef40ce3fdd003978b042a48/6012562748689238203;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0003?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:33 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543366000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabb16:4473,/bns/xi/borg/xi/bns/blobstore2/bitpusher/9.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=YcBYW_CcA46xswa4jrSgDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/9.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/9:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YTBueVpKc3dRRk5nSWlOaTBPa18tYkl0T3p6ZldqSmJvWXlOVWxqNFU2d21vM0JjMnVuWWYzcGUybG5mSXJRR09MTGJHelk0M05acGM5bENXWTBSamJIb1J6SHEwLXRUTTFpNEJSdkhkYlZrcDZHSFR3aWstRDRGME1fS29LNm5CR1pQcXBDakdjVjd5M3phZEhTN1JnVlVhUlVMQm91Nkk2WGRKOUNsVjJkb29KSm41NVlfZGlRYlEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoCXBGDvBJMJafoJdL4St3LHHy-jzW3226_cfflWgmC2jNgrG1LvkpUK_T4R7_bhUzXf4fsf3GpAknE6HkQmmVT5ug1Mg"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "cd6e2e64c0cb8d74",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "103"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "a32f7a3f6a47d3c87e46fc1c087662c8/13653243295872043479;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDA2IiwicmV0ZW50aW9uUG9saWN5Ijp7InJldGVudGlvblBlcmlvZCI6IjYwIn19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "560"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:34 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543373000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabo14:4091,/bns/xi/borg/xi/bns/blobstore2/bitpusher/93.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=YcBYW9aOH6m0swaY5YzYCw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/93.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/93:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Urn21WxpYNaqnv-DxqLw5xJv7wFF0UYJ2JeF5hGse2nPqcPVX8yk8eD-k-YzevYUboXrW9-I0Jl-OC4VlP-EGGrKghzKw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNiIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDYiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzMuOTQ4WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjMzLjk0OFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgInJldGVudGlvblBlcmlvZCI6ICI2MCIsCiAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxODoyNDozMy45NDhaIgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "3f37e587286eb2cd",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0006?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "47"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ca487d2c00623f8bfc82d0002fe1c18e/2847743814498536180;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0006?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJyZXRlbnRpb25Qb2xpY3kiOnsicmV0ZW50aW9uUGVyaW9kIjoiMzYwMCJ9fQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2835"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:35 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543374000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcap9:4050,/bns/xi/borg/xi/bns/blobstore2/bitpusher/7.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=YsBYW_jFCcGEygODroiYBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/7.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/7:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UorqgpEzmb4D3kzxMACmMJ3-7lGt-5cl5yocN0YRuSm07AbktGyHjZvyyPS-jFgbncs5kVSrJNNkJlm1osbAWMVxj007g"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNiIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDYiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzMuOTQ4WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjM1LjYxOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDYiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDYiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInJldGVudGlvblBvbGljeSI6IHsKICAicmV0ZW50aW9uUGVyaW9kIjogIjM2MDAiLAogICJlZmZlY3RpdmVUaW1lIjogIjIwMTgtMDctMjVUMTg6MjQ6MzMuOTQ4WiIKIH0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBST0iCn0K"
+ }
+ },
+ {
+ "ID": "6429a7682135c355",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0006?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5c8c58f30d785d5e671f7357ca439cae/10488705832363084560;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0006?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2835"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:36 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:36 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543375000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadacd12:4335,/bns/xi/borg/xi/bns/blobstore2/bitpusher/86.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=Y8BYW5nNMa-1swbWtbjQDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/86.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/86:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqusmMTGclYIDe6l1a8tHURbahUe_JYRrqZjtxabjauAjVN4_pvkeOkXB1kZKE-X876dAuC1PB9tfG5D3eoCNUaxHAGWA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNiIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDYiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzMuOTQ4WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjM1LjYxOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDYiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDYiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInJldGVudGlvblBvbGljeSI6IHsKICAicmV0ZW50aW9uUGVyaW9kIjogIjM2MDAiLAogICJlZmZlY3RpdmVUaW1lIjogIjIwMTgtMDctMjVUMTg6MjQ6MzMuOTQ4WiIKIH0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBST0iCn0K"
+ }
+ },
+ {
+ "ID": "a5c1b2f6e228702b",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "103"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "368ad3389b61f04260c0c6db374ed23d/18129668954017319981;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDA3IiwicmV0ZW50aW9uUG9saWN5Ijp7InJldGVudGlvblBlcmlvZCI6IjYwIn19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "560"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:36 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543376000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbaa8:4133,/bns/xi/borg/xi/bns/blobstore2/bitpusher/106.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ZMBYW_HpB8m9swbZ6qrAAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/106.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/106:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq1RDr1MEgp23ag8AkJcUwu2aSB2PJLhSw2X_0SIK__4TpzRE7hqUKzZzHxXSr72R75jc5yHL-CuYMTVDHxVO3XnVI0gQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNyIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNyIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDciLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzYuNzgyWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjM2Ljc4MloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgInJldGVudGlvblBlcmlvZCI6ICI2MCIsCiAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxODoyNDozNi43ODJaIgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "c472f5aece41ecd8",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0007?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "47"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e392c7aedf5aa30bf8101982f0302eb0/7324168373149027657;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0007?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJyZXRlbnRpb25Qb2xpY3kiOnsicmV0ZW50aW9uUGVyaW9kIjoiMzYwMCJ9fQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2835"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:38 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543374000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbi11:4077,/bns/xi/borg/xi/bns/blobstore2/bitpusher/61.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ZMBYW-qvPI24swa_vo3gCg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/61.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/61:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpEtw2C2hzgqsrlvaFReZnOqqkyvRhbZaQg7oumk3-74WlIxb2ge2fjhJFWdY4nUjRIl7HvDjQl0bYEKPEj3T8JK-Au4Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNyIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNyIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDciLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzYuNzgyWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjM4LjIzMloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDcvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDciLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNy9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDciLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInJldGVudGlvblBvbGljeSI6IHsKICAicmV0ZW50aW9uUGVyaW9kIjogIjM2MDAiLAogICJlZmZlY3RpdmVUaW1lIjogIjIwMTgtMDctMjVUMTg6MjQ6MzYuNzgyWiIKIH0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBST0iCn0K"
+ }
+ },
+ {
+ "ID": "ef4dca8e13375571",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0007?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "05e0148f52a62b5592247de09295347f/14965131490508361318;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0007?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2835"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:38 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:38 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543375000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcae12:4379,/bns/xi/borg/xi/bns/blobstore2/bitpusher/76.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ZsBYW5L0GbC5swaK1pn4CQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/76.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/76:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upf4-JBp4nUgSaRnE7Vrce8Gn520K4o9sT3NEpxTWum8Vjj5GA5NVdNwqQlUNm9cFBsLnYpK0ljZbYzL9dJxKLZ8HnDww"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNyIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNyIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDciLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzYuNzgyWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjM4LjIzMloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDcvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDciLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNy9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwNy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDciLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInJldGVudGlvblBvbGljeSI6IHsKICAicmV0ZW50aW9uUGVyaW9kIjogIjM2MDAiLAogICJlZmZlY3RpdmVUaW1lIjogIjIwMTgtMDctMjVUMTg6MjQ6MzYuNzgyWiIKIH0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBST0iCn0K"
+ }
+ },
+ {
+ "ID": "ee4170d1b7c23c0c",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "103"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "de0a296afa7b1fb1d028e961a375659b/4159630909640068994;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDA4IiwicmV0ZW50aW9uUG9saWN5Ijp7InJldGVudGlvblBlcmlvZCI6IjYwIn19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "560"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:39 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543376000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbaa15:4432,/bns/xi/borg/xi/bns/blobstore2/bitpusher/46.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ZsBYW5ahK6-zswb4gZ04"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/46.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/46:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur1Ed66ng0eCCUBbWEhujiflLse1kERerSG4Nl2kw7VKjOIANS5AKC_FhgjloyJLxZpXskj2zpOZ39smKGzsLRCQAdtDg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDgiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzkuMzAxWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjM5LjMwMVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgInJldGVudGlvblBlcmlvZCI6ICI2MCIsCiAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxODoyNDozOS4zMDFaIgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "3997d219b2d41b8d",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0008?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "25"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "de47a653bd94c0d67a15721b51996eb7/11800312560612561055;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0008?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJyZXRlbnRpb25Qb2xpY3kiOm51bGx9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:40 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543379000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcax16:4441,/bns/xi/borg/xi/bns/blobstore2/bitpusher/67.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=Z8BYW_a3H-G8swaRqa_QBQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/67.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/67:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrPgEkmPvx_UFBbSoqV-F_XJ3Hl7miIslftAarjgMoXMP0tYVHSR7KR8bNiJOEB9Z4NDqgl4aY40SOwOVWWox_C1-V43g"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDgiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzkuMzAxWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjQwLjcxNloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDgvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDgiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDgiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "669bf561d0668dcc",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0008?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "8ab3263511c6d53613d447b9aa5aba64/994811979744268731;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0008?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:41 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:41 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543375000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabo14:4091,/bns/xi/borg/xi/bns/blobstore2/bitpusher/133.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=aMBYW7_5Nqm9swaeo4b4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/133.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/133:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up2--vMCfvgiFhNfCZZhzq6yIASygqWz7Ppc6rHjEQi1OlwdI9KqoZ4YWYfLMsJMoIWutbiYGe2hNIlb8579-C01Kb5_A"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDgiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6MzkuMzAxWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjQwLjcxNloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDgvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDgiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDgiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "1c0c86843e6b3f8a",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "103"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "87c86b82d4736bec9db47e6c39d09411/8635775097086825432;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDA5IiwicmV0ZW50aW9uUG9saWN5Ijp7InJldGVudGlvblBlcmlvZCI6IjYwIn19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "560"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:41 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543373000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabf15:4445,/bns/xi/borg/xi/bns/blobstore2/bitpusher/82.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=acBYW_fjDNC2swaw7bzYBQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/82.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/82:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqXd-a6qOfpzJuXR3TbEfeE65GrV51yxmxNhoNWcrMcH70Qs66msO7XZ4IGm7XzqmTDU3oj8SrrNJLbgFlChb5i7wZ6iA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDkiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NDEuNzg1WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjQxLjc4NVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgInJldGVudGlvblBlcmlvZCI6ICI2MCIsCiAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxODoyNDo0MS43ODVaIgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "7917810f09ae2b22",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0009?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "25"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "42732b786ae79b6edf9b0686b49b45b5/16276737114951374068;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0009?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJyZXRlbnRpb25Qb2xpY3kiOm51bGx9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:43 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543379000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcak10:4214,/bns/xi/borg/xi/bns/blobstore2/bitpusher/74.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=asBYW8kMzrKzBp-umNgH"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/74.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/74:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uonn6KeuH-AmQtZO3bMOyQjgoVQMfOv4xc5keRCaaT8S_eiLkfi74mNadih9REoj1esUhfZFIeFCrCHci1vCtOeDhj00w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDkiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NDEuNzg1WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjQzLjQxMloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDkvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDkiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDkiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "e692bc50c2bdfe7a",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0009?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5ea0d991dc5a79747dadc6d4c2883e8b/5471237637872768273;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0009?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:43 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:43 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543374000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbd16:4454,/bns/xi/borg/xi/bns/blobstore2/bitpusher/35.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=a8BYW-SzJKqyswarpK3gCg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/35.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/35:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpYZ4WY19R208zS6OT2w73ENhED4uzgCipSHKtKdsYCkHsU_LYqP24NQCHT8ghiuA3Z4FIvm64KQISjMh9p4mlR3z8_bg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDkiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NDEuNzg1WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjQzLjQxMloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDkvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDkiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwOS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDkiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "9ae8226c737df950",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "103"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "4147133f9faa7f3a4f34cc44a28c0572/13112199655737316909;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEwIiwicmV0ZW50aW9uUG9saWN5Ijp7InJldGVudGlvblBlcmlvZCI6IjYwIn19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "560"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:44 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543373000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaam10:4277,/bns/xi/borg/xi/bns/blobstore2/bitpusher/144.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=a8BYW6DHN6W9swaUiID4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/144.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/144:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqO7ncHHkW_Z4O5CLwCoDz9FWrjB0P2DSlkgIcGyNnGHua01Z37rsazA8wmkNaUpc9QW6HiWiWkERUGo7cCyGjmDjm1yw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NDQuNDczWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjQ0LjQ3M1oiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgInJldGVudGlvblBlcmlvZCI6ICI2MCIsCiAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxODoyNDo0NC40NzNaIgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "589852d672bf78f2",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0010?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b5983c4fb9dd2f002b51276c0ca9bb42/2234362209155766090;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0010?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2833"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:46 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543379000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabc15:4276,/bns/xi/borg/xi/bns/blobstore2/bitpusher/63.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=bMBYW-LgK86zswbii4FI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/63.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/63:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqbvAB71VVShazQ15nQEQ_O3JAbX_FUtg6WOeTX8nXhELESRy_QcYZeLmzydqEPb6JYg3OeUldIrO-QBSIatp3rfLllnQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NDQuNDczWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjQ1LjkyOVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTAiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTAiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInJldGVudGlvblBvbGljeSI6IHsKICAicmV0ZW50aW9uUGVyaW9kIjogIjYwIiwKICAiZWZmZWN0aXZlVGltZSI6ICIyMDE4LTA3LTI1VDE4OjI0OjQ0LjQ3M1oiCiB9LAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "153892c0a78bab4d",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0010?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bc6cee86a765e2739139f19021de78ef/9875324227020314726;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0010?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2833"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:46 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:46 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543375000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaap16:4483,/bns/xi/borg/xi/bns/blobstore2/bitpusher/26.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=bsBYW7b-BqOxswak0oXADA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/26.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/26:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpzRJiq6vHXPGoYQoeMPfxz393K5CoZ3Xw_3SJ8jZJgDpP81VGIa8Nv13nkyMGLK-AbciaumXZtST5VkEKJfiUQ6fhF1w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NDQuNDczWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjQ1LjkyOVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTAiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTAiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInJldGVudGlvblBvbGljeSI6IHsKICAicmV0ZW50aW9uUGVyaW9kIjogIjYwIiwKICAiZWZmZWN0aXZlVGltZSI6ICIyMDE4LTA3LTI1VDE4OjI0OjQ0LjQ3M1oiCiB9LAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "e5c95c1adaa299f6",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0010?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "34202306b38b4fdc2b4a134861835302/17516287348674550147;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0010?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:46 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543373000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaao15:4469,/bns/xi/borg/xi/bns/blobstore2/bitpusher/78.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=bsBYW5_4GK22swaWrLTYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/78.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/78:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqxZMp50IRG7m9SLj1csn4dpKFetQcOZuahYV6Fha0rIcBbm-IGW-eIzB3G9u9qHnQwB6c2Sq6fLA2EN8GqNkbJzOgmLQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "252e3447660b6da3",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0009?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ddb75baa6a2ffd2c5ca97d1f496ae0fb/6710786767806257823;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0009?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:47 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543373000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae2:4286,/bns/xi/borg/xi/bns/blobstore2/bitpusher/89.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=bsBYW9vJMYO9swaYg4XIAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/89.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/89:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur_Vv12kX96tyRoRq4S6_8BPXPLnzwqO_AM5dOMk9PNQ_n92VA0net9G-CDYfhq2BEU5Iog7s1aGIydxoa_DWsKcL46bg"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "fb9247cf0969ab4c",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0008?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "74f54ef1305b99ed58faec2504c5d37d/14351749885165591484;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0008?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:47 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543373000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabr1:4172,/bns/xi/borg/xi/bns/blobstore2/bitpusher/31.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=b8BYW7TjDsq8swaH5K8g"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/31.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/31:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq88eOLkiumxi4Vr0eTlD3r0l2TXMaZSDOh2j-VTQfovYGAGanPTS4qPdW2dcAOA3HmsCQe5wWlsIReQ8wlGXARHcedGw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "894f214886740d81",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0007?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d06fa586a0ce0febdda6189993ae7192/3546250403792149720;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0007?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:48 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543373000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaap16:4483,/bns/xi/borg/xi/bns/blobstore2/bitpusher/14.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=b8BYW_W_J8K5swbhtJyABg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/14.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/14:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqietgalPyXUgs4kS1sNgLPjcaR_Uxzz5yb2ckwE0jc2Gp8Ogb1OGn8d5O0v14UvMAL8FYHcHeOO0FlVNXbtbJQ8zxa1A"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "49c4ab447b84d662",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0006?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7a6734c4324e3eaa74b3f5282f04f75c/11187212425951534581;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0006?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:48 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543373000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabn6:4066,/bns/xi/borg/xi/bns/blobstore2/bitpusher/22.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=cMBYW6eNA824swaRxZCoAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/22.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/22:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3Wk5qbmpFMTZfaW5fRGhjaG1lcWNjTTJHdU51TzM1ZnVhdVhmalVyaFVpMGNtYlRndURVTkNQUU9MRVpnYmxLekZOSFV0MFhXN0RoUnRxeExJaWd4d3ROVTZkUkxUdUlEbVFXVE1UMUpyMmlTZFlRdjdwOXlyME9XYVlkVjA5NjRUTzB4OVBLMmtadUh6Wk5nb1NzdmVrTFRlMTNQZ2xmTVh2b1VaZTJmSWRMajJqRVhnODdrM3lWZXMwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqQ1yrjZrIMYJMReZQlGgiJU6vZMl9C32ys7PHkVOBQ0b0V9E-gazE7aHT8mO4koLlm-e_oARAt4B8x25upf9t42nk2CQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "b76fc75b0bcdd7fc",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "106"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "65455a9ec65ffdd8216c4dba9c1ddfa5/381431473896349201;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExIiwicmV0ZW50aW9uUG9saWN5Ijp7InJldGVudGlvblBlcmlvZCI6IjkwMDAwIn19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "563"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:49 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543388000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadace2:4438,/bns/xi/borg/xi/bns/blobstore2/bitpusher/58.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=cMBYW4_QINC3swaYoYGgCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/58.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/58:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnY2RnRQVldJdC00ZlBLc3RVNlNlNjZyXzg4M2c3ZVNEUTdoX1hZSUszTURyT3hGWVowWjV6OFRTRGdZc041M2VlbmFzd3NoVk1EZjVfWGVBVnVwaGtoWW5EZ3ZLYUN5elZvandjWFJMTEtCRUo2R0Vvak51b004aDJaNTNIb20xSXBJaU1qZWFUTHVsNUJpXzhBTnkzZ093YXpra2pUMlJ2cVlpVHJLWG9CdVgyb2JSWlJJTVg3d0kwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqWvKfGMQ4Vq9VnVowJqHVgTEwAV7kh5MaUSRhMNYfGx8PFGqyHO1dROgsjIJ9dMWTUI1aXaNjalQjxk5BDMCdAYtzccA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NDguOTM4WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjQ4LjkzOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgInJldGVudGlvblBlcmlvZCI6ICI5MDAwMCIsCiAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxODoyNDo0OC45MzhaIgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "d0d2ac8ca052b2cd",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0011/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=495f3a1078d1fccedf81508e41d6f8a587f7d33a1e4db3ccfc3d3cec1d2f"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "321bf53cba897aed355b4c47825e6b95/4238080917824216992;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0011/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS00OTVmM2ExMDc4ZDFmY2NlZGY4MTUwOGU0MWQ2ZjhhNTg3ZjdkMzNhMWU0ZGIzY2NmYzNkM2NlYzFkMmYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMSIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJzb21lLW9iamVjdCJ9Cg0KLS00OTVmM2ExMDc4ZDFmY2NlZGY4MTUwOGU0MWQ2ZjhhNTg3ZjdkMzNhMWU0ZGIzY2NmYzNkM2NlYzFkMmYNCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KDQpoZWxsbyB3b3JsZA0KLS00OTVmM2ExMDc4ZDFmY2NlZGY4MTUwOGU0MWQ2ZjhhNTg3ZjdkMzNhMWU0ZGIzY2NmYzNkM2NlYzFkMmYtLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3753"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:49 GMT"
+ ],
+ "Etag": [
+ "CMffy/PvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543389000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbh15:4099,/bns/xi/borg/xi/bns/blobstore2/bitpusher/1.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ccBYW7_xBu2yswad5qDADg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/1.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/1:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnY2RnRQVldJdC00ZlBLc3RVNlNlNjZyXzg4M2c3ZVNEUTdoX1hZSUszTURyT3hGWVowWjV6OFRTRGdZc041M2VlbmFzd3NoVk1EZjVfWGVBVnVwaGtoWW5EZ3ZLYUN5elZvandjWFJMTEtCRUo2R0Vvak51b004aDJaNTNIb20xSXBJaU1qZWFUTHVsNUJpXzhBTnkzZ093YXpra2pUMlJ2cVlpVHJLWG9CdVgyb2JSWlJJTVg3d0kwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpsPge2DN2JK4chM_teOCstlRjPXdqp_zVkiP9_QVj117kwcn0pJEo7btjwDZVos-ZtHExdB237M5_3bh1fuSKM0332dw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9zb21lLW9iamVjdC8xNTMyNTQzMDg5NDM4NjYzIiwKICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExL28vc29tZS1vYmplY3QiLAogIm5hbWUiOiAic29tZS1vYmplY3QiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzA4OTQzODY2MyIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNDo0OS40MzhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NDkuNDM4WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjQ5LjQzOFoiLAogInNpemUiOiAiMTEiLAogIm1kNUhhc2giOiAiWHJZN3UrQWU3dENUeXlLN2oxck53dz09IiwKICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9vL3NvbWUtb2JqZWN0P2dlbmVyYXRpb249MTUzMjU0MzA4OTQzODY2MyZhbHQ9bWVkaWEiLAogImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEvc29tZS1vYmplY3QvMTUzMjU0MzA4OTQzODY2My9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExL28vc29tZS1vYmplY3QvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEiLAogICAib2JqZWN0IjogInNvbWUtb2JqZWN0IiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzA4OTQzODY2MyIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ01mZnkvUHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9zb21lLW9iamVjdC8xNTMyNTQzMDg5NDM4NjYzL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExL28vc29tZS1vYmplY3QvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExIiwKICAgIm9iamVjdCI6ICJzb21lLW9iamVjdCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwODk0Mzg2NjMiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ01mZnkvUHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9zb21lLW9iamVjdC8xNTMyNTQzMDg5NDM4NjYzL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExL28vc29tZS1vYmplY3QvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExIiwKICAgIm9iamVjdCI6ICJzb21lLW9iamVjdCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwODk0Mzg2NjMiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNNZmZ5L1B2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEvc29tZS1vYmplY3QvMTUzMjU0MzA4OTQzODY2My91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEvby9zb21lLW9iamVjdC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExIiwKICAgIm9iamVjdCI6ICJzb21lLW9iamVjdCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwODk0Mzg2NjMiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNNZmZ5L1B2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJ5WlJscWc9PSIsCiAiZXRhZyI6ICJDTWZmeS9QdnV0d0NFQUU9IiwKICJyZXRlbnRpb25FeHBpcmF0aW9uVGltZSI6ICIyMDE4LTA3LTI2VDE5OjI0OjQ5LjQzOFoiCn0K"
+ }
+ },
+ {
+ "ID": "415a57722afae770",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011/o/some-object?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5f5ba032448063d8e1f1e1d813a710ea/8022393491760832302;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011/o/some-object?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13204"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:49 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:49 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543389000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbac7:4350,/bns/xi/borg/xi/bns/blobstore2/bitpusher/18.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ccBYW8SgIeK8swbW8bjYCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/18.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/18:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnY2RnRQVldJdC00ZlBLc3RVNlNlNjZyXzg4M2c3ZVNEUTdoX1hZSUszTURyT3hGWVowWjV6OFRTRGdZc041M2VlbmFzd3NoVk1EZjVfWGVBVnVwaGtoWW5EZ3ZLYUN5elZvandjWFJMTEtCRUo2R0Vvak51b004aDJaNTNIb20xSXBJaU1qZWFUTHVsNUJpXzhBTnkzZ093YXpra2pUMlJ2cVlpVHJLWG9CdVgyb2JSWlJJTVg3d0kwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo-SssZ7sOuahkB_eeDLVMCoB5GUY2KDBTzJEnR-ZozMmc6HOlMf_0zL-iHxA_j4NMJ2hZcLLwbxf6Z2chB11v3LhkzUg"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogIkZvcmJpZGRlbiIsCiAgICAiZGVidWdJbmZvIjogImNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpSRVRFTlRJT05fUE9MSUNZX05PVF9NRVQ6IFJFVEVOVElPTl9QT0xJQ1lfTk9UX01FVDogUkVURU5USU9OX1BPTElDWV9OT1RfTUVUOiBPYmplY3QgJ2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9zb21lLW9iamVjdCcgaXMgc3ViamVjdCB0byBidWNrZXQncyByZXRlbnRpb24gcG9saWN5IGFuZCBjYW5ub3QgYmUgZGVsZXRlZCBvciBvdmVyd3JpdHRlbiB1bnRpbCAyMDE4LTA3LTI2VDEyOjI0OjQ5LjQzODQxNzY0NC0wNzowMFxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YTo4NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6MjcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmRlbGV0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTEzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogUkVURU5USU9OX1BPTElDWV9OT1RfTUVUOiBSRVRFTlRJT05fUE9MSUNZX05PVF9NRVQ6IE9iamVjdCAnZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExL3NvbWUtb2JqZWN0JyBpcyBzdWJqZWN0IHRvIGJ1Y2tldCdzIHJldGVudGlvbiBwb2xpY3kgYW5kIGNhbm5vdCBiZSBkZWxldGVkIG9yIG92ZXJ3cml0dGVuIHVudGlsIDIwMTgtMDctMjZUMTI6MjQ6NDkuNDM4NDE3NjQ0LTA3OjAwXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Nilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1GT1JCSURERU4sIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UkVURU5USU9OX1BPTElDWV9OT1RfTUVUOiBSRVRFTlRJT05fUE9MSUNZX05PVF9NRVQ6IFJFVEVOVElPTl9QT0xJQ1lfTk9UX01FVDogT2JqZWN0ICdnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEvc29tZS1vYmplY3QnIGlzIHN1YmplY3QgdG8gYnVja2V0J3MgcmV0ZW50aW9uIHBvbGljeSBhbmQgY2Fubm90IGJlIGRlbGV0ZWQgb3Igb3ZlcndyaXR0ZW4gdW50aWwgMjAxOC0wNy0yNlQxMjoyNDo0OS40Mzg0MTc2NDQtMDc6MDBcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6ODQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjI3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5kZWxldGUoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjExMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFJFVEVOVElPTl9QT0xJQ1lfTk9UX01FVDogUkVURU5USU9OX1BPTElDWV9OT1RfTUVUOiBPYmplY3QgJ2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9zb21lLW9iamVjdCcgaXMgc3ViamVjdCB0byBidWNrZXQncyByZXRlbnRpb24gcG9saWN5IGFuZCBjYW5ub3QgYmUgZGVsZXRlZCBvciBvdmVyd3JpdHRlbiB1bnRpbCAyMDE4LTA3LTI2VDEyOjI0OjQ5LjQzODQxNzY0NC0wNzowMFxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTcgbW9yZVxuLCBkb21haW49Z2xvYmFsLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9Zm9yYmlkZGVuLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5GT1JCSURERU4sIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpSRVRFTlRJT05fUE9MSUNZX05PVF9NRVQ6IFJFVEVOVElPTl9QT0xJQ1lfTk9UX01FVDogUkVURU5USU9OX1BPTElDWV9OT1RfTUVUOiBPYmplY3QgJ2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9zb21lLW9iamVjdCcgaXMgc3ViamVjdCB0byBidWNrZXQncyByZXRlbnRpb24gcG9saWN5IGFuZCBjYW5ub3QgYmUgZGVsZXRlZCBvciBvdmVyd3JpdHRlbiB1bnRpbCAyMDE4LTA3LTI2VDEyOjI0OjQ5LjQzODQxNzY0NC0wNzowMFxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YTo4NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkRlbGV0ZU9iamVjdC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlT2JqZWN0LmphdmE6MjcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmRlbGV0ZShPYmplY3RzRGVsZWdhdG9yLmphdmE6MTEzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogUkVURU5USU9OX1BPTElDWV9OT1RfTUVUOiBSRVRFTlRJT05fUE9MSUNZX05PVF9NRVQ6IE9iamVjdCAnZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExL3NvbWUtb2JqZWN0JyBpcyBzdWJqZWN0IHRvIGJ1Y2tldCdzIHJldGVudGlvbiBwb2xpY3kgYW5kIGNhbm5vdCBiZSBkZWxldGVkIG9yIG92ZXJ3cml0dGVuIHVudGlsIDIwMTgtMDctMjZUMTI6MjQ6NDkuNDM4NDE3NjQ0LTA3OjAwXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Nilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxNyBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPUZPUkJJRERFTiwgZXJyb3JQcm90b0RvbWFpbj1nZGF0YS5Db3JlRXJyb3JEb21haW4sIGZpbHRlcmVkTWVzc2FnZT1udWxsLCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPW51bGwsIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1udWxsLCBtZXNzYWdlPUZvcmJpZGRlbiwgcmVhc29uPWZvcmJpZGRlbiwgcnBjQ29kZT00MDN9IEZvcmJpZGRlbjogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlJFVEVOVElPTl9QT0xJQ1lfTk9UX01FVDogUkVURU5USU9OX1BPTElDWV9OT1RfTUVUOiBSRVRFTlRJT05fUE9MSUNZX05PVF9NRVQ6IE9iamVjdCAnZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDExL3NvbWUtb2JqZWN0JyBpcyBzdWJqZWN0IHRvIGJ1Y2tldCdzIHJldGVudGlvbiBwb2xpY3kgYW5kIGNhbm5vdCBiZSBkZWxldGVkIG9yIG92ZXJ3cml0dGVuIHVudGlsIDIwMTgtMDctMjZUMTI6MjQ6NDkuNDM4NDE3NjQ0LTA3OjAwXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5EZWxldGVPYmplY3QuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZU9iamVjdC5qYXZhOjg0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuRGVsZXRlT2JqZWN0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVPYmplY3QuamF2YToyNylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IuZGVsZXRlKE9iamVjdHNEZWxlZ2F0b3IuamF2YToxMTMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBSRVRFTlRJT05fUE9MSUNZX05PVF9NRVQ6IFJFVEVOVElPTl9QT0xJQ1lfTk9UX01FVDogT2JqZWN0ICdnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEvc29tZS1vYmplY3QnIGlzIHN1YmplY3QgdG8gYnVja2V0J3MgcmV0ZW50aW9uIHBvbGljeSBhbmQgY2Fubm90IGJlIGRlbGV0ZWQgb3Igb3ZlcndyaXR0ZW4gdW50aWwgMjAxOC0wNy0yNlQxMjoyNDo0OS40Mzg0MTc2NDQtMDc6MDBcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6Mjc2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE3IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDMsCiAgIm1lc3NhZ2UiOiAiRm9yYmlkZGVuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "aedeabbd9b2ce927",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "25"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ad3627ad60bd43adc97c8be4b3f90ccd/15663356609120231498;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJyZXRlbnRpb25Qb2xpY3kiOm51bGx9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:51 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543390000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaa9:4028,/bns/xi/borg/xi/bns/blobstore2/bitpusher/129.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ccBYW6LCLee8swagtYXwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/129.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/129:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YnY2RnRQVldJdC00ZlBLc3RVNlNlNjZyXzg4M2c3ZVNEUTdoX1hZSUszTURyT3hGWVowWjV6OFRTRGdZc041M2VlbmFzd3NoVk1EZjVfWGVBVnVwaGtoWW5EZ3ZLYUN5elZvandjWFJMTEtCRUo2R0Vvak51b004aDJaNTNIb20xSXBJaU1qZWFUTHVsNUJpXzhBTnkzZ093YXpra2pUMlJ2cVlpVHJLWG9CdVgyb2JSWlJJTVg3d0kwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqFCOroY_JHGYZoHBc1rl2wiiLdo8iZTkGii26W81asA-p0ds5pJ2UhmDOb-Zgh3Fce6HHMPk5mfJUiMYEU8XBsknV63A"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NDguOTM4WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjUxLjExMFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTEiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "226c78ece0a214f6",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011/o/some-object?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bdfec95bede82b3fd343b8748195937f/1073543454315258329;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011/o/some-object?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:51 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543388000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabo14:4091,/bns/xi/borg/xi/bns/blobstore2/bitpusher/39.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=c8BYW7KPEs-0swaFr7fwAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/39.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/39:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnY2RnRQVldJdC00ZlBLc3RVNlNlNjZyXzg4M2c3ZVNEUTdoX1hZSUszTURyT3hGWVowWjV6OFRTRGdZc041M2VlbmFzd3NoVk1EZjVfWGVBVnVwaGtoWW5EZ3ZLYUN5elZvandjWFJMTEtCRUo2R0Vvak51b004aDJaNTNIb20xSXBJaU1qZWFUTHVsNUJpXzhBTnkzZ093YXpra2pUMlJ2cVlpVHJLWG9CdVgyb2JSWlJJTVg3d0kwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqkRXnL8nL_CSqJ1Dr9t2nE6A4eSKGVfZ82IINll-Z1xcSdN4J1B7sS61_owreTgB1voUPgpuLAQivkAIR0LY9KuupwZQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "8298971a1cc6e807",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bb7d1ad37ac63ea58a36997a01fdd819/8714225100992914165;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 429,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13043"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:51 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:51 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543388000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaax14:4175,/bns/xi/borg/xi/bns/blobstore2/bitpusher/131.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=c8BYW-m6Juu8swaT-aHwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/131.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/131:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnY2RnRQVldJdC00ZlBLc3RVNlNlNjZyXzg4M2c3ZVNEUTdoX1hZSUszTURyT3hGWVowWjV6OFRTRGdZc041M2VlbmFzd3NoVk1EZjVfWGVBVnVwaGtoWW5EZ3ZLYUN5elZvandjWFJMTEtCRUo2R0Vvak51b004aDJaNTNIb20xSXBJaU1qZWFUTHVsNUJpXzhBTnkzZ093YXpra2pUMlJ2cVlpVHJLWG9CdVgyb2JSWlJJTVg3d0kwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpxEUMj_LICMXHbZ6lbKH6pVLYELW1zDvbrPXkkp3i-V45ybhzP0soayc7wK9_0fuIgNslWIi0raJs3iA_n8kGHv55BkQ"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAidXNhZ2VMaW1pdHMiLAogICAgInJlYXNvbiI6ICJyYXRlTGltaXRFeGNlZWRlZCIsCiAgICAibWVzc2FnZSI6ICJUaGUgcHJvamVjdCBleGNlZWRlZCB0aGUgcmF0ZSBsaW1pdCBmb3IgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGJ1Y2tldHMuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuRGVsZXRlQnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVCdWNrZXQuamF2YToyMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IuZGVsZXRlKEJ1Y2tldHNEZWxlZ2F0b3IuamF2YToxMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBEZWxldGluZyBidWNrZXRzIHRvbyBxdWlja2x5LCBwbGVhc2Ugc2xvdyBkb3duXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOCBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1UT09fTUFOWV9SRVFVRVNUUywgY2F0ZWdvcnk9UVVPVEFfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogRGVsZXRpbmcgYnVja2V0cyB0b28gcXVpY2tseSwgcGxlYXNlIHNsb3cgZG93blxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkRlbGV0ZUJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQnVja2V0LmphdmE6NzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjIzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5kZWxldGUoQnVja2V0c0RlbGVnYXRvci5qYXZhOjEwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcbiwgZG9tYWluPXVzYWdlTGltaXRzLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9dG9vTWFueVJlcXVlc3RzLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWNsb3VkLmJpZ3N0b3JlLmFwaS5CaWdzdG9yZUVycm9yRG9tYWluLkNMSUVOVF9RVU9UQV9FWENFRURFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuRGVsZXRlQnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVCdWNrZXQuamF2YToyMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IuZGVsZXRlKEJ1Y2tldHNEZWxlZ2F0b3IuamF2YToxMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBEZWxldGluZyBidWNrZXRzIHRvbyBxdWlja2x5LCBwbGVhc2Ugc2xvdyBkb3duXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOCBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPUNMSUVOVF9RVU9UQV9FWENFRURFRCwgZXJyb3JQcm90b0RvbWFpbj1jbG91ZC5iaWdzdG9yZS5hcGkuQmlnc3RvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPWVudGl0eS5yZXNvdXJjZV9pZC5uYW1lLCBtZXNzYWdlPVRoZSBwcm9qZWN0IGV4Y2VlZGVkIHRoZSByYXRlIGxpbWl0IGZvciBjcmVhdGluZyBhbmQgZGVsZXRpbmcgYnVja2V0cy4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQubmFtZSwgbWVzc2FnZT1UaGUgcHJvamVjdCBleGNlZWRlZCB0aGUgcmF0ZSBsaW1pdCBmb3IgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGJ1Y2tldHMuLCByZWFzb249cmF0ZUxpbWl0RXhjZWVkZWQsIHJwY0NvZGU9NDI5fSBUaGUgcHJvamVjdCBleGNlZWRlZCB0aGUgcmF0ZSBsaW1pdCBmb3IgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGJ1Y2tldHMuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogRGVsZXRpbmcgYnVja2V0cyB0b28gcXVpY2tseSwgcGxlYXNlIHNsb3cgZG93blxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkRlbGV0ZUJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQnVja2V0LmphdmE6NzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjIzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5kZWxldGUoQnVja2V0c0RlbGVnYXRvci5qYXZhOjEwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MjksCiAgIm1lc3NhZ2UiOiAiVGhlIHByb2plY3QgZXhjZWVkZWQgdGhlIHJhdGUgbGltaXQgZm9yIGNyZWF0aW5nIGFuZCBkZWxldGluZyBidWNrZXRzLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "94e355be30e178e1",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bb7d1ad37ac63ea58a36997a01fdd819/12498819149889397635;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 429,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13043"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:52 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:52 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543388000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaae9:4327,/bns/xi/borg/xi/bns/blobstore2/bitpusher/91.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=dMBYW4FkwryzBofSpqAG"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/91.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/91:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnY2RnRQVldJdC00ZlBLc3RVNlNlNjZyXzg4M2c3ZVNEUTdoX1hZSUszTURyT3hGWVowWjV6OFRTRGdZc041M2VlbmFzd3NoVk1EZjVfWGVBVnVwaGtoWW5EZ3ZLYUN5elZvandjWFJMTEtCRUo2R0Vvak51b004aDJaNTNIb20xSXBJaU1qZWFUTHVsNUJpXzhBTnkzZ093YXpra2pUMlJ2cVlpVHJLWG9CdVgyb2JSWlJJTVg3d0kwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpvZG4kcRNb8VlbHGkPRGkFuuLB0hLKTxYZeyLtOCFinvRayyyWy4pIAdabqsaqzNJ6FAyLwvYRVP3icW32JtjY5HYjKw"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAidXNhZ2VMaW1pdHMiLAogICAgInJlYXNvbiI6ICJyYXRlTGltaXRFeGNlZWRlZCIsCiAgICAibWVzc2FnZSI6ICJUaGUgcHJvamVjdCBleGNlZWRlZCB0aGUgcmF0ZSBsaW1pdCBmb3IgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGJ1Y2tldHMuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuRGVsZXRlQnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVCdWNrZXQuamF2YToyMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IuZGVsZXRlKEJ1Y2tldHNEZWxlZ2F0b3IuamF2YToxMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBEZWxldGluZyBidWNrZXRzIHRvbyBxdWlja2x5LCBwbGVhc2Ugc2xvdyBkb3duXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOCBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1UT09fTUFOWV9SRVFVRVNUUywgY2F0ZWdvcnk9UVVPVEFfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogRGVsZXRpbmcgYnVja2V0cyB0b28gcXVpY2tseSwgcGxlYXNlIHNsb3cgZG93blxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkRlbGV0ZUJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQnVja2V0LmphdmE6NzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjIzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5kZWxldGUoQnVja2V0c0RlbGVnYXRvci5qYXZhOjEwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcbiwgZG9tYWluPXVzYWdlTGltaXRzLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9dG9vTWFueVJlcXVlc3RzLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWNsb3VkLmJpZ3N0b3JlLmFwaS5CaWdzdG9yZUVycm9yRG9tYWluLkNMSUVOVF9RVU9UQV9FWENFRURFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuRGVsZXRlQnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVCdWNrZXQuamF2YToyMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IuZGVsZXRlKEJ1Y2tldHNEZWxlZ2F0b3IuamF2YToxMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBEZWxldGluZyBidWNrZXRzIHRvbyBxdWlja2x5LCBwbGVhc2Ugc2xvdyBkb3duXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOCBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPUNMSUVOVF9RVU9UQV9FWENFRURFRCwgZXJyb3JQcm90b0RvbWFpbj1jbG91ZC5iaWdzdG9yZS5hcGkuQmlnc3RvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPWVudGl0eS5yZXNvdXJjZV9pZC5uYW1lLCBtZXNzYWdlPVRoZSBwcm9qZWN0IGV4Y2VlZGVkIHRoZSByYXRlIGxpbWl0IGZvciBjcmVhdGluZyBhbmQgZGVsZXRpbmcgYnVja2V0cy4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQubmFtZSwgbWVzc2FnZT1UaGUgcHJvamVjdCBleGNlZWRlZCB0aGUgcmF0ZSBsaW1pdCBmb3IgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGJ1Y2tldHMuLCByZWFzb249cmF0ZUxpbWl0RXhjZWVkZWQsIHJwY0NvZGU9NDI5fSBUaGUgcHJvamVjdCBleGNlZWRlZCB0aGUgcmF0ZSBsaW1pdCBmb3IgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGJ1Y2tldHMuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogRGVsZXRpbmcgYnVja2V0cyB0b28gcXVpY2tseSwgcGxlYXNlIHNsb3cgZG93blxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkRlbGV0ZUJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQnVja2V0LmphdmE6NzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjIzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5kZWxldGUoQnVja2V0c0RlbGVnYXRvci5qYXZhOjEwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MjksCiAgIm1lc3NhZ2UiOiAiVGhlIHByb2plY3QgZXhjZWVkZWQgdGhlIHJhdGUgbGltaXQgZm9yIGNyZWF0aW5nIGFuZCBkZWxldGluZyBidWNrZXRzLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "bf8a977fbdd18a0c",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bb7d1ad37ac63ea58a36997a01fdd819/16355187123152298770;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 429,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "13043"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:52 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:52 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543388000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbg14:4207,/bns/xi/borg/xi/bns/blobstore2/bitpusher/146.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=dMBYW7OKKsW8swaY9Jb4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/146.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/146:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnY2RnRQVldJdC00ZlBLc3RVNlNlNjZyXzg4M2c3ZVNEUTdoX1hZSUszTURyT3hGWVowWjV6OFRTRGdZc041M2VlbmFzd3NoVk1EZjVfWGVBVnVwaGtoWW5EZ3ZLYUN5elZvandjWFJMTEtCRUo2R0Vvak51b004aDJaNTNIb20xSXBJaU1qZWFUTHVsNUJpXzhBTnkzZ093YXpra2pUMlJ2cVlpVHJLWG9CdVgyb2JSWlJJTVg3d0kwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uople64nskXO7Ge2j3i_Lsv6YwM8drsbVr-GSiPHuWwxh_7ydWTnPGhyhPFHyfvY6zFwBCHEepVFrBH00HEVlh-FtQbqA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAidXNhZ2VMaW1pdHMiLAogICAgInJlYXNvbiI6ICJyYXRlTGltaXRFeGNlZWRlZCIsCiAgICAibWVzc2FnZSI6ICJUaGUgcHJvamVjdCBleGNlZWRlZCB0aGUgcmF0ZSBsaW1pdCBmb3IgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGJ1Y2tldHMuIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuRGVsZXRlQnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVCdWNrZXQuamF2YToyMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IuZGVsZXRlKEJ1Y2tldHNEZWxlZ2F0b3IuamF2YToxMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBEZWxldGluZyBidWNrZXRzIHRvbyBxdWlja2x5LCBwbGVhc2Ugc2xvdyBkb3duXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOCBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1UT09fTUFOWV9SRVFVRVNUUywgY2F0ZWdvcnk9UVVPVEFfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogRGVsZXRpbmcgYnVja2V0cyB0b28gcXVpY2tseSwgcGxlYXNlIHNsb3cgZG93blxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkRlbGV0ZUJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQnVja2V0LmphdmE6NzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjIzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5kZWxldGUoQnVja2V0c0RlbGVnYXRvci5qYXZhOjEwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcbiwgZG9tYWluPXVzYWdlTGltaXRzLCBleHRlbmRlZEhlbHA9bnVsbCwgaHR0cEhlYWRlcnM9e30sIGh0dHBTdGF0dXM9dG9vTWFueVJlcXVlc3RzLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWNsb3VkLmJpZ3N0b3JlLmFwaS5CaWdzdG9yZUVycm9yRG9tYWluLkNMSUVOVF9RVU9UQV9FWENFRURFRCwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OlBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuRGVsZXRlQnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChEZWxldGVCdWNrZXQuamF2YToyMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IuZGVsZXRlKEJ1Y2tldHNEZWxlZ2F0b3IuamF2YToxMDYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBQUk9KRUNUX0JVQ0tFVF9PUF9SQVRFX1RPT19ISUdIOiBEZWxldGluZyBidWNrZXRzIHRvbyBxdWlja2x5LCBwbGVhc2Ugc2xvdyBkb3duXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOCBtb3JlXG4sIGVycm9yUHJvdG9Db2RlPUNMSUVOVF9RVU9UQV9FWENFRURFRCwgZXJyb3JQcm90b0RvbWFpbj1jbG91ZC5iaWdzdG9yZS5hcGkuQmlnc3RvcmVFcnJvckRvbWFpbiwgZmlsdGVyZWRNZXNzYWdlPW51bGwsIGxvY2F0aW9uPWVudGl0eS5yZXNvdXJjZV9pZC5uYW1lLCBtZXNzYWdlPVRoZSBwcm9qZWN0IGV4Y2VlZGVkIHRoZSByYXRlIGxpbWl0IGZvciBjcmVhdGluZyBhbmQgZGVsZXRpbmcgYnVja2V0cy4sIHVubmFtZWRBcmd1bWVudHM9W119LCBsb2NhdGlvbj1lbnRpdHkucmVzb3VyY2VfaWQubmFtZSwgbWVzc2FnZT1UaGUgcHJvamVjdCBleGNlZWRlZCB0aGUgcmF0ZSBsaW1pdCBmb3IgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGJ1Y2tldHMuLCByZWFzb249cmF0ZUxpbWl0RXhjZWVkZWQsIHJwY0NvZGU9NDI5fSBUaGUgcHJvamVjdCBleGNlZWRlZCB0aGUgcmF0ZSBsaW1pdCBmb3IgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGJ1Y2tldHMuOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6UFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogUFJPSkVDVF9CVUNLRVRfT1BfUkFURV9UT09fSElHSDogRGVsZXRpbmcgYnVja2V0cyB0b28gcXVpY2tseSwgcGxlYXNlIHNsb3cgZG93blxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkRlbGV0ZUJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoRGVsZXRlQnVja2V0LmphdmE6NzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5EZWxldGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKERlbGV0ZUJ1Y2tldC5qYXZhOjIzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5kZWxldGUoQnVja2V0c0RlbGVnYXRvci5qYXZhOjEwNilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IFBST0pFQ1RfQlVDS0VUX09QX1JBVEVfVE9PX0hJR0g6IERlbGV0aW5nIGJ1Y2tldHMgdG9vIHF1aWNrbHksIHBsZWFzZSBzbG93IGRvd25cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MjczKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MjksCiAgIm1lc3NhZ2UiOiAiVGhlIHByb2plY3QgZXhjZWVkZWQgdGhlIHJhdGUgbGltaXQgZm9yIGNyZWF0aW5nIGFuZCBkZWxldGluZyBidWNrZXRzLiIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "19953efdd2176ebd",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bb7d1ad37ac63ea58a36997a01fdd819/1693318569021039776;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0011?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:56 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543389000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbcb12:4159,/bns/xi/borg/xi/bns/blobstore2/bitpusher/118.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=d8BYW5P7KOGEygPhuovwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/118.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/118:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YnY2RnRQVldJdC00ZlBLc3RVNlNlNjZyXzg4M2c3ZVNEUTdoX1hZSUszTURyT3hGWVowWjV6OFRTRGdZc041M2VlbmFzd3NoVk1EZjVfWGVBVnVwaGtoWW5EZ3ZLYUN5elZvandjWFJMTEtCRUo2R0Vvak51b004aDJaNTNIb20xSXBJaU1qZWFUTHVsNUJpXzhBTnkzZ093YXpra2pUMlJ2cVlpVHJLWG9CdVgyb2JSWlJJTVg3d0kwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrV92PcTy_di_ZHxo2y-ZRWi72pAxpF0cxRBmIEu7KFQHqZpMfowsMqvjjw69ikr1CvZUBu5_hjMswScD2owYHiv9EGpw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "9b502d579ebf749b",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "106"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e2247346abab40303a1a864db97be6a4/9334000215698695612;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEyIiwicmV0ZW50aW9uUG9saWN5Ijp7InJldGVudGlvblBlcmlvZCI6IjkwMDAwIn19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "563"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:56 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543396000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcak10:4214,/bns/xi/borg/xi/bns/blobstore2/bitpusher/24.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=eMBYW_u9EIy9swaXoYfwAw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/24.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/24:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YTAxMW5aamphX1UwRUxQRmptS1dIcGhrei1SUEFvd1FiR2tTOHA0Z3FaRHFMZ0dxTWhONHlpS3dmTV9nVjhaTVpHR1lRSGxTS0NLeEFaV2I5RzlFcWNTOHhORFlZb2gzWE55eE52SkFQWTdMZEwzbTBPYUo4cXpSZ25hc3N6X0g0ZGdCYWN2clZkcWhKWE1XWEhxQm9VZjlCZkVLNVdHVDlaeEVyMFJqLWZJU3M4M2diNUVNSGNVZVEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur4lt1KSeUc4etelDH3zaGPKr58z_DUtXuSmeOIFkRuCg0QiJEawbIh0Hhf_4CWDEgv3Oyr6j4WgOR5LzUNbnMjYG38oA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMiIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NTYuNzU1WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjU2Ljc1NVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgInJldGVudGlvblBlcmlvZCI6ICI5MDAwMCIsCiAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxODoyNDo1Ni43NTVaIgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "dbf611e74dabbc16",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0012?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "44145a05351884dc7a9e5154d7a0b30b/16974962237858080473;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0012?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2836"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:57 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:24:57 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543397000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcca7:4401,/bns/xi/borg/xi/bns/blobstore2/bitpusher/114.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ecBYW8w7rL2zBufLq8AB"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/114.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/114:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YTAxMW5aamphX1UwRUxQRmptS1dIcGhrei1SUEFvd1FiR2tTOHA0Z3FaRHFMZ0dxTWhONHlpS3dmTV9nVjhaTVpHR1lRSGxTS0NLeEFaV2I5RzlFcWNTOHhORFlZb2gzWE55eE52SkFQWTdMZEwzbTBPYUo4cXpSZ25hc3N6X0g0ZGdCYWN2clZkcWhKWE1XWEhxQm9VZjlCZkVLNVdHVDlaeEVyMFJqLWZJU3M4M2diNUVNSGNVZVEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqL-Yrx_3-VY-m0mmjgy6Zk_Cnuopy9PJpPb10wjhuglxFEEtho1e_kzu960RMPofXJp2_tyr1Aw3Lo6AI8SCttKZYMhA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMiIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NTYuNzU1WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjU2Ljc1NVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMiIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBRT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInJldGVudGlvblBvbGljeSI6IHsKICAicmV0ZW50aW9uUGVyaW9kIjogIjkwMDAwIiwKICAiZWZmZWN0aXZlVGltZSI6ICIyMDE4LTA3LTI1VDE4OjI0OjU2Ljc1NVoiCiB9LAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "7709c7abe1c0d234",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0012/lockRetentionPolicy?alt=json\u0026ifMetagenerationMatch=1",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2f3c37699529bb3e47da134624913666/2313093683743598183;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0012/lockRetentionPolicy?alt=json\u0026ifMetagenerationMatch=1"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "640"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:24:59 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543396000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbal11:4152,/bns/xi/borg/xi/bns/blobstore2/bitpusher/65.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ecBYW-6kEuSwswah7LfIBA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/65.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/65:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YTAxMW5aamphX1UwRUxQRmptS1dIcGhrei1SUEFvd1FiR2tTOHA0Z3FaRHFMZ0dxTWhONHlpS3dmTV9nVjhaTVpHR1lRSGxTS0NLeEFaV2I5RzlFcWNTOHhORFlZb2gzWE55eE52SkFQWTdMZEwzbTBPYUo4cXpSZ25hc3N6X0g0ZGdCYWN2clZkcWhKWE1XWEhxQm9VZjlCZkVLNVdHVDlaeEVyMFJqLWZJU3M4M2diNUVNSGNVZVEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrvmymmYKd41vPfDRSV2nfCrD8QEQhI9AoUPnSHgbinbJL7Gz5yrudVPDkDXF7wnr5B-6RFoHDQmPTf-V0SJz_wXKtDIQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMiIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMiIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NTYuNzU1WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjU4LjgyMFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogIm93bmVyIjogewogICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiB9LAogImxvY2F0aW9uIjogIlVTIiwKICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgInJldGVudGlvblBlcmlvZCI6ICI5MDAwMCIsCiAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxODoyNDo1Ni43NTVaIiwKICAiaXNMb2NrZWQiOiB0cnVlCiB9LAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "efb118b2024e4420",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0012?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "47"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7902d533465e7c753683c5cc81f9db41/9954056805397833604;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0012?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJyZXRlbnRpb25Qb2xpY3kiOnsicmV0ZW50aW9uUGVyaW9kIjoiMzYwMCJ9fQo="
+ },
+ "Response": {
+ "StatusCode": 403,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "13924"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:00 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543399000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbk13:4247,/bns/xi/borg/xi/bns/blobstore2/bitpusher/88.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=e8BYW66RAc62swbPnpToAQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/88.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/88:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YTAxMW5aamphX1UwRUxQRmptS1dIcGhrei1SUEFvd1FiR2tTOHA0Z3FaRHFMZ0dxTWhONHlpS3dmTV9nVjhaTVpHR1lRSGxTS0NLeEFaV2I5RzlFcWNTOHhORFlZb2gzWE55eE52SkFQWTdMZEwzbTBPYUo4cXpSZ25hc3N6X0g0ZGdCYWN2clZkcWhKWE1XWEhxQm9VZjlCZkVLNVdHVDlaeEVyMFJqLWZJU3M4M2diNUVNSGNVZVEwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqwx_u55x47dU6z1YVrePh-2ymYXotrLaIbuNuWNS-RHRKq93uMuo12ncdesKjmQ9PGqYzkmZYLkhp6xteFNTIuDHCsag"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiZm9yYmlkZGVuIiwKICAgICJtZXNzYWdlIjogIkNhbm5vdCByZWR1Y2UgcmV0ZW50aW9uIGR1cmF0aW9uIG9mIGEgbG9ja2VkIFJldGVudGlvbiBQb2xpY3kgZm9yIGJ1Y2tldCAnZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEyJy4iLAogICAgImRlYnVnSW5mbyI6ICJjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQ2Fubm90IHJlZHVjZSByZXRlbnRpb24gZHVyYXRpb24gb2YgYSBsb2NrZWQgUmV0ZW50aW9uIFBvbGljeSBmb3IgYnVja2V0ICdnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTInLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLlVwZGF0ZUFuZFBhdGNoQnVja2V0LnVwZGF0ZUJ1Y2tldChVcGRhdGVBbmRQYXRjaEJ1Y2tldC5qYXZhOjk2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuVXBkYXRlQnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVCdWNrZXQuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLlVwZGF0ZUJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQnVja2V0LmphdmE6MTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5CdWNrZXRzRGVsZWdhdG9yLnVwZGF0ZShCdWNrZXRzRGVsZWdhdG9yLmphdmE6OTQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBDYW5ub3QgcmVkdWNlIHJldGVudGlvbiBkdXJhdGlvbiBvZiBhIGxvY2tlZCBSZXRlbnRpb24gUG9saWN5IGZvciBidWNrZXQgJ2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMicuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOSBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1GT1JCSURERU4sIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQ2Fubm90IHJlZHVjZSByZXRlbnRpb24gZHVyYXRpb24gb2YgYSBsb2NrZWQgUmV0ZW50aW9uIFBvbGljeSBmb3IgYnVja2V0ICdnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTInLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLlVwZGF0ZUFuZFBhdGNoQnVja2V0LnVwZGF0ZUJ1Y2tldChVcGRhdGVBbmRQYXRjaEJ1Y2tldC5qYXZhOjk2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuVXBkYXRlQnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChVcGRhdGVCdWNrZXQuamF2YTo3OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLlVwZGF0ZUJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQnVja2V0LmphdmE6MTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5CdWNrZXRzRGVsZWdhdG9yLnVwZGF0ZShCdWNrZXRzRGVsZWdhdG9yLmphdmE6OTQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBBQ0NFU1NfREVOSUVEOiBBQ0NFU1NfREVOSUVEOiBDYW5ub3QgcmVkdWNlIHJldGVudGlvbiBkdXJhdGlvbiBvZiBhIGxvY2tlZCBSZXRlbnRpb24gUG9saWN5IGZvciBidWNrZXQgJ2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMicuXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Mylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOSBtb3JlXG4sIGRvbWFpbj1nbG9iYWwsIGV4dGVuZGVkSGVscD1udWxsLCBodHRwSGVhZGVycz17fSwgaHR0cFN0YXR1cz1mb3JiaWRkZW4sIGludGVybmFsUmVhc29uPVJlYXNvbnthcmd1bWVudHM9e30sIGNhdXNlPW51bGwsIGNvZGU9Z2RhdGEuQ29yZUVycm9yRG9tYWluLkZPUkJJRERFTiwgY3JlYXRlZEJ5QmFja2VuZD10cnVlLCBkZWJ1Z01lc3NhZ2U9Y29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IENhbm5vdCByZWR1Y2UgcmV0ZW50aW9uIGR1cmF0aW9uIG9mIGEgbG9ja2VkIFJldGVudGlvbiBQb2xpY3kgZm9yIGJ1Y2tldCAnZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEyJy5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5VcGRhdGVBbmRQYXRjaEJ1Y2tldC51cGRhdGVCdWNrZXQoVXBkYXRlQW5kUGF0Y2hCdWNrZXQuamF2YTo5Nilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLlVwZGF0ZUJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQnVja2V0LmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5VcGRhdGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUJ1Y2tldC5qYXZhOjE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci51cGRhdGUoQnVja2V0c0RlbGVnYXRvci5qYXZhOjk0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQ2Fubm90IHJlZHVjZSByZXRlbnRpb24gZHVyYXRpb24gb2YgYSBsb2NrZWQgUmV0ZW50aW9uIFBvbGljeSBmb3IgYnVja2V0ICdnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTInLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTkgbW9yZVxuLCBlcnJvclByb3RvQ29kZT1GT1JCSURERU4sIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1DYW5ub3QgcmVkdWNlIHJldGVudGlvbiBkdXJhdGlvbiBvZiBhIGxvY2tlZCBSZXRlbnRpb24gUG9saWN5IGZvciBidWNrZXQgJ2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMicuLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1DYW5ub3QgcmVkdWNlIHJldGVudGlvbiBkdXJhdGlvbiBvZiBhIGxvY2tlZCBSZXRlbnRpb24gUG9saWN5IGZvciBidWNrZXQgJ2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMicuLCByZWFzb249Zm9yYmlkZGVuLCBycGNDb2RlPTQwM30gQ2Fubm90IHJlZHVjZSByZXRlbnRpb24gZHVyYXRpb24gb2YgYSBsb2NrZWQgUmV0ZW50aW9uIFBvbGljeSBmb3IgYnVja2V0ICdnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTInLjogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IEFDQ0VTU19ERU5JRUQ6IENhbm5vdCByZWR1Y2UgcmV0ZW50aW9uIGR1cmF0aW9uIG9mIGEgbG9ja2VkIFJldGVudGlvbiBQb2xpY3kgZm9yIGJ1Y2tldCAnZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEyJy5cblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5VcGRhdGVBbmRQYXRjaEJ1Y2tldC51cGRhdGVCdWNrZXQoVXBkYXRlQW5kUGF0Y2hCdWNrZXQuamF2YTo5Nilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLlVwZGF0ZUJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoVXBkYXRlQnVja2V0LmphdmE6NzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5VcGRhdGVCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKFVwZGF0ZUJ1Y2tldC5qYXZhOjE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci51cGRhdGUoQnVja2V0c0RlbGVnYXRvci5qYXZhOjk0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQUNDRVNTX0RFTklFRDogQUNDRVNTX0RFTklFRDogQ2Fubm90IHJlZHVjZSByZXRlbnRpb24gZHVyYXRpb24gb2YgYSBsb2NrZWQgUmV0ZW50aW9uIFBvbGljeSBmb3IgYnVja2V0ICdnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTInLlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTkgbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQwMywKICAibWVzc2FnZSI6ICJDYW5ub3QgcmVkdWNlIHJldGVudGlvbiBkdXJhdGlvbiBvZiBhIGxvY2tlZCBSZXRlbnRpb24gUG9saWN5IGZvciBidWNrZXQgJ2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMicuIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "1b855062e5c90384",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "106"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "3e5a13ea301e9a0946f3a11bc9c05671/17594737352580638880;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEzIiwicmV0ZW50aW9uUG9saWN5Ijp7InJldGVudGlvblBlcmlvZCI6IjkwMDAwIn19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "563"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:01 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543400000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcae5:4486,/bns/xi/borg/xi/bns/blobstore2/bitpusher/73.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=fMBYW5_7HcW9swa6lIW4AQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/73.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/73:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WjNsOTlsRTBHaHd2RlNMWnBPaUl6YS1vNjZPa2tzX2dwVFdfM3hDdVVTa1EtYWIzMFJMT3UzZ2RJVUtHVDRjaGlLclo3d2JNWTVLVlhWZEFSMWVnRXcyX2Nya3F1SVFhWUJXZnQydDYtSV92N0dfN3RUd0tvRF92SWwybmQ0dnZseEt0LUx1anllbmp6MkN1RFRVZEhfYVNFWlJPV1oyMGJDYVdaY2NzajRWSGFJTEFoM19QdmdzTVkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UprzT2voIDOxsxV_qFg58DgtN5iugOL2pp2vsDcJlJmrlUWwMVyr1diqkyMaV9QdmK_g1f9_gF-oFI2LKHCX0BOG-yjoQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMyIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMyIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTMiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MDEuMDg2WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjAxLjA4NloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImxvY2F0aW9uIjogIlVTIiwKICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgInJldGVudGlvblBlcmlvZCI6ICI5MDAwMCIsCiAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxODoyNTowMS4wODZaIgogfSwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "4165abcb0d4ee6bc",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0013/lockRetentionPolicy?alt=json\u0026ifMetagenerationMatch=0",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e2e268505270870bf27719ad74be341f/3004925292975679790;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0013/lockRetentionPolicy?alt=json\u0026ifMetagenerationMatch=0"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 412,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Content-Length": [
+ "13081"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:03 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543401000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaa6:4260,/bns/xi/borg/xi/bns/blobstore2/bitpusher/142.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=fcBYW_eqFIq9swbt0Y3oAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/142.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/142:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WjNsOTlsRTBHaHd2RlNMWnBPaUl6YS1vNjZPa2tzX2dwVFdfM3hDdVVTa1EtYWIzMFJMT3UzZ2RJVUtHVDRjaGlLclo3d2JNWTVLVlhWZEFSMWVnRXcyX2Nya3F1SVFhWUJXZnQydDYtSV92N0dfN3RUd0tvRF92SWwybmQ0dnZseEt0LUx1anllbmp6MkN1RFRVZEhfYVNFWlJPV1oyMGJDYVdaY2NzajRWSGFJTEFoM19QdmdzTVkwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uri7iZoc9O6tDhkHsKD_btca7WG6_JsjPP9RZZqbIVrKSrdQhJvVn7BZmfwqjTWv-0L0-GIZK_wZ8ZERJ4tvY4fGV5jyQ"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAiY29uZGl0aW9uTm90TWV0IiwKICAgICJtZXNzYWdlIjogIlByZWNvbmRpdGlvbiBGYWlsZWQiLAogICAgImxvY2F0aW9uVHlwZSI6ICJoZWFkZXIiLAogICAgImxvY2F0aW9uIjogIklmLU1hdGNoIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OklOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IGV4cGVjdGVkIEJ1Y2tldE1ldGFkYXRhLm1ldGFkYXRhX2dlbmVyYXRpb246IDAgYWN0dWFsOiAxXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuTG9ja1JldGVudGlvblBvbGljeS5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTG9ja1JldGVudGlvblBvbGljeS5qYXZhOjIxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkxvY2tSZXRlbnRpb25Qb2xpY3kuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExvY2tSZXRlbnRpb25Qb2xpY3kuamF2YTo1OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IubG9ja1JldGVudGlvblBvbGljeShCdWNrZXRzRGVsZWdhdG9yLmphdmE6MTAwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IElOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBleHBlY3RlZCBCdWNrZXRNZXRhZGF0YS5tZXRhZGF0YV9nZW5lcmF0aW9uOiAwIGFjdHVhbDogMVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTggbW9yZVxuXG5jb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5GYXVsdDogSW1tdXRhYmxlRXJyb3JEZWZpbml0aW9ue2Jhc2U9UFJFQ09ORElUSU9OX0ZBSUxFRCwgY2F0ZWdvcnk9VVNFUl9FUlJPUiwgY2F1c2U9bnVsbCwgZGVidWdJbmZvPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IElOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBleHBlY3RlZCBCdWNrZXRNZXRhZGF0YS5tZXRhZGF0YV9nZW5lcmF0aW9uOiAwIGFjdHVhbDogMVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkxvY2tSZXRlbnRpb25Qb2xpY3kuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExvY2tSZXRlbnRpb25Qb2xpY3kuamF2YToyMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5Mb2NrUmV0ZW50aW9uUG9saWN5LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMb2NrUmV0ZW50aW9uUG9saWN5LmphdmE6NTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5CdWNrZXRzRGVsZWdhdG9yLmxvY2tSZXRlbnRpb25Qb2xpY3koQnVja2V0c0RlbGVnYXRvci5qYXZhOjEwMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IElOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogZXhwZWN0ZWQgQnVja2V0TWV0YWRhdGEubWV0YWRhdGFfZ2VuZXJhdGlvbjogMCBhY3R1YWw6IDFcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6Mjc2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPXByZWNvbmRpdGlvbkZhaWxlZCwgaW50ZXJuYWxSZWFzb249UmVhc29ue2FyZ3VtZW50cz17fSwgY2F1c2U9bnVsbCwgY29kZT1nZGF0YS5Db3JlRXJyb3JEb21haW4uQ09ORElUSU9OX05PVF9NRVQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IElOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBleHBlY3RlZCBCdWNrZXRNZXRhZGF0YS5tZXRhZGF0YV9nZW5lcmF0aW9uOiAwIGFjdHVhbDogMVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkxvY2tSZXRlbnRpb25Qb2xpY3kuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExvY2tSZXRlbnRpb25Qb2xpY3kuamF2YToyMTApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5Mb2NrUmV0ZW50aW9uUG9saWN5LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMb2NrUmV0ZW50aW9uUG9saWN5LmphdmE6NTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5CdWNrZXRzRGVsZWdhdG9yLmxvY2tSZXRlbnRpb25Qb2xpY3koQnVja2V0c0RlbGVnYXRvci5qYXZhOjEwMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IElOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogZXhwZWN0ZWQgQnVja2V0TWV0YWRhdGEubWV0YWRhdGFfZ2VuZXJhdGlvbjogMCBhY3R1YWw6IDFcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6Mjc2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcbiwgZXJyb3JQcm90b0NvZGU9Q09ORElUSU9OX05PVF9NRVQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249bnVsbCwgbWVzc2FnZT1udWxsLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249aGVhZGVycy5JZi1NYXRjaCwgbWVzc2FnZT1QcmVjb25kaXRpb24gRmFpbGVkLCByZWFzb249Y29uZGl0aW9uTm90TWV0LCBycGNDb2RlPTQxMn0gUHJlY29uZGl0aW9uIEZhaWxlZDogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OklOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBJTkNPUlJFQ1RfTUVUQV9HRU5FUkFUSU9OX1NQRUNJRklFRDogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IGV4cGVjdGVkIEJ1Y2tldE1ldGFkYXRhLm1ldGFkYXRhX2dlbmVyYXRpb246IDAgYWN0dWFsOiAxXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuTG9ja1JldGVudGlvblBvbGljeS5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTG9ja1JldGVudGlvblBvbGljeS5qYXZhOjIxMClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkxvY2tSZXRlbnRpb25Qb2xpY3kuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExvY2tSZXRlbnRpb25Qb2xpY3kuamF2YTo1OClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IubG9ja1JldGVudGlvblBvbGljeShCdWNrZXRzRGVsZWdhdG9yLmphdmE6MTAwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogSU5DT1JSRUNUX01FVEFfR0VORVJBVElPTl9TUEVDSUZJRUQ6IElOQ09SUkVDVF9NRVRBX0dFTkVSQVRJT05fU1BFQ0lGSUVEOiBleHBlY3RlZCBCdWNrZXRNZXRhZGF0YS5tZXRhZGF0YV9nZW5lcmF0aW9uOiAwIGFjdHVhbDogMVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTggbW9yZVxuXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkVycm9yQ29sbGVjdG9yLnRvRmF1bHQoRXJyb3JDb2xsZWN0b3IuamF2YTo1NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lFcnJvckNvbnZlcnRlci50b0ZhdWx0KFJvc3lFcnJvckNvbnZlcnRlci5qYXZhOjY3KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjU4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUhhbmRsZXIkMi5jYWxsKFJvc3lIYW5kbGVyLmphdmE6MjM4KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnRocmVhZC5UaHJlYWRUcmFja2VycyRUaHJlYWRUcmFja2luZ1J1bm5hYmxlLnJ1bihUaHJlYWRUcmFja2Vycy5qYXZhOjEyNilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6NDU1KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuc2VydmVyLkNvbW1vbk1vZHVsZSRDb250ZXh0Q2FycnlpbmdFeGVjdXRvclNlcnZpY2UkMS5ydW5JbkNvbnRleHQoQ29tbW9uTW9kdWxlLmphdmE6ODQ2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlJDEucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ2Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoVHJhY2VDb250ZXh0LmphdmE6MzIxKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjMxMylcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDU5KVxuXHRhdCBjb20uZ29vZ2xlLmdzZS5pbnRlcm5hbC5EaXNwYXRjaFF1ZXVlSW1wbCRXb3JrZXJUaHJlYWQucnVuKERpc3BhdGNoUXVldWVJbXBsLmphdmE6NDAzKVxuIgogICB9CiAgXSwKICAiY29kZSI6IDQxMiwKICAibWVzc2FnZSI6ICJQcmVjb25kaXRpb24gRmFpbGVkIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "42bd95c09f5a155b",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026kmsKeyName=projects%2Fdulcet-port-762%2Flocations%2Fus%2FkeyRings%2Fgo-integration-test%2FcryptoKeys%2Fkey1\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=fc1557c3ba717fbd0928ea7676433bea4f70fc9ffd483725d57f264d0ac4"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "94faa56e374d7b287f36920090c3374c/6789237871207131581;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026kmsKeyName=projects%2Fdulcet-port-762%2Flocations%2Fus%2FkeyRings%2Fgo-integration-test%2FcryptoKeys%2Fkey1\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1mYzE1NTdjM2JhNzE3ZmJkMDkyOGVhNzY3NjQzM2JlYTRmNzBmYzlmZmQ0ODM3MjVkNTdmMjY0ZDBhYzQNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm5hbWUiOiJrbXMifQoNCi0tZmMxNTU3YzNiYTcxN2ZiZDA5MjhlYTc2NzY0MzNiZWE0ZjcwZmM5ZmZkNDgzNzI1ZDU3ZjI2NGQwYWM0DQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KbXkgc2VjcmV0DQotLWZjMTU1N2MzYmE3MTdmYmQwOTI4ZWE3Njc2NDMzYmVhNGY3MGZjOWZmZDQ4MzcyNWQ1N2YyNjRkMGFjNC0tDQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3665"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:04 GMT"
+ ],
+ "Etag": [
+ "CJ+/4PrvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543403000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaf2:4331,/bns/xi/borg/xi/bns/blobstore2/bitpusher/48.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=f8BYW4TiB4S2swbxoazoAg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/48.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/48:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqjsBJ2ZIfK4dL3wqgybmuDvjmuXKUjnFo6UG57-tEuNAWqJxONaOR_ZzJRaaxwqUclIhlYg5jdgIg5jStHoJOPWgXAzQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9rbXMvMTUzMjU0MzEwNDQ1ODY1NSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2ttcyIsCiAibmFtZSI6ICJrbXMiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzEwNDQ1ODY1NSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNTowNC40NTdaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MDQuNDU3WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjA0LjQ1N1oiLAogInNpemUiOiAiOSIsCiAibWQ1SGFzaCI6ICJBQVBRUzQ2VHJuTVlucWlLQWJhZ3RRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28va21zP2dlbmVyYXRpb249MTUzMjU0MzEwNDQ1ODY1NSZhbHQ9bWVkaWEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAva21zLzE1MzI1NDMxMDQ0NTg2NTUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2ttcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAia21zIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzEwNDQ1ODY1NSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0orLzRQcnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9rbXMvMTUzMjU0MzEwNDQ1ODY1NS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2ttcy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMDQ0NTg2NTUiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0orLzRQcnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9rbXMvMTUzMjU0MzEwNDQ1ODY1NS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2ttcy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMDQ0NTg2NTUiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNKKy80UHJ2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAva21zLzE1MzI1NDMxMDQ0NTg2NTUvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28va21zL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMDQ0NTg2NTUiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNKKy80UHJ2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJVSTc4NUE9PSIsCiAiZXRhZyI6ICJDSisvNFBydnV0d0NFQUU9IiwKICJrbXNLZXlOYW1lIjogInByb2plY3RzL2R1bGNldC1wb3J0LTc2Mi9sb2NhdGlvbnMvdXMva2V5UmluZ3MvZ28taW50ZWdyYXRpb24tdGVzdC9jcnlwdG9LZXlzL2tleTEvY3J5cHRvS2V5VmVyc2lvbnMvMSIKfQo="
+ }
+ },
+ {
+ "ID": "e74ff71e71d77743",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/kms",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7e48cc31e28d1f8501a29fbccfccad3b/14430199889071680217;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/kms"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "9"
+ ],
+ "Content-Type": [
+ "text/plain; charset=utf-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:05 GMT"
+ ],
+ "Etag": [
+ "\"-CJ+/4PrvutwCEAE=\""
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:25:04 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Encryption-Kms-Key-Name": [
+ "projects/dulcet-port-762/locations/us/keyRings/go-integration-test/cryptoKeys/key1/cryptoKeyVersions/1"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:25:04 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532543104458655"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=UI785A==",
+ "md5=AAPQS46TrnMYnqiKAbagtQ=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "9"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/88,/bns/yb/borg/yb/bns/blobstore2/bitpusher/969.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=gMBYW_n8IoWAlQGX1oL4Cw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/969.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/969:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur11pO4__pj6Z_HUQZRFtkq1hYNe1up1bews4vLtvV7icwLnQkaEb3nDlGp2HYkifATPEFRpG2nIA7KC2oLExw_8cmSiw"
+ ]
+ },
+ "Body": "bXkgc2VjcmV0"
+ }
+ },
+ {
+ "ID": "25e588c1f160ec5e",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/kms?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2549a182e89fecae8e444d248b404357/3624700411976297718;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/kms?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3665"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:07 GMT"
+ ],
+ "Etag": [
+ "CJ+/4PrvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543405000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaad3:4296,/bns/xi/borg/xi/bns/blobstore2/bitpusher/20.scotty,aclgag4:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=gcBYW6izOq6wswbUmaUY"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/20.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/20:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq4dlY_xIpc418yzsvdv218cENXTeE9FedGO-f_ICxNlDXV2uwjYkAlp82f7RGBFyy6Vv-_20WljTCU5Kv4JKa_D3A1og"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9rbXMvMTUzMjU0MzEwNDQ1ODY1NSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2ttcyIsCiAibmFtZSI6ICJrbXMiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzEwNDQ1ODY1NSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNTowNC40NTdaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MDQuNDU3WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjA0LjQ1N1oiLAogInNpemUiOiAiOSIsCiAibWQ1SGFzaCI6ICJBQVBRUzQ2VHJuTVlucWlLQWJhZ3RRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28va21zP2dlbmVyYXRpb249MTUzMjU0MzEwNDQ1ODY1NSZhbHQ9bWVkaWEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAva21zLzE1MzI1NDMxMDQ0NTg2NTUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2ttcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAia21zIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzEwNDQ1ODY1NSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0orLzRQcnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9rbXMvMTUzMjU0MzEwNDQ1ODY1NS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2ttcy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMDQ0NTg2NTUiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0orLzRQcnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9rbXMvMTUzMjU0MzEwNDQ1ODY1NS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2ttcy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMDQ0NTg2NTUiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNKKy80UHJ2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAva21zLzE1MzI1NDMxMDQ0NTg2NTUvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28va21zL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMDQ0NTg2NTUiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNKKy80UHJ2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJVSTc4NUE9PSIsCiAiZXRhZyI6ICJDSisvNFBydnV0d0NFQUU9IiwKICJrbXNLZXlOYW1lIjogInByb2plY3RzL2R1bGNldC1wb3J0LTc2Mi9sb2NhdGlvbnMvdXMva2V5UmluZ3MvZ28taW50ZWdyYXRpb24tdGVzdC9jcnlwdG9LZXlzL2tleTEvY3J5cHRvS2V5VmVyc2lvbnMvMSIKfQo="
+ }
+ },
+ {
+ "ID": "536431f26c9dec6c",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/kms?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "9b1850d51755c8f7db4881edaa627138/7481068380944362628;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/kms?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:07 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543403000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaw14:4032,/bns/xi/borg/xi/bns/blobstore2/bitpusher/59.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=g8BYW-awEdCzswaRnZSgCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/59.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/59:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpO5idx15L5gqI1mphwZhISRAzHCMWhpoqUumtMtThDNlBo0qwektfGlEibPgys5DSlg9pyt8SkeNGaoa5fGFuZDetnqg"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "b1f6dc708cbabc82",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=2973a100a803ca693f25c2197b33682fca7ed1a5c4fc175ca5e386081967"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5941192fc3bb4c9ba98e93dfa6fab0e8/11265662429840846098;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Encryption-Key-Sha256": [
+ "Io4lnOPU+EThO0X0nq7mNEXB1rWxZsBI4L37pBmyfDc="
+ ]
+ },
+ "Body": "LS0yOTczYTEwMGE4MDNjYTY5M2YyNWMyMTk3YjMzNjgyZmNhN2VkMWE1YzRmYzE3NWNhNWUzODYwODE5NjcNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsImNhY2hlQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsIm5hbWUiOiJjc2VrIn0KDQotLTI5NzNhMTAwYTgwM2NhNjkzZjI1YzIxOTdiMzM2ODJmY2E3ZWQxYTVjNGZjMTc1Y2E1ZTM4NjA4MTk2Nw0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQoNCm15IHNlY3JldA0KLS0yOTczYTEwMGE4MDNjYTY5M2YyNWMyMTk3YjMzNjgyZmNhN2VkMWE1YzRmYzE3NWNhNWUzODYwODE5NjctLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3710"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:07 GMT"
+ ],
+ "Etag": [
+ "CLWHnvzvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543403000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabq10:4444,/bns/xi/borg/xi/bns/blobstore2/bitpusher/140.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=g8BYW--lHIa9swbN3qfoAg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/140.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/140:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqwuxqo4ZFEguMXp0NFus0BfuhYbPD9CMFLsYw73V27hFPwKoFb48aPLobWO4HjjKA32hQ_1NgyhGO2dVWLZ9DiGZkCYg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jc2VrLzE1MzI1NDMxMDc1NjQ0NjkiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jc2VrIiwKICJuYW1lIjogImNzZWsiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzEwNzU2NDQ2OSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNTowNy41NjRaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MDcuNTY0WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjA3LjU2NFoiLAogInNpemUiOiAiOSIsCiAibWQ1SGFzaCI6ICJBQVBRUzQ2VHJuTVlucWlLQWJhZ3RRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3Nlaz9nZW5lcmF0aW9uPTE1MzI1NDMxMDc1NjQ0NjkmYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NzZWsvMTUzMjU0MzEwNzU2NDQ2OS9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3Nlay9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY3NlayIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMDc1NjQ0NjkiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNMV0hudnp2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3Nlay8xNTMyNTQzMTA3NTY0NDY5L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3Nlay9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNzZWsiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTA3NTY0NDY5IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNMV0hudnp2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3Nlay8xNTMyNTQzMTA3NTY0NDY5L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3Nlay9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNzZWsiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTA3NTY0NDY5IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDTFdIbnZ6dnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NzZWsvMTUzMjU0MzEwNzU2NDQ2OS91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jc2VrL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNzZWsiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTA3NTY0NDY5IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDTFdIbnZ6dnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiVUk3ODVBPT0iLAogImV0YWciOiAiQ0xXSG52enZ1dHdDRUFFPSIsCiAiY3VzdG9tZXJFbmNyeXB0aW9uIjogewogICJlbmNyeXB0aW9uQWxnb3JpdGhtIjogIkFFUzI1NiIsCiAgImtleVNoYTI1NiI6ICJJbzRsbk9QVStFVGhPMFgwbnE3bU5FWEIxcld4WnNCSTRMMzdwQm15ZkRjPSIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "f9661ee2e220fc7d",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/csek/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/cmek?alt=json\u0026destinationKmsKeyName=projects%2Fdulcet-port-762%2Flocations%2Fus%2FkeyRings%2Fgo-integration-test%2FcryptoKeys%2Fkey1\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "1a3e3731757b421b8bbeb06a05c63cc2/460162948467338799;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/csek/rewriteTo/b/go-integration-test-20180725-66174009628628-0000/o/cmek?alt=json\u0026destinationKmsKeyName=projects%2Fdulcet-port-762%2Flocations%2Fus%2FkeyRings%2Fgo-integration-test%2FcryptoKeys%2Fkey1\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ],
+ "X-Goog-Copy-Source-Encryption-Algorithm": [
+ "AES256"
+ ],
+ "X-Goog-Copy-Source-Encryption-Key": [
+ "REDACTED"
+ ],
+ "X-Goog-Copy-Source-Encryption-Key-Sha256": [
+ "Io4lnOPU+EThO0X0nq7mNEXB1rWxZsBI4L37pBmyfDc="
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3904"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:08 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543407000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcab13:4337,/bns/xi/borg/xi/bns/blobstore2/bitpusher/103.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=g8BYW7fJKO60swb07ZvYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/103.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/103:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq_XDXPv8CUEWrEtE4PvIwh6G--zYPo8RbepMkXzO9_tchtwVqZEOBEd9GyZMIEr5KoAGWs4lkVcTOADbY_-4_uKNkcLQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiOSIsCiAib2JqZWN0U2l6ZSI6ICI5IiwKICJkb25lIjogdHJ1ZSwKICJyZXNvdXJjZSI6IHsKICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jbWVrLzE1MzI1NDMxMDgwNzg1NjQiLAogICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY21layIsCiAgIm5hbWUiOiAiY21layIsCiAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMDgwNzg1NjQiLAogICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MDguMDc4WiIsCiAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNTowOC4wNzhaIiwKICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNTowOC4wNzhaIiwKICAic2l6ZSI6ICI5IiwKICAibWQ1SGFzaCI6ICJBQVBRUzQ2VHJuTVlucWlLQWJhZ3RRPT0iLAogICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NtZWs/Z2VuZXJhdGlvbj0xNTMyNTQzMTA4MDc4NTY0JmFsdD1tZWRpYSIsCiAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICJhY2wiOiBbCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NtZWsvMTUzMjU0MzEwODA3ODU2NC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NtZWsvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICJvYmplY3QiOiAiY21layIsCiAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTA4MDc4NTY0IiwKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJvd25lcnMiCiAgICB9LAogICAgImV0YWciOiAiQ09TM3ZmenZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY21lay8xNTMyNTQzMTA4MDc4NTY0L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NtZWsvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAib2JqZWN0IjogImNtZWsiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzEwODA3ODU2NCIsCiAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJPV05FUiIsCiAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICB9LAogICAgImV0YWciOiAiQ09TM3ZmenZ1dHdDRUFFPSIKICAgfSwKICAgewogICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY21lay8xNTMyNTQzMTA4MDc4NTY0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NtZWsvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAib2JqZWN0IjogImNtZWsiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzEwODA3ODU2NCIsCiAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAicm9sZSI6ICJSRUFERVIiLAogICAgInByb2plY3RUZWFtIjogewogICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgfSwKICAgICJldGFnIjogIkNPUzN2Znp2dXR3Q0VBRT0iCiAgIH0sCiAgIHsKICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NtZWsvMTUzMjU0MzEwODA3ODU2NC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY21lay9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAib2JqZWN0IjogImNtZWsiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzEwODA3ODU2NCIsCiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgInJvbGUiOiAiT1dORVIiLAogICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJldGFnIjogIkNPUzN2Znp2dXR3Q0VBRT0iCiAgIH0KICBdLAogICJvd25lciI6IHsKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogIH0sCiAgImNyYzMyYyI6ICJVSTc4NUE9PSIsCiAgImV0YWciOiAiQ09TM3ZmenZ1dHdDRUFFPSIsCiAgImttc0tleU5hbWUiOiAicHJvamVjdHMvZHVsY2V0LXBvcnQtNzYyL2xvY2F0aW9ucy91cy9rZXlSaW5ncy9nby1pbnRlZ3JhdGlvbi10ZXN0L2NyeXB0b0tleXMva2V5MS9jcnlwdG9LZXlWZXJzaW9ucy8xIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "9ab1afba0e2599f4",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/cmek",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bb182ba754252d7b4e89a867e53b7839/8101124966331887435;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/cmek"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "9"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:09 GMT"
+ ],
+ "Etag": [
+ "\"-COS3vfzvutwCEAE=\""
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:25:08 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Encryption-Kms-Key-Name": [
+ "projects/dulcet-port-762/locations/us/keyRings/go-integration-test/cryptoKeys/key1/cryptoKeyVersions/1"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:25:08 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532543108078564"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=UI785A==",
+ "md5=AAPQS46TrnMYnqiKAbagtQ=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "9"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/392,/bns/yb/borg/yb/bns/blobstore2/bitpusher/74.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=hMBYW6K3C8GelAH-jJWoCw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/74.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/74:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur-KKfE5QazX5N78CjHt7Z21YDuyOs75dMBEkjVw4ZIssKfMm8fFR2fHmoed-Evyx0b4VoPH34qoQiD8wuRM3wQHXiFp30cDbAJafugDkgO5Omj8Cg"
+ ]
+ },
+ "Body": "bXkgc2VjcmV0"
+ }
+ },
+ {
+ "ID": "fcaef1ebf384dba2",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/cmek?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d08a49c978255b94aec85a05eda5f531/15741806617304379496;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/cmek?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3705"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:09 GMT"
+ ],
+ "Etag": [
+ "COS3vfzvutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543409000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbc16:4387,/bns/xi/borg/xi/bns/blobstore2/bitpusher/80.scotty,aclgag4:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=hcBYW7rkJOyyswbR54r4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/80.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/80:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpULWN7xDHhCyow5HN6uZ4fUvWzp99Cu61pTpUjjMnu_9NF-Y3r3pggx2aPkeOe_Y3EYfx9WJmkpUQOmHXKp8KnMNu0RQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jbWVrLzE1MzI1NDMxMDgwNzg1NjQiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jbWVrIiwKICJuYW1lIjogImNtZWsiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzEwODA3ODU2NCIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbiIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNTowOC4wNzhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MDguMDc4WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjA4LjA3OFoiLAogInNpemUiOiAiOSIsCiAibWQ1SGFzaCI6ICJBQVBRUzQ2VHJuTVlucWlLQWJhZ3RRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY21laz9nZW5lcmF0aW9uPTE1MzI1NDMxMDgwNzg1NjQmYWx0PW1lZGlhIiwKICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NtZWsvMTUzMjU0MzEwODA3ODU2NC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY21lay9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiY21layIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMDgwNzg1NjQiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNPUzN2Znp2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY21lay8xNTMyNTQzMTA4MDc4NTY0L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY21lay9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNtZWsiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTA4MDc4NTY0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNPUzN2Znp2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY21lay8xNTMyNTQzMTA4MDc4NTY0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY21lay9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNtZWsiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTA4MDc4NTY0IiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDT1MzdmZ6dnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NtZWsvMTUzMjU0MzEwODA3ODU2NC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jbWVrL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogImNtZWsiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTA4MDc4NTY0IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDT1MzdmZ6dnV0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiVUk3ODVBPT0iLAogImV0YWciOiAiQ09TM3ZmenZ1dHdDRUFFPSIsCiAia21zS2V5TmFtZSI6ICJwcm9qZWN0cy9kdWxjZXQtcG9ydC03NjIvbG9jYXRpb25zL3VzL2tleVJpbmdzL2dvLWludGVncmF0aW9uLXRlc3QvY3J5cHRvS2V5cy9rZXkxL2NyeXB0b0tleVZlcnNpb25zLzEiCn0K"
+ }
+ },
+ {
+ "ID": "cb5ea713bb57a9b5",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/csek?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e602dd2dc9aeacc04155799058622cfb/1151994557716197622;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/csek?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:10 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543403000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabr1:4172,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=hcBYW4_dLoaxswa5pbcI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/5.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/5:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrD0EKcm6Mbtvmq7tLSDN7c_97-xsqokucVYVWhFkEFaA7qJ3n19TS1f3uup2K69HJVMdCC-nWsp7zm1-w-QkZNF7dVMA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "4a92c247352baad5",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/cmek?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b24f6bfd00b51ddb9d9d9f0e2b29a9f0/4936306036436087172;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/cmek?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:10 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543410000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcba13:4101,/bns/xi/borg/xi/bns/blobstore2/bitpusher/123.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=hsBYW-6zAoGGygPZjIDwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/123.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/123:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqV_zCf4tOCpa3beqtCKLJ4S-GC2_bJV8fFmYqdMKuEzZ1BAYpoWZHZooJR6zfnAf6xg96WDTCXA5EWk9gRBk9LrOBfjA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "de34262c7aea39a0",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "196"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bcc36332c1257f68f4855eef34de8797/12577269153795420833;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJlbmNyeXB0aW9uIjp7ImRlZmF1bHRLbXNLZXlOYW1lIjoicHJvamVjdHMvZHVsY2V0LXBvcnQtNzYyL2xvY2F0aW9ucy91cy9rZXlSaW5ncy9nby1pbnRlZ3JhdGlvbi10ZXN0L2NyeXB0b0tleXMva2V5MSJ9LCJsb2NhdGlvbiI6IlVTIiwibmFtZSI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCJ9Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "590"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:11 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543403000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaao15:4469,/bns/xi/borg/xi/bns/blobstore2/bitpusher/3.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=hsBYW6a1DaKFygOmqoPoBA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/3.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/3:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upk4_zMYyiKWEowUw60rmf7qi3cKqBHLAbZUKbxS4qoriPcokREpZdlZt31-zNuEtp9Bo6XiZODdFO_05GxYXTJM3apFA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MTAuODAzWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjEwLjgwM1oiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImVuY3J5cHRpb24iOiB7CiAgImRlZmF1bHRLbXNLZXlOYW1lIjogInByb2plY3RzL2R1bGNldC1wb3J0LTc2Mi9sb2NhdGlvbnMvdXMva2V5UmluZ3MvZ28taW50ZWdyYXRpb24tdGVzdC9jcnlwdG9LZXlzL2tleTEiCiB9LAogImxvY2F0aW9uIjogIlVTIiwKICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogImV0YWciOiAiQ0FFPSIKfQo="
+ }
+ },
+ {
+ "ID": "a9e71e82fa8c0a13",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2aa34a2709e3bbd9c87adbfc5c746150/1771768572927128509;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2863"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:11 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:25:11 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543405000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaz15:4214,/bns/xi/borg/xi/bns/blobstore2/bitpusher/110.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=h8BYW4O4A6i9swbA1rXICg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/110.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/110:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Urn3xm30BRq9Etk-mrsRZh-CTxI2V5yRmmImGI5u-NvQeuWQ3OYsS91z0eLNtvYpCLw8uoQACLQaSu8fDrDne450ahVSQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MTAuODAzWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjEwLjgwM1oiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBRT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUU9IgogIH0KIF0sCiAiZW5jcnlwdGlvbiI6IHsKICAiZGVmYXVsdEttc0tleU5hbWUiOiAicHJvamVjdHMvZHVsY2V0LXBvcnQtNzYyL2xvY2F0aW9ucy91cy9rZXlSaW5ncy9nby1pbnRlZ3JhdGlvbi10ZXN0L2NyeXB0b0tleXMva2V5MSIKIH0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "7d55bd9561c85310",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0014/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=efaf8d5b00cf0cf9771216d0934a5671116ca2787bac7036c0734defc17a"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "07e7d7f8ee4f397ab196edead28af09c/5556081151141868619;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0014/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1lZmFmOGQ1YjAwY2YwY2Y5NzcxMjE2ZDA5MzRhNTY3MTExNmNhMjc4N2JhYzcwMzZjMDczNGRlZmMxN2ENCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsIm5hbWUiOiJrbXMifQoNCi0tZWZhZjhkNWIwMGNmMGNmOTc3MTIxNmQwOTM0YTU2NzExMTZjYTI3ODdiYWM3MDM2YzA3MzRkZWZjMTdhDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgNCg0KbXkgc2VjcmV0DQotLWVmYWY4ZDViMDBjZjBjZjk3NzEyMTZkMDkzNGE1NjcxMTE2Y2EyNzg3YmFjNzAzNmMwNzM0ZGVmYzE3YS0tDQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3665"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:13 GMT"
+ ],
+ "Etag": [
+ "CM/k4/7vutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543403000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbp13:4150,/bns/xi/borg/xi/bns/blobstore2/bitpusher/148.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=h8BYW-i2Gce9swaP-5fwAg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/148.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/148:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Urqf0olm2KhWTR9CJDbcPWkQ9mDH0g4QArVT7mkBNxeU3RBtCZL3yEkAIidTVs2gsy8381Vtwx-Sph1lJghYO6xNJrBCA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9rbXMvMTUzMjU0MzExMjkwMTE5OSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9vL2ttcyIsCiAibmFtZSI6ICJrbXMiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzExMjkwMTE5OSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNToxMi45MDBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MTIuOTAwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjEyLjkwMFoiLAogInNpemUiOiAiOSIsCiAibWQ1SGFzaCI6ICJBQVBRUzQ2VHJuTVlucWlLQWJhZ3RRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE0L28va21zP2dlbmVyYXRpb249MTUzMjU0MzExMjkwMTE5OSZhbHQ9bWVkaWEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQva21zLzE1MzI1NDMxMTI5MDExOTkvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9vL2ttcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAgICJvYmplY3QiOiAia21zIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzExMjkwMTE5OSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ00vazQvN3Z1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9rbXMvMTUzMjU0MzExMjkwMTE5OS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9vL2ttcy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMTI5MDExOTkiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ00vazQvN3Z1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9rbXMvMTUzMjU0MzExMjkwMTE5OS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9vL2ttcy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMTI5MDExOTkiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNNL2s0Lzd2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQva21zLzE1MzI1NDMxMTI5MDExOTkvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE0L28va21zL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMTI5MDExOTkiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNNL2s0Lzd2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJVSTc4NUE9PSIsCiAiZXRhZyI6ICJDTS9rNC83dnV0d0NFQUU9IiwKICJrbXNLZXlOYW1lIjogInByb2plY3RzL2R1bGNldC1wb3J0LTc2Mi9sb2NhdGlvbnMvdXMva2V5UmluZ3MvZ28taW50ZWdyYXRpb24tdGVzdC9jcnlwdG9LZXlzL2tleTEvY3J5cHRvS2V5VmVyc2lvbnMvMSIKfQo="
+ }
+ },
+ {
+ "ID": "d7d1bf9c237ce398",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0014/kms",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d29732f9dc74fdf49586042c59888b2a/13197044268501202280;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0014/kms"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "9"
+ ],
+ "Content-Type": [
+ "text/plain; charset=utf-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:14 GMT"
+ ],
+ "Etag": [
+ "\"-CM/k4/7vutwCEAE=\""
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:25:12 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Encryption-Kms-Key-Name": [
+ "projects/dulcet-port-762/locations/us/keyRings/go-integration-test/cryptoKeys/key1/cryptoKeyVersions/1"
+ ],
+ "X-Goog-Generation": [
+ "1532543112901199"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=UI785A==",
+ "md5=AAPQS46TrnMYnqiKAbagtQ=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "9"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/258,/bns/yb/borg/yb/bns/blobstore2/bitpusher/96.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=icBYW5foBouHlgGFkKC4Bw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/96.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/96:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoNOA4kIoPQxGo5U9AQSUUobw0uQgAYyFwDJCorOjXrGpTAXCe1NzRDNmhGuzKaTQpm6QWYfN-SvL2imOy7yCvM95-0wCz8C46ykp33Hd7JhgPGsUg"
+ ]
+ },
+ "Body": "bXkgc2VjcmV0"
+ }
+ },
+ {
+ "ID": "5e6d49a89653d5f2",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014/o/kms?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "143edb9bcab6180370e53715386417f2/2391543687632909956;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014/o/kms?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3665"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:15 GMT"
+ ],
+ "Etag": [
+ "CM/k4/7vutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543405000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcba13:4101,/bns/xi/borg/xi/bns/blobstore2/bitpusher/101.scotty,aclgag4:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=isBYW_vAI423swaa1JGICA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/101.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/101:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq3Etom4w01a-UT2jFFvKPiVEavm5w49O8uYkeE0U7nn-AGR-MheYPNiU53xd3qZZOdv6ElHEyBwUfzEF9WkTGk-tMrFQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9rbXMvMTUzMjU0MzExMjkwMTE5OSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9vL2ttcyIsCiAibmFtZSI6ICJrbXMiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzExMjkwMTE5OSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNToxMi45MDBaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MTIuOTAwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjEyLjkwMFoiLAogInNpemUiOiAiOSIsCiAibWQ1SGFzaCI6ICJBQVBRUzQ2VHJuTVlucWlLQWJhZ3RRPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE0L28va21zP2dlbmVyYXRpb249MTUzMjU0MzExMjkwMTE5OSZhbHQ9bWVkaWEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQva21zLzE1MzI1NDMxMTI5MDExOTkvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9vL2ttcy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAgICJvYmplY3QiOiAia21zIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzExMjkwMTE5OSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ00vazQvN3Z1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9rbXMvMTUzMjU0MzExMjkwMTE5OS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9vL2ttcy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMTI5MDExOTkiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ00vazQvN3Z1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9rbXMvMTUzMjU0MzExMjkwMTE5OS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9vL2ttcy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMTI5MDExOTkiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNNL2s0Lzd2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQva21zLzE1MzI1NDMxMTI5MDExOTkvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE0L28va21zL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAib2JqZWN0IjogImttcyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMTI5MDExOTkiLAogICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICJldGFnIjogIkNNL2s0Lzd2dXR3Q0VBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiB9LAogImNyYzMyYyI6ICJVSTc4NUE9PSIsCiAiZXRhZyI6ICJDTS9rNC83dnV0d0NFQUU9IiwKICJrbXNLZXlOYW1lIjogInByb2plY3RzL2R1bGNldC1wb3J0LTc2Mi9sb2NhdGlvbnMvdXMva2V5UmluZ3MvZ28taW50ZWdyYXRpb24tdGVzdC9jcnlwdG9LZXlzL2tleTEvY3J5cHRvS2V5VmVyc2lvbnMvMSIKfQo="
+ }
+ },
+ {
+ "ID": "25e10e9fed5c5396",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014/o/kms?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5faf77613b3b9511d92d70688896c905/6247912760390661651;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014/o/kms?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:16 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543403000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaj11:4432,/bns/xi/borg/xi/bns/blobstore2/bitpusher/121.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=i8BYW_KbN8KFygPBwIT4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/121.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/121:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UppIxbWLaxAf-Zq0nNHkXR5XFS9Rn1w9xLfIe1rTeCyOKE1r-phL4cnLEVyscXJqaIIFhHgNJs2BQNxcMGr6ll-Fs9QLQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "4346587d156ca239",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "122"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "ad7dc136f10e1f6eddacd92b38ad53e6/13888874778255210287;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJlbmNyeXB0aW9uIjp7ImRlZmF1bHRLbXNLZXlOYW1lIjoicHJvamVjdHMvZHVsY2V0LXBvcnQtNzYyL2xvY2F0aW9ucy91cy9rZXlSaW5ncy9nby1pbnRlZ3JhdGlvbi10ZXN0L2NyeXB0b0tleXMva2V5MiJ9fQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2863"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:17 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543416000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaam10:4277,/bns/xi/borg/xi/bns/blobstore2/bitpusher/99.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=jMBYW7LEEuu4swbCgq_QBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/99.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/99:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqZeiwBOESI9cjgLJ3jeW78fUbL__YwQhluL10uf669w2iUl6VChmV4zk3zRWdyEovwG-AcV4TIMVIQLvDrLcSwkqzZyQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MTAuODAzWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjE3LjcwOVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAiZW5jcnlwdGlvbiI6IHsKICAiZGVmYXVsdEttc0tleU5hbWUiOiAicHJvamVjdHMvZHVsY2V0LXBvcnQtNzYyL2xvY2F0aW9ucy91cy9rZXlSaW5ncy9nby1pbnRlZ3JhdGlvbi10ZXN0L2NyeXB0b0tleXMva2V5MiIKIH0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "61b69385ede693c9",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "bd967b8897e9a326a3d6caaa2ab3a059/3083375301176604748;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2863"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:18 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:25:18 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543405000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaay12:4070,/bns/xi/borg/xi/bns/blobstore2/bitpusher/95.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=jcBYW_aPN6y0swbR3ovADQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/95.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/95:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrCM0rGO0-v-HW86MmJdO6O_7YdEcemYLt_ZOju4yWuiOko5XFRpXY0FPUruJ3IW43X-wjqal5QsYgb2N86ym_Rf00PLw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MTAuODAzWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjE3LjcwOVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQUk9IgogIH0KIF0sCiAiZW5jcnlwdGlvbiI6IHsKICAiZGVmYXVsdEttc0tleU5hbWUiOiAicHJvamVjdHMvZHVsY2V0LXBvcnQtNzYyL2xvY2F0aW9ucy91cy9rZXlSaW5ncy9nby1pbnRlZ3JhdGlvbi10ZXN0L2NyeXB0b0tleXMva2V5MiIKIH0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQUk9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "397134d388f8a1e0",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "20"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "085d629202743c266b17aa0305c93024/10724338418536003944;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJlbmNyeXB0aW9uIjpudWxsfQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2734"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:19 GMT"
+ ],
+ "Etag": [
+ "CAM="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543418000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcap15:4034,/bns/xi/borg/xi/bns/blobstore2/bitpusher/149.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=jsBYW8PCDcy8swbYrr3oAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/149.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/149:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpGNJ8uvytPk-y8xhPBH4UUgKgtuPpdqRNUDRaDi6IyQDkUYNwZv537tzTONGVLB85K9uNsY7o1hskfdWGtj9rrLSEC8Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MTAuODAzWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjE5LjQ0NVoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjMiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FNPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FNPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTQiLAogICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgIH0sCiAgICJldGFnIjogIkNBTT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAib3duZXJzIgogICB9LAogICAiZXRhZyI6ICJDQU09IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJyb2xlIjogIk9XTkVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAiZWRpdG9ycyIKICAgfSwKICAgImV0YWciOiAiQ0FNPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQU09IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKIH0sCiAibG9jYXRpb24iOiAiVVMiLAogInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAiZXRhZyI6ICJDQU09Igp9Cg=="
+ }
+ },
+ {
+ "ID": "188a609ebd8e15d2",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "23becb51702fe5e01307e4e8da4e1c71/18365300436400487045;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0014?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:20 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543403000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabm11:4101,/bns/xi/borg/xi/bns/blobstore2/bitpusher/41.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=j8BYW_OAJ-yzswaYlLDIBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/41.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/41:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWdweWxrZUFDQWNTVkJnYVM0emtvMGU2Z01TcmNmMWVieHdoZnNkU3BrY2JfTVdfN2xvdjgtV05iNGdLRFJqLXQtMG9NeE5BMUt6bk9taWgxTGVRbTFmdmRHaURJODdhaVZYV2dVZWQ4TUtuYjhsSk9VOE5INjFQRmZNMzJXU2hvYmJ6bEZGamYyU0JUQXRCTG15XzJJRW4zNUVmanpnVnJBSmI2Nk45RUhOUWZaRTdvV2Y4MWlpNE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uqo1YxFESwukQiPaaNsij_Y8YGS-A1HpZPN-LBxr9UkULUv0JYJDn3P3UXulpK2-s7UwK95Ao6dK4Rj_JJxzPU9YU4PpQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "2008c58a82bf99cd",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026predefinedAcl=authenticatedRead\u0026predefinedDefaultObjectAcl=publicRead\u0026project=dulcet-port-762",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "60"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d3f1ef57aa73dc9b92f3a34880428199/7559800955010268321;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026predefinedAcl=authenticatedRead\u0026predefinedDefaultObjectAcl=publicRead\u0026project=dulcet-port-762"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJuYW1lIjoiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1In0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "1587"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:20 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543420000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaz15:4214,/bns/xi/borg/xi/bns/blobstore2/bitpusher/56.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=kMBYW-aiCa2yswaCrJ3IBA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/56.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/56:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur6JmJ6EjcJ_T5vorvfCES1OXd_6kUJxOC3jy_Pl3v-FrjXxsynf7JN5T_F-tYLJ_ilkL2M2tRDlOgpbbr5yeARm_NHsw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MjAuNjgyWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjIwLjY4MloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9hbGxBdXRoZW50aWNhdGVkVXNlcnMiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9hY2wvYWxsQXV0aGVudGljYXRlZFVzZXJzIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogICAiZW50aXR5IjogImFsbEF1dGhlbnRpY2F0ZWRVc2VycyIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJldGFnIjogIkNBRT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJhbGxVc2VycyIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJldGFnIjogIkNBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IgogfSwKICJsb2NhdGlvbiI6ICJVUyIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "c341eca080d71ae4",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c2751749e9a43a37a616e967de8a501f/15200762972874751422;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "1587"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:21 GMT"
+ ],
+ "Etag": [
+ "CAE="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:25:21 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543420000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaca8:4102,/bns/xi/borg/xi/bns/blobstore2/bitpusher/16.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=kMBYW9vENY-wswbzhrDoBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/16.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/16:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoDAyb13coLcsrWGKMOdNg98t3ToF5GWSJ0RdLLckgVhVQk25lFuiMXn7uIw8s21j0UduvxRgnfUDrqh3hIVMPyKSPU0g"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MjAuNjgyWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjIwLjY4MloiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9hbGxBdXRoZW50aWNhdGVkVXNlcnMiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9hY2wvYWxsQXV0aGVudGljYXRlZFVzZXJzIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogICAiZW50aXR5IjogImFsbEF1dGhlbnRpY2F0ZWRVc2VycyIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJldGFnIjogIkNBRT0iCiAgfQogXSwKICJkZWZhdWx0T2JqZWN0QWNsIjogWwogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJhbGxVc2VycyIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJldGFnIjogIkNBRT0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IgogfSwKICJsb2NhdGlvbiI6ICJVUyIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "79772ad8914752cf",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015?alt=json\u0026predefinedAcl=private\u0026predefinedDefaultObjectAcl=authenticatedRead\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "33"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "359ed29bf1fa5087cb5818b04ec49255/4394982025114468058;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015?alt=json\u0026predefinedAcl=private\u0026predefinedDefaultObjectAcl=authenticatedRead\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJhY2wiOltdLCJkZWZhdWx0T2JqZWN0QWNsIjpbXX0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "1191"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:22 GMT"
+ ],
+ "Etag": [
+ "CAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543421000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaba15:4126,/bns/xi/borg/xi/bns/blobstore2/bitpusher/28.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=kcBYW7mFDoG2swaN3piQDw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/28.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/28:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur9HjBtrpHRqDHTi6M18v5vg5FvD42ZdjAjDDf9T9UTA-vuXGCGiK1GFcTdwXG87Ib_v9hLvK5P3-TRJ6V5Ao2eV4j6Nw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNSIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNSIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MjAuNjgyWiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjIyLjQxOFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogImFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNSIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0FJPSIKICB9CiBdLAogImRlZmF1bHRPYmplY3RBY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiZW50aXR5IjogImFsbEF1dGhlbnRpY2F0ZWRVc2VycyIsCiAgICJyb2xlIjogIlJFQURFUiIsCiAgICJldGFnIjogIkNBST0iCiAgfQogXSwKICJvd25lciI6IHsKICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IgogfSwKICJsb2NhdGlvbiI6ICJVUyIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBST0iCn0K"
+ }
+ },
+ {
+ "ID": "1b04023c9360deb6",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o?alt=json\u0026predefinedAcl=authenticatedRead\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=69868ee313f381d11a8e4a53fe8d67f86ee4a09f195fd94dc415fbb8d49a"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "d5463f145e9bcb3d0983a3f9de076e8d/8179574970237976168;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o?alt=json\u0026predefinedAcl=authenticatedRead\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS02OTg2OGVlMzEzZjM4MWQxMWE4ZTRhNTNmZThkNjdmODZlZTRhMDlmMTk1ZmQ5NGRjNDE1ZmJiOGQ0OWENCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNSIsIm5hbWUiOiJwcml2YXRlIn0KDQotLTY5ODY4ZWUzMTNmMzgxZDExYThlNGE1M2ZlOGQ2N2Y4NmVlNGEwOWYxOTVmZDk0ZGM0MTVmYmI4ZDQ5YQ0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCmhlbGxvDQotLTY5ODY4ZWUzMTNmMzgxZDExYThlNGE1M2ZlOGQ2N2Y4NmVlNGEwOWYxOTVmZDk0ZGM0MTVmYmI4ZDQ5YS0tDQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2274"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:23 GMT"
+ ],
+ "Etag": [
+ "CNy2yIPwutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543422000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbl14:4360,/bns/xi/borg/xi/bns/blobstore2/bitpusher/93.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ksBYW8fAJam0swaY5YzYCw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/93.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/93:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoGOLF3VZKgV1c3Cdh4XICPggP4RdAToqP4KUPO4mN_WKPS9jpiD2spZmk4kYSUwq5vv_N1CU4S9tSAcU9veuM7KKAoBg"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9wcml2YXRlLzE1MzI1NDMxMjI5Mzg3MTYiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUvby9wcml2YXRlIiwKICJuYW1lIjogInByaXZhdGUiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzEyMjkzODcxNiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNToyMi45MzhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MjIuOTM4WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjIyLjkzOFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1L28vcHJpdmF0ZT9nZW5lcmF0aW9uPTE1MzI1NDMxMjI5Mzg3MTYmYWx0PW1lZGlhIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1L3ByaXZhdGUvMTUzMjU0MzEyMjkzODcxNi91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUvby9wcml2YXRlL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogICAib2JqZWN0IjogInByaXZhdGUiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTIyOTM4NzE2IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDTnkyeUlQd3V0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1L3ByaXZhdGUvMTUzMjU0MzEyMjkzODcxNi9hbGxBdXRoZW50aWNhdGVkVXNlcnMiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9vL3ByaXZhdGUvYWNsL2FsbEF1dGhlbnRpY2F0ZWRVc2VycyIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1IiwKICAgIm9iamVjdCI6ICJwcml2YXRlIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzEyMjkzODcxNiIsCiAgICJlbnRpdHkiOiAiYWxsQXV0aGVudGljYXRlZFVzZXJzIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImV0YWciOiAiQ055MnlJUHd1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIm1uRzdUQT09IiwKICJldGFnIjogIkNOeTJ5SVB3dXR3Q0VBRT0iCn0K"
+ }
+ },
+ {
+ "ID": "e6e85ed841a4648f",
+ "Request": {
+ "Method": "PATCH",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/private?alt=json\u0026predefinedAcl=private\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "62"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "15be655323443be0a12b718130ac4800/15820538091892211589;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/private?alt=json\u0026predefinedAcl=private\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUifQo="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "1757"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:23 GMT"
+ ],
+ "Etag": [
+ "CNy2yIPwutwCEAI="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543421000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabg14:4408,/bns/xi/borg/xi/bns/blobstore2/bitpusher/52.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=k8BYW72EA8Wxswbvo6bYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/52.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/52:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATpxChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4CtK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqxEq91kgH2O4oZuNy-Ml6rN9wtOdeh8Yya5cSwK2bQuFTMBUasebWTioqFl07IwFI72CPsFwq5bVffPI7SKkpinEoR3Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9wcml2YXRlLzE1MzI1NDMxMjI5Mzg3MTYiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUvby9wcml2YXRlIiwKICJuYW1lIjogInByaXZhdGUiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzEyMjkzODcxNiIsCiAibWV0YWdlbmVyYXRpb24iOiAiMiIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNToyMi45MzhaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MjMuMTQwWiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjIyLjkzOFoiLAogInNpemUiOiAiNSIsCiAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1L28vcHJpdmF0ZT9nZW5lcmF0aW9uPTE1MzI1NDMxMjI5Mzg3MTYmYWx0PW1lZGlhIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1L3ByaXZhdGUvMTUzMjU0MzEyMjkzODcxNi91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUvby9wcml2YXRlL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogICAib2JqZWN0IjogInByaXZhdGUiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTIyOTM4NzE2IiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDTnkyeUlQd3V0d0NFQUk9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAibW5HN1RBPT0iLAogImV0YWciOiAiQ055MnlJUHd1dHdDRUFJPSIKfQo="
+ }
+ },
+ {
+ "ID": "ef74290cf254b171",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/private/rewriteTo/b/go-integration-test-20180725-66174009628628-0015/o/dst?alt=json\u0026destinationPredefinedAcl=publicRead\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "3"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "21e009860d3a8bda89c8dc2aaa962d20/5015037511023853730;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/private/rewriteTo/b/go-integration-test-20180725-66174009628628-0015/o/dst?alt=json\u0026destinationPredefinedAcl=publicRead\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "e30K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2358"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:23 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543423000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaa2:4364,/bns/xi/borg/xi/bns/blobstore2/bitpusher/138.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=k8BYW_7vD8m8swae9r34Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/138.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/138:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqvuKOyqPufWdsHcVUeE4o-dkFcXfBwxc3BzbwWkoHAhYGQ18vWl1qro6nRXtGc-cA0tUPpuj8q2AS_BJLB1vYhz2yKHA"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLAogInRvdGFsQnl0ZXNSZXdyaXR0ZW4iOiAiNSIsCiAib2JqZWN0U2l6ZSI6ICI1IiwKICJkb25lIjogdHJ1ZSwKICJyZXNvdXJjZSI6IHsKICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9kc3QvMTUzMjU0MzEyMzcxNjExMCIsCiAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUvby9kc3QiLAogICJuYW1lIjogImRzdCIsCiAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMjM3MTYxMTAiLAogICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MjMuNzE1WiIsCiAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNToyMy43MTVaIiwKICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNToyMy43MTVaIiwKICAic2l6ZSI6ICI1IiwKICAibWQ1SGFzaCI6ICJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLAogICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9vL2RzdD9nZW5lcmF0aW9uPTE1MzI1NDMxMjM3MTYxMTAmYWx0PW1lZGlhIiwKICAiYWNsIjogWwogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9kc3QvMTUzMjU0MzEyMzcxNjExMC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1L28vZHN0L2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1IiwKICAgICJvYmplY3QiOiAiZHN0IiwKICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMjM3MTYxMTAiLAogICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICJyb2xlIjogIk9XTkVSIiwKICAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAiZXRhZyI6ICJDSTd3OTRQd3V0d0NFQUU9IgogICB9LAogICB7CiAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9kc3QvMTUzMjU0MzEyMzcxNjExMC9hbGxVc2VycyIsCiAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9vL2RzdC9hY2wvYWxsVXNlcnMiLAogICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogICAgIm9iamVjdCI6ICJkc3QiLAogICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzEyMzcxNjExMCIsCiAgICAiZW50aXR5IjogImFsbFVzZXJzIiwKICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAiZXRhZyI6ICJDSTd3OTRQd3V0d0NFQUU9IgogICB9CiAgXSwKICAib3duZXIiOiB7CiAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICB9LAogICJjcmMzMmMiOiAibW5HN1RBPT0iLAogICJldGFnIjogIkNJN3c5NFB3dXR3Q0VBRT0iCiB9Cn0K"
+ }
+ },
+ {
+ "ID": "8c50ccffcd7c453d",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/comp/compose?alt=json\u0026destinationPredefinedAcl=authenticatedRead",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Length": [
+ "130"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f0aedb62f85ddfd6872247f484654801/12655719157701509566;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/comp/compose?alt=json\u0026destinationPredefinedAcl=authenticatedRead"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "eyJkZXN0aW5hdGlvbiI6eyJidWNrZXQiOiJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUifSwic291cmNlT2JqZWN0cyI6W3sibmFtZSI6InByaXZhdGUifSx7Im5hbWUiOiJkc3QifV19Cg=="
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "2182"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:24 GMT"
+ ],
+ "Etag": [
+ "CKGEmYTwutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543423000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadccj12:4107,/bns/xi/borg/xi/bns/blobstore2/bitpusher/54.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=k8BYW8LTObC6swam3qWoCQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/54.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/54:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp0ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4StK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upj_Qy6jFFHoEP2BauoirZBxyyDlmYztXDmVGMI3M9lMWRgD-XjeIaSAOX12SgE5pOtZyhe5uTIiznrk8QGVeiPmdohEQ"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9jb21wLzE1MzI1NDMxMjQyNTkzNjEiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUvby9jb21wIiwKICJuYW1lIjogImNvbXAiLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzEyNDI1OTM2MSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNToyNC4yNTlaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MjQuMjU5WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjI0LjI1OVoiLAogInNpemUiOiAiMTAiLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1L28vY29tcD9nZW5lcmF0aW9uPTE1MzI1NDMxMjQyNTkzNjEmYWx0PW1lZGlhIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1L2NvbXAvMTUzMjU0MzEyNDI1OTM2MS91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUvby9jb21wL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTUiLAogICAib2JqZWN0IjogImNvbXAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTI0MjU5MzYxIiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDS0dFbVlUd3V0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1L2NvbXAvMTUzMjU0MzEyNDI1OTM2MS9hbGxBdXRoZW50aWNhdGVkVXNlcnMiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNS9vL2NvbXAvYWNsL2FsbEF1dGhlbnRpY2F0ZWRVc2VycyIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE1IiwKICAgIm9iamVjdCI6ICJjb21wIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzEyNDI1OTM2MSIsCiAgICJlbnRpdHkiOiAiYWxsQXV0aGVudGljYXRlZFVzZXJzIiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgImV0YWciOiAiQ0tHRW1ZVHd1dHdDRUFFPSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKIH0sCiAiY3JjMzJjIjogIi9SQ09nZz09IiwKICJjb21wb25lbnRDb3VudCI6IDIsCiAiZXRhZyI6ICJDS0dFbVlUd3V0d0NFQUU9Igp9Cg=="
+ }
+ },
+ {
+ "ID": "5360d6f075a0c1b1",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/comp?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "7684534e3dbb87c5be9a8c4113d41a07/16440313206597993036;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/comp?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:24 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543420000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadadq2:4007,/bns/xi/borg/xi/bns/blobstore2/bitpusher/37.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lMBYW-nGFo60swa29rugDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/37.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/37:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrpzIKzZteRPXZIeSRmcUE7bKcO1YmIrD6zdTEhezzHdn2yy8xiGNC79PWzg7CRTR1g4e6lG2WgPH9J2x0gNY1e18-vpw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "ce3d89a95a3aa916",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/dst?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b97b011a1a0596943acb0f6d3f599961/1850219676328002267;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/dst?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:25 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543420000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcad8:4117,/bns/xi/borg/xi/bns/blobstore2/bitpusher/104.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lMBYW8PCJey2swaUwyg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/104.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/104:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpONy7PRHUGrPxoCxP4LUezAL4fBdWZNkl3C96nIt794-BDyC89Qj3t8xVoIkdKTc8ZDsbLZ4CDRy_oWZ_AVcv9_7E_Aw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "768674231e5ccb2c",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/private?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c94fcc8cf34fbe19e08d87ced9c28af5/5634812625729635177;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015/o/private?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:25 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543420000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadccc1:4324,/bns/xi/borg/xi/bns/blobstore2/bitpusher/134.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lcBYW-ebBcq9swamsaLwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/134.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/134:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqjQ4lbvdT2HfMM_CCREyOdzoHMz5n-GFG0OFjahNCnfLXBysRWC7Nk1tvjduC1OH91V1EIX6Vx_PH3rhFDOgmKAWty0g"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "27e056509d92ecd6",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "b7486315ecba778fd29d5f5baf9950a7/13275494272407291013;o=0"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0015?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:25 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543420000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadacd12:4335,/bns/xi/borg/xi/bns/blobstore2/bitpusher/125.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lcBYW5uzIsGFygP35YHoAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/125.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/125:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YlNub0Uzd3RNZFppYm9VN3Jmc1dtemdjemRFVUVUS1dOcDVrQUpxNDZBRV9XVlNRSXhCT0lDMERjcHAzOUowLUVrajRNOHNWX3RoU3IxNXVwV2I3RXE1MkstYUVDREozU25DLUhfWXM0Rmg2d0l6ZmJvQnIwX041ZWFjb0N6S0VCRHpPMXFNNjFwMENGZTAzNE0xZm56Ml9RM0RXR3FIVnFYcTBULTRMZmRwX0RZc2hqaXFzSW5NVTQwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UowNYSPpp91qjcxy78gSm39jDTlUVKaKLyRYvbGevIB7hUrSrOsOXRCdZ7j2FGmk20qv1T6eJd9iasUqizZzO8G9Bzuww"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "c786bed5a9ffaa28",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "64c361c97b3756d348b078c1776dac54/13967607352321050445;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "2952"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Etag": [
+ "CAw="
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543425000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadccc1:4324,/bns/xi/borg/xi/bns/blobstore2/bitpusher/9.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lcBYW-DOO46xswa4jrSgDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/9.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/9:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WlhldUtKMHBwSnlXOFV3TDgxOW40NEtVQmE5VWV3ZjBaWDBUXzlCSUZZNmRJd3hxbURDODhqTkItcjA0RU8tRUh4b0NkY2lSVlFJM2dIcC01RGZaRV9jWUFrN3NvSXVHX0VHa3FvelNiVWRkUUxIeF9hM0tPd05IZWJ6WG9sQVJidmJIV1ZfRlJVbnQxZGlmUFFjMHh4dHJCNnR6MmFsWkJZVTlCSXZEd0JlOVY3NG54MDVyNnB5MzAwBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoABliFkMkf_6WGKyZWkV7UvZiSbifvZpCsxfPK7u9JmJMp6T5qtP5rPPBdv2NFrsN1yirT8owS9jECckYaZQdl0X51bw"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjI6NTUuMDg0WiIsCiAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI0OjIyLjUxNFoiLAogIm1ldGFnZW5lcmF0aW9uIjogIjEyIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJlZGl0b3JzIgogICB9LAogICAiZXRhZyI6ICJDQXc9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNBdz0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDQXc9IgogIH0KIF0sCiAiZGVmYXVsdE9iamVjdEFjbCI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogIm93bmVycyIKICAgfSwKICAgImV0YWciOiAiQ0F3PSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNBdz0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiUkVBREVSIiwKICAgInByb2plY3RUZWFtIjogewogICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgInRlYW0iOiAidmlld2VycyIKICAgfSwKICAgImV0YWciOiAiQ0F3PSIKICB9CiBdLAogIm93bmVyIjogewogICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiB9LAogImxvY2F0aW9uIjogIlVTIiwKICJ2ZXJzaW9uaW5nIjogewogICJlbmFibGVkIjogZmFsc2UKIH0sCiAibGlmZWN5Y2xlIjogewogICJydWxlIjogWwogICB7CiAgICAiYWN0aW9uIjogewogICAgICJ0eXBlIjogIkRlbGV0ZSIKICAgIH0sCiAgICAiY29uZGl0aW9uIjogewogICAgICJhZ2UiOiAzMAogICAgfQogICB9CiAgXQogfSwKICJsYWJlbHMiOiB7CiAgIm5ldyI6ICJuZXciLAogICJsMSI6ICJ2MiIKIH0sCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJldGFnIjogIkNBdz0iCn0K"
+ }
+ },
+ {
+ "ID": "e9dd5428b7d2b13c",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0016?alt=json\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "c3da9d7963629d08c2e2a1fef4077f46/3246950289016694692;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0016?alt=json\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "12271"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543426000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaah14:4439,/bns/xi/borg/xi/bns/blobstore2/bitpusher/33.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lsBYW5nKCe-wswb5qKXgCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/33.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/33:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YWV1RmZRSlBDbTM4UVlNYkRfakdsdnZ4U25TNE9KSk9nUTJIc3d6cmVSZG1OVjlkOG5iYzYtY3g4SFZyYmwxOHZINURDMUdtNHVNTDNaREpQN0xBRVlVeVVhdGtkd1VoVm41dExBaE1PVUdSa2Y3SlllQllQQ3JkaHc0akJCcnB4eFlPMXVIcXd4eTZxUWNkcHFvNFlaaUtlVG9xNXVFVzhkZkdUV25FcU9McU1EMHdBR3c1VGc0dE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqhhVs939U2t2MJ-OmlNaAKTzcaHldn7UPN1y2QcX_zVSthe74wQIJ1U8GjgrEQ1rzYUXdz91vGQ33IQ0jW4cD5ifsfYA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm90IEZvdW5kIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkJVQ0tFVF9OT1RfRk9VTkQ6IEJVQ0tFVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggYnVja2V0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTZcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5HZXRCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldEJ1Y2tldC5qYXZhOjEwMilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkdldEJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0QnVja2V0LmphdmE6MzEpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5CdWNrZXRzRGVsZWdhdG9yLmdldChCdWNrZXRzRGVsZWdhdG9yLmphdmE6NzQpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBCVUNLRVRfTk9UX0ZPVU5EOiBObyBzdWNoIGJ1Y2tldDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE2XG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Nilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOCBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1OT1RfRk9VTkQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QlVDS0VUX05PVF9GT1VORDogQlVDS0VUX05PVF9GT1VORDogTm8gc3VjaCBidWNrZXQ6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkdldEJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0QnVja2V0LmphdmE6MTAyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuR2V0QnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRCdWNrZXQuamF2YTozMSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IuZ2V0KEJ1Y2tldHNEZWxlZ2F0b3IuamF2YTo3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IEJVQ0tFVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggYnVja2V0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTZcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6Mjc2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPW5vdEZvdW5kLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5OT1RfRk9VTkQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpCVUNLRVRfTk9UX0ZPVU5EOiBCVUNLRVRfTk9UX0ZPVU5EOiBObyBzdWNoIGJ1Y2tldDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE2XG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuR2V0QnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRCdWNrZXQuamF2YToxMDIpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMuYnVja2V0cy5HZXRCdWNrZXQuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKEdldEJ1Y2tldC5qYXZhOjMxKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uQnVja2V0c0RlbGVnYXRvci5nZXQoQnVja2V0c0RlbGVnYXRvci5qYXZhOjc0KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQlVDS0VUX05PVF9GT1VORDogTm8gc3VjaCBidWNrZXQ6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTggbW9yZVxuLCBlcnJvclByb3RvQ29kZT1OT1RfRk9VTkQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LnJlc291cmNlX2lkLm5hbWUsIG1lc3NhZ2U9bnVsbCwgdW5uYW1lZEFyZ3VtZW50cz1bXX0sIGxvY2F0aW9uPWVudGl0eS5yZXNvdXJjZV9pZC5uYW1lLCBtZXNzYWdlPU5vdCBGb3VuZCwgcmVhc29uPW5vdEZvdW5kLCBycGNDb2RlPTQwNH0gTm90IEZvdW5kOiBjb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QlVDS0VUX05PVF9GT1VORDogQlVDS0VUX05PVF9GT1VORDogTm8gc3VjaCBidWNrZXQ6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5idWNrZXRzLkdldEJ1Y2tldC5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoR2V0QnVja2V0LmphdmE6MTAyKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLmJ1Y2tldHMuR2V0QnVja2V0LmhhbmRsZVJlcXVlc3RSZWNlaXZlZChHZXRCdWNrZXQuamF2YTozMSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLkJ1Y2tldHNEZWxlZ2F0b3IuZ2V0KEJ1Y2tldHNEZWxlZ2F0b3IuamF2YTo3NClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IEJVQ0tFVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggYnVja2V0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTZcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6Mjc2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcblxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS5FcnJvckNvbGxlY3Rvci50b0ZhdWx0KEVycm9yQ29sbGVjdG9yLmphdmE6NTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5RXJyb3JDb252ZXJ0ZXIudG9GYXVsdChSb3N5RXJyb3JDb252ZXJ0ZXIuamF2YTo2Nylcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjI1OClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnJlc3QuYWRhcHRlci5yb3N5LlJvc3lIYW5kbGVyJDIuY2FsbChSb3N5SGFuZGxlci5qYXZhOjIzOClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuTW9yZUV4ZWN1dG9ycyREaXJlY3RFeGVjdXRvci5leGVjdXRlKE1vcmVFeGVjdXRvcnMuamF2YTo0MDIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5leGVjdXRlTGlzdGVuZXIoQWJzdHJhY3RGdXR1cmUuamF2YToxMDI5KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuY29tcGxldGUoQWJzdHJhY3RGdXR1cmUuamF2YTo4NzEpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5zZXQoQWJzdHJhY3RGdXR1cmUuamF2YTo2OTQpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci50aHJlYWQuVGhyZWFkVHJhY2tlcnMkVGhyZWFkVHJhY2tpbmdSdW5uYWJsZS5ydW4oVGhyZWFkVHJhY2tlcnMuamF2YToxMjYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KFRyYWNlQ29udGV4dC5qYXZhOjQ1NSlcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLnNlcnZlci5Db21tb25Nb2R1bGUkQ29udGV4dENhcnJ5aW5nRXhlY3V0b3JTZXJ2aWNlJDEucnVuSW5Db250ZXh0KENvbW1vbk1vZHVsZS5qYXZhOjg0Nilcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRUcmFjZUNvbnRleHRSdW5uYWJsZSQxLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NjIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKFRyYWNlQ29udGV4dC5qYXZhOjMyMSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLlRyYWNlQ29udGV4dCRBYnN0cmFjdFRyYWNlQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTozMTMpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUucnVuKFRyYWNlQ29udGV4dC5qYXZhOjQ1OSlcblx0YXQgY29tLmdvb2dsZS5nc2UuaW50ZXJuYWwuRGlzcGF0Y2hRdWV1ZUltcGwkV29ya2VyVGhyZWFkLnJ1bihEaXNwYXRjaFF1ZXVlSW1wbC5qYXZhOjQwMylcbiIKICAgfQogIF0sCiAgImNvZGUiOiA0MDQsCiAgIm1lc3NhZ2UiOiAiTm90IEZvdW5kIgogfQp9Cg=="
+ }
+ },
+ {
+ "ID": "c2be0ce973cff84e",
+ "Request": {
+ "Method": "POST",
+ "URL": "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "Content-Type": [
+ "multipart/related; boundary=ae79d8a23439a70e747f9d54fcb229643b199ba3c851bb9c45e30e238c85"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "4078d9f02e1f528fbf48d8bb04b722e2/7103319357479610162;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/upload/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026projection=full\u0026uploadType=multipart"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": "LS1hZTc5ZDhhMjM0MzlhNzBlNzQ3ZjlkNTRmY2IyMjk2NDNiMTk5YmEzYzg1MWJiOWM0NWUzMGUyMzhjODUNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbg0KDQp7ImJ1Y2tldCI6ImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsIm5hbWUiOiJ6ZXJvIn0KDQotLWFlNzlkOGEyMzQzOWE3MGU3NDdmOWQ1NGZjYjIyOTY0M2IxOTliYTNjODUxYmI5YzQ1ZTMwZTIzOGM4NQ0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04DQoNCg0KLS1hZTc5ZDhhMjM0MzlhNzBlNzQ3ZjlkNTRmY2IyMjk2NDNiMTk5YmEzYzg1MWJiOWM0NWUzMGUyMzhjODUtLQ0K"
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "3560"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Etag": [
+ "COGml4XwutwCEAE="
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543426000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadacc2:4342,/bns/xi/borg/xi/bns/blobstore2/bitpusher/141.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lsBYW4_cDOS8swbfgrT4Ag"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/141.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/141:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YWV1RmZRSlBDbTM4UVlNYkRfakdsdnZ4U25TNE9KSk9nUTJIc3d6cmVSZG1OVjlkOG5iYzYtY3g4SFZyYmwxOHZINURDMUdtNHVNTDNaREpQN0xBRVlVeVVhdGtkd1VoVm41dExBaE1PVUdSa2Y3SlllQllQQ3JkaHc0akJCcnB4eFlPMXVIcXd4eTZxUWNkcHFvNFlaaUtlVG9xNXVFVzhkZkdUV25FcU9McU1EMHdBR3c1VGc0dE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_single_post_uploads"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpPy59662ny9_UVVu_GMsKzTKsi8eqHTMyYqYYlnupDGXK5cNm1iZrBo1flSqIFcblz-dWMjlHU20QzNSi25Mxjd8-m9Q"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC96ZXJvLzE1MzI1NDMxMjYzMjgxNjEiLAogInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby96ZXJvIiwKICJuYW1lIjogInplcm8iLAogImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogImdlbmVyYXRpb24iOiAiMTUzMjU0MzEyNjMyODE2MSIsCiAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyNToyNi4zMjdaIiwKICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MjYuMzI3WiIsCiAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjI1OjI2LjMyN1oiLAogInNpemUiOiAiMCIsCiAibWQ1SGFzaCI6ICIxQjJNMlk4QXNnVHBnQW1ZN1BoQ2ZnPT0iLAogIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vemVybz9nZW5lcmF0aW9uPTE1MzI1NDMxMjYzMjgxNjEmYWx0PW1lZGlhIiwKICJhY2wiOiBbCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3plcm8vMTUzMjU0MzEyNjMyODE2MS9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vemVyby9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJvYmplY3QiOiAiemVybyIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMxMjYzMjgxNjEiLAogICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgInJvbGUiOiAiT1dORVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJvd25lcnMiCiAgIH0sCiAgICJldGFnIjogIkNPR21sNFh3dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvemVyby8xNTMyNTQzMTI2MzI4MTYxL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vemVyby9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInplcm8iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTI2MzI4MTYxIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJPV05FUiIsCiAgICJwcm9qZWN0VGVhbSI6IHsKICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgIH0sCiAgICJldGFnIjogIkNPR21sNFh3dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvemVyby8xNTMyNTQzMTI2MzI4MTYxL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vemVyby9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInplcm8iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTI2MzI4MTYxIiwKICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAicm9sZSI6ICJSRUFERVIiLAogICAicHJvamVjdFRlYW0iOiB7CiAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICB9LAogICAiZXRhZyI6ICJDT0dtbDRYd3V0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3plcm8vMTUzMjU0MzEyNjMyODE2MS91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby96ZXJvL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAib2JqZWN0IjogInplcm8iLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMTI2MzI4MTYxIiwKICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgInJvbGUiOiAiT1dORVIiLAogICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAiZXRhZyI6ICJDT0dtbDRYd3V0d0NFQUU9IgogIH0KIF0sCiAib3duZXIiOiB7CiAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogfSwKICJjcmMzMmMiOiAiQUFBQUFBPT0iLAogImV0YWciOiAiQ09HbWw0WHd1dHdDRUFFPSIKfQo="
+ }
+ },
+ {
+ "ID": "1571b7dd08822890",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/storage-library-test-bucket/Caf%C3%A9",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "66d0047fed0cd17e0b1edd6fe6c7d64e/10887913406376093888;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/storage-library-test-bucket/Caf%C3%A9"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Length": [
+ "20"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Etag": [
+ "\"ade43306cb39336d630e101af5fb51b4\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:25:26 GMT"
+ ],
+ "Last-Modified": [
+ "Fri, 24 Mar 2017 20:04:38 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Generation": [
+ "1490385878535828"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=fN3yZg==",
+ "md5=reQzBss5M21jDhAa9ftRtA=="
+ ],
+ "X-Goog-Metageneration": [
+ "2"
+ ],
+ "X-Goog-Storage-Class": [
+ "MULTI_REGIONAL"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "20"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/514,/bns/yb/borg/yb/bns/blobstore2/bitpusher/620.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lsBYW-SLC8ajlAGOmon4AQ"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "149776848335"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/620.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/620:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uq9wPkJ3Qf3GdQhgRbiDDu-RKGoe6ODiYoPkuLSzNylFEQ62Sby92vKwacoODKO-FfgAgybNX5OxWimcynu1dfYXlvtpmcV4Frddc8bFJ8kCej7IPU"
+ ]
+ },
+ "Body": "Tm9ybWFsaXphdGlvbiBGb3JtIEM="
+ }
+ },
+ {
+ "ID": "0c6bd3b67e47f5a4",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0016/o?alt=json\u0026delimiter=\u0026pageToken=\u0026prefix=\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "a20060bf013704f7356a613369f0f5d7/14744282479133911118;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0016/o?alt=json\u0026delimiter=\u0026pageToken=\u0026prefix=\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 404,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "12287"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543426000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcah5:4482,/bns/xi/borg/xi/bns/blobstore2/bitpusher/11.scotty,aclgag4:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lsBYW4zkDZC3swb1pLGIDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag4:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/11.scotty,aclgag4:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/11:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3YWV1RmZRSlBDbTM4UVlNYkRfakdsdnZ4U25TNE9KSk9nUTJIc3d6cmVSZG1OVjlkOG5iYzYtY3g4SFZyYmwxOHZINURDMUdtNHVNTDNaREpQN0xBRVlVeVVhdGtkd1VoVm41dExBaE1PVUdSa2Y3SlllQllQQ3JkaHc0akJCcnB4eFlPMXVIcXd4eTZxUWNkcHFvNFlaaUtlVG9xNXVFVzhkZkdUV25FcU9McU1EMHdBR3c1VGc0dE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Upload-Result": [
+ "agent_rejected"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpQRRpazFPvdvBBoP9cJ21EhjuqXHssK-BCyriN_NENEDKOxN3_0frAyhXjhzV1l0V_Bxer2PnA8DKDtnHOsNWCXz0jjA"
+ ]
+ },
+ "Body": "ewogImVycm9yIjogewogICJlcnJvcnMiOiBbCiAgIHsKICAgICJkb21haW4iOiAiZ2xvYmFsIiwKICAgICJyZWFzb24iOiAibm90Rm91bmQiLAogICAgIm1lc3NhZ2UiOiAiTm90IEZvdW5kIiwKICAgICJkZWJ1Z0luZm8iOiAiY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkJVQ0tFVF9OT1RfRk9VTkQ6IEJVQ0tFVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggYnVja2V0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTZcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5MaXN0T2JqZWN0cy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdE9iamVjdHMuamF2YToxNjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5MaXN0T2JqZWN0cy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdE9iamVjdHMuamF2YTozOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IubGlzdChPYmplY3RzRGVsZWdhdG9yLmphdmE6ODkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBCVUNLRVRfTk9UX0ZPVU5EOiBObyBzdWNoIGJ1Y2tldDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE2XG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Nilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOCBtb3JlXG5cbmNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLkZhdWx0OiBJbW11dGFibGVFcnJvckRlZmluaXRpb257YmFzZT1OT1RfRk9VTkQsIGNhdGVnb3J5PVVTRVJfRVJST1IsIGNhdXNlPW51bGwsIGRlYnVnSW5mbz1jb20uZ29vZ2xlLm5ldC5ycGMzLlJwY0V4Y2VwdGlvbjogY2xvdWQuYmlnc3RvcmUuUmVzcG9uc2VDb2RlLkVycm9yQ29kZTo6QlVDS0VUX05PVF9GT1VORDogQlVDS0VUX05PVF9GT1VORDogTm8gc3VjaCBidWNrZXQ6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50b1JwYzNFeGNlcHRpb24oQmlnc3RvcmVFeGNlcHRpb24uamF2YToxMTgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjk3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo1Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkxpc3RPYmplY3RzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0T2JqZWN0cy5qYXZhOjE2MClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5oYW5kbGVycy5vYmplY3RzLkxpc3RPYmplY3RzLmhhbmRsZVJlcXVlc3RSZWNlaXZlZChMaXN0T2JqZWN0cy5qYXZhOjM4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5SZXF1ZXN0SGFuZGxlci5oYW5kbGUoUmVxdWVzdEhhbmRsZXIuamF2YTozMDMpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uT2JqZWN0c0RlbGVnYXRvci5saXN0KE9iamVjdHNEZWxlZ2F0b3IuamF2YTo4OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uUnBjUmVjZWl2ZXIubGFtYmRhJHByb2Nlc3NSZXF1ZXN0QXN5bmMkMyhScGNSZWNlaXZlci5qYXZhOjE2OSlcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5pc29sYXRpb24uQXN5bmNFeGVjdXRvci5sYW1iZGEkc3VibWl0JDAoQXN5bmNFeGVjdXRvci5qYXZhOjI0Mylcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuSW5Db250ZXh0KENvbnRleHRSdW5uYWJsZS5qYXZhOjUwKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZSQxLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozOSlcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkN1cnJlbnRDb250ZXh0LnJ1bkluQ29udGV4dChDdXJyZW50Q29udGV4dC5qYXZhOjMyMClcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NzIpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dChHZW5lcmljQ29udGV4dENhbGxiYWNrLmphdmE6NjQpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bihDb250ZXh0UnVubmFibGUuamF2YTozNilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjUxMSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2Nilcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ5KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MjQpXG5cdGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0OClcbkNhdXNlZCBieTogY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb246IEJVQ0tFVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggYnVja2V0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTZcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udGhyb3dPbkVycm9yKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6Mjc2KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Mylcblx0Li4uIDE4IG1vcmVcbiwgZG9tYWluPWdsb2JhbCwgZXh0ZW5kZWRIZWxwPW51bGwsIGh0dHBIZWFkZXJzPXt9LCBodHRwU3RhdHVzPW5vdEZvdW5kLCBpbnRlcm5hbFJlYXNvbj1SZWFzb257YXJndW1lbnRzPXt9LCBjYXVzZT1udWxsLCBjb2RlPWdkYXRhLkNvcmVFcnJvckRvbWFpbi5OT1RfRk9VTkQsIGNyZWF0ZWRCeUJhY2tlbmQ9dHJ1ZSwgZGVidWdNZXNzYWdlPWNvbS5nb29nbGUubmV0LnJwYzMuUnBjRXhjZXB0aW9uOiBjbG91ZC5iaWdzdG9yZS5SZXNwb25zZUNvZGUuRXJyb3JDb2RlOjpCVUNLRVRfTk9UX0ZPVU5EOiBCVUNLRVRfTk9UX0ZPVU5EOiBObyBzdWNoIGJ1Y2tldDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE2XG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRvUnBjM0V4Y2VwdGlvbihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjExOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjU3KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuTGlzdE9iamVjdHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RPYmplY3RzLmphdmE6MTYwKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmhhbmRsZXJzLm9iamVjdHMuTGlzdE9iamVjdHMuaGFuZGxlUmVxdWVzdFJlY2VpdmVkKExpc3RPYmplY3RzLmphdmE6MzgpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLlJlcXVlc3RIYW5kbGVyLmhhbmRsZShSZXF1ZXN0SGFuZGxlci5qYXZhOjMwMylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5PYmplY3RzRGVsZWdhdG9yLmxpc3QoT2JqZWN0c0RlbGVnYXRvci5qYXZhOjg5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5ScGNSZWNlaXZlci5sYW1iZGEkcHJvY2Vzc1JlcXVlc3RBc3luYyQzKFJwY1JlY2VpdmVyLmphdmE6MTY5KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmlzb2xhdGlvbi5Bc3luY0V4ZWN1dG9yLmxhbWJkYSRzdWJtaXQkMChBc3luY0V4ZWN1dG9yLmphdmE6MjQzKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW5JbkNvbnRleHQoQ29udGV4dFJ1bm5hYmxlLmphdmE6NTApXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlJDEucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM5KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHROb1VucmVmKEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo3Milcblx0YXQgY29tLmdvb2dsZS50cmFjaW5nLkdlbmVyaWNDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0KEdlbmVyaWNDb250ZXh0Q2FsbGJhY2suamF2YTo2NClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUucnVuKENvbnRleHRSdW5uYWJsZS5qYXZhOjM2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NTExKVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjY2KVxuXHRhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDkpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYyNClcblx0YXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ4KVxuQ2F1c2VkIGJ5OiBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbjogQlVDS0VUX05PVF9GT1VORDogTm8gc3VjaCBidWNrZXQ6IGdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxNlxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmNvbW1vbi5CaWdzdG9yZUV4Y2VwdGlvbi50aHJvd09uRXJyb3IoQmlnc3RvcmVFeGNlcHRpb24uamF2YToyNzYpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uZnJhbWV3b3JrLkJhY2tlbmRDYWxsVXRpbC5jYWxsKEJhY2tlbmRDYWxsVXRpbC5qYXZhOjkzKVxuXHQuLi4gMTggbW9yZVxuLCBlcnJvclByb3RvQ29kZT1OT1RfRk9VTkQsIGVycm9yUHJvdG9Eb21haW49Z2RhdGEuQ29yZUVycm9yRG9tYWluLCBmaWx0ZXJlZE1lc3NhZ2U9bnVsbCwgbG9jYXRpb249ZW50aXR5LmJ1Y2tldCwgbWVzc2FnZT1udWxsLCB1bm5hbWVkQXJndW1lbnRzPVtdfSwgbG9jYXRpb249ZW50aXR5LmJ1Y2tldCwgbWVzc2FnZT1Ob3QgRm91bmQsIHJlYXNvbj1ub3RGb3VuZCwgcnBjQ29kZT00MDR9IE5vdCBGb3VuZDogY29tLmdvb2dsZS5uZXQucnBjMy5ScGNFeGNlcHRpb246IGNsb3VkLmJpZ3N0b3JlLlJlc3BvbnNlQ29kZS5FcnJvckNvZGU6OkJVQ0tFVF9OT1RfRk9VTkQ6IEJVQ0tFVF9OT1RfRk9VTkQ6IE5vIHN1Y2ggYnVja2V0OiBnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTZcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5jb21tb24uQmlnc3RvcmVFeGNlcHRpb24udG9ScGMzRXhjZXB0aW9uKEJpZ3N0b3JlRXhjZXB0aW9uLmphdmE6MTE4KVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLmZyYW1ld29yay5CYWNrZW5kQ2FsbFV0aWwuY2FsbChCYWNrZW5kQ2FsbFV0aWwuamF2YTo5Nylcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6NTcpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5MaXN0T2JqZWN0cy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdE9iamVjdHMuamF2YToxNjApXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuYXBpLmpzb24uaGFuZGxlcnMub2JqZWN0cy5MaXN0T2JqZWN0cy5oYW5kbGVSZXF1ZXN0UmVjZWl2ZWQoTGlzdE9iamVjdHMuamF2YTozOClcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuUmVxdWVzdEhhbmRsZXIuaGFuZGxlKFJlcXVlc3RIYW5kbGVyLmphdmE6MzAzKVxuXHRhdCBjb20uZ29vZ2xlLmNsb3VkLmJpZ3N0b3JlLmFwaS5qc29uLk9iamVjdHNEZWxlZ2F0b3IubGlzdChPYmplY3RzRGVsZWdhdG9yLmphdmE6ODkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLlJwY1JlY2VpdmVyLmxhbWJkYSRwcm9jZXNzUmVxdWVzdEFzeW5jJDMoUnBjUmVjZWl2ZXIuamF2YToxNjkpXG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuaXNvbGF0aW9uLkFzeW5jRXhlY3V0b3IubGFtYmRhJHN1Ym1pdCQwKEFzeW5jRXhlY3V0b3IuamF2YToyNDMpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLmNvbnRleHQuQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChDb250ZXh0UnVubmFibGUuamF2YTo1MClcblx0YXQgY29tLmdvb2dsZS5jb21tb24uY29udGV4dC5Db250ZXh0UnVubmFibGUkMS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzkpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5DdXJyZW50Q29udGV4dC5ydW5JbkNvbnRleHQoQ3VycmVudENvbnRleHQuamF2YTozMjApXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5HZW5lcmljQ29udGV4dENhbGxiYWNrLnJ1bkluSW5oZXJpdGVkQ29udGV4dE5vVW5yZWYoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjcyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuR2VuZXJpY0NvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoR2VuZXJpY0NvbnRleHRDYWxsYmFjay5qYXZhOjY0KVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi5jb250ZXh0LkNvbnRleHRSdW5uYWJsZS5ydW4oQ29udGV4dFJ1bm5hYmxlLmphdmE6MzYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo1MTEpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjYpXG5cdGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0OSlcblx0YXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjI0KVxuXHRhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDgpXG5DYXVzZWQgYnk6IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uOiBCVUNLRVRfTk9UX0ZPVU5EOiBObyBzdWNoIGJ1Y2tldDogZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDE2XG5cdGF0IGNvbS5nb29nbGUuY2xvdWQuYmlnc3RvcmUuY29tbW9uLkJpZ3N0b3JlRXhjZXB0aW9uLnRocm93T25FcnJvcihCaWdzdG9yZUV4Y2VwdGlvbi5qYXZhOjI3Nilcblx0YXQgY29tLmdvb2dsZS5jbG91ZC5iaWdzdG9yZS5hcGkuanNvbi5mcmFtZXdvcmsuQmFja2VuZENhbGxVdGlsLmNhbGwoQmFja2VuZENhbGxVdGlsLmphdmE6OTMpXG5cdC4uLiAxOCBtb3JlXG5cblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUuRXJyb3JDb2xsZWN0b3IudG9GYXVsdChFcnJvckNvbGxlY3Rvci5qYXZhOjU0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIucmVzdC5hZGFwdGVyLnJvc3kuUm9zeUVycm9yQ29udmVydGVyLnRvRmF1bHQoUm9zeUVycm9yQ29udmVydGVyLmphdmE6NjcpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyNTgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5yZXN0LmFkYXB0ZXIucm9zeS5Sb3N5SGFuZGxlciQyLmNhbGwoUm9zeUhhbmRsZXIuamF2YToyMzgpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5jb3JlLnV0aWwuQ2FsbGFibGVGdXR1cmUucnVuKENhbGxhYmxlRnV0dXJlLmphdmE6NjIpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzJERpcmVjdEV4ZWN1dG9yLmV4ZWN1dGUoTW9yZUV4ZWN1dG9ycy5qYXZhOjQwMilcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmV4ZWN1dGVMaXN0ZW5lcihBYnN0cmFjdEZ1dHVyZS5qYXZhOjEwMjkpXG5cdGF0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEZ1dHVyZS5jb21wbGV0ZShBYnN0cmFjdEZ1dHVyZS5qYXZhOjg3MSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLnNldChBYnN0cmFjdEZ1dHVyZS5qYXZhOjY5NClcblx0YXQgY29tLmdvb2dsZS5hcGkuc2VydmVyLmNvcmUudXRpbC5DYWxsYWJsZUZ1dHVyZS5ydW4oQ2FsbGFibGVGdXR1cmUuamF2YTo2Milcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lk1vcmVFeGVjdXRvcnMkRGlyZWN0RXhlY3V0b3IuZXhlY3V0ZShNb3JlRXhlY3V0b3JzLmphdmE6NDAyKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuZXhlY3V0ZUxpc3RlbmVyKEFic3RyYWN0RnV0dXJlLmphdmE6MTAyOSlcblx0YXQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50LkFic3RyYWN0RnV0dXJlLmNvbXBsZXRlKEFic3RyYWN0RnV0dXJlLmphdmE6ODcxKVxuXHRhdCBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNvbmN1cnJlbnQuQWJzdHJhY3RGdXR1cmUuc2V0KEFic3RyYWN0RnV0dXJlLmphdmE6Njk0KVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIuY29yZS51dGlsLkNhbGxhYmxlRnV0dXJlLnJ1bihDYWxsYWJsZUZ1dHVyZS5qYXZhOjYyKVxuXHRhdCBjb20uZ29vZ2xlLmFwaS5zZXJ2ZXIudGhyZWFkLlRocmVhZFRyYWNrZXJzJFRocmVhZFRyYWNraW5nUnVubmFibGUucnVuKFRocmVhZFRyYWNrZXJzLmphdmE6MTI2KVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bkluQ29udGV4dChUcmFjZUNvbnRleHQuamF2YTo0NTUpXG5cdGF0IGNvbS5nb29nbGUuYXBpLnNlcnZlci5zZXJ2ZXIuQ29tbW9uTW9kdWxlJENvbnRleHRDYXJyeWluZ0V4ZWN1dG9yU2VydmljZSQxLnJ1bkluQ29udGV4dChDb21tb25Nb2R1bGUuamF2YTo4NDYpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkVHJhY2VDb250ZXh0UnVubmFibGUkMS5ydW4oVHJhY2VDb250ZXh0LmphdmE6NDYyKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuQ3VycmVudENvbnRleHQucnVuSW5Db250ZXh0KEN1cnJlbnRDb250ZXh0LmphdmE6MzIwKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JEFic3RyYWN0VHJhY2VDb250ZXh0Q2FsbGJhY2sucnVuSW5Jbmhlcml0ZWRDb250ZXh0Tm9VbnJlZihUcmFjZUNvbnRleHQuamF2YTozMjEpXG5cdGF0IGNvbS5nb29nbGUudHJhY2luZy5UcmFjZUNvbnRleHQkQWJzdHJhY3RUcmFjZUNvbnRleHRDYWxsYmFjay5ydW5JbkluaGVyaXRlZENvbnRleHQoVHJhY2VDb250ZXh0LmphdmE6MzEzKVxuXHRhdCBjb20uZ29vZ2xlLnRyYWNpbmcuVHJhY2VDb250ZXh0JFRyYWNlQ29udGV4dFJ1bm5hYmxlLnJ1bihUcmFjZUNvbnRleHQuamF2YTo0NTkpXG5cdGF0IGNvbS5nb29nbGUuZ3NlLmludGVybmFsLkRpc3BhdGNoUXVldWVJbXBsJFdvcmtlclRocmVhZC5ydW4oRGlzcGF0Y2hRdWV1ZUltcGwuamF2YTo0MDMpXG4iCiAgIH0KICBdLAogICJjb2RlIjogNDA0LAogICJtZXNzYWdlIjogIk5vdCBGb3VuZCIKIH0KfQo="
+ }
+ },
+ {
+ "ID": "017fcebaf548cf3b",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/storage-library-test-bucket/Cafe%CC%81",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "989de3ddd04e71366c109926d5b97db4/3938781898265553259;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/storage-library-test-bucket/Cafe%CC%81"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "public, max-age=3600"
+ ],
+ "Content-Length": [
+ "20"
+ ],
+ "Content-Type": [
+ "text/plain"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Etag": [
+ "\"df597679bac7c6150429ad80a1a05680\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 19:25:26 GMT"
+ ],
+ "Last-Modified": [
+ "Fri, 24 Mar 2017 20:04:37 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Generation": [
+ "1490385877705600"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=qBeWjQ==",
+ "md5=31l2ebrHxhUEKa2AoaBWgA=="
+ ],
+ "X-Goog-Metageneration": [
+ "2"
+ ],
+ "X-Goog-Storage-Class": [
+ "MULTI_REGIONAL"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "20"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/152,/bns/yb/borg/yb/bns/blobstore2/bitpusher/204.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lsBYW42kEsiA7AKriaOYBg"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "149776848335"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/204.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/204:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo0h15hScJvRNmMwatVxUgo_x8wRG6FrZP2WzvozRii_JIG4yo6Yc0MxFlXt5sEPkDV8h-jq39Anc-GYI1_ex8QOjcpyGc3iOYu1zeMiQuWGxOyQIM"
+ ]
+ },
+ "Body": "Tm9ybWFsaXphdGlvbiBGb3JtIEQ="
+ }
+ },
+ {
+ "ID": "e4925d1924454d4b",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/zero",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "Go-http-client/1.1"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "097128dee5151539c8a3c3331f7fab4c/11579745015624952455;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "storage.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://storage.googleapis.com/go-integration-test-20180725-66174009628628-0000/zero"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "text/plain; charset=utf-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Etag": [
+ "\"d41d8cd98f00b204e9800998ecf8427e\""
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Last-Modified": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "X-Goog-Expiration": [
+ "Fri, 24 Aug 2018 18:25:26 GMT"
+ ],
+ "X-Goog-Generation": [
+ "1532543126328161"
+ ],
+ "X-Goog-Hash": [
+ "crc32c=AAAAAA==",
+ "md5=1B2M2Y8AsgTpgAmY7PhCfg=="
+ ],
+ "X-Goog-Metageneration": [
+ "1"
+ ],
+ "X-Goog-Storage-Class": [
+ "STANDARD"
+ ],
+ "X-Goog-Stored-Content-Encoding": [
+ "identity"
+ ],
+ "X-Goog-Stored-Content-Length": [
+ "0"
+ ],
+ "X-Google-Backends": [
+ "/bns/vn/borg/vn/bns/cloud-storage/prod-cloud-storage-frontend.frontend/384,/bns/yb/borg/yb/bns/blobstore2/bitpusher/279.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lsBYW-HKG4i7lgGFtKfoCw"
+ ],
+ "X-Google-Gfe-Cloud-Project-Number": [
+ "36639933145"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "ybpy2-v6:443,/bns/yb/borg/yb/bns/blobstore2/bitpusher/279.scotty,ybpy2-v6:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/yb/borg/yb/bns/blobstore2/bitpusher/279:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-cloud-storage"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBJ"
+ ],
+ "X-Google-Storage-Location": [
+ "US"
+ ],
+ "X-Guploader-Customer": [
+ "cloud-storage"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uod6Eq_7U_fBUxiwXVPSqVHf_FioCpc8c7sXxd4CmLhygsVMgP_qjM4_WKSscSfqxN2CkgKkAji5WpaxnDgeTZ2clvcUCNmEFS9lkAdtDPf70QQdzw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "4ebbf41b4fb66605",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/zero?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "cfa18e9458c5397ea282548431f9234e/15364057593839627030;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/zero?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:26 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543426000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcak10:4214,/bns/xi/borg/xi/bns/blobstore2/bitpusher/19.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=lsBYW_2xIKq9swbDjZfoCQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/19.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/19:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3YWV1RmZRSlBDbTM4UVlNYkRfakdsdnZ4U25TNE9KSk9nUTJIc3d6cmVSZG1OVjlkOG5iYzYtY3g4SFZyYmwxOHZINURDMUdtNHVNTDNaREpQN0xBRVlVeVVhdGtkd1VoVm41dExBaE1PVUdSa2Y3SlllQllQQ3JkaHc0akJCcnB4eFlPMXVIcXd4eTZxUWNkcHFvNFlaaUtlVG9xNXVFVzhkZkdUV25FcU9McU1EMHdBR3c1VGc0dE0wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uo7DEValD47whSTXCxQWI_zXdNAK6LMJR01WjDBeaQ07TYdOAvYl0_9Xhr_6rD3IRleeLhV4OGHTxy2HCCi-x8Cghfecw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "f287344a585a1ef4",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026pageToken=\u0026prefix=\u0026projection=full\u0026versions=false",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f434fec58b300ab04cc7abada52d1cdc/774244434756594596;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o?alt=json\u0026delimiter=\u0026pageToken=\u0026prefix=\u0026projection=full\u0026versions=false"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "72776"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:31 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:25:31 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbat10:4221,/bns/xi/borg/xi/bns/blobstore2/bitpusher/122.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=m8BYW-2yCYKGygOlr4XwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/122.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/122:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpJIhxuy_eqNDdLmThyNt4UL7VVtN0tIXH-QEBIRE0oNJd7KtNGpfTL9uCl50YxtYiMBy1ilXNYuIMZQl1XFi2Yis-w-w"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNvYmplY3RzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wxLzE1MzI1NDMwMDU1NTQwMTUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2FjbDEiLAogICAibmFtZSI6ICJhY2wxIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA1NTU0MDE1IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjI1LjU1MloiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjI2LjQ0M1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjUuNTUyWiIsCiAgICJzaXplIjogIjE2IiwKICAgIm1kNUhhc2giOiAiQXRlNS9sRENZanNiUFVhSXVoaE95UT09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMT9nZW5lcmF0aW9uPTE1MzI1NDMwMDU1NTQwMTUmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wxLzE1MzI1NDMwMDU1NTQwMTUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImFjbDEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDU1NTQwMTUiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ04vcXk4dnZ1dHdDRUFJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbDEvMTUzMjU0MzAwNTU1NDAxNS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJhY2wxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA1NTU0MDE1IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ04vcXk4dnZ1dHdDRUFJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbDEvMTUzMjU0MzAwNTU1NDAxNS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vYWNsMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJhY2wxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA1NTU0MDE1IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNOL3F5OHZ2dXR3Q0VBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wxLzE1MzI1NDMwMDU1NTQwMTUvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hY2wxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJhY2wxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA1NTU0MDE1IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOL3F5OHZ2dXR3Q0VBST0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJtaU1Xcmc9PSIsCiAgICJldGFnIjogIkNOL3F5OHZ2dXR3Q0VBST0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wyLzE1MzI1NDMwMDYwNDczMTciLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2FjbDIiLAogICAibmFtZSI6ICJhY2wyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA2MDQ3MzE3IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjYuMDQ3WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjYuMDQ3WiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyNi4wNDdaIiwKICAgInNpemUiOiAiMTYiLAogICAibWQ1SGFzaCI6ICJDcUN1cXRjMldUQ08zWEpvMVYzREtnPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hY2wyP2dlbmVyYXRpb249MTUzMjU0MzAwNjA0NzMxNyZhbHQ9bWVkaWEiLAogICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbDIvMTUzMjU0MzAwNjA0NzMxNy9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hY2wyL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiYWNsMiIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwNjA0NzMxNyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDTlg0NmN2dnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsMi8xNTMyNTQzMDA2MDQ3MzE3L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hY2wyL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImFjbDIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDYwNDczMTciLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDTlg0NmN2dnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYWNsMi8xNTMyNTQzMDA2MDQ3MzE3L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hY2wyL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImFjbDIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDYwNDczMTciLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05YNDZjdnZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2FjbDIvMTUzMjU0MzAwNjA0NzMxNy9kb21haW4tZ29vZ2xlLmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hY2wyL2FjbC9kb21haW4tZ29vZ2xlLmNvbSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiYWNsMiIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwNjA0NzMxNyIsCiAgICAgImVudGl0eSI6ICJkb21haW4tZ29vZ2xlLmNvbSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAiZG9tYWluIjogImdvb2dsZS5jb20iLAogICAgICJldGFnIjogIkNOWDQ2Y3Z2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9hY2wyLzE1MzI1NDMwMDYwNDczMTcvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9hY2wyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJhY2wyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDA2MDQ3MzE3IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNOWDQ2Y3Z2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJwNHNkSmc9PSIsCiAgICJldGFnIjogIkNOWDQ2Y3Z2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9idWNrZXRJbkNvcHlBdHRycy8xNTMyNTQzMDI2NDM4Njk1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9idWNrZXRJbkNvcHlBdHRycyIsCiAgICJuYW1lIjogImJ1Y2tldEluQ29weUF0dHJzIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI2NDM4Njk1IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ2LjQzOFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ2LjQzOFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDYuNDM4WiIsCiAgICJzaXplIjogIjMiLAogICAibWQ1SGFzaCI6ICJyTDBZMjB6QytGenQ3MlZQek1TazJBPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9idWNrZXRJbkNvcHlBdHRycz9nZW5lcmF0aW9uPTE1MzI1NDMwMjY0Mzg2OTUmYWx0PW1lZGlhIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYnVja2V0SW5Db3B5QXR0cnMvMTUzMjU0MzAyNjQzODY5NS9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9idWNrZXRJbkNvcHlBdHRycy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImJ1Y2tldEluQ29weUF0dHJzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI2NDM4Njk1IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNLZkV4dFh2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9idWNrZXRJbkNvcHlBdHRycy8xNTMyNTQzMDI2NDM4Njk1L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9idWNrZXRJbkNvcHlBdHRycy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJidWNrZXRJbkNvcHlBdHRycyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNjQzODY5NSIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNLZkV4dFh2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9idWNrZXRJbkNvcHlBdHRycy8xNTMyNTQzMDI2NDM4Njk1L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9idWNrZXRJbkNvcHlBdHRycy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJidWNrZXRJbkNvcHlBdHRycyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNjQzODY5NSIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDS2ZFeHRYdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvYnVja2V0SW5Db3B5QXR0cnMvMTUzMjU0MzAyNjQzODY5NS91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2J1Y2tldEluQ29weUF0dHJzL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJidWNrZXRJbkNvcHlBdHRycyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNjQzODY5NSIsCiAgICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiZXRhZyI6ICJDS2ZFeHRYdnV0d0NFQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgIH0sCiAgICJjcmMzMmMiOiAiejhTdUhRPT0iLAogICAiZXRhZyI6ICJDS2ZFeHRYdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY2hlY2tzdW0tb2JqZWN0LzE1MzI1NDI5OTc4MjYxODYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NoZWNrc3VtLW9iamVjdCIsCiAgICJuYW1lIjogImNoZWNrc3VtLW9iamVjdCIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5NzgyNjE4NiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoxNy44MjVaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoxNy44MjVaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjE3LjgyNVoiLAogICAic2l6ZSI6ICIxMCIsCiAgICJtZDVIYXNoIjogIi9GNERqVGlsY0RJSVZFSG4vbkFRc0E9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NoZWNrc3VtLW9iamVjdD9nZW5lcmF0aW9uPTE1MzI1NDI5OTc4MjYxODYmYWx0PW1lZGlhIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY2hlY2tzdW0tb2JqZWN0LzE1MzI1NDI5OTc4MjYxODYvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY2hlY2tzdW0tb2JqZWN0L2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiY2hlY2tzdW0tb2JqZWN0IiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk3ODI2MTg2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNJcVY5TWZ2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jaGVja3N1bS1vYmplY3QvMTUzMjU0Mjk5NzgyNjE4Ni9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY2hlY2tzdW0tb2JqZWN0L2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImNoZWNrc3VtLW9iamVjdCIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5NzgyNjE4NiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNJcVY5TWZ2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jaGVja3N1bS1vYmplY3QvMTUzMjU0Mjk5NzgyNjE4Ni9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY2hlY2tzdW0tb2JqZWN0L2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImNoZWNrc3VtLW9iamVjdCIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5NzgyNjE4NiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDSXFWOU1mdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY2hlY2tzdW0tb2JqZWN0LzE1MzI1NDI5OTc4MjYxODYvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jaGVja3N1bS1vYmplY3QvYWNsL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImNoZWNrc3VtLW9iamVjdCIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5NzgyNjE4NiIsCiAgICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiZXRhZyI6ICJDSXFWOU1mdnV0d0NFQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgIH0sCiAgICJjcmMzMmMiOiAiVnN1MGdBPT0iLAogICAiZXRhZyI6ICJDSXFWOU1mdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29tcG9zZWQxLzE1MzI1NDMwMDAxNDY2NDUiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbXBvc2VkMSIsCiAgICJuYW1lIjogImNvbXBvc2VkMSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMDE0NjY0NSIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjAuMTQ2WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjAuMTQ2WiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyMC4xNDZaIiwKICAgInNpemUiOiAiNDgiLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb21wb3NlZDE/Z2VuZXJhdGlvbj0xNTMyNTQzMDAwMTQ2NjQ1JmFsdD1tZWRpYSIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbXBvc2VkMS8xNTMyNTQzMDAwMTQ2NjQ1L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbXBvc2VkMS9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImNvbXBvc2VkMSIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMDE0NjY0NSIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDTlhsZ2NudnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29tcG9zZWQxLzE1MzI1NDMwMDAxNDY2NDUvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbXBvc2VkMS9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjb21wb3NlZDEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDAxNDY2NDUiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDTlhsZ2NudnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29tcG9zZWQxLzE1MzI1NDMwMDAxNDY2NDUvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbXBvc2VkMS9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjb21wb3NlZDEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDAxNDY2NDUiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05YbGdjbnZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbXBvc2VkMS8xNTMyNTQzMDAwMTQ2NjQ1L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29tcG9zZWQxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjb21wb3NlZDEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDAxNDY2NDUiLAogICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImV0YWciOiAiQ05YbGdjbnZ1dHdDRUFFPSIKICAgIH0KICAgXSwKICAgIm93bmVyIjogewogICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogICB9LAogICAiY3JjMzJjIjogIk1SQWZ5Zz09IiwKICAgImNvbXBvbmVudENvdW50IjogMywKICAgImV0YWciOiAiQ05YbGdjbnZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2NvbXBvc2VkMi8xNTMyNTQzMDAwNzQ3NDMzIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb21wb3NlZDIiLAogICAibmFtZSI6ICJjb21wb3NlZDIiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDA3NDc0MzMiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJjb250ZW50VHlwZSI6ICJ0ZXh0L2pzb24iLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyMC43NDdaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyMC43NDdaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjIwLjc0N1oiLAogICAic2l6ZSI6ICI0OCIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbXBvc2VkMj9nZW5lcmF0aW9uPTE1MzI1NDMwMDA3NDc0MzMmYWx0PW1lZGlhIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29tcG9zZWQyLzE1MzI1NDMwMDA3NDc0MzMvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29tcG9zZWQyL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiY29tcG9zZWQyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAwNzQ3NDMzIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNLbTdwc252dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb21wb3NlZDIvMTUzMjU0MzAwMDc0NzQzMy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29tcG9zZWQyL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImNvbXBvc2VkMiIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMDc0NzQzMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNLbTdwc252dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb21wb3NlZDIvMTUzMjU0MzAwMDc0NzQzMy9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29tcG9zZWQyL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImNvbXBvc2VkMiIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMDc0NzQzMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDS203cHNudnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29tcG9zZWQyLzE1MzI1NDMwMDA3NDc0MzMvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb21wb3NlZDIvYWNsL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImNvbXBvc2VkMiIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMDc0NzQzMyIsCiAgICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiZXRhZyI6ICJDS203cHNudnV0d0NFQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgIH0sCiAgICJjcmMzMmMiOiAiTVJBZnlnPT0iLAogICAiY29tcG9uZW50Q291bnQiOiAzLAogICAiZXRhZyI6ICJDS203cHNudnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE3MzIzNTI2IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jb250ZW50IiwKICAgIm5hbWUiOiAiY29udGVudCIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNy4zMjNaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNy4zMjNaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM3LjMyM1oiLAogICAic2l6ZSI6ICI1NCIsCiAgICJtZDVIYXNoIjogIk44cDgvczlGd2RBQW5sdnIvbEVBalE9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQ/Z2VuZXJhdGlvbj0xNTMyNTQzMDE3MzIzNTI2JmFsdD1tZWRpYSIsCiAgICJjYWNoZUNvbnRyb2wiOiAicHVibGljLCBtYXgtYWdlPTYwIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE3MzIzNTI2L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjb250ZW50IiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3MzIzNTI2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNJYVltdEh2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTczMjM1MjYvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiY29udGVudCIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNJYVltdEh2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jb250ZW50LzE1MzI1NDMwMTczMjM1MjYvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2NvbnRlbnQvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiY29udGVudCIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDSWFZbXRIdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY29udGVudC8xNTMyNTQzMDE3MzIzNTI2L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY29udGVudC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiY29udGVudCIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzMyMzUyNiIsCiAgICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiZXRhZyI6ICJDSWFZbXRIdnV0d0NFQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgIH0sCiAgICJjcmMzMmMiOiAiR29VYnNRPT0iLAogICAiZXRhZyI6ICJDSWFZbXRIdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi8xNTMyNTQzMDE3OTI5MDg1IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uIiwKICAgIm5hbWUiOiAiY3VzdG9tZXItZW5jcnlwdGlvbiIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAxNzkyOTA4NSIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIzIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozNy45MjhaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzozOC41MjFaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjM3LjkyOFoiLAogICAic2l6ZSI6ICIxMSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24/Z2VuZXJhdGlvbj0xNTMyNTQzMDE3OTI5MDg1JmFsdD1tZWRpYSIsCiAgICJjb250ZW50TGFuZ3VhZ2UiOiAiZW4iLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImN1c3RvbWVyLWVuY3J5cHRpb24iLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMTc5MjkwODUiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFNPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24vMTUzMjU0MzAxNzkyOTA4NS9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFNPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24vMTUzMjU0MzAxNzkyOTA4NS9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBTT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLzE1MzI1NDMwMTc5MjkwODUvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDE3OTI5MDg1IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNQMlN2OUh2dXR3Q0VBTT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImV0YWciOiAiQ1AyU3Y5SHZ1dHdDRUFNPSIsCiAgICJjdXN0b21lckVuY3J5cHRpb24iOiB7CiAgICAiZW5jcnlwdGlvbkFsZ29yaXRobSI6ICJBRVMyNTYiLAogICAgImtleVNoYTI1NiI6ICJIK0xtblhoUm9lSTZUTVc1YnNWNkh5VWs2cHlHYzJJTWJxWWJBWEJjcHMwPSIKICAgfQogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi0yLzE1MzI1NDMwMjM4MDg4MDQiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMiIsCiAgICJuYW1lIjogImN1c3RvbWVyLWVuY3J5cHRpb24tMiIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyMzgwODgwNCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0My44MDhaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzo0My44MDhaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQzLjgwOFoiLAogICAic2l6ZSI6ICIxMSIsCiAgICJtZDVIYXNoIjogInh3V05GYTBWZFhQbWxBd3JsY0FKY2c9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMj9nZW5lcmF0aW9uPTE1MzI1NDMwMjM4MDg4MDQmYWx0PW1lZGlhIiwKICAgImNvbnRlbnRMYW5ndWFnZSI6ICJlbiIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIzODA4ODA0L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogImN1c3RvbWVyLWVuY3J5cHRpb24tMiIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyMzgwODgwNCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDS1NDcHRUdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi0yLzE1MzI1NDMwMjM4MDg4MDQvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uLTIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjM4MDg4MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDS1NDcHRUdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvY3VzdG9tZXItZW5jcnlwdGlvbi0yLzE1MzI1NDMwMjM4MDg4MDQvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uLTIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjM4MDg4MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0tTQ3B0VHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMi8xNTMyNTQzMDIzODA4ODA0L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi0yL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uLTIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjM4MDg4MDQiLAogICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImV0YWciOiAiQ0tTQ3B0VHZ1dHdDRUFFPSIKICAgIH0KICAgXSwKICAgIm93bmVyIjogewogICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogICB9LAogICAiY3JjMzJjIjogInIwTkdyZz09IiwKICAgImV0YWciOiAiQ0tTQ3B0VHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMy8xNTMyNTQzMDIyODExNDAwIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uLTMiLAogICAibmFtZSI6ICJjdXN0b21lci1lbmNyeXB0aW9uLTMiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjI4MTE0MDAiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQyLjgxMVoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQyLjgxMVoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDIuODExWiIsCiAgICJzaXplIjogIjIyIiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vY3VzdG9tZXItZW5jcnlwdGlvbi0zP2dlbmVyYXRpb249MTUzMjU0MzAyMjgxMTQwMCZhbHQ9bWVkaWEiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTMvMTUzMjU0MzAyMjgxMTQwMC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uLTMvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJjdXN0b21lci1lbmNyeXB0aW9uLTMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjI4MTE0MDAiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0lpUzZkUHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMy8xNTMyNTQzMDIyODExNDAwL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uLTMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0zIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDIyODExNDAwIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0lpUzZkUHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2N1c3RvbWVyLWVuY3J5cHRpb24tMy8xNTMyNTQzMDIyODExNDAwL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9jdXN0b21lci1lbmNyeXB0aW9uLTMvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0zIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDIyODExNDAwIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNJaVM2ZFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9jdXN0b21lci1lbmNyeXB0aW9uLTMvMTUzMjU0MzAyMjgxMTQwMC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2N1c3RvbWVyLWVuY3J5cHRpb24tMy9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiY3VzdG9tZXItZW5jcnlwdGlvbi0zIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDIyODExNDAwIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNJaVM2ZFB2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNvbXBvbmVudENvdW50IjogMiwKICAgImV0YWciOiAiQ0lpUzZkUHZ1dHdDRUFFPSIsCiAgICJjdXN0b21lckVuY3J5cHRpb24iOiB7CiAgICAiZW5jcnlwdGlvbkFsZ29yaXRobSI6ICJBRVMyNTYiLAogICAgImtleVNoYTI1NiI6ICJIK0xtblhoUm9lSTZUTVc1YnNWNkh5VWs2cHlHYzJJTWJxWWJBWEJjcHMwPSIKICAgfQogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvZ3ppcC10ZXN0LzE1MzI1NDMwMDE1NDE5NDQiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2d6aXAtdGVzdCIsCiAgICJuYW1lIjogImd6aXAtdGVzdCIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMTU0MTk0NCIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogImFwcGxpY2F0aW9uL3gtZ3ppcCIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjIxLjU0MVoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjIxLjU0MVoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MjEuNTQxWiIsCiAgICJzaXplIjogIjI3IiwKICAgIm1kNUhhc2giOiAiT3RDdythUlJJUnFLR0ZBRU9heCtxdz09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vZ3ppcC10ZXN0P2dlbmVyYXRpb249MTUzMjU0MzAwMTU0MTk0NCZhbHQ9bWVkaWEiLAogICAiY29udGVudEVuY29kaW5nIjogImd6aXAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9nemlwLXRlc3QvMTUzMjU0MzAwMTU0MTk0NC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9nemlwLXRlc3QvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJnemlwLXRlc3QiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDE1NDE5NDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0xqNjFzbnZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2d6aXAtdGVzdC8xNTMyNTQzMDAxNTQxOTQ0L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9nemlwLXRlc3QvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiZ3ppcC10ZXN0IiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAxNTQxOTQ0IiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0xqNjFzbnZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL2d6aXAtdGVzdC8xNTMyNTQzMDAxNTQxOTQ0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9nemlwLXRlc3QvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiZ3ppcC10ZXN0IiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAxNTQxOTQ0IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNMajYxc252dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9nemlwLXRlc3QvMTUzMjU0MzAwMTU0MTk0NC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2d6aXAtdGVzdC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiZ3ppcC10ZXN0IiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAxNTQxOTQ0IiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNMajYxc252dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICI5RGh3QkE9PSIsCiAgICJldGFnIjogIkNMajYxc252dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjgxMjQxNDYiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEiLAogICAibmFtZSI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI4MTI0MTQ2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ4LjEyM1oiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ4LjEyM1oiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDguMTIzWiIsCiAgICJzaXplIjogIjI3IiwKICAgIm1kNUhhc2giOiAib2ZaakdsY1hQSmlHT0FmS0ZiSmwxUT09IiwKICAgIm1lZGlhTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vaGFzaGVzT25VcGxvYWQtMT9nZW5lcmF0aW9uPTE1MzI1NDMwMjgxMjQxNDYmYWx0PW1lZGlhIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvaGFzaGVzT25VcGxvYWQtMS8xNTMyNTQzMDI4MTI0MTQ2L3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJoYXNoZXNPblVwbG9hZC0xIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI4MTI0MTQ2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNQS3pyZGJ2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjgxMjQxNDYvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiaGFzaGVzT25VcGxvYWQtMSIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyODEyNDE0NiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNQS3pyZGJ2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9oYXNoZXNPblVwbG9hZC0xLzE1MzI1NDMwMjgxMjQxNDYvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL2hhc2hlc09uVXBsb2FkLTEvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiaGFzaGVzT25VcGxvYWQtMSIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyODEyNDE0NiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDUEt6cmRidnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvaGFzaGVzT25VcGxvYWQtMS8xNTMyNTQzMDI4MTI0MTQ2L3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vaGFzaGVzT25VcGxvYWQtMS9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAiaGFzaGVzT25VcGxvYWQtMSIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyODEyNDE0NiIsCiAgICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiZXRhZyI6ICJDUEt6cmRidnV0d0NFQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgIH0sCiAgICJjcmMzMmMiOiAiY0grQSt3PT0iLAogICAiZXRhZyI6ICJDUEt6cmRidnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqL3dpdGgvc2xhc2hlcy8xNTMyNTQyOTg3NzI3NDA0IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcyIsCiAgICJuYW1lIjogIm9iai93aXRoL3NsYXNoZXMiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJjb250ZW50VHlwZSI6ICJ0ZXh0L3BsYWluIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuNzI3WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuNzI3WiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy43MjdaIiwKICAgInNpemUiOiAiMTYiLAogICAibWQ1SGFzaCI6ICJNSWJSa3Erb0pmT3FWOWQ5MUxwZzh3PT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcz9nZW5lcmF0aW9uPTE1MzI1NDI5ODc3Mjc0MDQmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqJTJGd2l0aCUyRnNsYXNoZXMvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iaiUyRndpdGglMkZzbGFzaGVzL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iai93aXRoL3NsYXNoZXMiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODc3Mjc0MDQiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqL3dpdGgvc2xhc2hlcy8xNTMyNTQyOTg3NzI3NDA0L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmovd2l0aC9zbGFzaGVzIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg3NzI3NDA0IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNLemtpOFB2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmovd2l0aC9zbGFzaGVzLzE1MzI1NDI5ODc3Mjc0MDQvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmolMkZ3aXRoJTJGc2xhc2hlcy9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqL3dpdGgvc2xhc2hlcyIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzcyNzQwNCIsCiAgICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgIH0sCiAgICJjcmMzMmMiOiAiaHkvZXBBPT0iLAogICAiZXRhZyI6ICJDS3praThQdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMS8xNTMyNTQyOTg2ODQxMjUxIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxIiwKICAgIm5hbWUiOiAib2JqMSIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICI0IiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDYuODQwWiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MTguNTA1WiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNi44NDBaIiwKICAgInNpemUiOiAiMTYiLAogICAibWQ1SGFzaCI6ICJud1VYQUhxVVFKcTVueXk2ejNqTmt3PT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxP2dlbmVyYXRpb249MTUzMjU0Mjk4Njg0MTI1MSZhbHQ9bWVkaWEiLAogICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajEvMTUzMjU0Mjk4Njg0MTI1MS9kb21haW4tZ29vZ2xlLmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC9kb21haW4tZ29vZ2xlLmNvbSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqMSIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4Njg0MTI1MSIsCiAgICAgImVudGl0eSI6ICJkb21haW4tZ29vZ2xlLmNvbSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAiZG9tYWluIjogImdvb2dsZS5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBUT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoxL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJvYmoxIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTg2ODQxMjUxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNLUFoxY0x2dXR3Q0VBUT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vYmoxLzE1MzI1NDI5ODY4NDEyNTEvYWxsVXNlcnMiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMS9hY2wvYWxsVXNlcnMiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajEiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODY4NDEyNTEiLAogICAgICJlbnRpdHkiOiAiYWxsVXNlcnMiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFRPSIKICAgIH0KICAgXSwKICAgIm93bmVyIjogewogICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogICB9LAogICAiY3JjMzJjIjogIkZMamV3QT09IiwKICAgImV0YWciOiAiQ0tQWjFjTHZ1dHdDRUFRPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2NiIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vb2JqMiIsCiAgICJuYW1lIjogIm9iajIiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJjb250ZW50VHlwZSI6ICJ0ZXh0L3BsYWluIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MDcuMzUzWiIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzowNy4zNTNaIiwKICAgInNpemUiOiAiMTYiLAogICAibWQ1SGFzaCI6ICJnK1VmYVM4dWlsanRVenFNWnJ5Vjd3PT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyP2dlbmVyYXRpb249MTUzMjU0Mjk4NzM1NDA2NiZhbHQ9bWVkaWEiLAogICAiY2FjaGVDb250cm9sIjogInB1YmxpYywgbWF4LWFnZT02MCIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAib2JqMiIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk4NzM1NDA2NiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDTkwvOU1MdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMi8xNTMyNTQyOTg3MzU0MDY2L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDTkwvOU1MdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvb2JqMi8xNTMyNTQyOTg3MzU0MDY2L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9vYmoyL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL29iajIvMTUzMjU0Mjk4NzM1NDA2Ni91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL29iajIvYWNsL3VzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogIm9iajIiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDI5ODczNTQwNjYiLAogICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJlbWFpbCI6ICIzNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICAgIH0KICAgXSwKICAgIm93bmVyIjogewogICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIgogICB9LAogICAiY3JjMzJjIjogIlNxaVo3dz09IiwKICAgImV0YWciOiAiQ05MLzlNTHZ1dHdDRUFFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3QiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MvMTUzMjU0MzAyNTQ2MTgxMCIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYyIsCiAgICJuYW1lIjogInBvc2MiLAogICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjU0NjE4MTAiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ1LjQ2MVoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ1LjQ2MVoiLAogICAic3RvcmFnZUNsYXNzIjogIk1VTFRJX1JFR0lPTkFMIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDUuNDYxWiIsCiAgICJzaXplIjogIjMiLAogICAibWQ1SGFzaCI6ICJyTDBZMjB6QytGenQ3MlZQek1TazJBPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjP2dlbmVyYXRpb249MTUzMjU0MzAyNTQ2MTgxMCZhbHQ9bWVkaWEiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjLzE1MzI1NDMwMjU0NjE4MTAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogInBvc2MiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMjU0NjE4MTAiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0xMMGl0WHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MvMTUzMjU0MzAyNTQ2MTgxMC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJwb3NjIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI1NDYxODEwIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0xMMGl0WHZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3Bvc2MvMTUzMjU0MzAyNTQ2MTgxMC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL28vcG9zYy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJwb3NjIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI1NDYxODEwIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNMTDBpdFh2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjLzE1MzI1NDMwMjU0NjE4MTAvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJwb3NjIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI1NDYxODEwIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNMTDBpdFh2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJ6OFN1SFE9PSIsCiAgICJldGFnIjogIkNMTDBpdFh2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjMi8xNTMyNTQzMDI1OTU2NTI2IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjMiIsCiAgICJuYW1lIjogInBvc2MyIiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI1OTU2NTI2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ1Ljk1NloiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjQ1Ljk1NloiLAogICAic3RvcmFnZUNsYXNzIjogIk1VTFRJX1JFR0lPTkFMIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6NDUuOTU2WiIsCiAgICJzaXplIjogIjMiLAogICAibWQ1SGFzaCI6ICI5V0dxOXU4TDhVMUNDTHRHcE15enJRPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjMj9nZW5lcmF0aW9uPTE1MzI1NDMwMjU5NTY1MjYmYWx0PW1lZGlhIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcG9zYzIvMTUzMjU0MzAyNTk1NjUyNi9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogInBvc2MyIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDI1OTU2NTI2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNLNk5xZFh2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjMi8xNTMyNTQzMDI1OTU2NTI2L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJwb3NjMiIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNTk1NjUyNiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNLNk5xZFh2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9wb3NjMi8xNTMyNTQzMDI1OTU2NTI2L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9wb3NjMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJwb3NjMiIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNTk1NjUyNiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDSzZOcWRYdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvcG9zYzIvMTUzMjU0MzAyNTk1NjUyNi91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3Bvc2MyL2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJwb3NjMiIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAyNTk1NjUyNiIsCiAgICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiZXRhZyI6ICJDSzZOcWRYdnV0d0NFQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgIH0sCiAgICJjcmMzMmMiOiAiMTdxQUJRPT0iLAogICAiZXRhZyI6ICJDSzZOcWRYdnV0d0NFQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI29iamVjdCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvc2lnbmVkVVJMLzE1MzI1NDMwMDI0MzU4OTEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3NpZ25lZFVSTCIsCiAgICJuYW1lIjogInNpZ25lZFVSTCIsCiAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgImdlbmVyYXRpb24iOiAiMTUzMjU0MzAwMjQzNTg5MSIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImNvbnRlbnRUeXBlIjogInRleHQvcGxhaW4iLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyMi40MzRaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxODoyMzoyMi40MzRaIiwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjIyLjQzNFoiLAogICAic2l6ZSI6ICIyOSIsCiAgICJtZDVIYXNoIjogIkp5eHZnd205bjJNc3JHVE1QYk1lWUE9PSIsCiAgICJtZWRpYUxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3NpZ25lZFVSTD9nZW5lcmF0aW9uPTE1MzI1NDMwMDI0MzU4OTEmYWx0PW1lZGlhIiwKICAgImNhY2hlQ29udHJvbCI6ICJwdWJsaWMsIG1heC1hZ2U9NjAiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9zaWduZWRVUkwvMTUzMjU0MzAwMjQzNTg5MS9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9zaWduZWRVUkwvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJzaWduZWRVUkwiLAogICAgICJnZW5lcmF0aW9uIjogIjE1MzI1NDMwMDI0MzU4OTEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0xQQ2pjcnZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3NpZ25lZFVSTC8xNTMyNTQzMDAyNDM1ODkxL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9zaWduZWRVUkwvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAic2lnbmVkVVJMIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAyNDM1ODkxIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0xQQ2pjcnZ1dHdDRUFFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwL3NpZ25lZFVSTC8xNTMyNTQzMDAyNDM1ODkxL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby9zaWduZWRVUkwvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAic2lnbmVkVVJMIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAyNDM1ODkxIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNMUENqY3J2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9zaWduZWRVUkwvMTUzMjU0MzAwMjQzNTg5MS91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3NpZ25lZFVSTC9hY2wvdXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAgICJvYmplY3QiOiAic2lnbmVkVVJMIiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQzMDAyNDM1ODkxIiwKICAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAiZW1haWwiOiAiMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLAogICAgICJldGFnIjogIkNMUENqY3J2dXR3Q0VBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAidXNlci0zNjYzOTkzMzE0NS1iMTh0MDFvbXQ5YTI3OWtjM2djZ2lxaHFrbDhib2JodUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIKICAgfSwKICAgImNyYzMyYyI6ICJaVHFBTHc9PSIsCiAgICJldGFnIjogIkNMUENqY3J2dXR3Q0VBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC96ZXJvLW9iamVjdC8xNTMyNTQyOTk4MjM4Nzg2IiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby96ZXJvLW9iamVjdCIsCiAgICJuYW1lIjogInplcm8tb2JqZWN0IiwKICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAiLAogICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk4MjM4Nzg2IiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiY29udGVudFR5cGUiOiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjE4LjIzOFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjIzOjE4LjIzOFoiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjM6MTguMjM4WiIsCiAgICJzaXplIjogIjAiLAogICAibWQ1SGFzaCI6ICIxQjJNMlk4QXNnVHBnQW1ZN1BoQ2ZnPT0iLAogICAibWVkaWFMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby96ZXJvLW9iamVjdD9nZW5lcmF0aW9uPTE1MzI1NDI5OTgyMzg3ODYmYWx0PW1lZGlhIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvemVyby1vYmplY3QvMTUzMjU0Mjk5ODIzODc4Ni9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby96ZXJvLW9iamVjdC9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDAwIiwKICAgICAib2JqZWN0IjogInplcm8tb2JqZWN0IiwKICAgICAiZ2VuZXJhdGlvbiI6ICIxNTMyNTQyOTk4MjM4Nzg2IiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNNS3NqY2p2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC96ZXJvLW9iamVjdC8xNTMyNTQyOTk4MjM4Nzg2L3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby96ZXJvLW9iamVjdC9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJ6ZXJvLW9iamVjdCIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5ODIzODc4NiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNNS3NqY2p2dXR3Q0VBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC96ZXJvLW9iamVjdC8xNTMyNTQyOTk4MjM4Nzg2L3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvby96ZXJvLW9iamVjdC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJ6ZXJvLW9iamVjdCIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5ODIzODc4NiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDTUtzamNqdnV0d0NFQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMDAvemVyby1vYmplY3QvMTUzMjU0Mjk5ODIzODc4Ni91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMC9vL3plcm8tb2JqZWN0L2FjbC91c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAwMCIsCiAgICAgIm9iamVjdCI6ICJ6ZXJvLW9iamVjdCIsCiAgICAgImdlbmVyYXRpb24iOiAiMTUzMjU0Mjk5ODIzODc4NiIsCiAgICAgImVudGl0eSI6ICJ1c2VyLTM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgImVtYWlsIjogIjM2NjM5OTMzMTQ1LWIxOHQwMW9tdDlhMjc5a2MzZ2NnaXFocWtsOGJvYmh1QGRldmVsb3Blci5nc2VydmljZWFjY291bnQuY29tIiwKICAgICAiZXRhZyI6ICJDTUtzamNqdnV0d0NFQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInVzZXItMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iCiAgIH0sCiAgICJjcmMzMmMiOiAiQUFBQUFBPT0iLAogICAiZXRhZyI6ICJDTUtzamNqdnV0d0NFQUU9IgogIH0KIF0KfQo="
+ }
+ },
+ {
+ "ID": "01d4836787dbfb48",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/acl1?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f8bdd6c34db90a5b8b1e3397a2c27b75/4558557012971334706;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/acl1?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:31 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbaf16:4318,/bns/xi/borg/xi/bns/blobstore2/bitpusher/41.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=m8BYW5qsG-yzswaYlLDIBg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/41.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/41:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpWPa8RkVu7Yd6NPOQARsSmW5zbKn0OfkEj9HvjZiO6xJBZg3KC2MEVd67fwbx3WS7j1TI9LpCmi7MNWr_6zAbhhI1DJQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "d56ed12627d066f9",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/acl2?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f1ea7829458667e3a6f4898cd2d09de2/8415207556394118592;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/acl2?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:31 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcaa2:4364,/bns/xi/borg/xi/bns/blobstore2/bitpusher/11.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=m8BYW47_JZC3swb1pLGIDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/11.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/11:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqCnkt7Uo2qbCatvG5fxkAXBlCpbiJO07CC9HF06kvlUTFn-GjrRY-m_lCIrsDV8Ws_S4MQJWXf5U1_paqfaHzPT28lPw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "94bf1e5a95fd8251",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/bucketInCopyAttrs?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "2b17f9da13eb6ce0c6b8edbef6bf84c0/12199520130330668367;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/bucketInCopyAttrs?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:32 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabf13:4076,/bns/xi/borg/xi/bns/blobstore2/bitpusher/55.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=m8BYW96xOcawswbcr6XYDw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/55.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/55:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrCmHNyLyFn16HWfS_z5eCxduzKPN5Y65GUK3JtXypSjmUO6WaC13amPgP1oqBTwE5rvvYqn-0XnLuDTOll2i7klzBPgQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "22237c662dd457c6",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/checksum-object?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "f23c3f81c556ef316f6cc26883d95ecb/16056169574258601693;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/checksum-object?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:32 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabe13:4160,/bns/xi/borg/xi/bns/blobstore2/bitpusher/60.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=nMBYW6rKG662swalh4DYCg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/60.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/60:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpWg79m1KPdCodCdEFtaIYNGkxlmGIe3buCTuiLmHXv_hwmGGqfHQvxZIE38ynVrz7VWHn_X6f2w3lpVXWC6IiWZaaPEA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "7dbaa7f2efb8187a",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/composed1?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "eae6406d66855307e4e3e8217a9e9b24/1394019553757277803;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/composed1?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:32 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcay15:4104,/bns/xi/borg/xi/bns/blobstore2/bitpusher/25.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=nMBYW8nMJcG8swbqjIGYBA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/25.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/25:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Uon8413KFqQ9BzJBvvm0l9EMT_MNeVNuiU4bm3zUSB1JnQYkHlNAeDB42SI1NgPlyZpns8hUhxOeBXy621kLYEGHTHSOA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "6bfa8537ac499c9c",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/composed2?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "cb571a37b611babf251831599aa3165f/5250388622203416569;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/composed2?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:33 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543432000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbaz16:4186,/bns/xi/borg/xi/bns/blobstore2/bitpusher/124.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=nMBYW_bKNoGFygPStIPwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/124.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/124:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Ur8YrB1X06D3oCHmvXDkJf1v56p0QsGkX65gSZ56jaEZAzB1NdKzutLqJZOtftc0MsufuMpTgZrIkbUH4ZU6pAcWWthQw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "bd7f3da6e7c5f033",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/content?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "8a00eb66b4417c690b696b0b6df8d171/9034982671116611464;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/content?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:33 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543432000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbbe16:4150,/bns/xi/borg/xi/bns/blobstore2/bitpusher/83.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ncBYW7bCCa-3swas5an4Bg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/83.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/83:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoHK6ETgn6d7GTHw4ytswXvInJYL3w7KGhs8q5CleY2uVOaiwb8yA_1XMc4E5O4U0O9nJ0v0aNbKJZWudJhYt8Fz9Cs-g"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "95ad48702da061a9",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "adf6c95a55f6c8485225c940cc9cc4a8/12891350640067899414;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:33 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543432000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbh13:4060,/bns/xi/borg/xi/bns/blobstore2/bitpusher/51.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ncBYW7-gGMGxswaD46-QCg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/51.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/51:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpfwhF9eqqkRa3aJsLAoLPOnK371SAXjlY6uL79fGGGVUUP1DI1nK6afrPtkyQXiOJTCq5vlYBZ-AYCxTsNIyNck0BhgQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "0c4bb7b9a03b9619",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "92ddd5a432470fe08d9c883bc253eff8/16675944688981160100;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-2?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:33 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543432000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xhiadbau10:4359,/bns/xi/borg/xi/bns/blobstore2/bitpusher/88.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ncBYW_WKK862swbPnpToAQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/88.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/88:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrNjTc5HZDExqKl6w-7Hcza3w1m5n_WYlJTegWkIzpWSueZb3ki0qAC2nx5SqZLw2Mt3N0qbNmib1wuIOrzCx4Egr22Xg"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "89d91ef55f2dfd10",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-3?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e21d97e24928f7c616af143a01fc310b/2085851162989359410;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/customer-encryption-3?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:34 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543432000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbo12:4395,/bns/xi/borg/xi/bns/blobstore2/bitpusher/13.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=ncBYW9nENau_swbmtYzYDQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/13.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/13:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrEXStNuAM0PVO7AimkvMJIsOKOHpaTo0fH6G9einvp9v6tcqRmDCIlHo_of-zreaPsl6maffcvdVQefi2OVKKs9gqiDw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "69ccf0e4eead94d3",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/gzip-test?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "04fe92f93c598678e7e711e0b5092a5e/5870163736925909441;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/gzip-test?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:34 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaz14:4326,/bns/xi/borg/xi/bns/blobstore2/bitpusher/43.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=nsBYW5CcAu65swarrY6wBw"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/43.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/43:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoHUpLY3v8-NzGQ5GOgp8dAw2r0izsB8rmxgTYzeAW-f1eXrWa2RZ1DPHqMnvGxShy9jdIWTnDrJkUGJZ5JkURKTiAHIw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "80d53fdd19e61bf6",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/hashesOnUpload-1?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "a3421dd63c75b5ed2d0410d160db5dd3/9726813180853842511;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/hashesOnUpload-1?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:34 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaal14:4213,/bns/xi/borg/xi/bns/blobstore2/bitpusher/40.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=nsBYW47tDa-5swa-lI7QBA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/40.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/40:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UrYyqbpJg1NS73g8J5PpCMIvmvtX6vgm-PfPeIxKymeKQC0UPg5XvX2FjEdjxS2yVdzkwrQjZp2qQ3PS-AKdzSBysDhkQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "c1e64ffa4efb3cf5",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj%2Fwith%2Fslashes?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "00860d467825177290132dd77656ed86/13511125759085359837;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj%2Fwith%2Fslashes?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:34 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaaj8:4280,/bns/xi/borg/xi/bns/blobstore2/bitpusher/145.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=nsBYW62OGci8swad7L7wAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/145.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/145:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqcL0ec0pZ6PwZV9cZ2rIR-gNVw7_1MHrHj0bx2eK_3ZKgCN7gYS2bGVNbMxoRx28LX9Y7eWTqvRz6R0jHghMHOCU7xtg"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "8c89e93dd654ae68",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "821c0ef89151bbda1952f0a298bb86fb/17295719803686941547;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj1?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:34 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabf13:4076,/bns/xi/borg/xi/bns/blobstore2/bitpusher/79.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=nsBYW_yiKOKEygP4sYagBQ"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/79.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/79:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Upy0J8WI0BeIN2fT94t6laOXGaGM3p99uSWZdzw0_aUZIWd3oU7Y1zCtFtiwamHQDIWihJRciDSBtm8-7MEjdYYMetUrA"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "483626da9ec7e59b",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj2?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "5932be5f1ca14a4bb02256d2e6ace463/2705626277711852538;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/obj2?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:35 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadabh15:4103,/bns/xi/borg/xi/bns/blobstore2/bitpusher/77.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=nsBYW_iYMs-1swbwzJDYDA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/77.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/77:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpjnA2pzid91zFr893ip4xoxKiAiNDSkg_EuKOhGlaB4msh55Q6AtlGh7LO45fqcI3BL3SZxZeXf1UWsP1Ldvpn1lxChQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "4b44c69cbda04eae",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/posc?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e57a9c4d94126e4940c80e6eb7d2543b/6490220322313434248;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/posc?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:35 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaan8:4230,/bns/xi/borg/xi/bns/blobstore2/bitpusher/113.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=n8BYW5LqAsi9swak95YI"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/113.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/113:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up1-BBeF8YQAGEXM56pi5rwDPHPLRazvKm6IPYp4uZn6ypJxDc1wQ7jSBtxhYzSXGGrH8JSltjwinCIVRMO6VzmIS4OUQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "5e1e7ba2a93b08c7",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/posc2?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "67f73aa48a6480403c00fa52f64e2f7d/10346588295559623958;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/posc2?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:35 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaam10:4277,/bns/xi/borg/xi/bns/blobstore2/bitpusher/131.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=n8BYW5yAD-u8swaT-aHwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/131.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/131:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UpFp4IhY-MCRsqePuJ5RJG0DLv2QJCqKZT5yQ6DhI6LjyGk9fw-tCVA6LTIISOwOfJBTxHCfWzxcn_RUt3OAWJtNVA-RQ"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "cca3704c457a82f4",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/signedURL?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "78e5667fad21494d66c45c457314aa44/14130900873791141284;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/signedURL?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:35 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543432000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbm12:4132,/bns/xi/borg/xi/bns/blobstore2/bitpusher/146.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=n8BYW6PjGcW8swaY9Jb4Ag"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/146.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/146:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqJw-ZJvtzQUbdHrB7tFO34uOjeIRDTQ4szFH5yMfoip2u9sLbawCpeyPAO0-jFyzJm2Ele8Z0kfqHxOYFC3vyy5ecBGg"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "4f77b9cfa7d10ab5",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/zero-object?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e668547fc26a7e0afc1fe87316ed5671/17987551412918957619;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000/o/zero-object?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:35 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xgiadaad9:4278,/bns/xi/borg/xi/bns/blobstore2/bitpusher/120.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=n8BYW4LoJKGFygP9lpvwAg"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/120.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/120:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UoEILCubGLq1xpRuPMZC5hLFBSRiLHRNPsIT4i1GIbH-DnKDVzjISMmjx9j7WZ_eVcqbogS2sxvVAg--it1b3v-3Cx9Rw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "7d77148ff3e41002",
+ "Request": {
+ "Method": "DELETE",
+ "URL": "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "cef7b40b0c2f61ee40a9e92059340300/7182050836345567055;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b/go-integration-test-20180725-66174009628628-0000?alt=json"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 204,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "no-cache, no-store, max-age=0, must-revalidate"
+ ],
+ "Content-Length": [
+ "0"
+ ],
+ "Content-Type": [
+ "application/json"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:36 GMT"
+ ],
+ "Expires": [
+ "Mon, 01 Jan 1990 00:00:00 GMT"
+ ],
+ "Pragma": [
+ "no-cache"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543432000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.write_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcby9:4035,/bns/xi/borg/xi/bns/blobstore2/bitpusher/17.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=n8BYW8fnL4-5swaUhavYCA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/17.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/17:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4ytK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2UqAK3vPe1VZwLK5E42KRl8e2NgII3c9oqKmFG5LYzPq2j83xITrPUCIt_ULCMSpiFl-Zecm3n40EdtqI8YD-lHicVS8lw"
+ ]
+ },
+ "Body": ""
+ }
+ },
+ {
+ "ID": "5255ffacca751f02",
+ "Request": {
+ "Method": "GET",
+ "URL": "https://www.googleapis.com/storage/v1/b?alt=json\u0026pageToken=\u0026prefix=go-integration-test\u0026project=dulcet-port-762\u0026projection=full",
+ "Proto": "HTTP/1.1",
+ "Header": {
+ "Accept-Encoding": [
+ "gzip"
+ ],
+ "Authorization": [
+ "REDACTED"
+ ],
+ "User-Agent": [
+ "google-api-go-client/0.5"
+ ],
+ "Via": [
+ "1.1 httpr-2cb544b9dcbba457f48c"
+ ],
+ "X-Cloud-Trace-Context": [
+ "e028fd273916fdf0b65964ec3763cf31/10966363410282182621;o=1"
+ ],
+ "X-Forwarded-For": [
+ "127.0.0.1"
+ ],
+ "X-Forwarded-Host": [
+ "www.googleapis.com"
+ ],
+ "X-Forwarded-Proto": [
+ "https"
+ ],
+ "X-Forwarded-Url": [
+ "https://www.googleapis.com/storage/v1/b?alt=json\u0026pageToken=\u0026prefix=go-integration-test\u0026project=dulcet-port-762\u0026projection=full"
+ ],
+ "X-Goog-Api-Client": [
+ "gl-go/1.10.3 gccl/20180226"
+ ]
+ },
+ "Body": ""
+ },
+ "Response": {
+ "StatusCode": 200,
+ "Proto": "HTTP/1.1",
+ "ProtoMajor": 1,
+ "ProtoMinor": 1,
+ "Header": {
+ "Alt-Svc": [
+ "quic=\":443\"; ma=2592000; v=\"44,43,39,35\""
+ ],
+ "Cache-Control": [
+ "private, max-age=0, must-revalidate, no-transform"
+ ],
+ "Content-Length": [
+ "66669"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Wed, 25 Jul 2018 18:25:36 GMT"
+ ],
+ "Expires": [
+ "Wed, 25 Jul 2018 18:25:36 GMT"
+ ],
+ "Server": [
+ "UploadServer"
+ ],
+ "Vary": [
+ "Origin",
+ "X-Origin"
+ ],
+ "X-Google-Apiary-Auth-Expires": [
+ "1532543431000"
+ ],
+ "X-Google-Apiary-Auth-Scopes": [
+ "https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/devstorage.read_only"
+ ],
+ "X-Google-Apiary-Auth-User": [
+ "998958384336"
+ ],
+ "X-Google-Backends": [
+ "xiiadcbg14:4207,/bns/xi/borg/xi/bns/blobstore2/bitpusher/92.scotty,aclgag9:443"
+ ],
+ "X-Google-Dos-Service-Trace": [
+ "main:apps-upload-cloud-storage-unified"
+ ],
+ "X-Google-Gfe-Backend-Request-Info": [
+ "eid=oMBYW7uvBoG9swbtxpj4CA"
+ ],
+ "X-Google-Gfe-Request-Trace": [
+ "aclgag9:443,/bns/xi/borg/xi/bns/blobstore2/bitpusher/92.scotty,aclgag9:443"
+ ],
+ "X-Google-Gfe-Response-Code-Details-Trace": [
+ "response_code_set_by_backend"
+ ],
+ "X-Google-Gfe-Service-Trace": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Netmon-Label": [
+ "/bns/xi/borg/xi/bns/blobstore2/bitpusher/92:caf3"
+ ],
+ "X-Google-Service": [
+ "bitpusher-gcs-apiary"
+ ],
+ "X-Google-Session-Info": [
+ "CNCJvbSJHRoCGAYoATp3ChJjbG91ZC1zdG9yYWdlLXJvc3kSCGJpZ3N0b3JlGNmFpL-IASJHMzY2Mzk5MzMxNDUtYjE4dDAxb210OWEyNzlrYzNnY2dpcWhxa2w4Ym9iaHUuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20w4Csw4Ssw4itK4wESxgF5YTI5LmMuRW93QkF3WWMtdWlkTEZTMktXSUNKME1Zb25jSlE2Z1FhZUMxRmowaWNoVnZtcnpYMDVBc3lpMFJCMlM1bFFuV1pQUGcxb2VMQTV6V0U0VnJISk56QU9Cb3MzZXVvQ0I0SkNUZE1QcTdlVVZPNWdtcUFoUlNZempnVjZ0RWhHbmdQLVduV1B5MWpKc3p1TDVydDFjTVN3a0VQX3dzX0dBbC1QRUk5WlpwbXJOYTBXbTZ0VWN4ajFVWFVudDFFQm8wBDoWTk9UX0FfUEVSU0lTVEVOVF9UT0tFTg"
+ ],
+ "X-Google-Shellfish-Status": [
+ "CA0gBEBG"
+ ],
+ "X-Guploader-Customer": [
+ "apiary_cloudstorage_metadata"
+ ],
+ "X-Guploader-Request-Result": [
+ "success"
+ ],
+ "X-Guploader-Upload-Result": [
+ "success"
+ ],
+ "X-Guploader-Uploadid": [
+ "AEnB2Up2odJMbb2TKTwmEPan1VAZnvzP8IZpt4f-GP_wUv0tOaYXzT260R_j-rnzMEEu388No5a6VJFqz3VBiNwwK4T5K646ag"
+ ]
+ },
+ "Body": "ewogImtpbmQiOiAic3RvcmFnZSNidWNrZXRzIiwKICJpdGVtcyI6IFsKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzIzNDg2NzI4MDYzNDgtMDAwMSIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MjM0ODY3MjgwNjM0OC0wMDAxIiwKICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTcyMzQ4NjcyODA2MzQ4LTAwMDEiLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNFQyMDowNTo1MC40NTVaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNFQyMDowNTo1MC40NTVaIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzIzNDg2NzI4MDYzNDgtMDAwMS9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTcyMzQ4NjcyODA2MzQ4LTAwMDEvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzIzNDg2NzI4MDYzNDgtMDAwMSIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTcyMzQ4NjcyODA2MzQ4LTAwMDEvYWxsQXV0aGVudGljYXRlZFVzZXJzIiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzIzNDg2NzI4MDYzNDgtMDAwMS9hY2wvYWxsQXV0aGVudGljYXRlZFVzZXJzIiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzIzNDg2NzI4MDYzNDgtMDAwMSIsCiAgICAgImVudGl0eSI6ICJhbGxBdXRoZW50aWNhdGVkVXNlcnMiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0KICAgXSwKICAgImRlZmF1bHRPYmplY3RBY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogImFsbFVzZXJzIiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiAgIH0sCiAgICJsb2NhdGlvbiI6ICJVUyIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMTE2NTI0NTg1OTEyLTAwMDEiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzMxMTY1MjQ1ODU5MTItMDAwMSIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzExNjUyNDU4NTkxMi0wMDAxIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjRUMjA6MTg6MzguMjg2WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjRUMjA6MTg6MzguMjg2WiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMTE2NTI0NTg1OTEyLTAwMDEvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzExNjUyNDU4NTkxMi0wMDAxL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMTE2NTI0NTg1OTEyLTAwMDEiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzExNjUyNDU4NTkxMi0wMDAxL2FsbEF1dGhlbnRpY2F0ZWRVc2VycyIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMTE2NTI0NTg1OTEyLTAwMDEvYWNsL2FsbEF1dGhlbnRpY2F0ZWRVc2VycyIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMTE2NTI0NTg1OTEyLTAwMDEiLAogICAgICJlbnRpdHkiOiAiYWxsQXV0aGVudGljYXRlZFVzZXJzIiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJkZWZhdWx0T2JqZWN0QWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJhbGxVc2VycyIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IgogICB9LAogICAibG9jYXRpb24iOiAiVVMiLAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEyIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMzU3MjYzMjA0NTc2LTAwMTIiLAogICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICJuYW1lIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzMzNTcyNjMyMDQ1NzYtMDAxMiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI0VDIwOjI0OjQzLjk1OFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI0VDIwOjI0OjQ2LjEyNFoiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMiIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEyL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzMzNTcyNjMyMDQ1NzYtMDAxMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEyIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzMzNTcyNjMyMDQ1NzYtMDAxMi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEyL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEyIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEyL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMzU3MjYzMjA0NTc2LTAwMTIvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMzU3MjYzMjA0NTc2LTAwMTIiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0KICAgXSwKICAgImRlZmF1bHRPYmplY3RBY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IgogICB9LAogICAibG9jYXRpb24iOiAiVVMiLAogICAicmV0ZW50aW9uUG9saWN5IjogewogICAgInJldGVudGlvblBlcmlvZCI6ICI5MDAwMCIsCiAgICAiZWZmZWN0aXZlVGltZSI6ICIyMDE4LTA3LTI0VDIwOjI0OjQzLjk1OFoiLAogICAgImlzTG9ja2VkIjogdHJ1ZQogICB9LAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEzIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMzU3MjYzMjA0NTc2LTAwMTMiLAogICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICJuYW1lIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzMzNTcyNjMyMDQ1NzYtMDAxMyIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI0VDIwOjI0OjQ4LjM5NVoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI0VDIwOjI0OjQ4LjM5NVoiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEzL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzMzNTcyNjMyMDQ1NzYtMDAxMy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEzIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjQtNzMzNTcyNjMyMDQ1NzYtMDAxMy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEzL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEzIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNC03MzM1NzI2MzIwNDU3Ni0wMDEzL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMzU3MjYzMjA0NTc2LTAwMTMvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI0LTczMzU3MjYzMjA0NTc2LTAwMTMiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0KICAgXSwKICAgImRlZmF1bHRPYmplY3RBY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IgogICB9LAogICAibG9jYXRpb24iOiAiVVMiLAogICAicmV0ZW50aW9uUG9saWN5IjogewogICAgInJldGVudGlvblBlcmlvZCI6ICI5MDAwMCIsCiAgICAiZWZmZWN0aXZlVGltZSI6ICIyMDE4LTA3LTI0VDIwOjI0OjQ4LjM5NVoiCiAgIH0sCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDA0NzY0NjAxMDE2LTAwMDAiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNDIwMDQ3NjQ2MDEwMTYtMDAwMCIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS00MjAwNDc2NDYwMTAxNi0wMDAwIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTE6NDA6MDUuNjg2WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTE6NDA6MDUuNjg2WiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDA0NzY0NjAxMDE2LTAwMDAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS00MjAwNDc2NDYwMTAxNi0wMDAwL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDA0NzY0NjAxMDE2LTAwMDAiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS00MjAwNDc2NDYwMTAxNi0wMDAwL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDA0NzY0NjAxMDE2LTAwMDAvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDA0NzY0NjAxMDE2LTAwMDAiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDA0NzY0NjAxMDE2LTAwMDAvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNDIwMDQ3NjQ2MDEwMTYtMDAwMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNDIwMDQ3NjQ2MDEwMTYtMDAwMCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfQogICBdLAogICAiZGVmYXVsdE9iamVjdEFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiAgIH0sCiAgICJsb2NhdGlvbiI6ICJVUyIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDQyNzA3MTQ3NDA4LTAwMDAiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNDIwNDI3MDcxNDc0MDgtMDAwMCIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS00MjA0MjcwNzE0NzQwOC0wMDAwIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTE6NDA6NDMuNjAyWiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTE6NDA6NDMuNjAyWiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDQyNzA3MTQ3NDA4LTAwMDAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS00MjA0MjcwNzE0NzQwOC0wMDAwL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDQyNzA3MTQ3NDA4LTAwMDAiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS00MjA0MjcwNzE0NzQwOC0wMDAwL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDQyNzA3MTQ3NDA4LTAwMDAvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDQyNzA3MTQ3NDA4LTAwMDAiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDQyNzA3MTQ3NDA4LTAwMDAvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNDIwNDI3MDcxNDc0MDgtMDAwMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNDIwNDI3MDcxNDc0MDgtMDAwMCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfQogICBdLAogICAiZGVmYXVsdE9iamVjdEFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiAgIH0sCiAgICJsb2NhdGlvbiI6ICJVUyIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDU0NjYyODY4MzAzLTAwMDAiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNDIwNTQ2NjI4NjgzMDMtMDAwMCIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS00MjA1NDY2Mjg2ODMwMy0wMDAwIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTE6NDA6NTUuMzM5WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTE6NDA6NTUuMzM5WiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDU0NjYyODY4MzAzLTAwMDAvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS00MjA1NDY2Mjg2ODMwMy0wMDAwL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDU0NjYyODY4MzAzLTAwMDAiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS00MjA1NDY2Mjg2ODMwMy0wMDAwL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDU0NjYyODY4MzAzLTAwMDAvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDU0NjYyODY4MzAzLTAwMDAiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTQyMDU0NjYyODY4MzAzLTAwMDAvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNDIwNTQ2NjI4NjgzMDMtMDAwMC9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNDIwNTQ2NjI4NjgzMDMtMDAwMCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfQogICBdLAogICAiZGVmYXVsdE9iamVjdEFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiAgIH0sCiAgICJsb2NhdGlvbiI6ICJVUyIsCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTIiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjMxOTExMTIwNTY4NDQtMDAxMiIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02MzE5MTExMjA1Njg0NC0wMDEyIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTc6MzU6MjMuMjQwWiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTc6MzU6MjUuMDM3WiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIyIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTIvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02MzE5MTExMjA1Njg0NC0wMDEyL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTIiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02MzE5MTExMjA1Njg0NC0wMDEyL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTIvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTIiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTIvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjMxOTExMTIwNTY4NDQtMDAxMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjMxOTExMTIwNTY4NDQtMDAxMiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfQogICBdLAogICAiZGVmYXVsdE9iamVjdEFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiAgIH0sCiAgICJsb2NhdGlvbiI6ICJVUyIsCiAgICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgICAicmV0ZW50aW9uUGVyaW9kIjogIjkwMDAwIiwKICAgICJlZmZlY3RpdmVUaW1lIjogIjIwMTgtMDctMjVUMTc6MzU6MjMuMjQwWiIsCiAgICAiaXNMb2NrZWQiOiB0cnVlCiAgIH0sCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTMiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjMxOTExMTIwNTY4NDQtMDAxMyIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02MzE5MTExMjA1Njg0NC0wMDEzIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTc6MzU6MjcuMjAwWiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTc6MzU6MjcuMjAwWiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTMvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02MzE5MTExMjA1Njg0NC0wMDEzL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTMiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02MzE5MTExMjA1Njg0NC0wMDEzL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTMiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTYzMTkxMTEyMDU2ODQ0LTAwMTMvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjMxOTExMTIwNTY4NDQtMDAxMy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjMxOTExMTIwNTY4NDQtMDAxMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfQogICBdLAogICAiZGVmYXVsdE9iamVjdEFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiAgIH0sCiAgICJsb2NhdGlvbiI6ICJVUyIsCiAgICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgICAicmV0ZW50aW9uUGVyaW9kIjogIjkwMDAwIiwKICAgICJlZmZlY3RpdmVUaW1lIjogIjIwMTgtMDctMjVUMTc6MzU6MjcuMjAwWiIKICAgfSwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJldGFnIjogIkNBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMiIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDI1Nzg0ODk3OTM1OC0wMDEyIiwKICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0MjU3ODQ4OTc5MzU4LTAwMTIiLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxNzo1MzowNS4wNDRaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxNzo1MzowNy4zMzdaIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMi9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0MjU3ODQ4OTc5MzU4LTAwMTIvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0MjU3ODQ4OTc5MzU4LTAwMTIvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDI1Nzg0ODk3OTM1OC0wMDEyL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDI1Nzg0ODk3OTM1OC0wMDEyIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9CiAgIF0sCiAgICJkZWZhdWx0T2JqZWN0QWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0KICAgXSwKICAgIm93bmVyIjogewogICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKICAgfSwKICAgImxvY2F0aW9uIjogIlVTIiwKICAgInJldGVudGlvblBvbGljeSI6IHsKICAgICJyZXRlbnRpb25QZXJpb2QiOiAiOTAwMDAiLAogICAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxNzo1MzowNS4wNDRaIiwKICAgICJpc0xvY2tlZCI6IHRydWUKICAgfSwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJldGFnIjogIkNBST0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMyIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDI1Nzg0ODk3OTM1OC0wMDEzIiwKICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0MjU3ODQ4OTc5MzU4LTAwMTMiLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQxNzo1MzowOS40NzFaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQxNzo1MzowOS40NzFaIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMy9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0MjU3ODQ4OTc5MzU4LTAwMTMvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0MjU3ODQ4OTc5MzU4LTAwMTMvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQyNTc4NDg5NzkzNTgtMDAxMy9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDI1Nzg0ODk3OTM1OC0wMDEzL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDI1Nzg0ODk3OTM1OC0wMDEzIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJkZWZhdWx0T2JqZWN0QWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0KICAgXSwKICAgIm93bmVyIjogewogICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKICAgfSwKICAgImxvY2F0aW9uIjogIlVTIiwKICAgInJldGVudGlvblBvbGljeSI6IHsKICAgICJyZXRlbnRpb25QZXJpb2QiOiAiOTAwMDAiLAogICAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQxNzo1MzowOS40NzFaIgogICB9LAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEyIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0ODM5MTEyNDcwNzE1LTAwMTIiLAogICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICJuYW1lIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQ4MzkxMTI0NzA3MTUtMDAxMiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjAyOjQ3LjYwNVoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjAyOjQ5LjYzNloiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMiIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEyL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQ4MzkxMTI0NzA3MTUtMDAxMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEyIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQ4MzkxMTI0NzA3MTUtMDAxMi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEyL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEyIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEyL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0ODM5MTEyNDcwNzE1LTAwMTIvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0ODM5MTEyNDcwNzE1LTAwMTIiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0KICAgXSwKICAgImRlZmF1bHRPYmplY3RBY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IgogICB9LAogICAibG9jYXRpb24iOiAiVVMiLAogICAicmV0ZW50aW9uUG9saWN5IjogewogICAgInJldGVudGlvblBlcmlvZCI6ICI5MDAwMCIsCiAgICAiZWZmZWN0aXZlVGltZSI6ICIyMDE4LTA3LTI1VDE4OjAyOjQ3LjYwNVoiLAogICAgImlzTG9ja2VkIjogdHJ1ZQogICB9LAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEzIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0ODM5MTEyNDcwNzE1LTAwMTMiLAogICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICJuYW1lIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQ4MzkxMTI0NzA3MTUtMDAxMyIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjAyOjUxLjUzNloiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDE4OjAyOjUxLjUzNloiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEzL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQ4MzkxMTI0NzA3MTUtMDAxMy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEzIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjQ4MzkxMTI0NzA3MTUtMDAxMy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEzL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEzIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NDgzOTExMjQ3MDcxNS0wMDEzL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0ODM5MTEyNDcwNzE1LTAwMTMvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY0ODM5MTEyNDcwNzE1LTAwMTMiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0KICAgXSwKICAgImRlZmF1bHRPYmplY3RBY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IgogICB9LAogICAibG9jYXRpb24iOiAiVVMiLAogICAicmV0ZW50aW9uUG9saWN5IjogewogICAgInJldGVudGlvblBlcmlvZCI6ICI5MDAwMCIsCiAgICAiZWZmZWN0aXZlVGltZSI6ICIyMDE4LTA3LTI1VDE4OjAyOjUxLjUzNloiCiAgIH0sCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMiIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEyIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NTYuNzU1WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjQ6NTguODIwWiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIyIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEyL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEyL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTIvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfQogICBdLAogICAiZGVmYXVsdE9iamVjdEFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiAgIH0sCiAgICJsb2NhdGlvbiI6ICJVUyIsCiAgICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgICAicmV0ZW50aW9uUGVyaW9kIjogIjkwMDAwIiwKICAgICJlZmZlY3RpdmVUaW1lIjogIjIwMTgtMDctMjVUMTg6MjQ6NTYuNzU1WiIsCiAgICAiaXNMb2NrZWQiOiB0cnVlCiAgIH0sCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTMiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMyIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEzIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MDEuMDg2WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMTg6MjU6MDEuMDg2WiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTMvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEzL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTMiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02NjE3NDAwOTYyODYyOC0wMDEzL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTMiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY2MTc0MDA5NjI4NjI4LTAwMTMvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjYxNzQwMDk2Mjg2MjgtMDAxMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfQogICBdLAogICAiZGVmYXVsdE9iamVjdEFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiAgIH0sCiAgICJsb2NhdGlvbiI6ICJVUyIsCiAgICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgICAicmV0ZW50aW9uUGVyaW9kIjogIjkwMDAwIiwKICAgICJlZmZlY3RpdmVUaW1lIjogIjIwMTgtMDctMjVUMTg6MjU6MDEuMDg2WiIKICAgfSwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJldGFnIjogIkNBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjg0NDg5NDc0MjEyMC0wMDEyIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY4NDQ4OTQ3NDIxMjAtMDAxMiIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02ODQ0ODk0NzQyMTIwLTAwMTIiLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQwMTo1NjoxMi44MDFaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQwMTo1NjoxNS4xMzVaIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjg0NDg5NDc0MjEyMC0wMDEyL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjg0NDg5NDc0MjEyMC0wMDEyL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY4NDQ4OTQ3NDIxMjAtMDAxMiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY4NDQ4OTQ3NDIxMjAtMDAxMi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02ODQ0ODk0NzQyMTIwLTAwMTIvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY4NDQ4OTQ3NDIxMjAtMDAxMiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjg0NDg5NDc0MjEyMC0wMDEyL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY4NDQ4OTQ3NDIxMjAtMDAxMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjg0NDg5NDc0MjEyMC0wMDEyIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9CiAgIF0sCiAgICJkZWZhdWx0T2JqZWN0QWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0KICAgXSwKICAgIm93bmVyIjogewogICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKICAgfSwKICAgImxvY2F0aW9uIjogIlVTIiwKICAgInJldGVudGlvblBvbGljeSI6IHsKICAgICJyZXRlbnRpb25QZXJpb2QiOiAiOTAwMDAiLAogICAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQwMTo1NjoxMi44MDFaIiwKICAgICJpc0xvY2tlZCI6IHRydWUKICAgfSwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJldGFnIjogIkNBST0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjg0NDg5NDc0MjEyMC0wMDEzIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY4NDQ4OTQ3NDIxMjAtMDAxMyIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02ODQ0ODk0NzQyMTIwLTAwMTMiLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQwMTo1NjoxNy4zNDlaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQwMTo1NjoxNy4zNDlaIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjg0NDg5NDc0MjEyMC0wMDEzL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjg0NDg5NDc0MjEyMC0wMDEzL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY4NDQ4OTQ3NDIxMjAtMDAxMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY4NDQ4OTQ3NDIxMjAtMDAxMy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS02ODQ0ODk0NzQyMTIwLTAwMTMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY4NDQ4OTQ3NDIxMjAtMDAxMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjg0NDg5NDc0MjEyMC0wMDEzL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTY4NDQ4OTQ3NDIxMjAtMDAxMy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNjg0NDg5NDc0MjEyMC0wMDEzIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJkZWZhdWx0T2JqZWN0QWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0KICAgXSwKICAgIm93bmVyIjogewogICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKICAgfSwKICAgImxvY2F0aW9uIjogIlVTIiwKICAgInJldGVudGlvblBvbGljeSI6IHsKICAgICJyZXRlbnRpb25QZXJpb2QiOiAiOTAwMDAiLAogICAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQwMTo1NjoxNy4zNDlaIgogICB9LAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgImV0YWciOiAiQ0FFPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS03NDM0MzgxMzQ2MDY3LTAwMTIiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNzQzNDM4MTM0NjA2Ny0wMDEyIiwKICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTc0MzQzODEzNDYwNjctMDAxMiIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDAyOjA2OjAxLjU0MloiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDAyOjA2OjAzLjkyMVoiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMiIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS03NDM0MzgxMzQ2MDY3LTAwMTIvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS03NDM0MzgxMzQ2MDY3LTAwMTIvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNzQzNDM4MTM0NjA2Ny0wMDEyIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNzQzNDM4MTM0NjA2Ny0wMDEyL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTc0MzQzODEzNDYwNjctMDAxMi9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNzQzNDM4MTM0NjA2Ny0wMDEyIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS03NDM0MzgxMzQ2MDY3LTAwMTIvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNzQzNDM4MTM0NjA2Ny0wMDEyL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS03NDM0MzgxMzQ2MDY3LTAwMTIiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0KICAgXSwKICAgImRlZmF1bHRPYmplY3RBY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IgogICB9LAogICAibG9jYXRpb24iOiAiVVMiLAogICAicmV0ZW50aW9uUG9saWN5IjogewogICAgInJldGVudGlvblBlcmlvZCI6ICI5MDAwMCIsCiAgICAiZWZmZWN0aXZlVGltZSI6ICIyMDE4LTA3LTI1VDAyOjA2OjAxLjU0MloiLAogICAgImlzTG9ja2VkIjogdHJ1ZQogICB9LAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgImV0YWciOiAiQ0FJPSIKICB9LAogIHsKICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXQiLAogICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS03NDM0MzgxMzQ2MDY3LTAwMTMiLAogICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNzQzNDM4MTM0NjA2Ny0wMDEzIiwKICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAibmFtZSI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTc0MzQzODEzNDYwNjctMDAxMyIsCiAgICJ0aW1lQ3JlYXRlZCI6ICIyMDE4LTA3LTI1VDAyOjA2OjA1Ljk5OFoiLAogICAidXBkYXRlZCI6ICIyMDE4LTA3LTI1VDAyOjA2OjA1Ljk5OFoiLAogICAibWV0YWdlbmVyYXRpb24iOiAiMSIsCiAgICJhY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS03NDM0MzgxMzQ2MDY3LTAwMTMvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS03NDM0MzgxMzQ2MDY3LTAwMTMvYWNsL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNzQzNDM4MTM0NjA2Ny0wMDEzIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNzQzNDM4MTM0NjA2Ny0wMDEzL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTc0MzQzODEzNDYwNjctMDAxMy9hY2wvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNzQzNDM4MTM0NjA2Ny0wMDEzIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS03NDM0MzgxMzQ2MDY3LTAwMTMvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtNzQzNDM4MTM0NjA2Ny0wMDEzL2FjbC9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS03NDM0MzgxMzQ2MDY3LTAwMTMiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0KICAgXSwKICAgImRlZmF1bHRPYmplY3RBY2wiOiBbCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogIm93bmVycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfQogICBdLAogICAib3duZXIiOiB7CiAgICAiZW50aXR5IjogInByb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IgogICB9LAogICAibG9jYXRpb24iOiAiVVMiLAogICAicmV0ZW50aW9uUG9saWN5IjogewogICAgInJldGVudGlvblBlcmlvZCI6ICI5MDAwMCIsCiAgICAiZWZmZWN0aXZlVGltZSI6ICIyMDE4LTA3LTI1VDAyOjA2OjA1Ljk5OFoiCiAgIH0sCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAiZXRhZyI6ICJDQUU9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTgwMTUzMTU1MzU4MjUtMDAxMiIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04MDE1MzE1NTM1ODI1LTAwMTIiLAogICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICJuYW1lIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODAxNTMxNTUzNTgyNS0wMDEyIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMDI6MTU6NDIuODg2WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMDI6MTU6NDQuODIzWiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIyIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTgwMTUzMTU1MzU4MjUtMDAxMi9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTgwMTUzMTU1MzU4MjUtMDAxMi9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04MDE1MzE1NTM1ODI1LTAwMTIiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04MDE1MzE1NTM1ODI1LTAwMTIvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODAxNTMxNTUzNTgyNS0wMDEyL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04MDE1MzE1NTM1ODI1LTAwMTIiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTgwMTUzMTU1MzU4MjUtMDAxMi9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04MDE1MzE1NTM1ODI1LTAwMTIvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTgwMTUzMTU1MzU4MjUtMDAxMiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfQogICBdLAogICAiZGVmYXVsdE9iamVjdEFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiAgIH0sCiAgICJsb2NhdGlvbiI6ICJVUyIsCiAgICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgICAicmV0ZW50aW9uUGVyaW9kIjogIjkwMDAwIiwKICAgICJlZmZlY3RpdmVUaW1lIjogIjIwMTgtMDctMjVUMDI6MTU6NDIuODg2WiIsCiAgICAiaXNMb2NrZWQiOiB0cnVlCiAgIH0sCiAgICJzdG9yYWdlQ2xhc3MiOiAiU1RBTkRBUkQiLAogICAiZXRhZyI6ICJDQUk9IgogIH0sCiAgewogICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldCIsCiAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTgwMTUzMTU1MzU4MjUtMDAxMyIsCiAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04MDE1MzE1NTM1ODI1LTAwMTMiLAogICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICJuYW1lIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODAxNTMxNTUzNTgyNS0wMDEzIiwKICAgInRpbWVDcmVhdGVkIjogIjIwMTgtMDctMjVUMDI6MTU6NDYuODY4WiIsCiAgICJ1cGRhdGVkIjogIjIwMTgtMDctMjVUMDI6MTU6NDYuODY4WiIsCiAgICJtZXRhZ2VuZXJhdGlvbiI6ICIxIiwKICAgImFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTgwMTUzMTU1MzU4MjUtMDAxMy9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTgwMTUzMTU1MzU4MjUtMDAxMy9hY2wvcHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04MDE1MzE1NTM1ODI1LTAwMTMiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNidWNrZXRBY2Nlc3NDb250cm9sIiwKICAgICAiaWQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04MDE1MzE1NTM1ODI1LTAwMTMvcHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODAxNTMxNTUzNTgyNS0wMDEzL2FjbC9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJidWNrZXQiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04MDE1MzE1NTM1ODI1LTAwMTMiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTgwMTUzMTU1MzU4MjUtMDAxMy9wcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04MDE1MzE1NTM1ODI1LTAwMTMvYWNsL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTgwMTUzMTU1MzU4MjUtMDAxMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LXZpZXdlcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIlJFQURFUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogInZpZXdlcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfQogICBdLAogICAiZGVmYXVsdE9iamVjdEFjbCI6IFsKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAib3duZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJlZGl0b3JzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0sCiAgICB7CiAgICAgImtpbmQiOiAic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJvd25lciI6IHsKICAgICJlbnRpdHkiOiAicHJvamVjdC1vd25lcnMtMzY2Mzk5MzMxNDUiCiAgIH0sCiAgICJsb2NhdGlvbiI6ICJVUyIsCiAgICJyZXRlbnRpb25Qb2xpY3kiOiB7CiAgICAicmV0ZW50aW9uUGVyaW9kIjogIjkwMDAwIiwKICAgICJlZmZlY3RpdmVUaW1lIjogIjIwMTgtMDctMjVUMDI6MTU6NDYuODY4WiIKICAgfSwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJldGFnIjogIkNBRT0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODU2MzgzMzE2NDM1Ny0wMDEyIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTg1NjM4MzMxNjQzNTctMDAxMiIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04NTYzODMzMTY0MzU3LTAwMTIiLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQwMjoyNDo0OS43ODNaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQwMjoyNDo1Mi4xMzNaIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjIiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODU2MzgzMzE2NDM1Ny0wMDEyL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODU2MzgzMzE2NDM1Ny0wMDEyL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTg1NjM4MzMxNjQzNTctMDAxMiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTg1NjM4MzMxNjQzNTctMDAxMi9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04NTYzODMzMTY0MzU3LTAwMTIvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTg1NjM4MzMxNjQzNTctMDAxMiIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODU2MzgzMzE2NDM1Ny0wMDEyL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTg1NjM4MzMxNjQzNTctMDAxMi9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODU2MzgzMzE2NDM1Ny0wMDEyIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBST0iCiAgICB9CiAgIF0sCiAgICJkZWZhdWx0T2JqZWN0QWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUk9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FJPSIKICAgIH0KICAgXSwKICAgIm93bmVyIjogewogICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKICAgfSwKICAgImxvY2F0aW9uIjogIlVTIiwKICAgInJldGVudGlvblBvbGljeSI6IHsKICAgICJyZXRlbnRpb25QZXJpb2QiOiAiOTAwMDAiLAogICAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQwMjoyNDo0OS43ODNaIiwKICAgICJpc0xvY2tlZCI6IHRydWUKICAgfSwKICAgInN0b3JhZ2VDbGFzcyI6ICJTVEFOREFSRCIsCiAgICJldGFnIjogIkNBST0iCiAgfSwKICB7CiAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0IiwKICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODU2MzgzMzE2NDM1Ny0wMDEzIiwKICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTg1NjM4MzMxNjQzNTctMDAxMyIsCiAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgIm5hbWUiOiAiZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04NTYzODMzMTY0MzU3LTAwMTMiLAogICAidGltZUNyZWF0ZWQiOiAiMjAxOC0wNy0yNVQwMjoyNDo1NS41NTNaIiwKICAgInVwZGF0ZWQiOiAiMjAxOC0wNy0yNVQwMjoyNDo1NS41NTNaIiwKICAgIm1ldGFnZW5lcmF0aW9uIjogIjEiLAogICAiYWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODU2MzgzMzE2NDM1Ny0wMDEzL3Byb2plY3Qtb3duZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAic2VsZkxpbmsiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODU2MzgzMzE2NDM1Ny0wMDEzL2FjbC9wcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTg1NjM4MzMxNjQzNTctMDAxMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI2J1Y2tldEFjY2Vzc0NvbnRyb2wiLAogICAgICJpZCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTg1NjM4MzMxNjQzNTctMDAxMy9wcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJzZWxmTGluayI6ICJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28taW50ZWdyYXRpb24tdGVzdC0yMDE4MDcyNS04NTYzODMzMTY0MzU3LTAwMTMvYWNsL3Byb2plY3QtZWRpdG9ycy0zNjYzOTkzMzE0NSIsCiAgICAgImJ1Y2tldCI6ICJnby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTg1NjM4MzMxNjQzNTctMDAxMyIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LWVkaXRvcnMtMzY2Mzk5MzMxNDUiLAogICAgICJyb2xlIjogIk9XTkVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAiZWRpdG9ycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9LAogICAgewogICAgICJraW5kIjogInN0b3JhZ2UjYnVja2V0QWNjZXNzQ29udHJvbCIsCiAgICAgImlkIjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODU2MzgzMzE2NDM1Ny0wMDEzL3Byb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInNlbGZMaW5rIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1pbnRlZ3JhdGlvbi10ZXN0LTIwMTgwNzI1LTg1NjM4MzMxNjQzNTctMDAxMy9hY2wvcHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAiYnVja2V0IjogImdvLWludGVncmF0aW9uLXRlc3QtMjAxODA3MjUtODU2MzgzMzE2NDM1Ny0wMDEzIiwKICAgICAiZW50aXR5IjogInByb2plY3Qtdmlld2Vycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiUkVBREVSIiwKICAgICAicHJvamVjdFRlYW0iOiB7CiAgICAgICJwcm9qZWN0TnVtYmVyIjogIjM2NjM5OTMzMTQ1IiwKICAgICAgInRlYW0iOiAidmlld2VycyIKICAgICB9LAogICAgICJldGFnIjogIkNBRT0iCiAgICB9CiAgIF0sCiAgICJkZWZhdWx0T2JqZWN0QWNsIjogWwogICAgewogICAgICJraW5kIjogInN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsCiAgICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIsCiAgICAgInJvbGUiOiAiT1dORVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJvd25lcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC1lZGl0b3JzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJPV05FUiIsCiAgICAgInByb2plY3RUZWFtIjogewogICAgICAicHJvamVjdE51bWJlciI6ICIzNjYzOTkzMzE0NSIsCiAgICAgICJ0ZWFtIjogImVkaXRvcnMiCiAgICAgfSwKICAgICAiZXRhZyI6ICJDQUU9IgogICAgfSwKICAgIHsKICAgICAia2luZCI6ICJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLAogICAgICJlbnRpdHkiOiAicHJvamVjdC12aWV3ZXJzLTM2NjM5OTMzMTQ1IiwKICAgICAicm9sZSI6ICJSRUFERVIiLAogICAgICJwcm9qZWN0VGVhbSI6IHsKICAgICAgInByb2plY3ROdW1iZXIiOiAiMzY2Mzk5MzMxNDUiLAogICAgICAidGVhbSI6ICJ2aWV3ZXJzIgogICAgIH0sCiAgICAgImV0YWciOiAiQ0FFPSIKICAgIH0KICAgXSwKICAgIm93bmVyIjogewogICAgImVudGl0eSI6ICJwcm9qZWN0LW93bmVycy0zNjYzOTkzMzE0NSIKICAgfSwKICAgImxvY2F0aW9uIjogIlVTIiwKICAgInJldGVudGlvblBvbGljeSI6IHsKICAgICJyZXRlbnRpb25QZXJpb2QiOiAiOTAwMDAiLAogICAgImVmZmVjdGl2ZVRpbWUiOiAiMjAxOC0wNy0yNVQwMjoyNDo1NS41NTNaIgogICB9LAogICAic3RvcmFnZUNsYXNzIjogIlNUQU5EQVJEIiwKICAgImV0YWciOiAiQ0FFPSIKICB9CiBdCn0K"
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/vendor/cloud.google.com/go/storage/writer.go b/vendor/cloud.google.com/go/storage/writer.go
index 93597c8..7f7827d 100644
--- a/vendor/cloud.google.com/go/storage/writer.go
+++ b/vendor/cloud.google.com/go/storage/writer.go
@@ -125,6 +125,9 @@ func (w *Writer) open() error {
if attrs.KMSKeyName != "" {
call.KmsKeyName(attrs.KMSKeyName)
}
+ if attrs.PredefinedACL != "" {
+ call.PredefinedAcl(attrs.PredefinedACL)
+ }
if err := setEncryptionHeaders(call.Header(), w.o.encryptionKey, false); err != nil {
w.mu.Lock()
w.err = err
diff --git a/vendor/contrib.go.opencensus.io/exporter/stackdriver/LICENSE b/vendor/contrib.go.opencensus.io/exporter/stackdriver/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/vendor/contrib.go.opencensus.io/exporter/stackdriver/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/contrib.go.opencensus.io/exporter/stackdriver/propagation/http.go b/vendor/contrib.go.opencensus.io/exporter/stackdriver/propagation/http.go
new file mode 100644
index 0000000..1797d37
--- /dev/null
+++ b/vendor/contrib.go.opencensus.io/exporter/stackdriver/propagation/http.go
@@ -0,0 +1,94 @@
+// Copyright 2018, OpenCensus Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Package propagation implement X-Cloud-Trace-Context header propagation used
+// by Google Cloud products.
+package propagation // import "contrib.go.opencensus.io/exporter/stackdriver/propagation"
+
+import (
+ "encoding/binary"
+ "encoding/hex"
+ "fmt"
+ "net/http"
+ "strconv"
+ "strings"
+
+ "go.opencensus.io/trace"
+ "go.opencensus.io/trace/propagation"
+)
+
+const (
+ httpHeaderMaxSize = 200
+ httpHeader = `X-Cloud-Trace-Context`
+)
+
+var _ propagation.HTTPFormat = (*HTTPFormat)(nil)
+
+// HTTPFormat implements propagation.HTTPFormat to propagate
+// traces in HTTP headers for Google Cloud Platform and Stackdriver Trace.
+type HTTPFormat struct{}
+
+// SpanContextFromRequest extracts a Stackdriver Trace span context from incoming requests.
+func (f *HTTPFormat) SpanContextFromRequest(req *http.Request) (sc trace.SpanContext, ok bool) {
+ h := req.Header.Get(httpHeader)
+ // See https://cloud.google.com/trace/docs/faq for the header HTTPFormat.
+ // Return if the header is empty or missing, or if the header is unreasonably
+ // large, to avoid making unnecessary copies of a large string.
+ if h == "" || len(h) > httpHeaderMaxSize {
+ return trace.SpanContext{}, false
+ }
+
+ // Parse the trace id field.
+ slash := strings.Index(h, `/`)
+ if slash == -1 {
+ return trace.SpanContext{}, false
+ }
+ tid, h := h[:slash], h[slash+1:]
+
+ buf, err := hex.DecodeString(tid)
+ if err != nil {
+ return trace.SpanContext{}, false
+ }
+ copy(sc.TraceID[:], buf)
+
+ // Parse the span id field.
+ spanstr := h
+ semicolon := strings.Index(h, `;`)
+ if semicolon != -1 {
+ spanstr, h = h[:semicolon], h[semicolon+1:]
+ }
+ sid, err := strconv.ParseUint(spanstr, 10, 64)
+ if err != nil {
+ return trace.SpanContext{}, false
+ }
+ binary.BigEndian.PutUint64(sc.SpanID[:], sid)
+
+ // Parse the options field, options field is optional.
+ if !strings.HasPrefix(h, "o=") {
+ return sc, true
+ }
+ o, err := strconv.ParseUint(h[2:], 10, 64)
+ if err != nil {
+ return trace.SpanContext{}, false
+ }
+ sc.TraceOptions = trace.TraceOptions(o)
+ return sc, true
+}
+
+// SpanContextToRequest modifies the given request to include a Stackdriver Trace header.
+func (f *HTTPFormat) SpanContextToRequest(sc trace.SpanContext, req *http.Request) {
+ sid := binary.BigEndian.Uint64(sc.SpanID[:])
+ header := fmt.Sprintf("%s/%d;o=%d", hex.EncodeToString(sc.TraceID[:]), sid, int64(sc.TraceOptions))
+ req.Header.Set(httpHeader, header)
+}
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
index ed08699..a270844 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
@@ -158,13 +158,14 @@ func (e *Expiry) SetExpiration(expiration time.Time, window time.Duration) {
// IsExpired returns if the credentials are expired.
func (e *Expiry) IsExpired() bool {
- if e.CurrentTime == nil {
- e.CurrentTime = time.Now
+ curTime := e.CurrentTime
+ if curTime == nil {
+ curTime = time.Now
}
- return e.expiration.Before(e.CurrentTime())
+ return e.expiration.Before(curTime())
}
-// A Credentials provides synchronous safe retrieval of AWS credentials Value.
+// A Credentials provides concurrency safe retrieval of AWS credentials Value.
// Credentials will cache the credentials value until they expire. Once the value
// expires the next Get will attempt to retrieve valid credentials.
//
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
index c397495..0ed791b 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
@@ -4,7 +4,6 @@ import (
"bufio"
"encoding/json"
"fmt"
- "path"
"strings"
"time"
@@ -12,6 +11,7 @@ import (
"github.com/aws/aws-sdk-go/aws/client"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/ec2metadata"
+ "github.com/aws/aws-sdk-go/internal/sdkuri"
)
// ProviderName provides a name of EC2Role provider
@@ -125,7 +125,7 @@ type ec2RoleCredRespBody struct {
Message string
}
-const iamSecurityCredsPath = "/iam/security-credentials"
+const iamSecurityCredsPath = "iam/security-credentials/"
// requestCredList requests a list of credentials from the EC2 service.
// If there are no credentials, or there is an error making or receiving the request
@@ -153,7 +153,7 @@ func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) {
// If the credentials cannot be found, or there is an error reading the response
// and error will be returned.
func requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2RoleCredRespBody, error) {
- resp, err := client.GetMetadata(path.Join(iamSecurityCredsPath, credsName))
+ resp, err := client.GetMetadata(sdkuri.PathJoin(iamSecurityCredsPath, credsName))
if err != nil {
return ec2RoleCredRespBody{},
awserr.New("EC2RoleRequestError",
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/csm/metricChan.go b/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go
index 514fc37..514fc37 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/csm/metricChan.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go b/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go
index 1484c8f..11082e5 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go
@@ -90,14 +90,13 @@ func (rep *Reporter) sendAPICallAttemptMetric(r *request.Request) {
}
func setError(m *metric, err awserr.Error) {
- msg := err.Message()
+ msg := err.Error()
code := err.Code()
switch code {
case "RequestError",
"SerializationError",
request.CanceledErrorCode:
-
m.SDKException = &code
m.SDKExceptionMessage = &msg
default:
@@ -223,8 +222,10 @@ func (rep *Reporter) InjectHandlers(handlers *request.Handlers) {
}
apiCallHandler := request.NamedHandler{Name: APICallMetricHandlerName, Fn: rep.sendAPICallMetric}
+ apiCallAttemptHandler := request.NamedHandler{Name: APICallAttemptMetricHandlerName, Fn: rep.sendAPICallAttemptMetric}
+
handlers.Complete.PushFrontNamed(apiCallHandler)
+ handlers.Complete.PushFrontNamed(apiCallAttemptHandler)
- apiCallAttemptHandler := request.NamedHandler{Name: APICallAttemptMetricHandlerName, Fn: rep.sendAPICallAttemptMetric}
handlers.AfterRetry.PushFrontNamed(apiCallAttemptHandler)
}
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go b/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go
index 3cf1036..5040a2f 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go
@@ -92,14 +92,25 @@ func Handlers() request.Handlers {
func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials.Credentials {
return credentials.NewCredentials(&credentials.ChainProvider{
VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors),
- Providers: []credentials.Provider{
- &credentials.EnvProvider{},
- &credentials.SharedCredentialsProvider{Filename: "", Profile: ""},
- RemoteCredProvider(*cfg, handlers),
- },
+ Providers: CredProviders(cfg, handlers),
})
}
+// CredProviders returns the slice of providers used in
+// the default credential chain.
+//
+// For applications that need to use some other provider (for example use
+// different environment variables for legacy reasons) but still fall back
+// on the default chain of providers. This allows that default chaint to be
+// automatically updated
+func CredProviders(cfg *aws.Config, handlers request.Handlers) []credentials.Provider {
+ return []credentials.Provider{
+ &credentials.EnvProvider{},
+ &credentials.SharedCredentialsProvider{Filename: "", Profile: ""},
+ RemoteCredProvider(*cfg, handlers),
+ }
+}
+
const (
httpProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_FULL_URI"
ecsCredsProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go b/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
index 984407a..c215cd3 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
@@ -4,12 +4,12 @@ import (
"encoding/json"
"fmt"
"net/http"
- "path"
"strings"
"time"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/request"
+ "github.com/aws/aws-sdk-go/internal/sdkuri"
)
// GetMetadata uses the path provided to request information from the EC2
@@ -19,7 +19,7 @@ func (c *EC2Metadata) GetMetadata(p string) (string, error) {
op := &request.Operation{
Name: "GetMetadata",
HTTPMethod: "GET",
- HTTPPath: path.Join("/", "meta-data", p),
+ HTTPPath: sdkuri.PathJoin("/meta-data", p),
}
output := &metadataOutput{}
@@ -35,7 +35,7 @@ func (c *EC2Metadata) GetUserData() (string, error) {
op := &request.Operation{
Name: "GetUserData",
HTTPMethod: "GET",
- HTTPPath: path.Join("/", "user-data"),
+ HTTPPath: "/user-data",
}
output := &metadataOutput{}
@@ -56,7 +56,7 @@ func (c *EC2Metadata) GetDynamicData(p string) (string, error) {
op := &request.Operation{
Name: "GetDynamicData",
HTTPMethod: "GET",
- HTTPPath: path.Join("/", "dynamic", p),
+ HTTPPath: sdkuri.PathJoin("/dynamic", p),
}
output := &metadataOutput{}
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go
index 74f72de..c04ba06 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go
@@ -84,6 +84,7 @@ func decodeV3Endpoints(modelDef modelDefinition, opts DecodeModelOptions) (Resol
custAddEC2Metadata(p)
custAddS3DualStack(p)
custRmIotDataService(p)
+ custFixAppAutoscalingChina(p)
}
return ps, nil
@@ -122,6 +123,27 @@ func custRmIotDataService(p *partition) {
delete(p.Services, "data.iot")
}
+func custFixAppAutoscalingChina(p *partition) {
+ if p.ID != "aws-cn" {
+ return
+ }
+
+ const serviceName = "application-autoscaling"
+ s, ok := p.Services[serviceName]
+ if !ok {
+ return
+ }
+
+ const expectHostname = `autoscaling.{region}.amazonaws.com`
+ if e, a := s.Defaults.Hostname, expectHostname; e != a {
+ fmt.Printf("custFixAppAutoscalingChina: ignoring customization, expected %s, got %s\n", e, a)
+ return
+ }
+
+ s.Defaults.Hostname = expectHostname + ".cn"
+ p.Services[serviceName] = s
+}
+
type decodeModelError struct {
awsError
}
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
index c472a57..ebce035 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
@@ -50,6 +50,7 @@ const (
AcmPcaServiceID = "acm-pca" // AcmPca.
ApiMediatailorServiceID = "api.mediatailor" // ApiMediatailor.
ApiPricingServiceID = "api.pricing" // ApiPricing.
+ ApiSagemakerServiceID = "api.sagemaker" // ApiSagemaker.
ApigatewayServiceID = "apigateway" // Apigateway.
ApplicationAutoscalingServiceID = "application-autoscaling" // ApplicationAutoscaling.
Appstream2ServiceID = "appstream2" // Appstream2.
@@ -146,7 +147,6 @@ const (
RuntimeLexServiceID = "runtime.lex" // RuntimeLex.
RuntimeSagemakerServiceID = "runtime.sagemaker" // RuntimeSagemaker.
S3ServiceID = "s3" // S3.
- SagemakerServiceID = "sagemaker" // Sagemaker.
SdbServiceID = "sdb" // Sdb.
SecretsmanagerServiceID = "secretsmanager" // Secretsmanager.
ServerlessrepoServiceID = "serverlessrepo" // Serverlessrepo.
@@ -304,6 +304,7 @@ var awsPartition = partition{
"ca-central-1": endpoint{},
"eu-central-1": endpoint{},
"eu-west-1": endpoint{},
+ "eu-west-2": endpoint{},
"us-east-1": endpoint{},
"us-east-2": endpoint{},
"us-west-2": endpoint{},
@@ -330,6 +331,19 @@ var awsPartition = partition{
"us-east-1": endpoint{},
},
},
+ "api.sagemaker": service{
+
+ Endpoints: endpoints{
+ "ap-northeast-1": endpoint{},
+ "ap-northeast-2": endpoint{},
+ "ap-southeast-2": endpoint{},
+ "eu-central-1": endpoint{},
+ "eu-west-1": endpoint{},
+ "us-east-1": endpoint{},
+ "us-east-2": endpoint{},
+ "us-west-2": endpoint{},
+ },
+ },
"apigateway": service{
Endpoints: endpoints{
@@ -394,10 +408,13 @@ var awsPartition = partition{
Endpoints: endpoints{
"ap-northeast-1": endpoint{},
+ "ap-northeast-2": endpoint{},
+ "ap-south-1": endpoint{},
"ap-southeast-1": endpoint{},
"ap-southeast-2": endpoint{},
"eu-central-1": endpoint{},
"eu-west-1": endpoint{},
+ "eu-west-2": endpoint{},
"us-east-1": endpoint{},
"us-east-2": endpoint{},
"us-west-2": endpoint{},
@@ -453,6 +470,7 @@ var awsPartition = partition{
"eu-central-1": endpoint{},
"eu-west-1": endpoint{},
"eu-west-2": endpoint{},
+ "sa-east-1": endpoint{},
"us-east-1": endpoint{},
"us-east-2": endpoint{},
"us-west-1": endpoint{},
@@ -571,6 +589,7 @@ var awsPartition = partition{
"ca-central-1": endpoint{},
"eu-central-1": endpoint{},
"eu-west-1": endpoint{},
+ "eu-west-2": endpoint{},
"us-east-1": endpoint{},
"us-east-2": endpoint{},
"us-west-1": endpoint{},
@@ -786,10 +805,11 @@ var awsPartition = partition{
Protocols: []string{"https"},
},
Endpoints: endpoints{
- "eu-west-1": endpoint{},
- "us-east-1": endpoint{},
- "us-east-2": endpoint{},
- "us-west-2": endpoint{},
+ "ap-southeast-2": endpoint{},
+ "eu-west-1": endpoint{},
+ "us-east-1": endpoint{},
+ "us-east-2": endpoint{},
+ "us-west-2": endpoint{},
},
},
"config": service{
@@ -1029,11 +1049,17 @@ var awsPartition = partition{
"eu-west-1": endpoint{},
"eu-west-2": endpoint{},
"eu-west-3": endpoint{},
- "sa-east-1": endpoint{},
- "us-east-1": endpoint{},
- "us-east-2": endpoint{},
- "us-west-1": endpoint{},
- "us-west-2": endpoint{},
+ "fips": endpoint{
+ Hostname: "elasticache-fips.us-west-1.amazonaws.com",
+ CredentialScope: credentialScope{
+ Region: "us-west-1",
+ },
+ },
+ "sa-east-1": endpoint{},
+ "us-east-1": endpoint{},
+ "us-east-2": endpoint{},
+ "us-west-1": endpoint{},
+ "us-west-2": endpoint{},
},
},
"elasticbeanstalk": service{
@@ -1059,6 +1085,7 @@ var awsPartition = partition{
"elasticfilesystem": service{
Endpoints: endpoints{
+ "ap-northeast-1": endpoint{},
"ap-northeast-2": endpoint{},
"ap-southeast-2": endpoint{},
"eu-central-1": endpoint{},
@@ -1094,7 +1121,7 @@ var awsPartition = partition{
"elasticmapreduce": service{
Defaults: endpoint{
SSLCommonName: "{region}.{service}.{dnsSuffix}",
- Protocols: []string{"http", "https"},
+ Protocols: []string{"https"},
},
Endpoints: endpoints{
"ap-northeast-1": endpoint{},
@@ -1193,10 +1220,16 @@ var awsPartition = partition{
Endpoints: endpoints{
"ap-northeast-1": endpoint{},
+ "ap-northeast-2": endpoint{},
+ "ap-south-1": endpoint{},
"ap-southeast-1": endpoint{},
"ap-southeast-2": endpoint{},
+ "ca-central-1": endpoint{},
"eu-central-1": endpoint{},
"eu-west-1": endpoint{},
+ "eu-west-2": endpoint{},
+ "eu-west-3": endpoint{},
+ "sa-east-1": endpoint{},
"us-east-1": endpoint{},
"us-east-2": endpoint{},
"us-west-1": endpoint{},
@@ -1208,6 +1241,7 @@ var awsPartition = partition{
Protocols: []string{"https"},
},
Endpoints: endpoints{
+ "eu-west-1": endpoint{},
"us-east-1": endpoint{},
"us-west-2": endpoint{},
},
@@ -1260,6 +1294,7 @@ var awsPartition = partition{
"ap-south-1": endpoint{},
"ap-southeast-1": endpoint{},
"ap-southeast-2": endpoint{},
+ "ca-central-1": endpoint{},
"eu-central-1": endpoint{},
"eu-west-1": endpoint{},
"eu-west-2": endpoint{},
@@ -1277,6 +1312,7 @@ var awsPartition = partition{
"ap-northeast-1": endpoint{},
"ap-southeast-2": endpoint{},
"eu-central-1": endpoint{},
+ "eu-west-1": endpoint{},
"us-east-1": endpoint{},
"us-west-2": endpoint{},
},
@@ -1396,9 +1432,10 @@ var awsPartition = partition{
"kinesisanalytics": service{
Endpoints: endpoints{
- "eu-west-1": endpoint{},
- "us-east-1": endpoint{},
- "us-west-2": endpoint{},
+ "eu-central-1": endpoint{},
+ "eu-west-1": endpoint{},
+ "us-east-1": endpoint{},
+ "us-west-2": endpoint{},
},
},
"kinesisvideo": service{
@@ -1526,10 +1563,12 @@ var awsPartition = partition{
Endpoints: endpoints{
"ap-northeast-1": endpoint{},
"ap-northeast-2": endpoint{},
+ "ap-south-1": endpoint{},
"ap-southeast-1": endpoint{},
"ap-southeast-2": endpoint{},
"eu-central-1": endpoint{},
"eu-west-1": endpoint{},
+ "sa-east-1": endpoint{},
"us-east-1": endpoint{},
"us-west-2": endpoint{},
},
@@ -1553,6 +1592,7 @@ var awsPartition = partition{
Endpoints: endpoints{
"ap-northeast-1": endpoint{},
+ "ap-northeast-2": endpoint{},
"ap-southeast-2": endpoint{},
"eu-central-1": endpoint{},
"eu-west-1": endpoint{},
@@ -1811,6 +1851,7 @@ var awsPartition = partition{
"eu-central-1": endpoint{},
"eu-west-1": endpoint{},
"eu-west-2": endpoint{},
+ "eu-west-3": endpoint{},
"sa-east-1": endpoint{},
"us-east-1": endpoint{},
"us-east-2": endpoint{},
@@ -1853,6 +1894,9 @@ var awsPartition = partition{
Endpoints: endpoints{
"ap-northeast-1": endpoint{},
+ "ap-northeast-2": endpoint{},
+ "ap-southeast-2": endpoint{},
+ "eu-central-1": endpoint{},
"eu-west-1": endpoint{},
"us-east-1": endpoint{},
"us-east-2": endpoint{},
@@ -1918,16 +1962,6 @@ var awsPartition = partition{
},
},
},
- "sagemaker": service{
-
- Endpoints: endpoints{
- "ap-northeast-1": endpoint{},
- "eu-west-1": endpoint{},
- "us-east-1": endpoint{},
- "us-east-2": endpoint{},
- "us-west-2": endpoint{},
- },
- },
"sdb": service{
Defaults: endpoint{
Protocols: []string{"http", "https"},
@@ -2040,6 +2074,7 @@ var awsPartition = partition{
"eu-west-1": endpoint{},
"us-east-1": endpoint{},
"us-east-2": endpoint{},
+ "us-west-1": endpoint{},
"us-west-2": endpoint{},
},
},
@@ -2130,11 +2165,31 @@ var awsPartition = partition{
"eu-west-1": endpoint{},
"eu-west-2": endpoint{},
"eu-west-3": endpoint{},
- "fips-us-east-1": endpoint{},
- "fips-us-east-2": endpoint{},
- "fips-us-west-1": endpoint{},
- "fips-us-west-2": endpoint{},
- "sa-east-1": endpoint{},
+ "fips-us-east-1": endpoint{
+ Hostname: "sqs-fips.us-east-1.amazonaws.com",
+ CredentialScope: credentialScope{
+ Region: "us-east-1",
+ },
+ },
+ "fips-us-east-2": endpoint{
+ Hostname: "sqs-fips.us-east-2.amazonaws.com",
+ CredentialScope: credentialScope{
+ Region: "us-east-2",
+ },
+ },
+ "fips-us-west-1": endpoint{
+ Hostname: "sqs-fips.us-west-1.amazonaws.com",
+ CredentialScope: credentialScope{
+ Region: "us-west-1",
+ },
+ },
+ "fips-us-west-2": endpoint{
+ Hostname: "sqs-fips.us-west-2.amazonaws.com",
+ CredentialScope: credentialScope{
+ Region: "us-west-2",
+ },
+ },
+ "sa-east-1": endpoint{},
"us-east-1": endpoint{
SSLCommonName: "queue.{dnsSuffix}",
},
@@ -2168,6 +2223,7 @@ var awsPartition = partition{
Endpoints: endpoints{
"ap-northeast-1": endpoint{},
"ap-northeast-2": endpoint{},
+ "ap-south-1": endpoint{},
"ap-southeast-1": endpoint{},
"ap-southeast-2": endpoint{},
"ca-central-1": endpoint{},
@@ -2462,12 +2518,13 @@ var awscnPartition = partition{
"apigateway": service{
Endpoints: endpoints{
- "cn-north-1": endpoint{},
+ "cn-north-1": endpoint{},
+ "cn-northwest-1": endpoint{},
},
},
"application-autoscaling": service{
Defaults: endpoint{
- Hostname: "autoscaling.{region}.amazonaws.com",
+ Hostname: "autoscaling.{region}.amazonaws.com.cn",
Protocols: []string{"http", "https"},
CredentialScope: credentialScope{
Service: "application-autoscaling",
@@ -2528,6 +2585,13 @@ var awscnPartition = partition{
"cn-northwest-1": endpoint{},
},
},
+ "ds": service{
+
+ Endpoints: endpoints{
+ "cn-north-1": endpoint{},
+ "cn-northwest-1": endpoint{},
+ },
+ },
"dynamodb": service{
Defaults: endpoint{
Protocols: []string{"http", "https"},
@@ -2596,7 +2660,7 @@ var awscnPartition = partition{
},
"elasticmapreduce": service{
Defaults: endpoint{
- Protocols: []string{"http", "https"},
+ Protocols: []string{"https"},
},
Endpoints: endpoints{
"cn-north-1": endpoint{},
@@ -2658,7 +2722,8 @@ var awscnPartition = partition{
"lambda": service{
Endpoints: endpoints{
- "cn-north-1": endpoint{},
+ "cn-north-1": endpoint{},
+ "cn-northwest-1": endpoint{},
},
},
"logs": service{
@@ -2924,6 +2989,12 @@ var awsusgovPartition = partition{
"elasticache": service{
Endpoints: endpoints{
+ "fips": endpoint{
+ Hostname: "elasticache-fips.us-gov-west-1.amazonaws.com",
+ CredentialScope: credentialScope{
+ Region: "us-gov-west-1",
+ },
+ },
"us-gov-west-1": endpoint{},
},
},
@@ -2945,7 +3016,7 @@ var awsusgovPartition = partition{
Endpoints: endpoints{
"us-gov-west-1": endpoint{
- Protocols: []string{"http", "https"},
+ Protocols: []string{"https"},
},
},
},
@@ -2982,6 +3053,22 @@ var awsusgovPartition = partition{
},
},
},
+ "inspector": service{
+
+ Endpoints: endpoints{
+ "us-gov-west-1": endpoint{},
+ },
+ },
+ "iot": service{
+ Defaults: endpoint{
+ CredentialScope: credentialScope{
+ Service: "execute-api",
+ },
+ },
+ Endpoints: endpoints{
+ "us-gov-west-1": endpoint{},
+ },
+ },
"kinesis": service{
Endpoints: endpoints{
@@ -3098,6 +3185,12 @@ var awsusgovPartition = partition{
"us-gov-west-1": endpoint{},
},
},
+ "states": service{
+
+ Endpoints: endpoints{
+ "us-gov-west-1": endpoint{},
+ },
+ },
"storagegateway": service{
Endpoints: endpoints{
@@ -3138,5 +3231,13 @@ var awsusgovPartition = partition{
"us-gov-west-1": endpoint{},
},
},
+ "translate": service{
+ Defaults: endpoint{
+ Protocols: []string{"https"},
+ },
+ Endpoints: endpoints{
+ "us-gov-west-1": endpoint{},
+ },
+ },
},
}
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go b/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go
index f35fef2..7d52702 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go
@@ -97,7 +97,7 @@ func isNestedErrorRetryable(parentErr awserr.Error) bool {
}
if t, ok := err.(temporaryError); ok {
- return t.Temporary()
+ return t.Temporary() || isErrConnectionReset(err)
}
return isErrConnectionReset(err)
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go b/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go
index ea7b886..98d420f 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go
@@ -128,7 +128,7 @@ read. The Session will be created from configuration values from the shared
credentials file (~/.aws/credentials) over those in the shared config file (~/.aws/config).
Credentials are the values the SDK should use for authenticating requests with
-AWS Services. They arfrom a configuration file will need to include both
+AWS Services. They are from a configuration file will need to include both
aws_access_key_id and aws_secret_access_key must be provided together in the
same file to be considered valid. The values will be ignored if not a complete
group. aws_session_token is an optional field that can be provided if both of
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go
index f358613..8aa0681 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go
@@ -98,25 +98,25 @@ var ignoredHeaders = rules{
var requiredSignedHeaders = rules{
whitelist{
mapRule{
- "Cache-Control": struct{}{},
- "Content-Disposition": struct{}{},
- "Content-Encoding": struct{}{},
- "Content-Language": struct{}{},
- "Content-Md5": struct{}{},
- "Content-Type": struct{}{},
- "Expires": struct{}{},
- "If-Match": struct{}{},
- "If-Modified-Since": struct{}{},
- "If-None-Match": struct{}{},
- "If-Unmodified-Since": struct{}{},
- "Range": struct{}{},
- "X-Amz-Acl": struct{}{},
- "X-Amz-Copy-Source": struct{}{},
- "X-Amz-Copy-Source-If-Match": struct{}{},
- "X-Amz-Copy-Source-If-Modified-Since": struct{}{},
- "X-Amz-Copy-Source-If-None-Match": struct{}{},
- "X-Amz-Copy-Source-If-Unmodified-Since": struct{}{},
- "X-Amz-Copy-Source-Range": struct{}{},
+ "Cache-Control": struct{}{},
+ "Content-Disposition": struct{}{},
+ "Content-Encoding": struct{}{},
+ "Content-Language": struct{}{},
+ "Content-Md5": struct{}{},
+ "Content-Type": struct{}{},
+ "Expires": struct{}{},
+ "If-Match": struct{}{},
+ "If-Modified-Since": struct{}{},
+ "If-None-Match": struct{}{},
+ "If-Unmodified-Since": struct{}{},
+ "Range": struct{}{},
+ "X-Amz-Acl": struct{}{},
+ "X-Amz-Copy-Source": struct{}{},
+ "X-Amz-Copy-Source-If-Match": struct{}{},
+ "X-Amz-Copy-Source-If-Modified-Since": struct{}{},
+ "X-Amz-Copy-Source-If-None-Match": struct{}{},
+ "X-Amz-Copy-Source-If-Unmodified-Since": struct{}{},
+ "X-Amz-Copy-Source-Range": struct{}{},
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Algorithm": struct{}{},
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key": struct{}{},
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key-Md5": struct{}{},
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/version.go b/vendor/github.com/aws/aws-sdk-go/aws/version.go
index 0e495e2..b701993 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/version.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/version.go
@@ -5,4 +5,4 @@ package aws
const SDKName = "aws-sdk-go"
// SDKVersion is the version of this SDK
-const SDKVersion = "1.14.9"
+const SDKVersion = "1.15.19"
diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go b/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go
new file mode 100644
index 0000000..38ea61a
--- /dev/null
+++ b/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go
@@ -0,0 +1,23 @@
+package sdkuri
+
+import (
+ "path"
+ "strings"
+)
+
+// PathJoin will join the elements of the path delimited by the "/"
+// character. Similar to path.Join with the exception the trailing "/"
+// character is preserved if present.
+func PathJoin(elems ...string) string {
+ if len(elems) == 0 {
+ return ""
+ }
+
+ hasTrailing := strings.HasSuffix(elems[len(elems)-1], "/")
+ str := path.Join(elems...)
+ if hasTrailing && str != "/" {
+ str += "/"
+ }
+
+ return str
+}
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go
index 4a4e64c..97937c8 100644
--- a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go
@@ -94,6 +94,9 @@ func (r *EventReader) ReadEvent() (event interface{}, err error) {
switch typ {
case EventMessageType:
return r.unmarshalEventMessage(msg)
+ case ExceptionMessageType:
+ err = r.unmarshalEventException(msg)
+ return nil, err
case ErrorMessageType:
return nil, r.unmarshalErrorMessage(msg)
default:
@@ -122,6 +125,39 @@ func (r *EventReader) unmarshalEventMessage(
return ev, nil
}
+func (r *EventReader) unmarshalEventException(
+ msg eventstream.Message,
+) (err error) {
+ eventType, err := GetHeaderString(msg, ExceptionTypeHeader)
+ if err != nil {
+ return err
+ }
+
+ ev, err := r.unmarshalerForEventType(eventType)
+ if err != nil {
+ return err
+ }
+
+ err = ev.UnmarshalEvent(r.payloadUnmarshaler, msg)
+ if err != nil {
+ return err
+ }
+
+ var ok bool
+ err, ok = ev.(error)
+ if !ok {
+ err = messageError{
+ code: "SerializationError",
+ msg: fmt.Sprintf(
+ "event stream exception %s mapped to non-error %T, %v",
+ eventType, ev, ev,
+ ),
+ }
+ }
+
+ return err
+}
+
func (r *EventReader) unmarshalErrorMessage(msg eventstream.Message) (err error) {
var msgErr messageError
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go
index d7786f9..e3fc076 100644
--- a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go
+++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go
@@ -464,7 +464,7 @@ func (v *TimestampValue) decode(r io.Reader) error {
func timeFromEpochMilli(t int64) time.Time {
secs := t / 1e3
msec := t % 1e3
- return time.Unix(secs, msec*int64(time.Millisecond))
+ return time.Unix(secs, msec*int64(time.Millisecond)).UTC()
}
// An UUIDValue provides eventstream encoding, and representation of a UUID
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go
index 5ce9cba..75866d0 100644
--- a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go
+++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go
@@ -233,7 +233,12 @@ func (q *queryParser) parseScalar(v url.Values, r reflect.Value, name string, ta
v.Set(name, strconv.FormatFloat(float64(value), 'f', -1, 32))
case time.Time:
const ISO8601UTC = "2006-01-02T15:04:05Z"
- v.Set(name, value.UTC().Format(ISO8601UTC))
+ format := tag.Get("timestampFormat")
+ if len(format) == 0 {
+ format = protocol.ISO8601TimeFormatName
+ }
+
+ v.Set(name, protocol.FormatTime(format, value))
default:
return fmt.Errorf("unsupported value for param %s: %v (%s)", name, r.Interface(), r.Type().Name())
}
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
index f761e0b..b34f525 100644
--- a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
+++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
@@ -20,11 +20,6 @@ import (
"github.com/aws/aws-sdk-go/private/protocol"
)
-// RFC1123GMT is a RFC1123 (RFC822) formated timestame. This format is not
-// using the standard library's time.RFC1123 due to the desire to always use
-// GMT as the timezone.
-const RFC1123GMT = "Mon, 2 Jan 2006 15:04:05 GMT"
-
// Whether the byte value can be sent without escaping in AWS URLs
var noEscape [256]bool
@@ -272,7 +267,14 @@ func convertType(v reflect.Value, tag reflect.StructTag) (str string, err error)
case float64:
str = strconv.FormatFloat(value, 'f', -1, 64)
case time.Time:
- str = value.UTC().Format(RFC1123GMT)
+ format := tag.Get("timestampFormat")
+ if len(format) == 0 {
+ format = protocol.RFC822TimeFormatName
+ if tag.Get("location") == "querystring" {
+ format = protocol.ISO8601TimeFormatName
+ }
+ }
+ str = protocol.FormatTime(format, value)
case aws.JSONValue:
if len(value) == 0 {
return "", errValueNotSet
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
index 9d4e762..33fd53b 100644
--- a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
+++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
@@ -198,7 +198,11 @@ func unmarshalHeader(v reflect.Value, header string, tag reflect.StructTag) erro
}
v.Set(reflect.ValueOf(&f))
case *time.Time:
- t, err := time.Parse(time.RFC1123, header)
+ format := tag.Get("timestampFormat")
+ if len(format) == 0 {
+ format = protocol.RFC822TimeFormatName
+ }
+ t, err := protocol.ParseTime(format, header)
if err != nil {
return err
}
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go
new file mode 100644
index 0000000..b7ed6c6
--- /dev/null
+++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go
@@ -0,0 +1,72 @@
+package protocol
+
+import (
+ "strconv"
+ "time"
+)
+
+// Names of time formats supported by the SDK
+const (
+ RFC822TimeFormatName = "rfc822"
+ ISO8601TimeFormatName = "iso8601"
+ UnixTimeFormatName = "unixTimestamp"
+)
+
+// Time formats supported by the SDK
+const (
+ // RFC 7231#section-7.1.1.1 timetamp format. e.g Tue, 29 Apr 2014 18:30:38 GMT
+ RFC822TimeFormat = "Mon, 2 Jan 2006 15:04:05 GMT"
+
+ // RFC3339 a subset of the ISO8601 timestamp format. e.g 2014-04-29T18:30:38Z
+ ISO8601TimeFormat = "2006-01-02T15:04:05Z"
+)
+
+// IsKnownTimestampFormat returns if the timestamp format name
+// is know to the SDK's protocols.
+func IsKnownTimestampFormat(name string) bool {
+ switch name {
+ case RFC822TimeFormatName:
+ fallthrough
+ case ISO8601TimeFormatName:
+ fallthrough
+ case UnixTimeFormatName:
+ return true
+ default:
+ return false
+ }
+}
+
+// FormatTime returns a string value of the time.
+func FormatTime(name string, t time.Time) string {
+ t = t.UTC()
+
+ switch name {
+ case RFC822TimeFormatName:
+ return t.Format(RFC822TimeFormat)
+ case ISO8601TimeFormatName:
+ return t.Format(ISO8601TimeFormat)
+ case UnixTimeFormatName:
+ return strconv.FormatInt(t.Unix(), 10)
+ default:
+ panic("unknown timestamp format name, " + name)
+ }
+}
+
+// ParseTime attempts to parse the time given the format. Returns
+// the time if it was able to be parsed, and fails otherwise.
+func ParseTime(formatName, value string) (time.Time, error) {
+ switch formatName {
+ case RFC822TimeFormatName:
+ return time.Parse(RFC822TimeFormat, value)
+ case ISO8601TimeFormatName:
+ return time.Parse(ISO8601TimeFormat, value)
+ case UnixTimeFormatName:
+ v, err := strconv.ParseFloat(value, 64)
+ if err != nil {
+ return time.Time{}, err
+ }
+ return time.Unix(int64(v), 0), nil
+ default:
+ panic("unknown timestamp format name, " + formatName)
+ }
+}
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go
index 7091b45..1bfe45f 100644
--- a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go
+++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go
@@ -13,9 +13,13 @@ import (
"github.com/aws/aws-sdk-go/private/protocol"
)
-// BuildXML will serialize params into an xml.Encoder.
-// Error will be returned if the serialization of any of the params or nested values fails.
+// BuildXML will serialize params into an xml.Encoder. Error will be returned
+// if the serialization of any of the params or nested values fails.
func BuildXML(params interface{}, e *xml.Encoder) error {
+ return buildXML(params, e, false)
+}
+
+func buildXML(params interface{}, e *xml.Encoder, sorted bool) error {
b := xmlBuilder{encoder: e, namespaces: map[string]string{}}
root := NewXMLElement(xml.Name{})
if err := b.buildValue(reflect.ValueOf(params), root, ""); err != nil {
@@ -23,7 +27,7 @@ func BuildXML(params interface{}, e *xml.Encoder) error {
}
for _, c := range root.Children {
for _, v := range c {
- return StructToXML(e, v, false)
+ return StructToXML(e, v, sorted)
}
}
return nil
@@ -90,8 +94,6 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl
return nil
}
- fieldAdded := false
-
// unwrap payloads
if payload := tag.Get("payload"); payload != "" {
field, _ := value.Type().FieldByName(payload)
@@ -119,6 +121,8 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl
child.Attr = append(child.Attr, ns)
}
+ var payloadFields, nonPayloadFields int
+
t := value.Type()
for i := 0; i < value.NumField(); i++ {
member := elemOf(value.Field(i))
@@ -133,8 +137,10 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl
mTag := field.Tag
if mTag.Get("location") != "" { // skip non-body members
+ nonPayloadFields++
continue
}
+ payloadFields++
if protocol.CanSetIdempotencyToken(value.Field(i), field) {
token := protocol.GetIdempotencyToken()
@@ -149,11 +155,11 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl
if err := b.buildValue(member, child, mTag); err != nil {
return err
}
-
- fieldAdded = true
}
- if fieldAdded { // only append this child if we have one ore more valid members
+ // Only case where the child shape is not added is if the shape only contains
+ // non-payload fields, e.g headers/query.
+ if !(payloadFields == 0 && nonPayloadFields > 0) {
current.AddChild(child)
}
@@ -278,8 +284,12 @@ func (b *xmlBuilder) buildScalar(value reflect.Value, current *XMLNode, tag refl
case float32:
str = strconv.FormatFloat(float64(converted), 'f', -1, 32)
case time.Time:
- const ISO8601UTC = "2006-01-02T15:04:05Z"
- str = converted.UTC().Format(ISO8601UTC)
+ format := tag.Get("timestampFormat")
+ if len(format) == 0 {
+ format = protocol.ISO8601TimeFormatName
+ }
+
+ str = protocol.FormatTime(format, converted)
default:
return fmt.Errorf("unsupported value for param %s: %v (%s)",
tag.Get("locationName"), value.Interface(), value.Type().Name())
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go
index a6c25ba..ff1ef68 100644
--- a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go
+++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go
@@ -9,6 +9,8 @@ import (
"strconv"
"strings"
"time"
+
+ "github.com/aws/aws-sdk-go/private/protocol"
)
// UnmarshalXML deserializes an xml.Decoder into the container v. V
@@ -253,8 +255,12 @@ func parseScalar(r reflect.Value, node *XMLNode, tag reflect.StructTag) error {
}
r.Set(reflect.ValueOf(&v))
case *time.Time:
- const ISO8601UTC = "2006-01-02T15:04:05Z"
- t, err := time.Parse(ISO8601UTC, node.Text)
+ format := tag.Get("timestampFormat")
+ if len(format) == 0 {
+ format = protocol.ISO8601TimeFormatName
+ }
+
+ t, err := protocol.ParseTime(format, node.Text)
if err != nil {
return err
}
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go
index 3e970b6..515ce15 100644
--- a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go
+++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go
@@ -29,6 +29,7 @@ func NewXMLElement(name xml.Name) *XMLNode {
// AddChild adds child to the XMLNode.
func (n *XMLNode) AddChild(child *XMLNode) {
+ child.parent = n
if _, ok := n.Children[child.Name.Local]; !ok {
n.Children[child.Name.Local] = []*XMLNode{}
}
diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/api.go b/vendor/github.com/aws/aws-sdk-go/service/s3/api.go
index 07fc06a..0e999ca 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/s3/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/s3/api.go
@@ -11,6 +11,7 @@ import (
"time"
"github.com/aws/aws-sdk-go/aws"
+ "github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/awsutil"
"github.com/aws/aws-sdk-go/aws/client"
"github.com/aws/aws-sdk-go/aws/request"
@@ -6819,7 +6820,7 @@ type Bucket struct {
_ struct{} `type:"structure"`
// Date the bucket was created.
- CreationDate *time.Time `type:"timestamp" timestampFormat:"iso8601"`
+ CreationDate *time.Time `type:"timestamp"`
// The name of the bucket.
Name *string `type:"string"`
@@ -7066,6 +7067,11 @@ func (s *CORSRule) SetMaxAgeSeconds(v int64) *CORSRule {
type CSVInput struct {
_ struct{} `type:"structure"`
+ // Specifies that CSV field values may contain quoted record delimiters and
+ // such records should be allowed. Default value is FALSE. Setting this value
+ // to TRUE may lower performance.
+ AllowQuotedRecordDelimiter *bool `type:"boolean"`
+
// Single character used to indicate a row should be ignored when present at
// the start of a row.
Comments *string `type:"string"`
@@ -7097,6 +7103,12 @@ func (s CSVInput) GoString() string {
return s.String()
}
+// SetAllowQuotedRecordDelimiter sets the AllowQuotedRecordDelimiter field's value.
+func (s *CSVInput) SetAllowQuotedRecordDelimiter(v bool) *CSVInput {
+ s.AllowQuotedRecordDelimiter = &v
+ return s
+}
+
// SetComments sets the Comments field's value.
func (s *CSVInput) SetComments(v string) *CSVInput {
s.Comments = &v
@@ -7564,7 +7576,7 @@ func (s *Condition) SetKeyPrefixEquals(v string) *Condition {
}
type ContinuationEvent struct {
- _ struct{} `type:"structure"`
+ _ struct{} `locationName:"ContinuationEvent" type:"structure"`
}
// String returns the string representation
@@ -7625,14 +7637,14 @@ type CopyObjectInput struct {
CopySourceIfMatch *string `location:"header" locationName:"x-amz-copy-source-if-match" type:"string"`
// Copies the object if it has been modified since the specified time.
- CopySourceIfModifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-modified-since" type:"timestamp" timestampFormat:"rfc822"`
+ CopySourceIfModifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-modified-since" type:"timestamp"`
// Copies the object if its entity tag (ETag) is different than the specified
// ETag.
CopySourceIfNoneMatch *string `location:"header" locationName:"x-amz-copy-source-if-none-match" type:"string"`
// Copies the object if it hasn't been modified since the specified time.
- CopySourceIfUnmodifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-unmodified-since" type:"timestamp" timestampFormat:"rfc822"`
+ CopySourceIfUnmodifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-unmodified-since" type:"timestamp"`
// Specifies the algorithm to use when decrypting the source object (e.g., AES256).
CopySourceSSECustomerAlgorithm *string `location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-algorithm" type:"string"`
@@ -7648,7 +7660,7 @@ type CopyObjectInput struct {
CopySourceSSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-key-MD5" type:"string"`
// The date and time at which the object is no longer cacheable.
- Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp" timestampFormat:"rfc822"`
+ Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp"`
// Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"`
@@ -8077,7 +8089,7 @@ type CopyObjectResult struct {
ETag *string `type:"string"`
- LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"`
+ LastModified *time.Time `type:"timestamp"`
}
// String returns the string representation
@@ -8109,7 +8121,7 @@ type CopyPartResult struct {
ETag *string `type:"string"`
// Date and time at which the object was uploaded.
- LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"`
+ LastModified *time.Time `type:"timestamp"`
}
// String returns the string representation
@@ -8313,7 +8325,7 @@ type CreateMultipartUploadInput struct {
ContentType *string `location:"header" locationName:"Content-Type" type:"string"`
// The date and time at which the object is no longer cacheable.
- Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp" timestampFormat:"rfc822"`
+ Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp"`
// Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"`
@@ -8561,7 +8573,7 @@ type CreateMultipartUploadOutput struct {
_ struct{} `type:"structure"`
// Date when multipart upload will become eligible for abort operation by lifecycle.
- AbortDate *time.Time `location:"header" locationName:"x-amz-abort-date" type:"timestamp" timestampFormat:"rfc822"`
+ AbortDate *time.Time `location:"header" locationName:"x-amz-abort-date" type:"timestamp"`
// Id of the lifecycle rule that makes a multipart upload eligible for abort
// operation.
@@ -9421,7 +9433,7 @@ type DeleteMarkerEntry struct {
Key *string `min:"1" type:"string"`
// Date and time the object was last modified.
- LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"`
+ LastModified *time.Time `type:"timestamp"`
Owner *Owner `type:"structure"`
@@ -10035,7 +10047,7 @@ func (s *EncryptionConfiguration) SetReplicaKmsKeyID(v string) *EncryptionConfig
}
type EndEvent struct {
- _ struct{} `type:"structure"`
+ _ struct{} `locationName:"EndEvent" type:"structure"`
}
// String returns the string representation
@@ -10155,6 +10167,7 @@ type FilterRule struct {
// the filtering rule applies. Maximum prefix length can be up to 1,024 characters.
// Overlapping prefixes and suffixes are not supported. For more information,
// go to Configuring Event Notifications (http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)
+ // in the Amazon Simple Storage Service Developer Guide.
Name *string `type:"string" enum:"FilterRuleName"`
Value *string `type:"string"`
@@ -11576,7 +11589,7 @@ type GetObjectInput struct {
// Return the object only if it has been modified since the specified time,
// otherwise return a 304 (not modified).
- IfModifiedSince *time.Time `location:"header" locationName:"If-Modified-Since" type:"timestamp" timestampFormat:"rfc822"`
+ IfModifiedSince *time.Time `location:"header" locationName:"If-Modified-Since" type:"timestamp"`
// Return the object only if its entity tag (ETag) is different from the one
// specified, otherwise return a 304 (not modified).
@@ -11584,7 +11597,7 @@ type GetObjectInput struct {
// Return the object only if it has not been modified since the specified time,
// otherwise return a 412 (precondition failed).
- IfUnmodifiedSince *time.Time `location:"header" locationName:"If-Unmodified-Since" type:"timestamp" timestampFormat:"rfc822"`
+ IfUnmodifiedSince *time.Time `location:"header" locationName:"If-Unmodified-Since" type:"timestamp"`
// Key is a required field
Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"`
@@ -11620,7 +11633,7 @@ type GetObjectInput struct {
ResponseContentType *string `location:"querystring" locationName:"response-content-type" type:"string"`
// Sets the Expires header of the response.
- ResponseExpires *time.Time `location:"querystring" locationName:"response-expires" type:"timestamp" timestampFormat:"iso8601"`
+ ResponseExpires *time.Time `location:"querystring" locationName:"response-expires" type:"timestamp"`
// Specifies the algorithm to use to when encrypting the object (e.g., AES256).
SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"`
@@ -11847,7 +11860,7 @@ type GetObjectOutput struct {
Expires *string `location:"header" locationName:"Expires" type:"string"`
// Last modified date of the object
- LastModified *time.Time `location:"header" locationName:"Last-Modified" type:"timestamp" timestampFormat:"rfc822"`
+ LastModified *time.Time `location:"header" locationName:"Last-Modified" type:"timestamp"`
// A map of metadata to store with the object in S3.
Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"`
@@ -12507,7 +12520,7 @@ type HeadObjectInput struct {
// Return the object only if it has been modified since the specified time,
// otherwise return a 304 (not modified).
- IfModifiedSince *time.Time `location:"header" locationName:"If-Modified-Since" type:"timestamp" timestampFormat:"rfc822"`
+ IfModifiedSince *time.Time `location:"header" locationName:"If-Modified-Since" type:"timestamp"`
// Return the object only if its entity tag (ETag) is different from the one
// specified, otherwise return a 304 (not modified).
@@ -12515,7 +12528,7 @@ type HeadObjectInput struct {
// Return the object only if it has not been modified since the specified time,
// otherwise return a 412 (precondition failed).
- IfUnmodifiedSince *time.Time `location:"header" locationName:"If-Unmodified-Since" type:"timestamp" timestampFormat:"rfc822"`
+ IfUnmodifiedSince *time.Time `location:"header" locationName:"If-Unmodified-Since" type:"timestamp"`
// Key is a required field
Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"`
@@ -12719,7 +12732,7 @@ type HeadObjectOutput struct {
Expires *string `location:"header" locationName:"Expires" type:"string"`
// Last modified date of the object
- LastModified *time.Time `location:"header" locationName:"Last-Modified" type:"timestamp" timestampFormat:"rfc822"`
+ LastModified *time.Time `location:"header" locationName:"Last-Modified" type:"timestamp"`
// A map of metadata to store with the object in S3.
Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"`
@@ -13013,7 +13026,7 @@ type InputSerialization struct {
// Describes the serialization of a CSV-encoded object.
CSV *CSVInput `type:"structure"`
- // Specifies object's compression format. Valid values: NONE, GZIP. Default
+ // Specifies object's compression format. Valid values: NONE, GZIP, BZIP2. Default
// Value: NONE.
CompressionType *string `type:"string" enum:"CompressionType"`
@@ -13519,6 +13532,7 @@ type LambdaFunctionConfiguration struct {
// Container for object key name filtering rules. For information about key
// name filtering, go to Configuring Event Notifications (http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)
+ // in the Amazon Simple Storage Service Developer Guide.
Filter *NotificationConfigurationFilter `type:"structure"`
// Optional unique identifier for configurations in a notification configuration.
@@ -15336,7 +15350,7 @@ type ListPartsOutput struct {
_ struct{} `type:"structure"`
// Date when multipart upload will become eligible for abort operation by lifecycle.
- AbortDate *time.Time `location:"header" locationName:"x-amz-abort-date" type:"timestamp" timestampFormat:"rfc822"`
+ AbortDate *time.Time `location:"header" locationName:"x-amz-abort-date" type:"timestamp"`
// Id of the lifecycle rule that makes a multipart upload eligible for abort
// operation.
@@ -15892,7 +15906,7 @@ type MultipartUpload struct {
_ struct{} `type:"structure"`
// Date and time at which the multipart upload was initiated.
- Initiated *time.Time `type:"timestamp" timestampFormat:"iso8601"`
+ Initiated *time.Time `type:"timestamp"`
// Identifies who initiated the multipart upload.
Initiator *Initiator `type:"structure"`
@@ -15966,7 +15980,8 @@ type NoncurrentVersionExpiration struct {
// Specifies the number of days an object is noncurrent before Amazon S3 can
// perform the associated action. For information about the noncurrent days
// calculations, see How Amazon S3 Calculates When an Object Became Noncurrent
- // (http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html)
+ // (http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html) in
+ // the Amazon Simple Storage Service Developer Guide.
NoncurrentDays *int64 `type:"integer"`
}
@@ -15998,7 +16013,8 @@ type NoncurrentVersionTransition struct {
// Specifies the number of days an object is noncurrent before Amazon S3 can
// perform the associated action. For information about the noncurrent days
// calculations, see How Amazon S3 Calculates When an Object Became Noncurrent
- // (http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html)
+ // (http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html) in
+ // the Amazon Simple Storage Service Developer Guide.
NoncurrentDays *int64 `type:"integer"`
// The class of storage used to store the object.
@@ -16147,6 +16163,7 @@ func (s *NotificationConfigurationDeprecated) SetTopicConfiguration(v *TopicConf
// Container for object key name filtering rules. For information about key
// name filtering, go to Configuring Event Notifications (http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)
+// in the Amazon Simple Storage Service Developer Guide.
type NotificationConfigurationFilter struct {
_ struct{} `type:"structure"`
@@ -16177,7 +16194,7 @@ type Object struct {
Key *string `min:"1" type:"string"`
- LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"`
+ LastModified *time.Time `type:"timestamp"`
Owner *Owner `type:"structure"`
@@ -16296,7 +16313,7 @@ type ObjectVersion struct {
Key *string `min:"1" type:"string"`
// Date and time the object was last modified.
- LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"`
+ LastModified *time.Time `type:"timestamp"`
Owner *Owner `type:"structure"`
@@ -16477,7 +16494,7 @@ type Part struct {
ETag *string `type:"string"`
// Date and time at which the part was uploaded.
- LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"`
+ LastModified *time.Time `type:"timestamp"`
// Part number identifying the part. This is a positive integer between 1 and
// 10,000.
@@ -16563,7 +16580,7 @@ func (s *Progress) SetBytesScanned(v int64) *Progress {
}
type ProgressEvent struct {
- _ struct{} `type:"structure" payload:"Details"`
+ _ struct{} `locationName:"ProgressEvent" type:"structure" payload:"Details"`
// The Progress event details.
Details *Progress `locationName:"Details" type:"structure"`
@@ -16597,7 +16614,7 @@ func (s *ProgressEvent) UnmarshalEvent(
if err := payloadUnmarshaler.UnmarshalPayload(
bytes.NewReader(msg.Payload), s,
); err != nil {
- return fmt.Errorf("failed to unmarshal payload, %v", err)
+ return err
}
return nil
}
@@ -18259,7 +18276,7 @@ type PutObjectInput struct {
ContentType *string `location:"header" locationName:"Content-Type" type:"string"`
// The date and time at which the object is no longer cacheable.
- Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp" timestampFormat:"rfc822"`
+ Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp"`
// Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"`
@@ -18732,6 +18749,7 @@ type QueueConfiguration struct {
// Container for object key name filtering rules. For information about key
// name filtering, go to Configuring Event Notifications (http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)
+ // in the Amazon Simple Storage Service Developer Guide.
Filter *NotificationConfigurationFilter `type:"structure"`
// Optional unique identifier for configurations in a notification configuration.
@@ -18845,7 +18863,7 @@ func (s *QueueConfigurationDeprecated) SetQueue(v string) *QueueConfigurationDep
}
type RecordsEvent struct {
- _ struct{} `type:"structure" payload:"Payload"`
+ _ struct{} `locationName:"RecordsEvent" type:"structure" payload:"Payload"`
// The byte array of partial, one or more result records.
//
@@ -19889,8 +19907,11 @@ func (r *readSelectObjectContentEventStream) unmarshalerForEventType(
case "Stats":
return &StatsEvent{}, nil
default:
- return nil, fmt.Errorf(
- "unknown event type name, %s, for SelectObjectContentEventStream", eventType)
+ return nil, awserr.New(
+ request.ErrCodeSerialization,
+ fmt.Sprintf("unknown event type name, %s, for SelectObjectContentEventStream", eventType),
+ nil,
+ )
}
}
@@ -19900,7 +19921,7 @@ func (r *readSelectObjectContentEventStream) unmarshalerForEventType(
// Amazon S3 uses this to parse object data into records, and returns only records
// that match the specified SQL expression. You must also specify the data serialization
// format for the response. For more information, go to S3Select API Documentation
-// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html)
+// (http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html).
type SelectObjectContentInput struct {
_ struct{} `locationName:"SelectObjectContentRequest" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"`
@@ -19938,15 +19959,15 @@ type SelectObjectContentInput struct {
RequestProgress *RequestProgress `type:"structure"`
// The SSE Algorithm used to encrypt the object. For more information, go to
- // Server-Side Encryption (Using Customer-Provided Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html)
+ // Server-Side Encryption (Using Customer-Provided Encryption Keys (http://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html).
SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"`
// The SSE Customer Key. For more information, go to Server-Side Encryption
- // (Using Customer-Provided Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html)
+ // (Using Customer-Provided Encryption Keys (http://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html).
SSECustomerKey *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string"`
// The SSE Customer Key MD5. For more information, go to Server-Side Encryption
- // (Using Customer-Provided Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html)
+ // (Using Customer-Provided Encryption Keys (http://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html).
SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"`
}
@@ -20453,7 +20474,7 @@ func (s *Stats) SetBytesScanned(v int64) *Stats {
}
type StatsEvent struct {
- _ struct{} `type:"structure" payload:"Details"`
+ _ struct{} `locationName:"StatsEvent" type:"structure" payload:"Details"`
// The Stats event details.
Details *Stats `locationName:"Details" type:"structure"`
@@ -20487,7 +20508,7 @@ func (s *StatsEvent) UnmarshalEvent(
if err := payloadUnmarshaler.UnmarshalPayload(
bytes.NewReader(msg.Payload), s,
); err != nil {
- return fmt.Errorf("failed to unmarshal payload, %v", err)
+ return err
}
return nil
}
@@ -20745,6 +20766,7 @@ type TopicConfiguration struct {
// Container for object key name filtering rules. For information about key
// name filtering, go to Configuring Event Notifications (http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)
+ // in the Amazon Simple Storage Service Developer Guide.
Filter *NotificationConfigurationFilter `type:"structure"`
// Optional unique identifier for configurations in a notification configuration.
@@ -20918,14 +20940,14 @@ type UploadPartCopyInput struct {
CopySourceIfMatch *string `location:"header" locationName:"x-amz-copy-source-if-match" type:"string"`
// Copies the object if it has been modified since the specified time.
- CopySourceIfModifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-modified-since" type:"timestamp" timestampFormat:"rfc822"`
+ CopySourceIfModifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-modified-since" type:"timestamp"`
// Copies the object if its entity tag (ETag) is different than the specified
// ETag.
CopySourceIfNoneMatch *string `location:"header" locationName:"x-amz-copy-source-if-none-match" type:"string"`
// Copies the object if it hasn't been modified since the specified time.
- CopySourceIfUnmodifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-unmodified-since" type:"timestamp" timestampFormat:"rfc822"`
+ CopySourceIfUnmodifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-unmodified-since" type:"timestamp"`
// The range of bytes to copy from the source object. The range value must use
// the form bytes=first-last, where the first and last are the zero-based byte
@@ -21678,6 +21700,9 @@ const (
// CompressionTypeGzip is a CompressionType enum value
CompressionTypeGzip = "GZIP"
+
+ // CompressionTypeBzip2 is a CompressionType enum value
+ CompressionTypeBzip2 = "BZIP2"
)
// Requests Amazon S3 to encode the object keys in the response and specifies
diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/api.go b/vendor/github.com/aws/aws-sdk-go/service/sts/api.go
index b46da12..6f89a79 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/sts/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/sts/api.go
@@ -1908,7 +1908,7 @@ type Credentials struct {
// The date on which the current credentials expire.
//
// Expiration is a required field
- Expiration *time.Time `type:"timestamp" timestampFormat:"iso8601" required:"true"`
+ Expiration *time.Time `type:"timestamp" required:"true"`
// The secret access key that can be used to sign requests.
//
diff --git a/vendor/github.com/go-ini/ini/file.go b/vendor/github.com/go-ini/ini/file.go
index d7982c3..1a3186b 100644
--- a/vendor/github.com/go-ini/ini/file.go
+++ b/vendor/github.com/go-ini/ini/file.go
@@ -237,13 +237,18 @@ func (f *File) writeToBuffer(indent string) (*bytes.Buffer, error) {
for i, sname := range f.sectionList {
sec := f.Section(sname)
if len(sec.Comment) > 0 {
- if sec.Comment[0] != '#' && sec.Comment[0] != ';' {
- sec.Comment = "; " + sec.Comment
- } else {
- sec.Comment = sec.Comment[:1] + " " + strings.TrimSpace(sec.Comment[1:])
- }
- if _, err := buf.WriteString(sec.Comment + LineBreak); err != nil {
- return nil, err
+ // Support multiline comments
+ lines := strings.Split(sec.Comment, LineBreak)
+ for i := range lines {
+ if lines[i][0] != '#' && lines[i][0] != ';' {
+ lines[i] = "; " + lines[i]
+ } else {
+ lines[i] = lines[i][:1] + " " + strings.TrimSpace(lines[i][1:])
+ }
+
+ if _, err := buf.WriteString(lines[i] + LineBreak); err != nil {
+ return nil, err
+ }
}
}
@@ -300,17 +305,19 @@ func (f *File) writeToBuffer(indent string) (*bytes.Buffer, error) {
if len(indent) > 0 && sname != DEFAULT_SECTION {
buf.WriteString(indent)
}
- if key.Comment[0] != '#' && key.Comment[0] != ';' {
- key.Comment = "; " + key.Comment
- } else {
- key.Comment = key.Comment[:1] + " " + strings.TrimSpace(key.Comment[1:])
- }
// Support multiline comments
- key.Comment = strings.Replace(key.Comment, "\n", "\n; ", -1)
+ lines := strings.Split(key.Comment, LineBreak)
+ for i := range lines {
+ if lines[i][0] != '#' && lines[i][0] != ';' {
+ lines[i] = "; " + lines[i]
+ } else {
+ lines[i] = lines[i][:1] + " " + strings.TrimSpace(lines[i][1:])
+ }
- if _, err := buf.WriteString(key.Comment + LineBreak); err != nil {
- return nil, err
+ if _, err := buf.WriteString(lines[i] + LineBreak); err != nil {
+ return nil, err
+ }
}
}
diff --git a/vendor/github.com/go-ini/ini/ini.go b/vendor/github.com/go-ini/ini/ini.go
index 15ebc8f..cb55997 100644
--- a/vendor/github.com/go-ini/ini/ini.go
+++ b/vendor/github.com/go-ini/ini/ini.go
@@ -1,3 +1,5 @@
+// +build go1.6
+
// Copyright 2014 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
@@ -32,7 +34,7 @@ const (
// Maximum allowed depth when recursively substituing variable names.
_DEPTH_VALUES = 99
- _VERSION = "1.37.0"
+ _VERSION = "1.38.2"
)
// Version returns current package version literal.
@@ -132,6 +134,8 @@ type LoadOptions struct {
IgnoreContinuation bool
// IgnoreInlineComment indicates whether to ignore comments at the end of value and treat it as part of value.
IgnoreInlineComment bool
+ // SkipUnrecognizableLines indicates whether to skip unrecognizable lines that do not conform to key/value pairs.
+ SkipUnrecognizableLines bool
// AllowBooleanKeys indicates whether to allow boolean type keys or treat as value is missing.
// This type of keys are mostly used in my.cnf.
AllowBooleanKeys bool
@@ -157,7 +161,7 @@ type LoadOptions struct {
// when value is NOT surrounded by any quotes.
// Note: UNSTABLE, behavior might change to only unescape inside double quotes but may noy necessary at all.
UnescapeValueCommentSymbols bool
- // Some INI formats allow group blocks that store a block of raw content that doesn't otherwise
+ // UnparseableSections stores a list of blocks that are allowed with raw content which do not otherwise
// conform to key/value pairs. Specify the names of those blocks here.
UnparseableSections []string
}
@@ -200,7 +204,7 @@ func InsensitiveLoad(source interface{}, others ...interface{}) (*File, error) {
return LoadSources(LoadOptions{Insensitive: true}, source, others...)
}
-// InsensitiveLoad has exactly same functionality as Load function
+// ShadowLoad has exactly same functionality as Load function
// except it allows have shadow keys.
func ShadowLoad(source interface{}, others ...interface{}) (*File, error) {
return LoadSources(LoadOptions{AllowShadows: true}, source, others...)
diff --git a/vendor/github.com/go-ini/ini/parser.go b/vendor/github.com/go-ini/ini/parser.go
index d5aa2db..3daf54c 100644
--- a/vendor/github.com/go-ini/ini/parser.go
+++ b/vendor/github.com/go-ini/ini/parser.go
@@ -339,8 +339,7 @@ func (f *File) parse(reader io.Reader) (err error) {
// NOTE: Iterate and increase `currentPeekSize` until
// the size of the parser buffer is found.
- // TODO: When Golang 1.10 is the lowest version supported,
- // replace with `parserBufferSize := p.buf.Size()`.
+ // TODO(unknwon): When Golang 1.10 is the lowest version supported, replace with `parserBufferSize := p.buf.Size()`.
parserBufferSize := 0
// NOTE: Peek 1kb at a time.
currentPeekSize := 1024
@@ -390,8 +389,7 @@ func (f *File) parse(reader io.Reader) (err error) {
// Section
if line[0] == '[' {
// Read to the next ']' (TODO: support quoted strings)
- // TODO(unknwon): use LastIndexByte when stop supporting Go1.4
- closeIdx := bytes.LastIndex(line, []byte("]"))
+ closeIdx := bytes.LastIndexByte(line, ']')
if closeIdx == -1 {
return fmt.Errorf("unclosed section: %s", line)
}
@@ -433,25 +431,31 @@ func (f *File) parse(reader io.Reader) (err error) {
kname, offset, err := readKeyName(line)
if err != nil {
// Treat as boolean key when desired, and whole line is key name.
- if IsErrDelimiterNotFound(err) && f.options.AllowBooleanKeys {
- kname, err := p.readValue(line,
- parserBufferSize,
- f.options.IgnoreContinuation,
- f.options.IgnoreInlineComment,
- f.options.UnescapeValueDoubleQuotes,
- f.options.UnescapeValueCommentSymbols,
- f.options.AllowPythonMultilineValues,
- f.options.SpaceBeforeInlineComment)
- if err != nil {
- return err
- }
- key, err := section.NewBooleanKey(kname)
- if err != nil {
- return err
+ if IsErrDelimiterNotFound(err) {
+ switch {
+ case f.options.AllowBooleanKeys:
+ kname, err := p.readValue(line,
+ parserBufferSize,
+ f.options.IgnoreContinuation,
+ f.options.IgnoreInlineComment,
+ f.options.UnescapeValueDoubleQuotes,
+ f.options.UnescapeValueCommentSymbols,
+ f.options.AllowPythonMultilineValues,
+ f.options.SpaceBeforeInlineComment)
+ if err != nil {
+ return err
+ }
+ key, err := section.NewBooleanKey(kname)
+ if err != nil {
+ return err
+ }
+ key.Comment = strings.TrimSpace(p.comment.String())
+ p.comment.Reset()
+ continue
+
+ case f.options.SkipUnrecognizableLines:
+ continue
}
- key.Comment = strings.TrimSpace(p.comment.String())
- p.comment.Reset()
- continue
}
return err
}
diff --git a/vendor/github.com/go-ini/ini/section.go b/vendor/github.com/go-ini/ini/section.go
index d8a4026..340a1ef 100644
--- a/vendor/github.com/go-ini/ini/section.go
+++ b/vendor/github.com/go-ini/ini/section.go
@@ -82,6 +82,7 @@ func (s *Section) NewKey(name, val string) (*Key, error) {
}
} else {
s.keys[name].value = val
+ s.keysHash[name] = val
}
return s.keys[name], nil
}
diff --git a/vendor/github.com/go-sql-driver/mysql/AUTHORS b/vendor/github.com/go-sql-driver/mysql/AUTHORS
index 73ff68f..fbe4ec4 100644
--- a/vendor/github.com/go-sql-driver/mysql/AUTHORS
+++ b/vendor/github.com/go-sql-driver/mysql/AUTHORS
@@ -72,6 +72,7 @@ Shuode Li <elemount at qq.com>
Soroush Pour <me at soroushjp.com>
Stan Putrya <root.vagner at gmail.com>
Stanley Gunawan <gunawan.stanley at gmail.com>
+Thomas Wodarek <wodarekwebpage at gmail.com>
Xiangyu Hu <xiangyu.hu at outlook.com>
Xiaobing Jiang <s7v7nislands at gmail.com>
Xiuming Chen <cc at cxm.cc>
diff --git a/vendor/github.com/go-sql-driver/mysql/README.md b/vendor/github.com/go-sql-driver/mysql/README.md
index 2e9b07e..7e7df1a 100644
--- a/vendor/github.com/go-sql-driver/mysql/README.md
+++ b/vendor/github.com/go-sql-driver/mysql/README.md
@@ -40,7 +40,7 @@ A MySQL-Driver for Go's [database/sql](https://golang.org/pkg/database/sql/) pac
* Optional placeholder interpolation
## Requirements
- * Go 1.7 or higher. We aim to support the 3 latest versions of Go.
+ * Go 1.8 or higher. We aim to support the 3 latest versions of Go.
* MySQL (4.1+), MariaDB, Percona Server, Google CloudSQL or Sphinx (2.2.3+)
---------------------------------------
diff --git a/vendor/github.com/go-sql-driver/mysql/appengine.go b/vendor/github.com/go-sql-driver/mysql/appengine.go
deleted file mode 100644
index be41f2e..0000000
--- a/vendor/github.com/go-sql-driver/mysql/appengine.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
-//
-// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build appengine
-
-package mysql
-
-import (
- "google.golang.org/appengine/cloudsql"
-)
-
-func init() {
- RegisterDial("cloudsql", cloudsql.Dial)
-}
diff --git a/vendor/github.com/go-sql-driver/mysql/auth.go b/vendor/github.com/go-sql-driver/mysql/auth.go
index 0b59f52..2f61ecd 100644
--- a/vendor/github.com/go-sql-driver/mysql/auth.go
+++ b/vendor/github.com/go-sql-driver/mysql/auth.go
@@ -241,7 +241,7 @@ func (mc *mysqlConn) auth(authData []byte, plugin string) ([]byte, bool, error)
switch plugin {
case "caching_sha2_password":
authResp := scrambleSHA256Password(authData, mc.cfg.Passwd)
- return authResp, (authResp == nil), nil
+ return authResp, false, nil
case "mysql_old_password":
if !mc.cfg.AllowOldPasswords {
diff --git a/vendor/github.com/go-sql-driver/mysql/driver.go b/vendor/github.com/go-sql-driver/mysql/driver.go
index 8c35de7..ba12978 100644
--- a/vendor/github.com/go-sql-driver/mysql/driver.go
+++ b/vendor/github.com/go-sql-driver/mysql/driver.go
@@ -105,6 +105,9 @@ func (d MySQLDriver) Open(dsn string) (driver.Conn, error) {
mc.cleanup()
return nil, err
}
+ if plugin == "" {
+ plugin = defaultAuthPlugin
+ }
// Send Client Authentication Packet
authResp, addNUL, err := mc.auth(authData, plugin)
diff --git a/vendor/github.com/go-sql-driver/mysql/packets.go b/vendor/github.com/go-sql-driver/mysql/packets.go
index f99934e..170aaa0 100644
--- a/vendor/github.com/go-sql-driver/mysql/packets.go
+++ b/vendor/github.com/go-sql-driver/mysql/packets.go
@@ -154,15 +154,15 @@ func (mc *mysqlConn) writePacket(data []byte) error {
// Handshake Initialization Packet
// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake
-func (mc *mysqlConn) readHandshakePacket() ([]byte, string, error) {
- data, err := mc.readPacket()
+func (mc *mysqlConn) readHandshakePacket() (data []byte, plugin string, err error) {
+ data, err = mc.readPacket()
if err != nil {
// for init we can rewrite this to ErrBadConn for sql.Driver to retry, since
// in connection initialization we don't risk retrying non-idempotent actions.
if err == ErrInvalidConn {
return nil, "", driver.ErrBadConn
}
- return nil, "", err
+ return
}
if data[0] == iERR {
@@ -198,7 +198,6 @@ func (mc *mysqlConn) readHandshakePacket() ([]byte, string, error) {
}
pos += 2
- plugin := ""
if len(data) > pos {
// character set [1 byte]
// status flags [2 bytes]
@@ -236,8 +235,6 @@ func (mc *mysqlConn) readHandshakePacket() ([]byte, string, error) {
return b[:], plugin, nil
}
- plugin = defaultAuthPlugin
-
// make a memory safe copy of the cipher slice
var b [8]byte
copy(b[:], authData)
diff --git a/vendor/github.com/gobuffalo/packr/box.go b/vendor/github.com/gobuffalo/packr/box.go
index 30eb6e2..d221101 100644
--- a/vendor/github.com/gobuffalo/packr/box.go
+++ b/vendor/github.com/gobuffalo/packr/box.go
@@ -15,6 +15,7 @@ import (
)
var (
+ // ErrResOutsideBox gets returned in case of the requested resources being outside the box
ErrResOutsideBox = errors.New("Can't find a resource outside the box")
)
@@ -51,10 +52,12 @@ type Box struct {
directories map[string]bool
}
+// AddString converts t to a byteslice and delegates to AddBytes to add to b.data
func (b Box) AddString(path string, t string) {
b.AddBytes(path, []byte(t))
}
+// AddBytes sets t in b.data by the given path
func (b Box) AddBytes(path string, t []byte) {
b.data[path] = t
}
@@ -132,14 +135,14 @@ func (b Box) find(name string) (File, error) {
bb = b.decompress(bb)
return newVirtualFile(cleanName, bb), nil
}
+ if _, ok := b.directories[cleanName]; ok {
+ return newVirtualDir(cleanName), nil
+ }
if filepath.Ext(cleanName) != "" {
// The Handler created by http.FileSystem checks for those errors and
// returns http.StatusNotFound instead of http.StatusInternalServerError.
return nil, os.ErrNotExist
}
- if _, ok := b.directories[cleanName]; ok {
- return newVirtualDir(cleanName), nil
- }
return nil, os.ErrNotExist
}
@@ -149,46 +152,6 @@ func (b Box) find(name string) (File, error) {
return fileFor(p, cleanName)
}
-type WalkFunc func(string, File) error
-
-func (b Box) Walk(wf WalkFunc) error {
- if data[b.Path] == nil {
- base, err := filepath.EvalSymlinks(filepath.Join(b.callingDir, b.Path))
- if err != nil {
- return errors.WithStack(err)
- }
- return filepath.Walk(base, func(path string, info os.FileInfo, err error) error {
- cleanName, err := filepath.Rel(base, path)
- if err != nil {
- cleanName = strings.TrimPrefix(path, base)
- }
- cleanName = filepath.ToSlash(filepath.Clean(cleanName))
- cleanName = strings.TrimPrefix(cleanName, "/")
- cleanName = filepath.FromSlash(cleanName)
- if info == nil || info.IsDir() {
- return nil
- }
-
- file, err := fileFor(path, cleanName)
- if err != nil {
- return err
- }
- return wf(cleanName, file)
- })
- }
- for n := range data[b.Path] {
- f, err := b.find(n)
- if err != nil {
- return err
- }
- err = wf(n, f)
- if err != nil {
- return err
- }
- }
- return nil
-}
-
// Open returns a File using the http.File interface
func (b Box) Open(name string) (http.File, error) {
return b.find(name)
diff --git a/vendor/github.com/gobuffalo/packr/builder/tmpl.go b/vendor/github.com/gobuffalo/packr/builder/tmpl.go
index ffe47c1..2b335ad 100644
--- a/vendor/github.com/gobuffalo/packr/builder/tmpl.go
+++ b/vendor/github.com/gobuffalo/packr/builder/tmpl.go
@@ -1,6 +1,6 @@
package builder
-var tmpl = `// Code generated by github.com/gobuffalo/packr. DO NOT EDIT
+var tmpl = `// Code generated by github.com/gobuffalo/packr. DO NOT EDIT.
package {{.Name}}
@@ -11,7 +11,7 @@ import "github.com/gobuffalo/packr"
func init() {
{{- range $box := .Boxes }}
{{- range .Files }}
- packr.PackJSONBytes("{{$box.Name}}", "{{.Name}}", "{{.Contents}}")
+ packr.PackJSONBytes("{{$box.Name}}", "{{.Name}}", "{{.Contents}}")
{{- end }}
{{- end }}
}
diff --git a/vendor/github.com/gobuffalo/packr/env.go b/vendor/github.com/gobuffalo/packr/env.go
index 2c744e7..c52e73a 100644
--- a/vendor/github.com/gobuffalo/packr/env.go
+++ b/vendor/github.com/gobuffalo/packr/env.go
@@ -1,19 +1,31 @@
package packr
import (
- "go/build"
"os"
+ "os/exec"
+ "path/filepath"
"strings"
+ "sync"
)
+var goPath = filepath.Join(os.Getenv("HOME"), "go")
+
+func init() {
+ var once sync.Once
+ once.Do(func() {
+ cmd := exec.Command("go", "env", "GOPATH")
+ b, err := cmd.CombinedOutput()
+ if err != nil {
+ return
+ }
+ goPath = strings.TrimSpace(string(b))
+ })
+}
+
// GoPath returns the current GOPATH env var
// or if it's missing, the default.
func GoPath() string {
- go_path := strings.Split(os.Getenv("GOPATH"), string(os.PathListSeparator))
- if len(go_path) == 0 || go_path[0] == "" {
- return build.Default.GOPATH
- }
- return go_path[0]
+ return goPath
}
// GoBin returns the current GO_BIN env var
diff --git a/vendor/github.com/gobuffalo/packr/go.mod b/vendor/github.com/gobuffalo/packr/go.mod
index 482c1a8..55ed22e 100644
--- a/vendor/github.com/gobuffalo/packr/go.mod
+++ b/vendor/github.com/gobuffalo/packr/go.mod
@@ -1,3 +1,11 @@
module github.com/gobuffalo/packr
-require github.com/pkg/errors v0.8.0
+require (
+ github.com/markbates/grift v1.0.1
+ github.com/pkg/errors v0.8.0
+ github.com/spf13/cobra v0.0.3
+ github.com/spf13/pflag v1.0.2 // indirect
+ github.com/stretchr/testify v1.2.2
+ golang.org/x/net v0.0.0-20180811021610-c39426892332 // indirect
+ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f
+)
diff --git a/vendor/github.com/gobuffalo/packr/go.sum b/vendor/github.com/gobuffalo/packr/go.sum
new file mode 100644
index 0000000..020cd47
--- /dev/null
+++ b/vendor/github.com/gobuffalo/packr/go.sum
@@ -0,0 +1,22 @@
+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/markbates/grift v1.0.0/go.mod h1:6qyNEZSY8v6duE2tBtO/tPgBvxhT7g7DnQoIYpEyCfw=
+github.com/markbates/grift v1.0.1 h1:n3yUdXi+qdChTRvVCbRmD9iMLjSzv7ainzW3qYTP284=
+github.com/markbates/grift v1.0.1/go.mod h1:aC7s7OfCOzc2WCafmTm7wI3cfGFA/8opYhdTGlIAmmo=
+github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
+github.com/pkg/errors v0.8.0/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/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.2 h1:Fy0orTDgHdbnzHcsOgfCN4LtHf0ec3wwtiwJqwvf3Gc=
+github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+golang.org/x/net v0.0.0-20180808004115-f9ce57c11b24 h1:mEsFm194MmS9vCwxFy+zwu0EU7ZkxxMD1iH++vmGdUY=
+golang.org/x/net v0.0.0-20180808004115-f9ce57c11b24/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180811021610-c39426892332 h1:efGso+ep0DjyCBJPjvoz0HI6UldX4Md2F1rZFe1ir0E=
+golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
diff --git a/vendor/github.com/gobuffalo/packr/packr.go b/vendor/github.com/gobuffalo/packr/packr.go
index d282994..6ccc6c1 100644
--- a/vendor/github.com/gobuffalo/packr/packr.go
+++ b/vendor/github.com/gobuffalo/packr/packr.go
@@ -4,6 +4,8 @@ import (
"bytes"
"compress/gzip"
"encoding/json"
+ "runtime"
+ "strings"
"sync"
)
@@ -53,3 +55,20 @@ func UnpackBytes(box string) {
defer gil.Unlock()
delete(data, box)
}
+
+func osPaths(paths ...string) []string {
+ if runtime.GOOS == "windows" {
+ for i, path := range paths {
+ paths[i] = strings.Replace(path, "/", "\\", -1)
+ }
+ }
+
+ return paths
+}
+
+func osPath(path string) string {
+ if runtime.GOOS == "windows" {
+ return strings.Replace(path, "/", "\\", -1)
+ }
+ return path
+}
diff --git a/vendor/github.com/gobuffalo/packr/walk.go b/vendor/github.com/gobuffalo/packr/walk.go
new file mode 100644
index 0000000..21f2563
--- /dev/null
+++ b/vendor/github.com/gobuffalo/packr/walk.go
@@ -0,0 +1,63 @@
+package packr
+
+import (
+ "os"
+ "path/filepath"
+ "strings"
+
+ "github.com/pkg/errors"
+)
+
+type WalkFunc func(string, File) error
+
+// Walk will traverse the box and call the WalkFunc for each file in the box/folder.
+func (b Box) Walk(wf WalkFunc) error {
+ if data[b.Path] == nil {
+ base, err := filepath.EvalSymlinks(filepath.Join(b.callingDir, b.Path))
+ if err != nil {
+ return errors.WithStack(err)
+ }
+ return filepath.Walk(base, func(path string, info os.FileInfo, err error) error {
+ cleanName, err := filepath.Rel(base, path)
+ if err != nil {
+ cleanName = strings.TrimPrefix(path, base)
+ }
+ cleanName = filepath.ToSlash(filepath.Clean(cleanName))
+ cleanName = strings.TrimPrefix(cleanName, "/")
+ cleanName = filepath.FromSlash(cleanName)
+ if info == nil || info.IsDir() {
+ return nil
+ }
+
+ file, err := fileFor(path, cleanName)
+ if err != nil {
+ return err
+ }
+ return wf(cleanName, file)
+ })
+ }
+ for n := range data[b.Path] {
+ f, err := b.find(n)
+ if err != nil {
+ return err
+ }
+ err = wf(n, f)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// WalkPrefix will call box.Walk and call the WalkFunc when it finds paths that have a matching prefix
+func (b Box) WalkPrefix(prefix string, wf WalkFunc) error {
+ opre := osPath(prefix)
+ return b.Walk(func(path string, f File) error {
+ if strings.HasPrefix(osPath(path), opre) {
+ if err := wf(path, f); err != nil {
+ return errors.WithStack(err)
+ }
+ }
+ return nil
+ })
+}
diff --git a/vendor/github.com/gogo/protobuf/LICENSE b/vendor/github.com/gogo/protobuf/LICENSE
new file mode 100644
index 0000000..f57de90
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/LICENSE
@@ -0,0 +1,35 @@
+Copyright (c) 2013, The GoGo Authors. All rights reserved.
+
+Protocol Buffers for Go with Gadgets
+
+Go support for Protocol Buffers - Google's data interchange format
+
+Copyright 2010 The Go Authors. All rights reserved.
+https://github.com/golang/protobuf
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/vendor/github.com/gogo/protobuf/proto/Makefile b/vendor/github.com/gogo/protobuf/proto/Makefile
new file mode 100644
index 0000000..00d65f3
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/Makefile
@@ -0,0 +1,43 @@
+# Go support for Protocol Buffers - Google's data interchange format
+#
+# Copyright 2010 The Go Authors. All rights reserved.
+# https://github.com/golang/protobuf
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+install:
+ go install
+
+test: install generate-test-pbs
+ go test
+
+
+generate-test-pbs:
+ make install
+ make -C test_proto
+ make -C proto3_proto
+ make
diff --git a/vendor/github.com/gogo/protobuf/proto/clone.go b/vendor/github.com/gogo/protobuf/proto/clone.go
new file mode 100644
index 0000000..a26b046
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/clone.go
@@ -0,0 +1,258 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2011 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Protocol buffer deep copy and merge.
+// TODO: RawMessage.
+
+package proto
+
+import (
+ "fmt"
+ "log"
+ "reflect"
+ "strings"
+)
+
+// Clone returns a deep copy of a protocol buffer.
+func Clone(src Message) Message {
+ in := reflect.ValueOf(src)
+ if in.IsNil() {
+ return src
+ }
+ out := reflect.New(in.Type().Elem())
+ dst := out.Interface().(Message)
+ Merge(dst, src)
+ return dst
+}
+
+// Merger is the interface representing objects that can merge messages of the same type.
+type Merger interface {
+ // Merge merges src into this message.
+ // Required and optional fields that are set in src will be set to that value in dst.
+ // Elements of repeated fields will be appended.
+ //
+ // Merge may panic if called with a different argument type than the receiver.
+ Merge(src Message)
+}
+
+// generatedMerger is the custom merge method that generated protos will have.
+// We must add this method since a generate Merge method will conflict with
+// many existing protos that have a Merge data field already defined.
+type generatedMerger interface {
+ XXX_Merge(src Message)
+}
+
+// Merge merges src into dst.
+// Required and optional fields that are set in src will be set to that value in dst.
+// Elements of repeated fields will be appended.
+// Merge panics if src and dst are not the same type, or if dst is nil.
+func Merge(dst, src Message) {
+ if m, ok := dst.(Merger); ok {
+ m.Merge(src)
+ return
+ }
+
+ in := reflect.ValueOf(src)
+ out := reflect.ValueOf(dst)
+ if out.IsNil() {
+ panic("proto: nil destination")
+ }
+ if in.Type() != out.Type() {
+ panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src))
+ }
+ if in.IsNil() {
+ return // Merge from nil src is a noop
+ }
+ if m, ok := dst.(generatedMerger); ok {
+ m.XXX_Merge(src)
+ return
+ }
+ mergeStruct(out.Elem(), in.Elem())
+}
+
+func mergeStruct(out, in reflect.Value) {
+ sprop := GetProperties(in.Type())
+ for i := 0; i < in.NumField(); i++ {
+ f := in.Type().Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i])
+ }
+
+ if emIn, ok := in.Addr().Interface().(extensionsBytes); ok {
+ emOut := out.Addr().Interface().(extensionsBytes)
+ bIn := emIn.GetExtensions()
+ bOut := emOut.GetExtensions()
+ *bOut = append(*bOut, *bIn...)
+ } else if emIn, err := extendable(in.Addr().Interface()); err == nil {
+ emOut, _ := extendable(out.Addr().Interface())
+ mIn, muIn := emIn.extensionsRead()
+ if mIn != nil {
+ mOut := emOut.extensionsWrite()
+ muIn.Lock()
+ mergeExtension(mOut, mIn)
+ muIn.Unlock()
+ }
+ }
+
+ uf := in.FieldByName("XXX_unrecognized")
+ if !uf.IsValid() {
+ return
+ }
+ uin := uf.Bytes()
+ if len(uin) > 0 {
+ out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...))
+ }
+}
+
+// mergeAny performs a merge between two values of the same type.
+// viaPtr indicates whether the values were indirected through a pointer (implying proto2).
+// prop is set if this is a struct field (it may be nil).
+func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) {
+ if in.Type() == protoMessageType {
+ if !in.IsNil() {
+ if out.IsNil() {
+ out.Set(reflect.ValueOf(Clone(in.Interface().(Message))))
+ } else {
+ Merge(out.Interface().(Message), in.Interface().(Message))
+ }
+ }
+ return
+ }
+ switch in.Kind() {
+ case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,
+ reflect.String, reflect.Uint32, reflect.Uint64:
+ if !viaPtr && isProto3Zero(in) {
+ return
+ }
+ out.Set(in)
+ case reflect.Interface:
+ // Probably a oneof field; copy non-nil values.
+ if in.IsNil() {
+ return
+ }
+ // Allocate destination if it is not set, or set to a different type.
+ // Otherwise we will merge as normal.
+ if out.IsNil() || out.Elem().Type() != in.Elem().Type() {
+ out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T)
+ }
+ mergeAny(out.Elem(), in.Elem(), false, nil)
+ case reflect.Map:
+ if in.Len() == 0 {
+ return
+ }
+ if out.IsNil() {
+ out.Set(reflect.MakeMap(in.Type()))
+ }
+ // For maps with value types of *T or []byte we need to deep copy each value.
+ elemKind := in.Type().Elem().Kind()
+ for _, key := range in.MapKeys() {
+ var val reflect.Value
+ switch elemKind {
+ case reflect.Ptr:
+ val = reflect.New(in.Type().Elem().Elem())
+ mergeAny(val, in.MapIndex(key), false, nil)
+ case reflect.Slice:
+ val = in.MapIndex(key)
+ val = reflect.ValueOf(append([]byte{}, val.Bytes()...))
+ default:
+ val = in.MapIndex(key)
+ }
+ out.SetMapIndex(key, val)
+ }
+ case reflect.Ptr:
+ if in.IsNil() {
+ return
+ }
+ if out.IsNil() {
+ out.Set(reflect.New(in.Elem().Type()))
+ }
+ mergeAny(out.Elem(), in.Elem(), true, nil)
+ case reflect.Slice:
+ if in.IsNil() {
+ return
+ }
+ if in.Type().Elem().Kind() == reflect.Uint8 {
+ // []byte is a scalar bytes field, not a repeated field.
+
+ // Edge case: if this is in a proto3 message, a zero length
+ // bytes field is considered the zero value, and should not
+ // be merged.
+ if prop != nil && prop.proto3 && in.Len() == 0 {
+ return
+ }
+
+ // Make a deep copy.
+ // Append to []byte{} instead of []byte(nil) so that we never end up
+ // with a nil result.
+ out.SetBytes(append([]byte{}, in.Bytes()...))
+ return
+ }
+ n := in.Len()
+ if out.IsNil() {
+ out.Set(reflect.MakeSlice(in.Type(), 0, n))
+ }
+ switch in.Type().Elem().Kind() {
+ case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,
+ reflect.String, reflect.Uint32, reflect.Uint64:
+ out.Set(reflect.AppendSlice(out, in))
+ default:
+ for i := 0; i < n; i++ {
+ x := reflect.Indirect(reflect.New(in.Type().Elem()))
+ mergeAny(x, in.Index(i), false, nil)
+ out.Set(reflect.Append(out, x))
+ }
+ }
+ case reflect.Struct:
+ mergeStruct(out, in)
+ default:
+ // unknown type, so not a protocol buffer
+ log.Printf("proto: don't know how to copy %v", in)
+ }
+}
+
+func mergeExtension(out, in map[int32]Extension) {
+ for extNum, eIn := range in {
+ eOut := Extension{desc: eIn.desc}
+ if eIn.value != nil {
+ v := reflect.New(reflect.TypeOf(eIn.value)).Elem()
+ mergeAny(v, reflect.ValueOf(eIn.value), false, nil)
+ eOut.value = v.Interface()
+ }
+ if eIn.enc != nil {
+ eOut.enc = make([]byte, len(eIn.enc))
+ copy(eOut.enc, eIn.enc)
+ }
+
+ out[extNum] = eOut
+ }
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/custom_gogo.go b/vendor/github.com/gogo/protobuf/proto/custom_gogo.go
new file mode 100644
index 0000000..2455248
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/custom_gogo.go
@@ -0,0 +1,39 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import "reflect"
+
+type custom interface {
+ Marshal() ([]byte, error)
+ Unmarshal(data []byte) error
+ Size() int
+}
+
+var customType = reflect.TypeOf((*custom)(nil)).Elem()
diff --git a/vendor/github.com/gogo/protobuf/proto/decode.go b/vendor/github.com/gogo/protobuf/proto/decode.go
new file mode 100644
index 0000000..d9aa3c4
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/decode.go
@@ -0,0 +1,428 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+/*
+ * Routines for decoding protocol buffer data to construct in-memory representations.
+ */
+
+import (
+ "errors"
+ "fmt"
+ "io"
+)
+
+// errOverflow is returned when an integer is too large to be represented.
+var errOverflow = errors.New("proto: integer overflow")
+
+// ErrInternalBadWireType is returned by generated code when an incorrect
+// wire type is encountered. It does not get returned to user code.
+var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof")
+
+// DecodeVarint reads a varint-encoded integer from the slice.
+// It returns the integer and the number of bytes consumed, or
+// zero if there is not enough.
+// This is the format for the
+// int32, int64, uint32, uint64, bool, and enum
+// protocol buffer types.
+func DecodeVarint(buf []byte) (x uint64, n int) {
+ for shift := uint(0); shift < 64; shift += 7 {
+ if n >= len(buf) {
+ return 0, 0
+ }
+ b := uint64(buf[n])
+ n++
+ x |= (b & 0x7F) << shift
+ if (b & 0x80) == 0 {
+ return x, n
+ }
+ }
+
+ // The number is too large to represent in a 64-bit value.
+ return 0, 0
+}
+
+func (p *Buffer) decodeVarintSlow() (x uint64, err error) {
+ i := p.index
+ l := len(p.buf)
+
+ for shift := uint(0); shift < 64; shift += 7 {
+ if i >= l {
+ err = io.ErrUnexpectedEOF
+ return
+ }
+ b := p.buf[i]
+ i++
+ x |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ p.index = i
+ return
+ }
+ }
+
+ // The number is too large to represent in a 64-bit value.
+ err = errOverflow
+ return
+}
+
+// DecodeVarint reads a varint-encoded integer from the Buffer.
+// This is the format for the
+// int32, int64, uint32, uint64, bool, and enum
+// protocol buffer types.
+func (p *Buffer) DecodeVarint() (x uint64, err error) {
+ i := p.index
+ buf := p.buf
+
+ if i >= len(buf) {
+ return 0, io.ErrUnexpectedEOF
+ } else if buf[i] < 0x80 {
+ p.index++
+ return uint64(buf[i]), nil
+ } else if len(buf)-i < 10 {
+ return p.decodeVarintSlow()
+ }
+
+ var b uint64
+ // we already checked the first byte
+ x = uint64(buf[i]) - 0x80
+ i++
+
+ b = uint64(buf[i])
+ i++
+ x += b << 7
+ if b&0x80 == 0 {
+ goto done
+ }
+ x -= 0x80 << 7
+
+ b = uint64(buf[i])
+ i++
+ x += b << 14
+ if b&0x80 == 0 {
+ goto done
+ }
+ x -= 0x80 << 14
+
+ b = uint64(buf[i])
+ i++
+ x += b << 21
+ if b&0x80 == 0 {
+ goto done
+ }
+ x -= 0x80 << 21
+
+ b = uint64(buf[i])
+ i++
+ x += b << 28
+ if b&0x80 == 0 {
+ goto done
+ }
+ x -= 0x80 << 28
+
+ b = uint64(buf[i])
+ i++
+ x += b << 35
+ if b&0x80 == 0 {
+ goto done
+ }
+ x -= 0x80 << 35
+
+ b = uint64(buf[i])
+ i++
+ x += b << 42
+ if b&0x80 == 0 {
+ goto done
+ }
+ x -= 0x80 << 42
+
+ b = uint64(buf[i])
+ i++
+ x += b << 49
+ if b&0x80 == 0 {
+ goto done
+ }
+ x -= 0x80 << 49
+
+ b = uint64(buf[i])
+ i++
+ x += b << 56
+ if b&0x80 == 0 {
+ goto done
+ }
+ x -= 0x80 << 56
+
+ b = uint64(buf[i])
+ i++
+ x += b << 63
+ if b&0x80 == 0 {
+ goto done
+ }
+ // x -= 0x80 << 63 // Always zero.
+
+ return 0, errOverflow
+
+done:
+ p.index = i
+ return x, nil
+}
+
+// DecodeFixed64 reads a 64-bit integer from the Buffer.
+// This is the format for the
+// fixed64, sfixed64, and double protocol buffer types.
+func (p *Buffer) DecodeFixed64() (x uint64, err error) {
+ // x, err already 0
+ i := p.index + 8
+ if i < 0 || i > len(p.buf) {
+ err = io.ErrUnexpectedEOF
+ return
+ }
+ p.index = i
+
+ x = uint64(p.buf[i-8])
+ x |= uint64(p.buf[i-7]) << 8
+ x |= uint64(p.buf[i-6]) << 16
+ x |= uint64(p.buf[i-5]) << 24
+ x |= uint64(p.buf[i-4]) << 32
+ x |= uint64(p.buf[i-3]) << 40
+ x |= uint64(p.buf[i-2]) << 48
+ x |= uint64(p.buf[i-1]) << 56
+ return
+}
+
+// DecodeFixed32 reads a 32-bit integer from the Buffer.
+// This is the format for the
+// fixed32, sfixed32, and float protocol buffer types.
+func (p *Buffer) DecodeFixed32() (x uint64, err error) {
+ // x, err already 0
+ i := p.index + 4
+ if i < 0 || i > len(p.buf) {
+ err = io.ErrUnexpectedEOF
+ return
+ }
+ p.index = i
+
+ x = uint64(p.buf[i-4])
+ x |= uint64(p.buf[i-3]) << 8
+ x |= uint64(p.buf[i-2]) << 16
+ x |= uint64(p.buf[i-1]) << 24
+ return
+}
+
+// DecodeZigzag64 reads a zigzag-encoded 64-bit integer
+// from the Buffer.
+// This is the format used for the sint64 protocol buffer type.
+func (p *Buffer) DecodeZigzag64() (x uint64, err error) {
+ x, err = p.DecodeVarint()
+ if err != nil {
+ return
+ }
+ x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63)
+ return
+}
+
+// DecodeZigzag32 reads a zigzag-encoded 32-bit integer
+// from the Buffer.
+// This is the format used for the sint32 protocol buffer type.
+func (p *Buffer) DecodeZigzag32() (x uint64, err error) {
+ x, err = p.DecodeVarint()
+ if err != nil {
+ return
+ }
+ x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31))
+ return
+}
+
+// DecodeRawBytes reads a count-delimited byte buffer from the Buffer.
+// This is the format used for the bytes protocol buffer
+// type and for embedded messages.
+func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) {
+ n, err := p.DecodeVarint()
+ if err != nil {
+ return nil, err
+ }
+
+ nb := int(n)
+ if nb < 0 {
+ return nil, fmt.Errorf("proto: bad byte length %d", nb)
+ }
+ end := p.index + nb
+ if end < p.index || end > len(p.buf) {
+ return nil, io.ErrUnexpectedEOF
+ }
+
+ if !alloc {
+ // todo: check if can get more uses of alloc=false
+ buf = p.buf[p.index:end]
+ p.index += nb
+ return
+ }
+
+ buf = make([]byte, nb)
+ copy(buf, p.buf[p.index:])
+ p.index += nb
+ return
+}
+
+// DecodeStringBytes reads an encoded string from the Buffer.
+// This is the format used for the proto2 string type.
+func (p *Buffer) DecodeStringBytes() (s string, err error) {
+ buf, err := p.DecodeRawBytes(false)
+ if err != nil {
+ return
+ }
+ return string(buf), nil
+}
+
+// Unmarshaler is the interface representing objects that can
+// unmarshal themselves. The argument points to data that may be
+// overwritten, so implementations should not keep references to the
+// buffer.
+// Unmarshal implementations should not clear the receiver.
+// Any unmarshaled data should be merged into the receiver.
+// Callers of Unmarshal that do not want to retain existing data
+// should Reset the receiver before calling Unmarshal.
+type Unmarshaler interface {
+ Unmarshal([]byte) error
+}
+
+// newUnmarshaler is the interface representing objects that can
+// unmarshal themselves. The semantics are identical to Unmarshaler.
+//
+// This exists to support protoc-gen-go generated messages.
+// The proto package will stop type-asserting to this interface in the future.
+//
+// DO NOT DEPEND ON THIS.
+type newUnmarshaler interface {
+ XXX_Unmarshal([]byte) error
+}
+
+// Unmarshal parses the protocol buffer representation in buf and places the
+// decoded result in pb. If the struct underlying pb does not match
+// the data in buf, the results can be unpredictable.
+//
+// Unmarshal resets pb before starting to unmarshal, so any
+// existing data in pb is always removed. Use UnmarshalMerge
+// to preserve and append to existing data.
+func Unmarshal(buf []byte, pb Message) error {
+ pb.Reset()
+ if u, ok := pb.(newUnmarshaler); ok {
+ return u.XXX_Unmarshal(buf)
+ }
+ if u, ok := pb.(Unmarshaler); ok {
+ return u.Unmarshal(buf)
+ }
+ return NewBuffer(buf).Unmarshal(pb)
+}
+
+// UnmarshalMerge parses the protocol buffer representation in buf and
+// writes the decoded result to pb. If the struct underlying pb does not match
+// the data in buf, the results can be unpredictable.
+//
+// UnmarshalMerge merges into existing data in pb.
+// Most code should use Unmarshal instead.
+func UnmarshalMerge(buf []byte, pb Message) error {
+ if u, ok := pb.(newUnmarshaler); ok {
+ return u.XXX_Unmarshal(buf)
+ }
+ if u, ok := pb.(Unmarshaler); ok {
+ // NOTE: The history of proto have unfortunately been inconsistent
+ // whether Unmarshaler should or should not implicitly clear itself.
+ // Some implementations do, most do not.
+ // Thus, calling this here may or may not do what people want.
+ //
+ // See https://github.com/golang/protobuf/issues/424
+ return u.Unmarshal(buf)
+ }
+ return NewBuffer(buf).Unmarshal(pb)
+}
+
+// DecodeMessage reads a count-delimited message from the Buffer.
+func (p *Buffer) DecodeMessage(pb Message) error {
+ enc, err := p.DecodeRawBytes(false)
+ if err != nil {
+ return err
+ }
+ return NewBuffer(enc).Unmarshal(pb)
+}
+
+// DecodeGroup reads a tag-delimited group from the Buffer.
+// StartGroup tag is already consumed. This function consumes
+// EndGroup tag.
+func (p *Buffer) DecodeGroup(pb Message) error {
+ b := p.buf[p.index:]
+ x, y := findEndGroup(b)
+ if x < 0 {
+ return io.ErrUnexpectedEOF
+ }
+ err := Unmarshal(b[:x], pb)
+ p.index += y
+ return err
+}
+
+// Unmarshal parses the protocol buffer representation in the
+// Buffer and places the decoded result in pb. If the struct
+// underlying pb does not match the data in the buffer, the results can be
+// unpredictable.
+//
+// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal.
+func (p *Buffer) Unmarshal(pb Message) error {
+ // If the object can unmarshal itself, let it.
+ if u, ok := pb.(newUnmarshaler); ok {
+ err := u.XXX_Unmarshal(p.buf[p.index:])
+ p.index = len(p.buf)
+ return err
+ }
+ if u, ok := pb.(Unmarshaler); ok {
+ // NOTE: The history of proto have unfortunately been inconsistent
+ // whether Unmarshaler should or should not implicitly clear itself.
+ // Some implementations do, most do not.
+ // Thus, calling this here may or may not do what people want.
+ //
+ // See https://github.com/golang/protobuf/issues/424
+ err := u.Unmarshal(p.buf[p.index:])
+ p.index = len(p.buf)
+ return err
+ }
+
+ // Slow workaround for messages that aren't Unmarshalers.
+ // This includes some hand-coded .pb.go files and
+ // bootstrap protos.
+ // TODO: fix all of those and then add Unmarshal to
+ // the Message interface. Then:
+ // The cast above and code below can be deleted.
+ // The old unmarshaler can be deleted.
+ // Clients can call Unmarshal directly (can already do that, actually).
+ var info InternalMessageInfo
+ err := info.Unmarshal(pb, p.buf[p.index:])
+ p.index = len(p.buf)
+ return err
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/discard.go b/vendor/github.com/gogo/protobuf/proto/discard.go
new file mode 100644
index 0000000..fe1bd7d
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/discard.go
@@ -0,0 +1,350 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2017 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "fmt"
+ "reflect"
+ "strings"
+ "sync"
+ "sync/atomic"
+)
+
+type generatedDiscarder interface {
+ XXX_DiscardUnknown()
+}
+
+// DiscardUnknown recursively discards all unknown fields from this message
+// and all embedded messages.
+//
+// When unmarshaling a message with unrecognized fields, the tags and values
+// of such fields are preserved in the Message. This allows a later call to
+// marshal to be able to produce a message that continues to have those
+// unrecognized fields. To avoid this, DiscardUnknown is used to
+// explicitly clear the unknown fields after unmarshaling.
+//
+// For proto2 messages, the unknown fields of message extensions are only
+// discarded from messages that have been accessed via GetExtension.
+func DiscardUnknown(m Message) {
+ if m, ok := m.(generatedDiscarder); ok {
+ m.XXX_DiscardUnknown()
+ return
+ }
+ // TODO: Dynamically populate a InternalMessageInfo for legacy messages,
+ // but the master branch has no implementation for InternalMessageInfo,
+ // so it would be more work to replicate that approach.
+ discardLegacy(m)
+}
+
+// DiscardUnknown recursively discards all unknown fields.
+func (a *InternalMessageInfo) DiscardUnknown(m Message) {
+ di := atomicLoadDiscardInfo(&a.discard)
+ if di == nil {
+ di = getDiscardInfo(reflect.TypeOf(m).Elem())
+ atomicStoreDiscardInfo(&a.discard, di)
+ }
+ di.discard(toPointer(&m))
+}
+
+type discardInfo struct {
+ typ reflect.Type
+
+ initialized int32 // 0: only typ is valid, 1: everything is valid
+ lock sync.Mutex
+
+ fields []discardFieldInfo
+ unrecognized field
+}
+
+type discardFieldInfo struct {
+ field field // Offset of field, guaranteed to be valid
+ discard func(src pointer)
+}
+
+var (
+ discardInfoMap = map[reflect.Type]*discardInfo{}
+ discardInfoLock sync.Mutex
+)
+
+func getDiscardInfo(t reflect.Type) *discardInfo {
+ discardInfoLock.Lock()
+ defer discardInfoLock.Unlock()
+ di := discardInfoMap[t]
+ if di == nil {
+ di = &discardInfo{typ: t}
+ discardInfoMap[t] = di
+ }
+ return di
+}
+
+func (di *discardInfo) discard(src pointer) {
+ if src.isNil() {
+ return // Nothing to do.
+ }
+
+ if atomic.LoadInt32(&di.initialized) == 0 {
+ di.computeDiscardInfo()
+ }
+
+ for _, fi := range di.fields {
+ sfp := src.offset(fi.field)
+ fi.discard(sfp)
+ }
+
+ // For proto2 messages, only discard unknown fields in message extensions
+ // that have been accessed via GetExtension.
+ if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil {
+ // Ignore lock since DiscardUnknown is not concurrency safe.
+ emm, _ := em.extensionsRead()
+ for _, mx := range emm {
+ if m, ok := mx.value.(Message); ok {
+ DiscardUnknown(m)
+ }
+ }
+ }
+
+ if di.unrecognized.IsValid() {
+ *src.offset(di.unrecognized).toBytes() = nil
+ }
+}
+
+func (di *discardInfo) computeDiscardInfo() {
+ di.lock.Lock()
+ defer di.lock.Unlock()
+ if di.initialized != 0 {
+ return
+ }
+ t := di.typ
+ n := t.NumField()
+
+ for i := 0; i < n; i++ {
+ f := t.Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+
+ dfi := discardFieldInfo{field: toField(&f)}
+ tf := f.Type
+
+ // Unwrap tf to get its most basic type.
+ var isPointer, isSlice bool
+ if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+ isSlice = true
+ tf = tf.Elem()
+ }
+ if tf.Kind() == reflect.Ptr {
+ isPointer = true
+ tf = tf.Elem()
+ }
+ if isPointer && isSlice && tf.Kind() != reflect.Struct {
+ panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name))
+ }
+
+ switch tf.Kind() {
+ case reflect.Struct:
+ switch {
+ case !isPointer:
+ panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name))
+ case isSlice: // E.g., []*pb.T
+ discardInfo := getDiscardInfo(tf)
+ dfi.discard = func(src pointer) {
+ sps := src.getPointerSlice()
+ for _, sp := range sps {
+ if !sp.isNil() {
+ discardInfo.discard(sp)
+ }
+ }
+ }
+ default: // E.g., *pb.T
+ discardInfo := getDiscardInfo(tf)
+ dfi.discard = func(src pointer) {
+ sp := src.getPointer()
+ if !sp.isNil() {
+ discardInfo.discard(sp)
+ }
+ }
+ }
+ case reflect.Map:
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name))
+ default: // E.g., map[K]V
+ if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T)
+ dfi.discard = func(src pointer) {
+ sm := src.asPointerTo(tf).Elem()
+ if sm.Len() == 0 {
+ return
+ }
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ DiscardUnknown(val.Interface().(Message))
+ }
+ }
+ } else {
+ dfi.discard = func(pointer) {} // Noop
+ }
+ }
+ case reflect.Interface:
+ // Must be oneof field.
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name))
+ default: // E.g., interface{}
+ // TODO: Make this faster?
+ dfi.discard = func(src pointer) {
+ su := src.asPointerTo(tf).Elem()
+ if !su.IsNil() {
+ sv := su.Elem().Elem().Field(0)
+ if sv.Kind() == reflect.Ptr && sv.IsNil() {
+ return
+ }
+ switch sv.Type().Kind() {
+ case reflect.Ptr: // Proto struct (e.g., *T)
+ DiscardUnknown(sv.Interface().(Message))
+ }
+ }
+ }
+ }
+ default:
+ continue
+ }
+ di.fields = append(di.fields, dfi)
+ }
+
+ di.unrecognized = invalidField
+ if f, ok := t.FieldByName("XXX_unrecognized"); ok {
+ if f.Type != reflect.TypeOf([]byte{}) {
+ panic("expected XXX_unrecognized to be of type []byte")
+ }
+ di.unrecognized = toField(&f)
+ }
+
+ atomic.StoreInt32(&di.initialized, 1)
+}
+
+func discardLegacy(m Message) {
+ v := reflect.ValueOf(m)
+ if v.Kind() != reflect.Ptr || v.IsNil() {
+ return
+ }
+ v = v.Elem()
+ if v.Kind() != reflect.Struct {
+ return
+ }
+ t := v.Type()
+
+ for i := 0; i < v.NumField(); i++ {
+ f := t.Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ vf := v.Field(i)
+ tf := f.Type
+
+ // Unwrap tf to get its most basic type.
+ var isPointer, isSlice bool
+ if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+ isSlice = true
+ tf = tf.Elem()
+ }
+ if tf.Kind() == reflect.Ptr {
+ isPointer = true
+ tf = tf.Elem()
+ }
+ if isPointer && isSlice && tf.Kind() != reflect.Struct {
+ panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name))
+ }
+
+ switch tf.Kind() {
+ case reflect.Struct:
+ switch {
+ case !isPointer:
+ panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name))
+ case isSlice: // E.g., []*pb.T
+ for j := 0; j < vf.Len(); j++ {
+ discardLegacy(vf.Index(j).Interface().(Message))
+ }
+ default: // E.g., *pb.T
+ discardLegacy(vf.Interface().(Message))
+ }
+ case reflect.Map:
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name))
+ default: // E.g., map[K]V
+ tv := vf.Type().Elem()
+ if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T)
+ for _, key := range vf.MapKeys() {
+ val := vf.MapIndex(key)
+ discardLegacy(val.Interface().(Message))
+ }
+ }
+ }
+ case reflect.Interface:
+ // Must be oneof field.
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name))
+ default: // E.g., test_proto.isCommunique_Union interface
+ if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" {
+ vf = vf.Elem() // E.g., *test_proto.Communique_Msg
+ if !vf.IsNil() {
+ vf = vf.Elem() // E.g., test_proto.Communique_Msg
+ vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value
+ if vf.Kind() == reflect.Ptr {
+ discardLegacy(vf.Interface().(Message))
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() {
+ if vf.Type() != reflect.TypeOf([]byte{}) {
+ panic("expected XXX_unrecognized to be of type []byte")
+ }
+ vf.Set(reflect.ValueOf([]byte(nil)))
+ }
+
+ // For proto2 messages, only discard unknown fields in message extensions
+ // that have been accessed via GetExtension.
+ if em, err := extendable(m); err == nil {
+ // Ignore lock since discardLegacy is not concurrency safe.
+ emm, _ := em.extensionsRead()
+ for _, mx := range emm {
+ if m, ok := mx.value.(Message); ok {
+ discardLegacy(m)
+ }
+ }
+ }
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/duration.go b/vendor/github.com/gogo/protobuf/proto/duration.go
new file mode 100644
index 0000000..93464c9
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/duration.go
@@ -0,0 +1,100 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+// This file implements conversions between google.protobuf.Duration
+// and time.Duration.
+
+import (
+ "errors"
+ "fmt"
+ "time"
+)
+
+const (
+ // Range of a Duration in seconds, as specified in
+ // google/protobuf/duration.proto. This is about 10,000 years in seconds.
+ maxSeconds = int64(10000 * 365.25 * 24 * 60 * 60)
+ minSeconds = -maxSeconds
+)
+
+// validateDuration determines whether the Duration is valid according to the
+// definition in google/protobuf/duration.proto. A valid Duration
+// may still be too large to fit into a time.Duration (the range of Duration
+// is about 10,000 years, and the range of time.Duration is about 290).
+func validateDuration(d *duration) error {
+ if d == nil {
+ return errors.New("duration: nil Duration")
+ }
+ if d.Seconds < minSeconds || d.Seconds > maxSeconds {
+ return fmt.Errorf("duration: %#v: seconds out of range", d)
+ }
+ if d.Nanos <= -1e9 || d.Nanos >= 1e9 {
+ return fmt.Errorf("duration: %#v: nanos out of range", d)
+ }
+ // Seconds and Nanos must have the same sign, unless d.Nanos is zero.
+ if (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) {
+ return fmt.Errorf("duration: %#v: seconds and nanos have different signs", d)
+ }
+ return nil
+}
+
+// DurationFromProto converts a Duration to a time.Duration. DurationFromProto
+// returns an error if the Duration is invalid or is too large to be
+// represented in a time.Duration.
+func durationFromProto(p *duration) (time.Duration, error) {
+ if err := validateDuration(p); err != nil {
+ return 0, err
+ }
+ d := time.Duration(p.Seconds) * time.Second
+ if int64(d/time.Second) != p.Seconds {
+ return 0, fmt.Errorf("duration: %#v is out of range for time.Duration", p)
+ }
+ if p.Nanos != 0 {
+ d += time.Duration(p.Nanos)
+ if (d < 0) != (p.Nanos < 0) {
+ return 0, fmt.Errorf("duration: %#v is out of range for time.Duration", p)
+ }
+ }
+ return d, nil
+}
+
+// DurationProto converts a time.Duration to a Duration.
+func durationProto(d time.Duration) *duration {
+ nanos := d.Nanoseconds()
+ secs := nanos / 1e9
+ nanos -= secs * 1e9
+ return &duration{
+ Seconds: secs,
+ Nanos: int32(nanos),
+ }
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/duration_gogo.go b/vendor/github.com/gogo/protobuf/proto/duration_gogo.go
new file mode 100644
index 0000000..e748e17
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/duration_gogo.go
@@ -0,0 +1,49 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2016, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "reflect"
+ "time"
+)
+
+var durationType = reflect.TypeOf((*time.Duration)(nil)).Elem()
+
+type duration struct {
+ Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
+ Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
+}
+
+func (m *duration) Reset() { *m = duration{} }
+func (*duration) ProtoMessage() {}
+func (*duration) String() string { return "duration<string>" }
+
+func init() {
+ RegisterType((*duration)(nil), "gogo.protobuf.proto.duration")
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/encode.go b/vendor/github.com/gogo/protobuf/proto/encode.go
new file mode 100644
index 0000000..4c35d33
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/encode.go
@@ -0,0 +1,218 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+/*
+ * Routines for encoding data into the wire format for protocol buffers.
+ */
+
+import (
+ "errors"
+ "fmt"
+ "reflect"
+)
+
+// RequiredNotSetError is an error type returned by either Marshal or Unmarshal.
+// Marshal reports this when a required field is not initialized.
+// Unmarshal reports this when a required field is missing from the wire data.
+type RequiredNotSetError struct {
+ field string
+}
+
+func (e *RequiredNotSetError) Error() string {
+ if e.field == "" {
+ return fmt.Sprintf("proto: required field not set")
+ }
+ return fmt.Sprintf("proto: required field %q not set", e.field)
+}
+
+var (
+ // errRepeatedHasNil is the error returned if Marshal is called with
+ // a struct with a repeated field containing a nil element.
+ errRepeatedHasNil = errors.New("proto: repeated field has nil element")
+
+ // errOneofHasNil is the error returned if Marshal is called with
+ // a struct with a oneof field containing a nil element.
+ errOneofHasNil = errors.New("proto: oneof field has nil value")
+
+ // ErrNil is the error returned if Marshal is called with nil.
+ ErrNil = errors.New("proto: Marshal called with nil")
+
+ // ErrTooLarge is the error returned if Marshal is called with a
+ // message that encodes to >2GB.
+ ErrTooLarge = errors.New("proto: message encodes to over 2 GB")
+)
+
+// The fundamental encoders that put bytes on the wire.
+// Those that take integer types all accept uint64 and are
+// therefore of type valueEncoder.
+
+const maxVarintBytes = 10 // maximum length of a varint
+
+// EncodeVarint returns the varint encoding of x.
+// This is the format for the
+// int32, int64, uint32, uint64, bool, and enum
+// protocol buffer types.
+// Not used by the package itself, but helpful to clients
+// wishing to use the same encoding.
+func EncodeVarint(x uint64) []byte {
+ var buf [maxVarintBytes]byte
+ var n int
+ for n = 0; x > 127; n++ {
+ buf[n] = 0x80 | uint8(x&0x7F)
+ x >>= 7
+ }
+ buf[n] = uint8(x)
+ n++
+ return buf[0:n]
+}
+
+// EncodeVarint writes a varint-encoded integer to the Buffer.
+// This is the format for the
+// int32, int64, uint32, uint64, bool, and enum
+// protocol buffer types.
+func (p *Buffer) EncodeVarint(x uint64) error {
+ for x >= 1<<7 {
+ p.buf = append(p.buf, uint8(x&0x7f|0x80))
+ x >>= 7
+ }
+ p.buf = append(p.buf, uint8(x))
+ return nil
+}
+
+// SizeVarint returns the varint encoding size of an integer.
+func SizeVarint(x uint64) int {
+ switch {
+ case x < 1<<7:
+ return 1
+ case x < 1<<14:
+ return 2
+ case x < 1<<21:
+ return 3
+ case x < 1<<28:
+ return 4
+ case x < 1<<35:
+ return 5
+ case x < 1<<42:
+ return 6
+ case x < 1<<49:
+ return 7
+ case x < 1<<56:
+ return 8
+ case x < 1<<63:
+ return 9
+ }
+ return 10
+}
+
+// EncodeFixed64 writes a 64-bit integer to the Buffer.
+// This is the format for the
+// fixed64, sfixed64, and double protocol buffer types.
+func (p *Buffer) EncodeFixed64(x uint64) error {
+ p.buf = append(p.buf,
+ uint8(x),
+ uint8(x>>8),
+ uint8(x>>16),
+ uint8(x>>24),
+ uint8(x>>32),
+ uint8(x>>40),
+ uint8(x>>48),
+ uint8(x>>56))
+ return nil
+}
+
+// EncodeFixed32 writes a 32-bit integer to the Buffer.
+// This is the format for the
+// fixed32, sfixed32, and float protocol buffer types.
+func (p *Buffer) EncodeFixed32(x uint64) error {
+ p.buf = append(p.buf,
+ uint8(x),
+ uint8(x>>8),
+ uint8(x>>16),
+ uint8(x>>24))
+ return nil
+}
+
+// EncodeZigzag64 writes a zigzag-encoded 64-bit integer
+// to the Buffer.
+// This is the format used for the sint64 protocol buffer type.
+func (p *Buffer) EncodeZigzag64(x uint64) error {
+ // use signed number to get arithmetic right shift.
+ return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63))))
+}
+
+// EncodeZigzag32 writes a zigzag-encoded 32-bit integer
+// to the Buffer.
+// This is the format used for the sint32 protocol buffer type.
+func (p *Buffer) EncodeZigzag32(x uint64) error {
+ // use signed number to get arithmetic right shift.
+ return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))
+}
+
+// EncodeRawBytes writes a count-delimited byte buffer to the Buffer.
+// This is the format used for the bytes protocol buffer
+// type and for embedded messages.
+func (p *Buffer) EncodeRawBytes(b []byte) error {
+ p.EncodeVarint(uint64(len(b)))
+ p.buf = append(p.buf, b...)
+ return nil
+}
+
+// EncodeStringBytes writes an encoded string to the Buffer.
+// This is the format used for the proto2 string type.
+func (p *Buffer) EncodeStringBytes(s string) error {
+ p.EncodeVarint(uint64(len(s)))
+ p.buf = append(p.buf, s...)
+ return nil
+}
+
+// Marshaler is the interface representing objects that can marshal themselves.
+type Marshaler interface {
+ Marshal() ([]byte, error)
+}
+
+// EncodeMessage writes the protocol buffer to the Buffer,
+// prefixed by a varint-encoded length.
+func (p *Buffer) EncodeMessage(pb Message) error {
+ siz := Size(pb)
+ p.EncodeVarint(uint64(siz))
+ return p.Marshal(pb)
+}
+
+// All protocol buffer fields are nillable, but be careful.
+func isNil(v reflect.Value) bool {
+ switch v.Kind() {
+ case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
+ return v.IsNil()
+ }
+ return false
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/encode_gogo.go b/vendor/github.com/gogo/protobuf/proto/encode_gogo.go
new file mode 100644
index 0000000..0f5fb17
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/encode_gogo.go
@@ -0,0 +1,33 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+func NewRequiredNotSetError(field string) *RequiredNotSetError {
+ return &RequiredNotSetError{field}
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/equal.go b/vendor/github.com/gogo/protobuf/proto/equal.go
new file mode 100644
index 0000000..d4db5a1
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/equal.go
@@ -0,0 +1,300 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2011 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Protocol buffer comparison.
+
+package proto
+
+import (
+ "bytes"
+ "log"
+ "reflect"
+ "strings"
+)
+
+/*
+Equal returns true iff protocol buffers a and b are equal.
+The arguments must both be pointers to protocol buffer structs.
+
+Equality is defined in this way:
+ - Two messages are equal iff they are the same type,
+ corresponding fields are equal, unknown field sets
+ are equal, and extensions sets are equal.
+ - Two set scalar fields are equal iff their values are equal.
+ If the fields are of a floating-point type, remember that
+ NaN != x for all x, including NaN. If the message is defined
+ in a proto3 .proto file, fields are not "set"; specifically,
+ zero length proto3 "bytes" fields are equal (nil == {}).
+ - Two repeated fields are equal iff their lengths are the same,
+ and their corresponding elements are equal. Note a "bytes" field,
+ although represented by []byte, is not a repeated field and the
+ rule for the scalar fields described above applies.
+ - Two unset fields are equal.
+ - Two unknown field sets are equal if their current
+ encoded state is equal.
+ - Two extension sets are equal iff they have corresponding
+ elements that are pairwise equal.
+ - Two map fields are equal iff their lengths are the same,
+ and they contain the same set of elements. Zero-length map
+ fields are equal.
+ - Every other combination of things are not equal.
+
+The return value is undefined if a and b are not protocol buffers.
+*/
+func Equal(a, b Message) bool {
+ if a == nil || b == nil {
+ return a == b
+ }
+ v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b)
+ if v1.Type() != v2.Type() {
+ return false
+ }
+ if v1.Kind() == reflect.Ptr {
+ if v1.IsNil() {
+ return v2.IsNil()
+ }
+ if v2.IsNil() {
+ return false
+ }
+ v1, v2 = v1.Elem(), v2.Elem()
+ }
+ if v1.Kind() != reflect.Struct {
+ return false
+ }
+ return equalStruct(v1, v2)
+}
+
+// v1 and v2 are known to have the same type.
+func equalStruct(v1, v2 reflect.Value) bool {
+ sprop := GetProperties(v1.Type())
+ for i := 0; i < v1.NumField(); i++ {
+ f := v1.Type().Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ f1, f2 := v1.Field(i), v2.Field(i)
+ if f.Type.Kind() == reflect.Ptr {
+ if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 {
+ // both unset
+ continue
+ } else if n1 != n2 {
+ // set/unset mismatch
+ return false
+ }
+ f1, f2 = f1.Elem(), f2.Elem()
+ }
+ if !equalAny(f1, f2, sprop.Prop[i]) {
+ return false
+ }
+ }
+
+ if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() {
+ em2 := v2.FieldByName("XXX_InternalExtensions")
+ if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) {
+ return false
+ }
+ }
+
+ if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() {
+ em2 := v2.FieldByName("XXX_extensions")
+ if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) {
+ return false
+ }
+ }
+
+ uf := v1.FieldByName("XXX_unrecognized")
+ if !uf.IsValid() {
+ return true
+ }
+
+ u1 := uf.Bytes()
+ u2 := v2.FieldByName("XXX_unrecognized").Bytes()
+ return bytes.Equal(u1, u2)
+}
+
+// v1 and v2 are known to have the same type.
+// prop may be nil.
+func equalAny(v1, v2 reflect.Value, prop *Properties) bool {
+ if v1.Type() == protoMessageType {
+ m1, _ := v1.Interface().(Message)
+ m2, _ := v2.Interface().(Message)
+ return Equal(m1, m2)
+ }
+ switch v1.Kind() {
+ case reflect.Bool:
+ return v1.Bool() == v2.Bool()
+ case reflect.Float32, reflect.Float64:
+ return v1.Float() == v2.Float()
+ case reflect.Int32, reflect.Int64:
+ return v1.Int() == v2.Int()
+ case reflect.Interface:
+ // Probably a oneof field; compare the inner values.
+ n1, n2 := v1.IsNil(), v2.IsNil()
+ if n1 || n2 {
+ return n1 == n2
+ }
+ e1, e2 := v1.Elem(), v2.Elem()
+ if e1.Type() != e2.Type() {
+ return false
+ }
+ return equalAny(e1, e2, nil)
+ case reflect.Map:
+ if v1.Len() != v2.Len() {
+ return false
+ }
+ for _, key := range v1.MapKeys() {
+ val2 := v2.MapIndex(key)
+ if !val2.IsValid() {
+ // This key was not found in the second map.
+ return false
+ }
+ if !equalAny(v1.MapIndex(key), val2, nil) {
+ return false
+ }
+ }
+ return true
+ case reflect.Ptr:
+ // Maps may have nil values in them, so check for nil.
+ if v1.IsNil() && v2.IsNil() {
+ return true
+ }
+ if v1.IsNil() != v2.IsNil() {
+ return false
+ }
+ return equalAny(v1.Elem(), v2.Elem(), prop)
+ case reflect.Slice:
+ if v1.Type().Elem().Kind() == reflect.Uint8 {
+ // short circuit: []byte
+
+ // Edge case: if this is in a proto3 message, a zero length
+ // bytes field is considered the zero value.
+ if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 {
+ return true
+ }
+ if v1.IsNil() != v2.IsNil() {
+ return false
+ }
+ return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte))
+ }
+
+ if v1.Len() != v2.Len() {
+ return false
+ }
+ for i := 0; i < v1.Len(); i++ {
+ if !equalAny(v1.Index(i), v2.Index(i), prop) {
+ return false
+ }
+ }
+ return true
+ case reflect.String:
+ return v1.Interface().(string) == v2.Interface().(string)
+ case reflect.Struct:
+ return equalStruct(v1, v2)
+ case reflect.Uint32, reflect.Uint64:
+ return v1.Uint() == v2.Uint()
+ }
+
+ // unknown type, so not a protocol buffer
+ log.Printf("proto: don't know how to compare %v", v1)
+ return false
+}
+
+// base is the struct type that the extensions are based on.
+// x1 and x2 are InternalExtensions.
+func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool {
+ em1, _ := x1.extensionsRead()
+ em2, _ := x2.extensionsRead()
+ return equalExtMap(base, em1, em2)
+}
+
+func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {
+ if len(em1) != len(em2) {
+ return false
+ }
+
+ for extNum, e1 := range em1 {
+ e2, ok := em2[extNum]
+ if !ok {
+ return false
+ }
+
+ m1, m2 := e1.value, e2.value
+
+ if m1 == nil && m2 == nil {
+ // Both have only encoded form.
+ if bytes.Equal(e1.enc, e2.enc) {
+ continue
+ }
+ // The bytes are different, but the extensions might still be
+ // equal. We need to decode them to compare.
+ }
+
+ if m1 != nil && m2 != nil {
+ // Both are unencoded.
+ if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
+ return false
+ }
+ continue
+ }
+
+ // At least one is encoded. To do a semantically correct comparison
+ // we need to unmarshal them first.
+ var desc *ExtensionDesc
+ if m := extensionMaps[base]; m != nil {
+ desc = m[extNum]
+ }
+ if desc == nil {
+ // If both have only encoded form and the bytes are the same,
+ // it is handled above. We get here when the bytes are different.
+ // We don't know how to decode it, so just compare them as byte
+ // slices.
+ log.Printf("proto: don't know how to compare extension %d of %v", extNum, base)
+ return false
+ }
+ var err error
+ if m1 == nil {
+ m1, err = decodeExtension(e1.enc, desc)
+ }
+ if m2 == nil && err == nil {
+ m2, err = decodeExtension(e2.enc, desc)
+ }
+ if err != nil {
+ // The encoded form is invalid.
+ log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err)
+ return false
+ }
+ if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
+ return false
+ }
+ }
+
+ return true
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/extensions.go b/vendor/github.com/gogo/protobuf/proto/extensions.go
new file mode 100644
index 0000000..44ebd45
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/extensions.go
@@ -0,0 +1,604 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+/*
+ * Types and routines for supporting protocol buffer extensions.
+ */
+
+import (
+ "errors"
+ "fmt"
+ "io"
+ "reflect"
+ "strconv"
+ "sync"
+)
+
+// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message.
+var ErrMissingExtension = errors.New("proto: missing extension")
+
+// ExtensionRange represents a range of message extensions for a protocol buffer.
+// Used in code generated by the protocol compiler.
+type ExtensionRange struct {
+ Start, End int32 // both inclusive
+}
+
+// extendableProto is an interface implemented by any protocol buffer generated by the current
+// proto compiler that may be extended.
+type extendableProto interface {
+ Message
+ ExtensionRangeArray() []ExtensionRange
+ extensionsWrite() map[int32]Extension
+ extensionsRead() (map[int32]Extension, sync.Locker)
+}
+
+// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous
+// version of the proto compiler that may be extended.
+type extendableProtoV1 interface {
+ Message
+ ExtensionRangeArray() []ExtensionRange
+ ExtensionMap() map[int32]Extension
+}
+
+// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto.
+type extensionAdapter struct {
+ extendableProtoV1
+}
+
+func (e extensionAdapter) extensionsWrite() map[int32]Extension {
+ return e.ExtensionMap()
+}
+
+func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {
+ return e.ExtensionMap(), notLocker{}
+}
+
+// notLocker is a sync.Locker whose Lock and Unlock methods are nops.
+type notLocker struct{}
+
+func (n notLocker) Lock() {}
+func (n notLocker) Unlock() {}
+
+// extendable returns the extendableProto interface for the given generated proto message.
+// If the proto message has the old extension format, it returns a wrapper that implements
+// the extendableProto interface.
+func extendable(p interface{}) (extendableProto, error) {
+ switch p := p.(type) {
+ case extendableProto:
+ if isNilPtr(p) {
+ return nil, fmt.Errorf("proto: nil %T is not extendable", p)
+ }
+ return p, nil
+ case extendableProtoV1:
+ if isNilPtr(p) {
+ return nil, fmt.Errorf("proto: nil %T is not extendable", p)
+ }
+ return extensionAdapter{p}, nil
+ case extensionsBytes:
+ return slowExtensionAdapter{p}, nil
+ }
+ // Don't allocate a specific error containing %T:
+ // this is the hot path for Clone and MarshalText.
+ return nil, errNotExtendable
+}
+
+var errNotExtendable = errors.New("proto: not an extendable proto.Message")
+
+func isNilPtr(x interface{}) bool {
+ v := reflect.ValueOf(x)
+ return v.Kind() == reflect.Ptr && v.IsNil()
+}
+
+// XXX_InternalExtensions is an internal representation of proto extensions.
+//
+// Each generated message struct type embeds an anonymous XXX_InternalExtensions field,
+// thus gaining the unexported 'extensions' method, which can be called only from the proto package.
+//
+// The methods of XXX_InternalExtensions are not concurrency safe in general,
+// but calls to logically read-only methods such as has and get may be executed concurrently.
+type XXX_InternalExtensions struct {
+ // The struct must be indirect so that if a user inadvertently copies a
+ // generated message and its embedded XXX_InternalExtensions, they
+ // avoid the mayhem of a copied mutex.
+ //
+ // The mutex serializes all logically read-only operations to p.extensionMap.
+ // It is up to the client to ensure that write operations to p.extensionMap are
+ // mutually exclusive with other accesses.
+ p *struct {
+ mu sync.Mutex
+ extensionMap map[int32]Extension
+ }
+}
+
+// extensionsWrite returns the extension map, creating it on first use.
+func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension {
+ if e.p == nil {
+ e.p = new(struct {
+ mu sync.Mutex
+ extensionMap map[int32]Extension
+ })
+ e.p.extensionMap = make(map[int32]Extension)
+ }
+ return e.p.extensionMap
+}
+
+// extensionsRead returns the extensions map for read-only use. It may be nil.
+// The caller must hold the returned mutex's lock when accessing Elements within the map.
+func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) {
+ if e.p == nil {
+ return nil, nil
+ }
+ return e.p.extensionMap, &e.p.mu
+}
+
+// ExtensionDesc represents an extension specification.
+// Used in generated code from the protocol compiler.
+type ExtensionDesc struct {
+ ExtendedType Message // nil pointer to the type that is being extended
+ ExtensionType interface{} // nil pointer to the extension type
+ Field int32 // field number
+ Name string // fully-qualified name of extension, for text formatting
+ Tag string // protobuf tag style
+ Filename string // name of the file in which the extension is defined
+}
+
+func (ed *ExtensionDesc) repeated() bool {
+ t := reflect.TypeOf(ed.ExtensionType)
+ return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8
+}
+
+// Extension represents an extension in a message.
+type Extension struct {
+ // When an extension is stored in a message using SetExtension
+ // only desc and value are set. When the message is marshaled
+ // enc will be set to the encoded form of the message.
+ //
+ // When a message is unmarshaled and contains extensions, each
+ // extension will have only enc set. When such an extension is
+ // accessed using GetExtension (or GetExtensions) desc and value
+ // will be set.
+ desc *ExtensionDesc
+ value interface{}
+ enc []byte
+}
+
+// SetRawExtension is for testing only.
+func SetRawExtension(base Message, id int32, b []byte) {
+ if ebase, ok := base.(extensionsBytes); ok {
+ clearExtension(base, id)
+ ext := ebase.GetExtensions()
+ *ext = append(*ext, b...)
+ return
+ }
+ epb, err := extendable(base)
+ if err != nil {
+ return
+ }
+ extmap := epb.extensionsWrite()
+ extmap[id] = Extension{enc: b}
+}
+
+// isExtensionField returns true iff the given field number is in an extension range.
+func isExtensionField(pb extendableProto, field int32) bool {
+ for _, er := range pb.ExtensionRangeArray() {
+ if er.Start <= field && field <= er.End {
+ return true
+ }
+ }
+ return false
+}
+
+// checkExtensionTypes checks that the given extension is valid for pb.
+func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error {
+ var pbi interface{} = pb
+ // Check the extended type.
+ if ea, ok := pbi.(extensionAdapter); ok {
+ pbi = ea.extendableProtoV1
+ }
+ if ea, ok := pbi.(slowExtensionAdapter); ok {
+ pbi = ea.extensionsBytes
+ }
+ if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b {
+ return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a)
+ }
+ // Check the range.
+ if !isExtensionField(pb, extension.Field) {
+ return errors.New("proto: bad extension number; not in declared ranges")
+ }
+ return nil
+}
+
+// extPropKey is sufficient to uniquely identify an extension.
+type extPropKey struct {
+ base reflect.Type
+ field int32
+}
+
+var extProp = struct {
+ sync.RWMutex
+ m map[extPropKey]*Properties
+}{
+ m: make(map[extPropKey]*Properties),
+}
+
+func extensionProperties(ed *ExtensionDesc) *Properties {
+ key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field}
+
+ extProp.RLock()
+ if prop, ok := extProp.m[key]; ok {
+ extProp.RUnlock()
+ return prop
+ }
+ extProp.RUnlock()
+
+ extProp.Lock()
+ defer extProp.Unlock()
+ // Check again.
+ if prop, ok := extProp.m[key]; ok {
+ return prop
+ }
+
+ prop := new(Properties)
+ prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil)
+ extProp.m[key] = prop
+ return prop
+}
+
+// HasExtension returns whether the given extension is present in pb.
+func HasExtension(pb Message, extension *ExtensionDesc) bool {
+ if epb, doki := pb.(extensionsBytes); doki {
+ ext := epb.GetExtensions()
+ buf := *ext
+ o := 0
+ for o < len(buf) {
+ tag, n := DecodeVarint(buf[o:])
+ fieldNum := int32(tag >> 3)
+ if int32(fieldNum) == extension.Field {
+ return true
+ }
+ wireType := int(tag & 0x7)
+ o += n
+ l, err := size(buf[o:], wireType)
+ if err != nil {
+ return false
+ }
+ o += l
+ }
+ return false
+ }
+ // TODO: Check types, field numbers, etc.?
+ epb, err := extendable(pb)
+ if err != nil {
+ return false
+ }
+ extmap, mu := epb.extensionsRead()
+ if extmap == nil {
+ return false
+ }
+ mu.Lock()
+ _, ok := extmap[extension.Field]
+ mu.Unlock()
+ return ok
+}
+
+// ClearExtension removes the given extension from pb.
+func ClearExtension(pb Message, extension *ExtensionDesc) {
+ clearExtension(pb, extension.Field)
+}
+
+func clearExtension(pb Message, fieldNum int32) {
+ if epb, ok := pb.(extensionsBytes); ok {
+ offset := 0
+ for offset != -1 {
+ offset = deleteExtension(epb, fieldNum, offset)
+ }
+ return
+ }
+ epb, err := extendable(pb)
+ if err != nil {
+ return
+ }
+ // TODO: Check types, field numbers, etc.?
+ extmap := epb.extensionsWrite()
+ delete(extmap, fieldNum)
+}
+
+// GetExtension retrieves a proto2 extended field from pb.
+//
+// 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.
+// If the field is not present, then the default value is returned (if one is specified),
+// otherwise ErrMissingExtension is reported.
+//
+// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil),
+// then GetExtension returns the raw encoded bytes of the field extension.
+func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
+ if epb, doki := pb.(extensionsBytes); doki {
+ ext := epb.GetExtensions()
+ return decodeExtensionFromBytes(extension, *ext)
+ }
+
+ epb, err := extendable(pb)
+ if err != nil {
+ return nil, err
+ }
+
+ if extension.ExtendedType != nil {
+ // can only check type if this is a complete descriptor
+ if cerr := checkExtensionTypes(epb, extension); cerr != nil {
+ return nil, cerr
+ }
+ }
+
+ emap, mu := epb.extensionsRead()
+ if emap == nil {
+ return defaultExtensionValue(extension)
+ }
+ mu.Lock()
+ defer mu.Unlock()
+ e, ok := emap[extension.Field]
+ if !ok {
+ // defaultExtensionValue returns the default value or
+ // ErrMissingExtension if there is no default.
+ return defaultExtensionValue(extension)
+ }
+
+ if e.value != nil {
+ // Already decoded. Check the descriptor, though.
+ if e.desc != extension {
+ // This shouldn't happen. If it does, it means that
+ // GetExtension was called twice with two different
+ // descriptors with the same field number.
+ return nil, errors.New("proto: descriptor conflict")
+ }
+ return e.value, nil
+ }
+
+ if extension.ExtensionType == nil {
+ // incomplete descriptor
+ return e.enc, nil
+ }
+
+ v, err := decodeExtension(e.enc, extension)
+ if err != nil {
+ return nil, err
+ }
+
+ // Remember the decoded version and drop the encoded version.
+ // That way it is safe to mutate what we return.
+ e.value = v
+ e.desc = extension
+ e.enc = nil
+ emap[extension.Field] = e
+ return e.value, nil
+}
+
+// defaultExtensionValue returns the default value for extension.
+// If no default for an extension is defined ErrMissingExtension is returned.
+func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {
+ if extension.ExtensionType == nil {
+ // incomplete descriptor, so no default
+ return nil, ErrMissingExtension
+ }
+
+ t := reflect.TypeOf(extension.ExtensionType)
+ props := extensionProperties(extension)
+
+ sf, _, err := fieldDefault(t, props)
+ if err != nil {
+ return nil, err
+ }
+
+ if sf == nil || sf.value == nil {
+ // There is no default value.
+ return nil, ErrMissingExtension
+ }
+
+ if t.Kind() != reflect.Ptr {
+ // We do not need to return a Ptr, we can directly return sf.value.
+ return sf.value, nil
+ }
+
+ // We need to return an interface{} that is a pointer to sf.value.
+ value := reflect.New(t).Elem()
+ value.Set(reflect.New(value.Type().Elem()))
+ if sf.kind == reflect.Int32 {
+ // We may have an int32 or an enum, but the underlying data is int32.
+ // Since we can't set an int32 into a non int32 reflect.value directly
+ // set it as a int32.
+ value.Elem().SetInt(int64(sf.value.(int32)))
+ } else {
+ value.Elem().Set(reflect.ValueOf(sf.value))
+ }
+ return value.Interface(), nil
+}
+
+// decodeExtension decodes an extension encoded in b.
+func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {
+ t := reflect.TypeOf(extension.ExtensionType)
+ unmarshal := typeUnmarshaler(t, extension.Tag)
+
+ // t is a pointer to a struct, pointer to basic type or a slice.
+ // Allocate space to store the pointer/slice.
+ value := reflect.New(t).Elem()
+
+ var err error
+ for {
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ wire := int(x) & 7
+
+ b, err = unmarshal(b, valToPointer(value.Addr()), wire)
+ if err != nil {
+ return nil, err
+ }
+
+ if len(b) == 0 {
+ break
+ }
+ }
+ return value.Interface(), nil
+}
+
+// GetExtensions returns a slice of the extensions present in pb that are also listed in es.
+// The returned slice has the same length as es; missing extensions will appear as nil elements.
+func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) {
+ epb, err := extendable(pb)
+ if err != nil {
+ return nil, err
+ }
+ extensions = make([]interface{}, len(es))
+ for i, e := range es {
+ extensions[i], err = GetExtension(epb, e)
+ if err == ErrMissingExtension {
+ err = nil
+ }
+ if err != nil {
+ return
+ }
+ }
+ return
+}
+
+// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order.
+// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing
+// just the Field field, which defines the extension's field number.
+func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
+ epb, err := extendable(pb)
+ if err != nil {
+ return nil, err
+ }
+ registeredExtensions := RegisteredExtensions(pb)
+
+ emap, mu := epb.extensionsRead()
+ if emap == nil {
+ return nil, nil
+ }
+ mu.Lock()
+ defer mu.Unlock()
+ extensions := make([]*ExtensionDesc, 0, len(emap))
+ for extid, e := range emap {
+ desc := e.desc
+ if desc == nil {
+ desc = registeredExtensions[extid]
+ if desc == nil {
+ desc = &ExtensionDesc{Field: extid}
+ }
+ }
+
+ extensions = append(extensions, desc)
+ }
+ return extensions, nil
+}
+
+// SetExtension sets the specified extension of pb to the specified value.
+func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error {
+ if epb, ok := pb.(extensionsBytes); ok {
+ newb, err := encodeExtension(extension, value)
+ if err != nil {
+ return err
+ }
+ bb := epb.GetExtensions()
+ *bb = append(*bb, newb...)
+ return nil
+ }
+ epb, err := extendable(pb)
+ if err != nil {
+ return err
+ }
+ if err := checkExtensionTypes(epb, extension); err != nil {
+ return err
+ }
+ typ := reflect.TypeOf(extension.ExtensionType)
+ if typ != reflect.TypeOf(value) {
+ return errors.New("proto: bad extension value type")
+ }
+ // nil extension values need to be caught early, because the
+ // encoder can't distinguish an ErrNil due to a nil extension
+ // from an ErrNil due to a missing field. Extensions are
+ // always optional, so the encoder would just swallow the error
+ // and drop all the extensions from the encoded message.
+ if reflect.ValueOf(value).IsNil() {
+ return fmt.Errorf("proto: SetExtension called with nil value of type %T", value)
+ }
+
+ extmap := epb.extensionsWrite()
+ extmap[extension.Field] = Extension{desc: extension, value: value}
+ return nil
+}
+
+// ClearAllExtensions clears all extensions from pb.
+func ClearAllExtensions(pb Message) {
+ if epb, doki := pb.(extensionsBytes); doki {
+ ext := epb.GetExtensions()
+ *ext = []byte{}
+ return
+ }
+ epb, err := extendable(pb)
+ if err != nil {
+ return
+ }
+ m := epb.extensionsWrite()
+ for k := range m {
+ delete(m, k)
+ }
+}
+
+// A global registry of extensions.
+// The generated code will register the generated descriptors by calling RegisterExtension.
+
+var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc)
+
+// RegisterExtension is called from the generated code.
+func RegisterExtension(desc *ExtensionDesc) {
+ st := reflect.TypeOf(desc.ExtendedType).Elem()
+ m := extensionMaps[st]
+ if m == nil {
+ m = make(map[int32]*ExtensionDesc)
+ extensionMaps[st] = m
+ }
+ if _, ok := m[desc.Field]; ok {
+ panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field)))
+ }
+ m[desc.Field] = desc
+}
+
+// RegisteredExtensions returns a map of the registered extensions of a
+// protocol buffer struct, indexed by the extension number.
+// The argument pb should be a nil pointer to the struct type.
+func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc {
+ return extensionMaps[reflect.TypeOf(pb).Elem()]
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go b/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go
new file mode 100644
index 0000000..53ebd8c
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go
@@ -0,0 +1,368 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "io"
+ "reflect"
+ "sort"
+ "strings"
+ "sync"
+)
+
+type extensionsBytes interface {
+ Message
+ ExtensionRangeArray() []ExtensionRange
+ GetExtensions() *[]byte
+}
+
+type slowExtensionAdapter struct {
+ extensionsBytes
+}
+
+func (s slowExtensionAdapter) extensionsWrite() map[int32]Extension {
+ panic("Please report a bug to github.com/gogo/protobuf if you see this message: Writing extensions is not supported for extensions stored in a byte slice field.")
+}
+
+func (s slowExtensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {
+ b := s.GetExtensions()
+ m, err := BytesToExtensionsMap(*b)
+ if err != nil {
+ panic(err)
+ }
+ return m, notLocker{}
+}
+
+func GetBoolExtension(pb Message, extension *ExtensionDesc, ifnotset bool) bool {
+ if reflect.ValueOf(pb).IsNil() {
+ return ifnotset
+ }
+ value, err := GetExtension(pb, extension)
+ if err != nil {
+ return ifnotset
+ }
+ if value == nil {
+ return ifnotset
+ }
+ if value.(*bool) == nil {
+ return ifnotset
+ }
+ return *(value.(*bool))
+}
+
+func (this *Extension) Equal(that *Extension) bool {
+ if err := this.Encode(); err != nil {
+ return false
+ }
+ if err := that.Encode(); err != nil {
+ return false
+ }
+ return bytes.Equal(this.enc, that.enc)
+}
+
+func (this *Extension) Compare(that *Extension) int {
+ if err := this.Encode(); err != nil {
+ return 1
+ }
+ if err := that.Encode(); err != nil {
+ return -1
+ }
+ return bytes.Compare(this.enc, that.enc)
+}
+
+func SizeOfInternalExtension(m extendableProto) (n int) {
+ info := getMarshalInfo(reflect.TypeOf(m))
+ return info.sizeV1Extensions(m.extensionsWrite())
+}
+
+type sortableMapElem struct {
+ field int32
+ ext Extension
+}
+
+func newSortableExtensionsFromMap(m map[int32]Extension) sortableExtensions {
+ s := make(sortableExtensions, 0, len(m))
+ for k, v := range m {
+ s = append(s, &sortableMapElem{field: k, ext: v})
+ }
+ return s
+}
+
+type sortableExtensions []*sortableMapElem
+
+func (this sortableExtensions) Len() int { return len(this) }
+
+func (this sortableExtensions) Swap(i, j int) { this[i], this[j] = this[j], this[i] }
+
+func (this sortableExtensions) Less(i, j int) bool { return this[i].field < this[j].field }
+
+func (this sortableExtensions) String() string {
+ sort.Sort(this)
+ ss := make([]string, len(this))
+ for i := range this {
+ ss[i] = fmt.Sprintf("%d: %v", this[i].field, this[i].ext)
+ }
+ return "map[" + strings.Join(ss, ",") + "]"
+}
+
+func StringFromInternalExtension(m extendableProto) string {
+ return StringFromExtensionsMap(m.extensionsWrite())
+}
+
+func StringFromExtensionsMap(m map[int32]Extension) string {
+ return newSortableExtensionsFromMap(m).String()
+}
+
+func StringFromExtensionsBytes(ext []byte) string {
+ m, err := BytesToExtensionsMap(ext)
+ if err != nil {
+ panic(err)
+ }
+ return StringFromExtensionsMap(m)
+}
+
+func EncodeInternalExtension(m extendableProto, data []byte) (n int, err error) {
+ return EncodeExtensionMap(m.extensionsWrite(), data)
+}
+
+func EncodeExtensionMap(m map[int32]Extension, data []byte) (n int, err error) {
+ o := 0
+ for _, e := range m {
+ if err := e.Encode(); err != nil {
+ return 0, err
+ }
+ n := copy(data[o:], e.enc)
+ if n != len(e.enc) {
+ return 0, io.ErrShortBuffer
+ }
+ o += n
+ }
+ return o, nil
+}
+
+func GetRawExtension(m map[int32]Extension, id int32) ([]byte, error) {
+ e := m[id]
+ if err := e.Encode(); err != nil {
+ return nil, err
+ }
+ return e.enc, nil
+}
+
+func size(buf []byte, wire int) (int, error) {
+ switch wire {
+ case WireVarint:
+ _, n := DecodeVarint(buf)
+ return n, nil
+ case WireFixed64:
+ return 8, nil
+ case WireBytes:
+ v, n := DecodeVarint(buf)
+ return int(v) + n, nil
+ case WireFixed32:
+ return 4, nil
+ case WireStartGroup:
+ offset := 0
+ for {
+ u, n := DecodeVarint(buf[offset:])
+ fwire := int(u & 0x7)
+ offset += n
+ if fwire == WireEndGroup {
+ return offset, nil
+ }
+ s, err := size(buf[offset:], wire)
+ if err != nil {
+ return 0, err
+ }
+ offset += s
+ }
+ }
+ return 0, fmt.Errorf("proto: can't get size for unknown wire type %d", wire)
+}
+
+func BytesToExtensionsMap(buf []byte) (map[int32]Extension, error) {
+ m := make(map[int32]Extension)
+ i := 0
+ for i < len(buf) {
+ tag, n := DecodeVarint(buf[i:])
+ if n <= 0 {
+ return nil, fmt.Errorf("unable to decode varint")
+ }
+ fieldNum := int32(tag >> 3)
+ wireType := int(tag & 0x7)
+ l, err := size(buf[i+n:], wireType)
+ if err != nil {
+ return nil, err
+ }
+ end := i + int(l) + n
+ m[int32(fieldNum)] = Extension{enc: buf[i:end]}
+ i = end
+ }
+ return m, nil
+}
+
+func NewExtension(e []byte) Extension {
+ ee := Extension{enc: make([]byte, len(e))}
+ copy(ee.enc, e)
+ return ee
+}
+
+func AppendExtension(e Message, tag int32, buf []byte) {
+ if ee, eok := e.(extensionsBytes); eok {
+ ext := ee.GetExtensions()
+ *ext = append(*ext, buf...)
+ return
+ }
+ if ee, eok := e.(extendableProto); eok {
+ m := ee.extensionsWrite()
+ ext := m[int32(tag)] // may be missing
+ ext.enc = append(ext.enc, buf...)
+ m[int32(tag)] = ext
+ }
+}
+
+func encodeExtension(extension *ExtensionDesc, value interface{}) ([]byte, error) {
+ u := getMarshalInfo(reflect.TypeOf(extension.ExtendedType))
+ ei := u.getExtElemInfo(extension)
+ v := value
+ p := toAddrPointer(&v, ei.isptr)
+ siz := ei.sizer(p, SizeVarint(ei.wiretag))
+ buf := make([]byte, 0, siz)
+ return ei.marshaler(buf, p, ei.wiretag, false)
+}
+
+func decodeExtensionFromBytes(extension *ExtensionDesc, buf []byte) (interface{}, error) {
+ o := 0
+ for o < len(buf) {
+ tag, n := DecodeVarint((buf)[o:])
+ fieldNum := int32(tag >> 3)
+ wireType := int(tag & 0x7)
+ if o+n > len(buf) {
+ return nil, fmt.Errorf("unable to decode extension")
+ }
+ l, err := size((buf)[o+n:], wireType)
+ if err != nil {
+ return nil, err
+ }
+ if int32(fieldNum) == extension.Field {
+ if o+n+l > len(buf) {
+ return nil, fmt.Errorf("unable to decode extension")
+ }
+ v, err := decodeExtension((buf)[o:o+n+l], extension)
+ if err != nil {
+ return nil, err
+ }
+ return v, nil
+ }
+ o += n + l
+ }
+ return defaultExtensionValue(extension)
+}
+
+func (this *Extension) Encode() error {
+ if this.enc == nil {
+ var err error
+ this.enc, err = encodeExtension(this.desc, this.value)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (this Extension) GoString() string {
+ if err := this.Encode(); err != nil {
+ return fmt.Sprintf("error encoding extension: %v", err)
+ }
+ return fmt.Sprintf("proto.NewExtension(%#v)", this.enc)
+}
+
+func SetUnsafeExtension(pb Message, fieldNum int32, value interface{}) error {
+ typ := reflect.TypeOf(pb).Elem()
+ ext, ok := extensionMaps[typ]
+ if !ok {
+ return fmt.Errorf("proto: bad extended type; %s is not extendable", typ.String())
+ }
+ desc, ok := ext[fieldNum]
+ if !ok {
+ return errors.New("proto: bad extension number; not in declared ranges")
+ }
+ return SetExtension(pb, desc, value)
+}
+
+func GetUnsafeExtension(pb Message, fieldNum int32) (interface{}, error) {
+ typ := reflect.TypeOf(pb).Elem()
+ ext, ok := extensionMaps[typ]
+ if !ok {
+ return nil, fmt.Errorf("proto: bad extended type; %s is not extendable", typ.String())
+ }
+ desc, ok := ext[fieldNum]
+ if !ok {
+ return nil, fmt.Errorf("unregistered field number %d", fieldNum)
+ }
+ return GetExtension(pb, desc)
+}
+
+func NewUnsafeXXX_InternalExtensions(m map[int32]Extension) XXX_InternalExtensions {
+ x := &XXX_InternalExtensions{
+ p: new(struct {
+ mu sync.Mutex
+ extensionMap map[int32]Extension
+ }),
+ }
+ x.p.extensionMap = m
+ return *x
+}
+
+func GetUnsafeExtensionsMap(extendable Message) map[int32]Extension {
+ pb := extendable.(extendableProto)
+ return pb.extensionsWrite()
+}
+
+func deleteExtension(pb extensionsBytes, theFieldNum int32, offset int) int {
+ ext := pb.GetExtensions()
+ for offset < len(*ext) {
+ tag, n1 := DecodeVarint((*ext)[offset:])
+ fieldNum := int32(tag >> 3)
+ wireType := int(tag & 0x7)
+ n2, err := size((*ext)[offset+n1:], wireType)
+ if err != nil {
+ panic(err)
+ }
+ newOffset := offset + n1 + n2
+ if fieldNum == theFieldNum {
+ *ext = append((*ext)[:offset], (*ext)[newOffset:]...)
+ return offset
+ }
+ offset = newOffset
+ }
+ return -1
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/lib.go b/vendor/github.com/gogo/protobuf/proto/lib.go
new file mode 100644
index 0000000..37d1781
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/lib.go
@@ -0,0 +1,929 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+/*
+Package proto converts data structures to and from the wire format of
+protocol buffers. It works in concert with the Go source code generated
+for .proto files by the protocol compiler.
+
+A summary of the properties of the protocol buffer interface
+for a protocol buffer variable v:
+
+ - Names are turned from camel_case to CamelCase for export.
+ - There are no methods on v to set fields; just treat
+ them as structure fields.
+ - There are getters that return a field's value if set,
+ and return the field's default value if unset.
+ The getters work even if the receiver is a nil message.
+ - The zero value for a struct is its correct initialization state.
+ All desired fields must be set before marshaling.
+ - A Reset() method will restore a protobuf struct to its zero state.
+ - Non-repeated fields are pointers to the values; nil means unset.
+ That is, optional or required field int32 f becomes F *int32.
+ - Repeated fields are slices.
+ - Helper functions are available to aid the setting of fields.
+ msg.Foo = proto.String("hello") // set field
+ - Constants are defined to hold the default values of all fields that
+ have them. They have the form Default_StructName_FieldName.
+ Because the getter methods handle defaulted values,
+ direct use of these constants should be rare.
+ - Enums are given type names and maps from names to values.
+ Enum values are prefixed by the enclosing message's name, or by the
+ enum's type name if it is a top-level enum. Enum types have a String
+ method, and a Enum method to assist in message construction.
+ - Nested messages, groups and enums have type names prefixed with the name of
+ the surrounding message type.
+ - Extensions are given descriptor names that start with E_,
+ followed by an underscore-delimited list of the nested messages
+ that contain it (if any) followed by the CamelCased name of the
+ extension field itself. HasExtension, ClearExtension, GetExtension
+ and SetExtension are functions for manipulating extensions.
+ - Oneof field sets are given a single field in their message,
+ with distinguished wrapper types for each possible field value.
+ - Marshal and Unmarshal are functions to encode and decode the wire format.
+
+When the .proto file specifies `syntax="proto3"`, there are some differences:
+
+ - Non-repeated fields of non-message type are values instead of pointers.
+ - Enum types do not get an Enum method.
+
+The simplest way to describe this is to see an example.
+Given file test.proto, containing
+
+ package example;
+
+ enum FOO { X = 17; }
+
+ message Test {
+ required string label = 1;
+ optional int32 type = 2 [default=77];
+ repeated int64 reps = 3;
+ optional group OptionalGroup = 4 {
+ required string RequiredField = 5;
+ }
+ oneof union {
+ int32 number = 6;
+ string name = 7;
+ }
+ }
+
+The resulting file, test.pb.go, is:
+
+ package example
+
+ import proto "github.com/gogo/protobuf/proto"
+ import math "math"
+
+ type FOO int32
+ const (
+ FOO_X FOO = 17
+ )
+ var FOO_name = map[int32]string{
+ 17: "X",
+ }
+ var FOO_value = map[string]int32{
+ "X": 17,
+ }
+
+ func (x FOO) Enum() *FOO {
+ p := new(FOO)
+ *p = x
+ return p
+ }
+ func (x FOO) String() string {
+ return proto.EnumName(FOO_name, int32(x))
+ }
+ func (x *FOO) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(FOO_value, data)
+ if err != nil {
+ return err
+ }
+ *x = FOO(value)
+ return nil
+ }
+
+ type Test struct {
+ Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"`
+ Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"`
+ Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"`
+ Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"`
+ // Types that are valid to be assigned to Union:
+ // *Test_Number
+ // *Test_Name
+ Union isTest_Union `protobuf_oneof:"union"`
+ XXX_unrecognized []byte `json:"-"`
+ }
+ func (m *Test) Reset() { *m = Test{} }
+ func (m *Test) String() string { return proto.CompactTextString(m) }
+ func (*Test) ProtoMessage() {}
+
+ type isTest_Union interface {
+ isTest_Union()
+ }
+
+ type Test_Number struct {
+ Number int32 `protobuf:"varint,6,opt,name=number"`
+ }
+ type Test_Name struct {
+ Name string `protobuf:"bytes,7,opt,name=name"`
+ }
+
+ func (*Test_Number) isTest_Union() {}
+ func (*Test_Name) isTest_Union() {}
+
+ func (m *Test) GetUnion() isTest_Union {
+ if m != nil {
+ return m.Union
+ }
+ return nil
+ }
+ const Default_Test_Type int32 = 77
+
+ func (m *Test) GetLabel() string {
+ if m != nil && m.Label != nil {
+ return *m.Label
+ }
+ return ""
+ }
+
+ func (m *Test) GetType() int32 {
+ if m != nil && m.Type != nil {
+ return *m.Type
+ }
+ return Default_Test_Type
+ }
+
+ func (m *Test) GetOptionalgroup() *Test_OptionalGroup {
+ if m != nil {
+ return m.Optionalgroup
+ }
+ return nil
+ }
+
+ type Test_OptionalGroup struct {
+ RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"`
+ }
+ func (m *Test_OptionalGroup) Reset() { *m = Test_OptionalGroup{} }
+ func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) }
+
+ func (m *Test_OptionalGroup) GetRequiredField() string {
+ if m != nil && m.RequiredField != nil {
+ return *m.RequiredField
+ }
+ return ""
+ }
+
+ func (m *Test) GetNumber() int32 {
+ if x, ok := m.GetUnion().(*Test_Number); ok {
+ return x.Number
+ }
+ return 0
+ }
+
+ func (m *Test) GetName() string {
+ if x, ok := m.GetUnion().(*Test_Name); ok {
+ return x.Name
+ }
+ return ""
+ }
+
+ func init() {
+ proto.RegisterEnum("example.FOO", FOO_name, FOO_value)
+ }
+
+To create and play with a Test object:
+
+ package main
+
+ import (
+ "log"
+
+ "github.com/gogo/protobuf/proto"
+ pb "./example.pb"
+ )
+
+ func main() {
+ test := &pb.Test{
+ Label: proto.String("hello"),
+ Type: proto.Int32(17),
+ Reps: []int64{1, 2, 3},
+ Optionalgroup: &pb.Test_OptionalGroup{
+ RequiredField: proto.String("good bye"),
+ },
+ Union: &pb.Test_Name{"fred"},
+ }
+ data, err := proto.Marshal(test)
+ if err != nil {
+ log.Fatal("marshaling error: ", err)
+ }
+ newTest := &pb.Test{}
+ err = proto.Unmarshal(data, newTest)
+ if err != nil {
+ log.Fatal("unmarshaling error: ", err)
+ }
+ // Now test and newTest contain the same data.
+ if test.GetLabel() != newTest.GetLabel() {
+ log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
+ }
+ // Use a type switch to determine which oneof was set.
+ switch u := test.Union.(type) {
+ case *pb.Test_Number: // u.Number contains the number.
+ case *pb.Test_Name: // u.Name contains the string.
+ }
+ // etc.
+ }
+*/
+package proto
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "log"
+ "reflect"
+ "sort"
+ "strconv"
+ "sync"
+)
+
+var errInvalidUTF8 = errors.New("proto: invalid UTF-8 string")
+
+// Message is implemented by generated protocol buffer messages.
+type Message interface {
+ Reset()
+ String() string
+ ProtoMessage()
+}
+
+// Stats records allocation details about the protocol buffer encoders
+// and decoders. Useful for tuning the library itself.
+type Stats struct {
+ Emalloc uint64 // mallocs in encode
+ Dmalloc uint64 // mallocs in decode
+ Encode uint64 // number of encodes
+ Decode uint64 // number of decodes
+ Chit uint64 // number of cache hits
+ Cmiss uint64 // number of cache misses
+ Size uint64 // number of sizes
+}
+
+// Set to true to enable stats collection.
+const collectStats = false
+
+var stats Stats
+
+// GetStats returns a copy of the global Stats structure.
+func GetStats() Stats { return stats }
+
+// A Buffer is a buffer manager for marshaling and unmarshaling
+// protocol buffers. It may be reused between invocations to
+// reduce memory usage. It is not necessary to use a Buffer;
+// the global functions Marshal and Unmarshal create a
+// temporary Buffer and are fine for most applications.
+type Buffer struct {
+ buf []byte // encode/decode byte stream
+ index int // read point
+
+ deterministic bool
+}
+
+// NewBuffer allocates a new Buffer and initializes its internal data to
+// the contents of the argument slice.
+func NewBuffer(e []byte) *Buffer {
+ return &Buffer{buf: e}
+}
+
+// Reset resets the Buffer, ready for marshaling a new protocol buffer.
+func (p *Buffer) Reset() {
+ p.buf = p.buf[0:0] // for reading/writing
+ p.index = 0 // for reading
+}
+
+// SetBuf replaces the internal buffer with the slice,
+// ready for unmarshaling the contents of the slice.
+func (p *Buffer) SetBuf(s []byte) {
+ p.buf = s
+ p.index = 0
+}
+
+// Bytes returns the contents of the Buffer.
+func (p *Buffer) Bytes() []byte { return p.buf }
+
+// SetDeterministic sets whether to use deterministic serialization.
+//
+// Deterministic serialization guarantees that for a given binary, equal
+// messages will always be serialized to the same bytes. This implies:
+//
+// - Repeated serialization of a message will return the same bytes.
+// - Different processes of the same binary (which may be executing on
+// different machines) will serialize equal messages to the same bytes.
+//
+// Note that the deterministic serialization is NOT canonical across
+// languages. It is not guaranteed to remain stable over time. It is unstable
+// across different builds with schema changes due to unknown fields.
+// Users who need canonical serialization (e.g., persistent storage in a
+// canonical form, fingerprinting, etc.) should define their own
+// canonicalization specification and implement their own serializer rather
+// than relying on this API.
+//
+// If deterministic serialization is requested, map entries will be sorted
+// by keys in lexographical order. This is an implementation detail and
+// subject to change.
+func (p *Buffer) SetDeterministic(deterministic bool) {
+ p.deterministic = deterministic
+}
+
+/*
+ * Helper routines for simplifying the creation of optional fields of basic type.
+ */
+
+// Bool is a helper routine that allocates a new bool value
+// to store v and returns a pointer to it.
+func Bool(v bool) *bool {
+ return &v
+}
+
+// Int32 is a helper routine that allocates a new int32 value
+// to store v and returns a pointer to it.
+func Int32(v int32) *int32 {
+ return &v
+}
+
+// Int is a helper routine that allocates a new int32 value
+// to store v and returns a pointer to it, but unlike Int32
+// its argument value is an int.
+func Int(v int) *int32 {
+ p := new(int32)
+ *p = int32(v)
+ return p
+}
+
+// Int64 is a helper routine that allocates a new int64 value
+// to store v and returns a pointer to it.
+func Int64(v int64) *int64 {
+ return &v
+}
+
+// Float32 is a helper routine that allocates a new float32 value
+// to store v and returns a pointer to it.
+func Float32(v float32) *float32 {
+ return &v
+}
+
+// Float64 is a helper routine that allocates a new float64 value
+// to store v and returns a pointer to it.
+func Float64(v float64) *float64 {
+ return &v
+}
+
+// Uint32 is a helper routine that allocates a new uint32 value
+// to store v and returns a pointer to it.
+func Uint32(v uint32) *uint32 {
+ return &v
+}
+
+// Uint64 is a helper routine that allocates a new uint64 value
+// to store v and returns a pointer to it.
+func Uint64(v uint64) *uint64 {
+ return &v
+}
+
+// String is a helper routine that allocates a new string value
+// to store v and returns a pointer to it.
+func String(v string) *string {
+ return &v
+}
+
+// EnumName is a helper function to simplify printing protocol buffer enums
+// by name. Given an enum map and a value, it returns a useful string.
+func EnumName(m map[int32]string, v int32) string {
+ s, ok := m[v]
+ if ok {
+ return s
+ }
+ return strconv.Itoa(int(v))
+}
+
+// UnmarshalJSONEnum is a helper function to simplify recovering enum int values
+// from their JSON-encoded representation. Given a map from the enum's symbolic
+// names to its int values, and a byte buffer containing the JSON-encoded
+// value, it returns an int32 that can be cast to the enum type by the caller.
+//
+// The function can deal with both JSON representations, numeric and symbolic.
+func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) {
+ if data[0] == '"' {
+ // New style: enums are strings.
+ var repr string
+ if err := json.Unmarshal(data, &repr); err != nil {
+ return -1, err
+ }
+ val, ok := m[repr]
+ if !ok {
+ return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr)
+ }
+ return val, nil
+ }
+ // Old style: enums are ints.
+ var val int32
+ if err := json.Unmarshal(data, &val); err != nil {
+ return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName)
+ }
+ return val, nil
+}
+
+// DebugPrint dumps the encoded data in b in a debugging format with a header
+// including the string s. Used in testing but made available for general debugging.
+func (p *Buffer) DebugPrint(s string, b []byte) {
+ var u uint64
+
+ obuf := p.buf
+ sindex := p.index
+ p.buf = b
+ p.index = 0
+ depth := 0
+
+ fmt.Printf("\n--- %s ---\n", s)
+
+out:
+ for {
+ for i := 0; i < depth; i++ {
+ fmt.Print(" ")
+ }
+
+ index := p.index
+ if index == len(p.buf) {
+ break
+ }
+
+ op, err := p.DecodeVarint()
+ if err != nil {
+ fmt.Printf("%3d: fetching op err %v\n", index, err)
+ break out
+ }
+ tag := op >> 3
+ wire := op & 7
+
+ switch wire {
+ default:
+ fmt.Printf("%3d: t=%3d unknown wire=%d\n",
+ index, tag, wire)
+ break out
+
+ case WireBytes:
+ var r []byte
+
+ r, err = p.DecodeRawBytes(false)
+ if err != nil {
+ break out
+ }
+ fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r))
+ if len(r) <= 6 {
+ for i := 0; i < len(r); i++ {
+ fmt.Printf(" %.2x", r[i])
+ }
+ } else {
+ for i := 0; i < 3; i++ {
+ fmt.Printf(" %.2x", r[i])
+ }
+ fmt.Printf(" ..")
+ for i := len(r) - 3; i < len(r); i++ {
+ fmt.Printf(" %.2x", r[i])
+ }
+ }
+ fmt.Printf("\n")
+
+ case WireFixed32:
+ u, err = p.DecodeFixed32()
+ if err != nil {
+ fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err)
+ break out
+ }
+ fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u)
+
+ case WireFixed64:
+ u, err = p.DecodeFixed64()
+ if err != nil {
+ fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err)
+ break out
+ }
+ fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u)
+
+ case WireVarint:
+ u, err = p.DecodeVarint()
+ if err != nil {
+ fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err)
+ break out
+ }
+ fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u)
+
+ case WireStartGroup:
+ fmt.Printf("%3d: t=%3d start\n", index, tag)
+ depth++
+
+ case WireEndGroup:
+ depth--
+ fmt.Printf("%3d: t=%3d end\n", index, tag)
+ }
+ }
+
+ if depth != 0 {
+ fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth)
+ }
+ fmt.Printf("\n")
+
+ p.buf = obuf
+ p.index = sindex
+}
+
+// SetDefaults sets unset protocol buffer fields to their default values.
+// It only modifies fields that are both unset and have defined defaults.
+// It recursively sets default values in any non-nil sub-messages.
+func SetDefaults(pb Message) {
+ setDefaults(reflect.ValueOf(pb), true, false)
+}
+
+// v is a struct.
+func setDefaults(v reflect.Value, recur, zeros bool) {
+ if v.Kind() == reflect.Ptr {
+ v = v.Elem()
+ }
+
+ defaultMu.RLock()
+ dm, ok := defaults[v.Type()]
+ defaultMu.RUnlock()
+ if !ok {
+ dm = buildDefaultMessage(v.Type())
+ defaultMu.Lock()
+ defaults[v.Type()] = dm
+ defaultMu.Unlock()
+ }
+
+ for _, sf := range dm.scalars {
+ f := v.Field(sf.index)
+ if !f.IsNil() {
+ // field already set
+ continue
+ }
+ dv := sf.value
+ if dv == nil && !zeros {
+ // no explicit default, and don't want to set zeros
+ continue
+ }
+ fptr := f.Addr().Interface() // **T
+ // TODO: Consider batching the allocations we do here.
+ switch sf.kind {
+ case reflect.Bool:
+ b := new(bool)
+ if dv != nil {
+ *b = dv.(bool)
+ }
+ *(fptr.(**bool)) = b
+ case reflect.Float32:
+ f := new(float32)
+ if dv != nil {
+ *f = dv.(float32)
+ }
+ *(fptr.(**float32)) = f
+ case reflect.Float64:
+ f := new(float64)
+ if dv != nil {
+ *f = dv.(float64)
+ }
+ *(fptr.(**float64)) = f
+ case reflect.Int32:
+ // might be an enum
+ if ft := f.Type(); ft != int32PtrType {
+ // enum
+ f.Set(reflect.New(ft.Elem()))
+ if dv != nil {
+ f.Elem().SetInt(int64(dv.(int32)))
+ }
+ } else {
+ // int32 field
+ i := new(int32)
+ if dv != nil {
+ *i = dv.(int32)
+ }
+ *(fptr.(**int32)) = i
+ }
+ case reflect.Int64:
+ i := new(int64)
+ if dv != nil {
+ *i = dv.(int64)
+ }
+ *(fptr.(**int64)) = i
+ case reflect.String:
+ s := new(string)
+ if dv != nil {
+ *s = dv.(string)
+ }
+ *(fptr.(**string)) = s
+ case reflect.Uint8:
+ // exceptional case: []byte
+ var b []byte
+ if dv != nil {
+ db := dv.([]byte)
+ b = make([]byte, len(db))
+ copy(b, db)
+ } else {
+ b = []byte{}
+ }
+ *(fptr.(*[]byte)) = b
+ case reflect.Uint32:
+ u := new(uint32)
+ if dv != nil {
+ *u = dv.(uint32)
+ }
+ *(fptr.(**uint32)) = u
+ case reflect.Uint64:
+ u := new(uint64)
+ if dv != nil {
+ *u = dv.(uint64)
+ }
+ *(fptr.(**uint64)) = u
+ default:
+ log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind)
+ }
+ }
+
+ for _, ni := range dm.nested {
+ f := v.Field(ni)
+ // f is *T or T or []*T or []T
+ switch f.Kind() {
+ case reflect.Struct:
+ setDefaults(f, recur, zeros)
+
+ case reflect.Ptr:
+ if f.IsNil() {
+ continue
+ }
+ setDefaults(f, recur, zeros)
+
+ case reflect.Slice:
+ for i := 0; i < f.Len(); i++ {
+ e := f.Index(i)
+ if e.Kind() == reflect.Ptr && e.IsNil() {
+ continue
+ }
+ setDefaults(e, recur, zeros)
+ }
+
+ case reflect.Map:
+ for _, k := range f.MapKeys() {
+ e := f.MapIndex(k)
+ if e.IsNil() {
+ continue
+ }
+ setDefaults(e, recur, zeros)
+ }
+ }
+ }
+}
+
+var (
+ // defaults maps a protocol buffer struct type to a slice of the fields,
+ // with its scalar fields set to their proto-declared non-zero default values.
+ defaultMu sync.RWMutex
+ defaults = make(map[reflect.Type]defaultMessage)
+
+ int32PtrType = reflect.TypeOf((*int32)(nil))
+)
+
+// defaultMessage represents information about the default values of a message.
+type defaultMessage struct {
+ scalars []scalarField
+ nested []int // struct field index of nested messages
+}
+
+type scalarField struct {
+ index int // struct field index
+ kind reflect.Kind // element type (the T in *T or []T)
+ value interface{} // the proto-declared default value, or nil
+}
+
+// t is a struct type.
+func buildDefaultMessage(t reflect.Type) (dm defaultMessage) {
+ sprop := GetProperties(t)
+ for _, prop := range sprop.Prop {
+ fi, ok := sprop.decoderTags.get(prop.Tag)
+ if !ok {
+ // XXX_unrecognized
+ continue
+ }
+ ft := t.Field(fi).Type
+
+ sf, nested, err := fieldDefault(ft, prop)
+ switch {
+ case err != nil:
+ log.Print(err)
+ case nested:
+ dm.nested = append(dm.nested, fi)
+ case sf != nil:
+ sf.index = fi
+ dm.scalars = append(dm.scalars, *sf)
+ }
+ }
+
+ return dm
+}
+
+// fieldDefault returns the scalarField for field type ft.
+// sf will be nil if the field can not have a default.
+// nestedMessage will be true if this is a nested message.
+// Note that sf.index is not set on return.
+func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) {
+ var canHaveDefault bool
+ switch ft.Kind() {
+ case reflect.Struct:
+ nestedMessage = true // non-nullable
+
+ case reflect.Ptr:
+ if ft.Elem().Kind() == reflect.Struct {
+ nestedMessage = true
+ } else {
+ canHaveDefault = true // proto2 scalar field
+ }
+
+ case reflect.Slice:
+ switch ft.Elem().Kind() {
+ case reflect.Ptr, reflect.Struct:
+ nestedMessage = true // repeated message
+ case reflect.Uint8:
+ canHaveDefault = true // bytes field
+ }
+
+ case reflect.Map:
+ if ft.Elem().Kind() == reflect.Ptr {
+ nestedMessage = true // map with message values
+ }
+ }
+
+ if !canHaveDefault {
+ if nestedMessage {
+ return nil, true, nil
+ }
+ return nil, false, nil
+ }
+
+ // We now know that ft is a pointer or slice.
+ sf = &scalarField{kind: ft.Elem().Kind()}
+
+ // scalar fields without defaults
+ if !prop.HasDefault {
+ return sf, false, nil
+ }
+
+ // a scalar field: either *T or []byte
+ switch ft.Elem().Kind() {
+ case reflect.Bool:
+ x, err := strconv.ParseBool(prop.Default)
+ if err != nil {
+ return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err)
+ }
+ sf.value = x
+ case reflect.Float32:
+ x, err := strconv.ParseFloat(prop.Default, 32)
+ if err != nil {
+ return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err)
+ }
+ sf.value = float32(x)
+ case reflect.Float64:
+ x, err := strconv.ParseFloat(prop.Default, 64)
+ if err != nil {
+ return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err)
+ }
+ sf.value = x
+ case reflect.Int32:
+ x, err := strconv.ParseInt(prop.Default, 10, 32)
+ if err != nil {
+ return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err)
+ }
+ sf.value = int32(x)
+ case reflect.Int64:
+ x, err := strconv.ParseInt(prop.Default, 10, 64)
+ if err != nil {
+ return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err)
+ }
+ sf.value = x
+ case reflect.String:
+ sf.value = prop.Default
+ case reflect.Uint8:
+ // []byte (not *uint8)
+ sf.value = []byte(prop.Default)
+ case reflect.Uint32:
+ x, err := strconv.ParseUint(prop.Default, 10, 32)
+ if err != nil {
+ return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err)
+ }
+ sf.value = uint32(x)
+ case reflect.Uint64:
+ x, err := strconv.ParseUint(prop.Default, 10, 64)
+ if err != nil {
+ return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err)
+ }
+ sf.value = x
+ default:
+ return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind())
+ }
+
+ return sf, false, nil
+}
+
+// mapKeys returns a sort.Interface to be used for sorting the map keys.
+// Map fields may have key types of non-float scalars, strings and enums.
+func mapKeys(vs []reflect.Value) sort.Interface {
+ s := mapKeySorter{vs: vs}
+
+ // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps.
+ if len(vs) == 0 {
+ return s
+ }
+ switch vs[0].Kind() {
+ case reflect.Int32, reflect.Int64:
+ s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() }
+ case reflect.Uint32, reflect.Uint64:
+ s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() }
+ case reflect.Bool:
+ s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true
+ case reflect.String:
+ s.less = func(a, b reflect.Value) bool { return a.String() < b.String() }
+ default:
+ panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind()))
+ }
+
+ return s
+}
+
+type mapKeySorter struct {
+ vs []reflect.Value
+ less func(a, b reflect.Value) bool
+}
+
+func (s mapKeySorter) Len() int { return len(s.vs) }
+func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] }
+func (s mapKeySorter) Less(i, j int) bool {
+ return s.less(s.vs[i], s.vs[j])
+}
+
+// isProto3Zero reports whether v is a zero proto3 value.
+func isProto3Zero(v reflect.Value) bool {
+ switch v.Kind() {
+ case reflect.Bool:
+ return !v.Bool()
+ case reflect.Int32, reflect.Int64:
+ return v.Int() == 0
+ case reflect.Uint32, reflect.Uint64:
+ return v.Uint() == 0
+ case reflect.Float32, reflect.Float64:
+ return v.Float() == 0
+ case reflect.String:
+ return v.String() == ""
+ }
+ return false
+}
+
+// ProtoPackageIsVersion2 is referenced from generated protocol buffer files
+// to assert that that code is compatible with this version of the proto package.
+const GoGoProtoPackageIsVersion2 = true
+
+// ProtoPackageIsVersion1 is referenced from generated protocol buffer files
+// to assert that that code is compatible with this version of the proto package.
+const GoGoProtoPackageIsVersion1 = true
+
+// InternalMessageInfo is a type used internally by generated .pb.go files.
+// This type is not intended to be used by non-generated code.
+// This type is not subject to any compatibility guarantee.
+type InternalMessageInfo struct {
+ marshal *marshalInfo
+ unmarshal *unmarshalInfo
+ merge *mergeInfo
+ discard *discardInfo
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/lib_gogo.go b/vendor/github.com/gogo/protobuf/proto/lib_gogo.go
new file mode 100644
index 0000000..b3aa391
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/lib_gogo.go
@@ -0,0 +1,50 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "encoding/json"
+ "strconv"
+)
+
+type Sizer interface {
+ Size() int
+}
+
+type ProtoSizer interface {
+ ProtoSize() int
+}
+
+func MarshalJSONEnum(m map[int32]string, value int32) ([]byte, error) {
+ s, ok := m[value]
+ if !ok {
+ s = strconv.Itoa(int(value))
+ }
+ return json.Marshal(s)
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/message_set.go b/vendor/github.com/gogo/protobuf/proto/message_set.go
new file mode 100644
index 0000000..3b6ca41
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/message_set.go
@@ -0,0 +1,314 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+/*
+ * Support for message sets.
+ */
+
+import (
+ "bytes"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "reflect"
+ "sort"
+ "sync"
+)
+
+// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID.
+// A message type ID is required for storing a protocol buffer in a message set.
+var errNoMessageTypeID = errors.New("proto does not have a message type ID")
+
+// The first two types (_MessageSet_Item and messageSet)
+// model what the protocol compiler produces for the following protocol message:
+// message MessageSet {
+// repeated group Item = 1 {
+// required int32 type_id = 2;
+// required string message = 3;
+// };
+// }
+// That is the MessageSet wire format. We can't use a proto to generate these
+// because that would introduce a circular dependency between it and this package.
+
+type _MessageSet_Item struct {
+ TypeId *int32 `protobuf:"varint,2,req,name=type_id"`
+ Message []byte `protobuf:"bytes,3,req,name=message"`
+}
+
+type messageSet struct {
+ Item []*_MessageSet_Item `protobuf:"group,1,rep"`
+ XXX_unrecognized []byte
+ // TODO: caching?
+}
+
+// Make sure messageSet is a Message.
+var _ Message = (*messageSet)(nil)
+
+// messageTypeIder is an interface satisfied by a protocol buffer type
+// that may be stored in a MessageSet.
+type messageTypeIder interface {
+ MessageTypeId() int32
+}
+
+func (ms *messageSet) find(pb Message) *_MessageSet_Item {
+ mti, ok := pb.(messageTypeIder)
+ if !ok {
+ return nil
+ }
+ id := mti.MessageTypeId()
+ for _, item := range ms.Item {
+ if *item.TypeId == id {
+ return item
+ }
+ }
+ return nil
+}
+
+func (ms *messageSet) Has(pb Message) bool {
+ return ms.find(pb) != nil
+}
+
+func (ms *messageSet) Unmarshal(pb Message) error {
+ if item := ms.find(pb); item != nil {
+ return Unmarshal(item.Message, pb)
+ }
+ if _, ok := pb.(messageTypeIder); !ok {
+ return errNoMessageTypeID
+ }
+ return nil // TODO: return error instead?
+}
+
+func (ms *messageSet) Marshal(pb Message) error {
+ msg, err := Marshal(pb)
+ if err != nil {
+ return err
+ }
+ if item := ms.find(pb); item != nil {
+ // reuse existing item
+ item.Message = msg
+ return nil
+ }
+
+ mti, ok := pb.(messageTypeIder)
+ if !ok {
+ return errNoMessageTypeID
+ }
+
+ mtid := mti.MessageTypeId()
+ ms.Item = append(ms.Item, &_MessageSet_Item{
+ TypeId: &mtid,
+ Message: msg,
+ })
+ return nil
+}
+
+func (ms *messageSet) Reset() { *ms = messageSet{} }
+func (ms *messageSet) String() string { return CompactTextString(ms) }
+func (*messageSet) ProtoMessage() {}
+
+// Support for the message_set_wire_format message option.
+
+func skipVarint(buf []byte) []byte {
+ i := 0
+ for ; buf[i]&0x80 != 0; i++ {
+ }
+ return buf[i+1:]
+}
+
+// MarshalMessageSet encodes the extension map represented by m in the message set wire format.
+// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option.
+func MarshalMessageSet(exts interface{}) ([]byte, error) {
+ return marshalMessageSet(exts, false)
+}
+
+// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal.
+func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) {
+ switch exts := exts.(type) {
+ case *XXX_InternalExtensions:
+ var u marshalInfo
+ siz := u.sizeMessageSet(exts)
+ b := make([]byte, 0, siz)
+ return u.appendMessageSet(b, exts, deterministic)
+
+ case map[int32]Extension:
+ // This is an old-style extension map.
+ // Wrap it in a new-style XXX_InternalExtensions.
+ ie := XXX_InternalExtensions{
+ p: &struct {
+ mu sync.Mutex
+ extensionMap map[int32]Extension
+ }{
+ extensionMap: exts,
+ },
+ }
+
+ var u marshalInfo
+ siz := u.sizeMessageSet(&ie)
+ b := make([]byte, 0, siz)
+ return u.appendMessageSet(b, &ie, deterministic)
+
+ default:
+ return nil, errors.New("proto: not an extension map")
+ }
+}
+
+// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format.
+// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option.
+func UnmarshalMessageSet(buf []byte, exts interface{}) error {
+ var m map[int32]Extension
+ switch exts := exts.(type) {
+ case *XXX_InternalExtensions:
+ m = exts.extensionsWrite()
+ case map[int32]Extension:
+ m = exts
+ default:
+ return errors.New("proto: not an extension map")
+ }
+
+ ms := new(messageSet)
+ if err := Unmarshal(buf, ms); err != nil {
+ return err
+ }
+ for _, item := range ms.Item {
+ id := *item.TypeId
+ msg := item.Message
+
+ // Restore wire type and field number varint, plus length varint.
+ // Be careful to preserve duplicate items.
+ b := EncodeVarint(uint64(id)<<3 | WireBytes)
+ if ext, ok := m[id]; ok {
+ // Existing data; rip off the tag and length varint
+ // so we join the new data correctly.
+ // We can assume that ext.enc is set because we are unmarshaling.
+ o := ext.enc[len(b):] // skip wire type and field number
+ _, n := DecodeVarint(o) // calculate length of length varint
+ o = o[n:] // skip length varint
+ msg = append(o, msg...) // join old data and new data
+ }
+ b = append(b, EncodeVarint(uint64(len(msg)))...)
+ b = append(b, msg...)
+
+ m[id] = Extension{enc: b}
+ }
+ return nil
+}
+
+// MarshalMessageSetJSON encodes the extension map represented by m in JSON format.
+// It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option.
+func MarshalMessageSetJSON(exts interface{}) ([]byte, error) {
+ var m map[int32]Extension
+ switch exts := exts.(type) {
+ case *XXX_InternalExtensions:
+ var mu sync.Locker
+ m, mu = exts.extensionsRead()
+ if m != nil {
+ // Keep the extensions map locked until we're done marshaling to prevent
+ // races between marshaling and unmarshaling the lazily-{en,de}coded
+ // values.
+ mu.Lock()
+ defer mu.Unlock()
+ }
+ case map[int32]Extension:
+ m = exts
+ default:
+ return nil, errors.New("proto: not an extension map")
+ }
+ var b bytes.Buffer
+ b.WriteByte('{')
+
+ // Process the map in key order for deterministic output.
+ ids := make([]int32, 0, len(m))
+ for id := range m {
+ ids = append(ids, id)
+ }
+ sort.Sort(int32Slice(ids)) // int32Slice defined in text.go
+
+ for i, id := range ids {
+ ext := m[id]
+ msd, ok := messageSetMap[id]
+ if !ok {
+ // Unknown type; we can't render it, so skip it.
+ continue
+ }
+
+ if i > 0 && b.Len() > 1 {
+ b.WriteByte(',')
+ }
+
+ fmt.Fprintf(&b, `"[%s]":`, msd.name)
+
+ x := ext.value
+ if x == nil {
+ x = reflect.New(msd.t.Elem()).Interface()
+ if err := Unmarshal(ext.enc, x.(Message)); err != nil {
+ return nil, err
+ }
+ }
+ d, err := json.Marshal(x)
+ if err != nil {
+ return nil, err
+ }
+ b.Write(d)
+ }
+ b.WriteByte('}')
+ return b.Bytes(), nil
+}
+
+// UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format.
+// It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option.
+func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error {
+ // Common-case fast path.
+ if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) {
+ return nil
+ }
+
+ // This is fairly tricky, and it's not clear that it is needed.
+ return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented")
+}
+
+// A global registry of types that can be used in a MessageSet.
+
+var messageSetMap = make(map[int32]messageSetDesc)
+
+type messageSetDesc struct {
+ t reflect.Type // pointer to struct
+ name string
+}
+
+// RegisterMessageSetType is called from the generated code.
+func RegisterMessageSetType(m Message, fieldNum int32, name string) {
+ messageSetMap[fieldNum] = messageSetDesc{
+ t: reflect.TypeOf(m),
+ name: name,
+ }
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go b/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go
new file mode 100644
index 0000000..b6cad90
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go
@@ -0,0 +1,357 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2012 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// +build purego appengine js
+
+// This file contains an implementation of proto field accesses using package reflect.
+// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can
+// be used on App Engine.
+
+package proto
+
+import (
+ "reflect"
+ "sync"
+)
+
+const unsafeAllowed = false
+
+// A field identifies a field in a struct, accessible from a pointer.
+// In this implementation, a field is identified by the sequence of field indices
+// passed to reflect's FieldByIndex.
+type field []int
+
+// toField returns a field equivalent to the given reflect field.
+func toField(f *reflect.StructField) field {
+ return f.Index
+}
+
+// invalidField is an invalid field identifier.
+var invalidField = field(nil)
+
+// zeroField is a noop when calling pointer.offset.
+var zeroField = field([]int{})
+
+// IsValid reports whether the field identifier is valid.
+func (f field) IsValid() bool { return f != nil }
+
+// The pointer type is for the table-driven decoder.
+// The implementation here uses a reflect.Value of pointer type to
+// create a generic pointer. In pointer_unsafe.go we use unsafe
+// instead of reflect to implement the same (but faster) interface.
+type pointer struct {
+ v reflect.Value
+}
+
+// toPointer converts an interface of pointer type to a pointer
+// that points to the same target.
+func toPointer(i *Message) pointer {
+ return pointer{v: reflect.ValueOf(*i)}
+}
+
+// toAddrPointer converts an interface to a pointer that points to
+// the interface data.
+func toAddrPointer(i *interface{}, isptr bool) pointer {
+ v := reflect.ValueOf(*i)
+ u := reflect.New(v.Type())
+ u.Elem().Set(v)
+ return pointer{v: u}
+}
+
+// valToPointer converts v to a pointer. v must be of pointer type.
+func valToPointer(v reflect.Value) pointer {
+ return pointer{v: v}
+}
+
+// offset converts from a pointer to a structure to a pointer to
+// one of its fields.
+func (p pointer) offset(f field) pointer {
+ return pointer{v: p.v.Elem().FieldByIndex(f).Addr()}
+}
+
+func (p pointer) isNil() bool {
+ return p.v.IsNil()
+}
+
+// grow updates the slice s in place to make it one element longer.
+// s must be addressable.
+// Returns the (addressable) new element.
+func grow(s reflect.Value) reflect.Value {
+ n, m := s.Len(), s.Cap()
+ if n < m {
+ s.SetLen(n + 1)
+ } else {
+ s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem())))
+ }
+ return s.Index(n)
+}
+
+func (p pointer) toInt64() *int64 {
+ return p.v.Interface().(*int64)
+}
+func (p pointer) toInt64Ptr() **int64 {
+ return p.v.Interface().(**int64)
+}
+func (p pointer) toInt64Slice() *[]int64 {
+ return p.v.Interface().(*[]int64)
+}
+
+var int32ptr = reflect.TypeOf((*int32)(nil))
+
+func (p pointer) toInt32() *int32 {
+ return p.v.Convert(int32ptr).Interface().(*int32)
+}
+
+// The toInt32Ptr/Slice methods don't work because of enums.
+// Instead, we must use set/get methods for the int32ptr/slice case.
+/*
+ func (p pointer) toInt32Ptr() **int32 {
+ return p.v.Interface().(**int32)
+}
+ func (p pointer) toInt32Slice() *[]int32 {
+ return p.v.Interface().(*[]int32)
+}
+*/
+func (p pointer) getInt32Ptr() *int32 {
+ if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+ // raw int32 type
+ return p.v.Elem().Interface().(*int32)
+ }
+ // an enum
+ return p.v.Elem().Convert(int32PtrType).Interface().(*int32)
+}
+func (p pointer) setInt32Ptr(v int32) {
+ // Allocate value in a *int32. Possibly convert that to a *enum.
+ // Then assign it to a **int32 or **enum.
+ // Note: we can convert *int32 to *enum, but we can't convert
+ // **int32 to **enum!
+ p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem()))
+}
+
+// getInt32Slice copies []int32 from p as a new slice.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) getInt32Slice() []int32 {
+ if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+ // raw int32 type
+ return p.v.Elem().Interface().([]int32)
+ }
+ // an enum
+ // Allocate a []int32, then assign []enum's values into it.
+ // Note: we can't convert []enum to []int32.
+ slice := p.v.Elem()
+ s := make([]int32, slice.Len())
+ for i := 0; i < slice.Len(); i++ {
+ s[i] = int32(slice.Index(i).Int())
+ }
+ return s
+}
+
+// setInt32Slice copies []int32 into p as a new slice.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) setInt32Slice(v []int32) {
+ if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+ // raw int32 type
+ p.v.Elem().Set(reflect.ValueOf(v))
+ return
+ }
+ // an enum
+ // Allocate a []enum, then assign []int32's values into it.
+ // Note: we can't convert []enum to []int32.
+ slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v))
+ for i, x := range v {
+ slice.Index(i).SetInt(int64(x))
+ }
+ p.v.Elem().Set(slice)
+}
+func (p pointer) appendInt32Slice(v int32) {
+ grow(p.v.Elem()).SetInt(int64(v))
+}
+
+func (p pointer) toUint64() *uint64 {
+ return p.v.Interface().(*uint64)
+}
+func (p pointer) toUint64Ptr() **uint64 {
+ return p.v.Interface().(**uint64)
+}
+func (p pointer) toUint64Slice() *[]uint64 {
+ return p.v.Interface().(*[]uint64)
+}
+func (p pointer) toUint32() *uint32 {
+ return p.v.Interface().(*uint32)
+}
+func (p pointer) toUint32Ptr() **uint32 {
+ return p.v.Interface().(**uint32)
+}
+func (p pointer) toUint32Slice() *[]uint32 {
+ return p.v.Interface().(*[]uint32)
+}
+func (p pointer) toBool() *bool {
+ return p.v.Interface().(*bool)
+}
+func (p pointer) toBoolPtr() **bool {
+ return p.v.Interface().(**bool)
+}
+func (p pointer) toBoolSlice() *[]bool {
+ return p.v.Interface().(*[]bool)
+}
+func (p pointer) toFloat64() *float64 {
+ return p.v.Interface().(*float64)
+}
+func (p pointer) toFloat64Ptr() **float64 {
+ return p.v.Interface().(**float64)
+}
+func (p pointer) toFloat64Slice() *[]float64 {
+ return p.v.Interface().(*[]float64)
+}
+func (p pointer) toFloat32() *float32 {
+ return p.v.Interface().(*float32)
+}
+func (p pointer) toFloat32Ptr() **float32 {
+ return p.v.Interface().(**float32)
+}
+func (p pointer) toFloat32Slice() *[]float32 {
+ return p.v.Interface().(*[]float32)
+}
+func (p pointer) toString() *string {
+ return p.v.Interface().(*string)
+}
+func (p pointer) toStringPtr() **string {
+ return p.v.Interface().(**string)
+}
+func (p pointer) toStringSlice() *[]string {
+ return p.v.Interface().(*[]string)
+}
+func (p pointer) toBytes() *[]byte {
+ return p.v.Interface().(*[]byte)
+}
+func (p pointer) toBytesSlice() *[][]byte {
+ return p.v.Interface().(*[][]byte)
+}
+func (p pointer) toExtensions() *XXX_InternalExtensions {
+ return p.v.Interface().(*XXX_InternalExtensions)
+}
+func (p pointer) toOldExtensions() *map[int32]Extension {
+ return p.v.Interface().(*map[int32]Extension)
+}
+func (p pointer) getPointer() pointer {
+ return pointer{v: p.v.Elem()}
+}
+func (p pointer) setPointer(q pointer) {
+ p.v.Elem().Set(q.v)
+}
+func (p pointer) appendPointer(q pointer) {
+ grow(p.v.Elem()).Set(q.v)
+}
+
+// getPointerSlice copies []*T from p as a new []pointer.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) getPointerSlice() []pointer {
+ if p.v.IsNil() {
+ return nil
+ }
+ n := p.v.Elem().Len()
+ s := make([]pointer, n)
+ for i := 0; i < n; i++ {
+ s[i] = pointer{v: p.v.Elem().Index(i)}
+ }
+ return s
+}
+
+// setPointerSlice copies []pointer into p as a new []*T.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) setPointerSlice(v []pointer) {
+ if v == nil {
+ p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem())
+ return
+ }
+ s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v))
+ for _, p := range v {
+ s = reflect.Append(s, p.v)
+ }
+ p.v.Elem().Set(s)
+}
+
+// getInterfacePointer returns a pointer that points to the
+// interface data of the interface pointed by p.
+func (p pointer) getInterfacePointer() pointer {
+ if p.v.Elem().IsNil() {
+ return pointer{v: p.v.Elem()}
+ }
+ return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct
+}
+
+func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
+ // TODO: check that p.v.Type().Elem() == t?
+ return p.v
+}
+
+func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
+}
+func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
+}
+func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
+}
+func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
+}
+func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
+}
+func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
+}
+func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
+}
+func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
+}
+
+var atomicLock sync.Mutex
diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go b/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go
new file mode 100644
index 0000000..7ffd3c2
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go
@@ -0,0 +1,59 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// +build purego appengine js
+
+// This file contains an implementation of proto field accesses using package reflect.
+// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can
+// be used on App Engine.
+
+package proto
+
+import (
+ "reflect"
+)
+
+// TODO: untested, so probably incorrect.
+
+func (p pointer) getRef() pointer {
+ return pointer{v: p.v.Addr()}
+}
+
+func (p pointer) appendRef(v pointer, typ reflect.Type) {
+ slice := p.getSlice(typ)
+ elem := v.asPointerTo(typ).Elem()
+ newSlice := reflect.Append(slice, elem)
+ slice.Set(newSlice)
+}
+
+func (p pointer) getSlice(typ reflect.Type) reflect.Value {
+ sliceTyp := reflect.SliceOf(typ)
+ slice := p.asPointerTo(sliceTyp)
+ slice = slice.Elem()
+ return slice
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go
new file mode 100644
index 0000000..d55a335
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go
@@ -0,0 +1,308 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2012 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// +build !purego,!appengine,!js
+
+// This file contains the implementation of the proto field accesses using package unsafe.
+
+package proto
+
+import (
+ "reflect"
+ "sync/atomic"
+ "unsafe"
+)
+
+const unsafeAllowed = true
+
+// A field identifies a field in a struct, accessible from a pointer.
+// In this implementation, a field is identified by its byte offset from the start of the struct.
+type field uintptr
+
+// toField returns a field equivalent to the given reflect field.
+func toField(f *reflect.StructField) field {
+ return field(f.Offset)
+}
+
+// invalidField is an invalid field identifier.
+const invalidField = ^field(0)
+
+// zeroField is a noop when calling pointer.offset.
+const zeroField = field(0)
+
+// IsValid reports whether the field identifier is valid.
+func (f field) IsValid() bool {
+ return f != invalidField
+}
+
+// The pointer type below is for the new table-driven encoder/decoder.
+// The implementation here uses unsafe.Pointer to create a generic pointer.
+// In pointer_reflect.go we use reflect instead of unsafe to implement
+// the same (but slower) interface.
+type pointer struct {
+ p unsafe.Pointer
+}
+
+// size of pointer
+var ptrSize = unsafe.Sizeof(uintptr(0))
+
+// toPointer converts an interface of pointer type to a pointer
+// that points to the same target.
+func toPointer(i *Message) pointer {
+ // Super-tricky - read pointer out of data word of interface value.
+ // Saves ~25ns over the equivalent:
+ // return valToPointer(reflect.ValueOf(*i))
+ return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
+}
+
+// toAddrPointer converts an interface to a pointer that points to
+// the interface data.
+func toAddrPointer(i *interface{}, isptr bool) pointer {
+ // Super-tricky - read or get the address of data word of interface value.
+ if isptr {
+ // The interface is of pointer type, thus it is a direct interface.
+ // The data word is the pointer data itself. We take its address.
+ return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}
+ }
+ // The interface is not of pointer type. The data word is the pointer
+ // to the data.
+ return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
+}
+
+// valToPointer converts v to a pointer. v must be of pointer type.
+func valToPointer(v reflect.Value) pointer {
+ return pointer{p: unsafe.Pointer(v.Pointer())}
+}
+
+// offset converts from a pointer to a structure to a pointer to
+// one of its fields.
+func (p pointer) offset(f field) pointer {
+ // For safety, we should panic if !f.IsValid, however calling panic causes
+ // this to no longer be inlineable, which is a serious performance cost.
+ /*
+ if !f.IsValid() {
+ panic("invalid field")
+ }
+ */
+ return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))}
+}
+
+func (p pointer) isNil() bool {
+ return p.p == nil
+}
+
+func (p pointer) toInt64() *int64 {
+ return (*int64)(p.p)
+}
+func (p pointer) toInt64Ptr() **int64 {
+ return (**int64)(p.p)
+}
+func (p pointer) toInt64Slice() *[]int64 {
+ return (*[]int64)(p.p)
+}
+func (p pointer) toInt32() *int32 {
+ return (*int32)(p.p)
+}
+
+// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist.
+/*
+ func (p pointer) toInt32Ptr() **int32 {
+ return (**int32)(p.p)
+ }
+ func (p pointer) toInt32Slice() *[]int32 {
+ return (*[]int32)(p.p)
+ }
+*/
+func (p pointer) getInt32Ptr() *int32 {
+ return *(**int32)(p.p)
+}
+func (p pointer) setInt32Ptr(v int32) {
+ *(**int32)(p.p) = &v
+}
+
+// getInt32Slice loads a []int32 from p.
+// The value returned is aliased with the original slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) getInt32Slice() []int32 {
+ return *(*[]int32)(p.p)
+}
+
+// setInt32Slice stores a []int32 to p.
+// The value set is aliased with the input slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) setInt32Slice(v []int32) {
+ *(*[]int32)(p.p) = v
+}
+
+// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead?
+func (p pointer) appendInt32Slice(v int32) {
+ s := (*[]int32)(p.p)
+ *s = append(*s, v)
+}
+
+func (p pointer) toUint64() *uint64 {
+ return (*uint64)(p.p)
+}
+func (p pointer) toUint64Ptr() **uint64 {
+ return (**uint64)(p.p)
+}
+func (p pointer) toUint64Slice() *[]uint64 {
+ return (*[]uint64)(p.p)
+}
+func (p pointer) toUint32() *uint32 {
+ return (*uint32)(p.p)
+}
+func (p pointer) toUint32Ptr() **uint32 {
+ return (**uint32)(p.p)
+}
+func (p pointer) toUint32Slice() *[]uint32 {
+ return (*[]uint32)(p.p)
+}
+func (p pointer) toBool() *bool {
+ return (*bool)(p.p)
+}
+func (p pointer) toBoolPtr() **bool {
+ return (**bool)(p.p)
+}
+func (p pointer) toBoolSlice() *[]bool {
+ return (*[]bool)(p.p)
+}
+func (p pointer) toFloat64() *float64 {
+ return (*float64)(p.p)
+}
+func (p pointer) toFloat64Ptr() **float64 {
+ return (**float64)(p.p)
+}
+func (p pointer) toFloat64Slice() *[]float64 {
+ return (*[]float64)(p.p)
+}
+func (p pointer) toFloat32() *float32 {
+ return (*float32)(p.p)
+}
+func (p pointer) toFloat32Ptr() **float32 {
+ return (**float32)(p.p)
+}
+func (p pointer) toFloat32Slice() *[]float32 {
+ return (*[]float32)(p.p)
+}
+func (p pointer) toString() *string {
+ return (*string)(p.p)
+}
+func (p pointer) toStringPtr() **string {
+ return (**string)(p.p)
+}
+func (p pointer) toStringSlice() *[]string {
+ return (*[]string)(p.p)
+}
+func (p pointer) toBytes() *[]byte {
+ return (*[]byte)(p.p)
+}
+func (p pointer) toBytesSlice() *[][]byte {
+ return (*[][]byte)(p.p)
+}
+func (p pointer) toExtensions() *XXX_InternalExtensions {
+ return (*XXX_InternalExtensions)(p.p)
+}
+func (p pointer) toOldExtensions() *map[int32]Extension {
+ return (*map[int32]Extension)(p.p)
+}
+
+// getPointerSlice loads []*T from p as a []pointer.
+// The value returned is aliased with the original slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) getPointerSlice() []pointer {
+ // Super-tricky - p should point to a []*T where T is a
+ // message type. We load it as []pointer.
+ return *(*[]pointer)(p.p)
+}
+
+// setPointerSlice stores []pointer into p as a []*T.
+// The value set is aliased with the input slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) setPointerSlice(v []pointer) {
+ // Super-tricky - p should point to a []*T where T is a
+ // message type. We store it as []pointer.
+ *(*[]pointer)(p.p) = v
+}
+
+// getPointer loads the pointer at p and returns it.
+func (p pointer) getPointer() pointer {
+ return pointer{p: *(*unsafe.Pointer)(p.p)}
+}
+
+// setPointer stores the pointer q at p.
+func (p pointer) setPointer(q pointer) {
+ *(*unsafe.Pointer)(p.p) = q.p
+}
+
+// append q to the slice pointed to by p.
+func (p pointer) appendPointer(q pointer) {
+ s := (*[]unsafe.Pointer)(p.p)
+ *s = append(*s, q.p)
+}
+
+// getInterfacePointer returns a pointer that points to the
+// interface data of the interface pointed by p.
+func (p pointer) getInterfacePointer() pointer {
+ // Super-tricky - read pointer out of data word of interface value.
+ return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]}
+}
+
+// asPointerTo returns a reflect.Value that is a pointer to an
+// object of type t stored at p.
+func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
+ return reflect.NewAt(t, p.p)
+}
+
+func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
+ return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
+ return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
+ return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
+ return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go
new file mode 100644
index 0000000..aca8eed
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go
@@ -0,0 +1,56 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// +build !purego,!appengine,!js
+
+// This file contains the implementation of the proto field accesses using package unsafe.
+
+package proto
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+func (p pointer) getRef() pointer {
+ return pointer{p: (unsafe.Pointer)(&p.p)}
+}
+
+func (p pointer) appendRef(v pointer, typ reflect.Type) {
+ slice := p.getSlice(typ)
+ elem := v.asPointerTo(typ).Elem()
+ newSlice := reflect.Append(slice, elem)
+ slice.Set(newSlice)
+}
+
+func (p pointer) getSlice(typ reflect.Type) reflect.Value {
+ sliceTyp := reflect.SliceOf(typ)
+ slice := p.asPointerTo(sliceTyp)
+ slice = slice.Elem()
+ return slice
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/properties.go b/vendor/github.com/gogo/protobuf/proto/properties.go
new file mode 100644
index 0000000..7a5e28e
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/properties.go
@@ -0,0 +1,600 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+/*
+ * Routines for encoding data into the wire format for protocol buffers.
+ */
+
+import (
+ "fmt"
+ "log"
+ "os"
+ "reflect"
+ "sort"
+ "strconv"
+ "strings"
+ "sync"
+)
+
+const debug bool = false
+
+// Constants that identify the encoding of a value on the wire.
+const (
+ WireVarint = 0
+ WireFixed64 = 1
+ WireBytes = 2
+ WireStartGroup = 3
+ WireEndGroup = 4
+ WireFixed32 = 5
+)
+
+// tagMap is an optimization over map[int]int for typical protocol buffer
+// use-cases. Encoded protocol buffers are often in tag order with small tag
+// numbers.
+type tagMap struct {
+ fastTags []int
+ slowTags map[int]int
+}
+
+// tagMapFastLimit is the upper bound on the tag number that will be stored in
+// the tagMap slice rather than its map.
+const tagMapFastLimit = 1024
+
+func (p *tagMap) get(t int) (int, bool) {
+ if t > 0 && t < tagMapFastLimit {
+ if t >= len(p.fastTags) {
+ return 0, false
+ }
+ fi := p.fastTags[t]
+ return fi, fi >= 0
+ }
+ fi, ok := p.slowTags[t]
+ return fi, ok
+}
+
+func (p *tagMap) put(t int, fi int) {
+ if t > 0 && t < tagMapFastLimit {
+ for len(p.fastTags) < t+1 {
+ p.fastTags = append(p.fastTags, -1)
+ }
+ p.fastTags[t] = fi
+ return
+ }
+ if p.slowTags == nil {
+ p.slowTags = make(map[int]int)
+ }
+ p.slowTags[t] = fi
+}
+
+// StructProperties represents properties for all the fields of a struct.
+// decoderTags and decoderOrigNames should only be used by the decoder.
+type StructProperties struct {
+ Prop []*Properties // properties for each field
+ reqCount int // required count
+ decoderTags tagMap // map from proto tag to struct field number
+ decoderOrigNames map[string]int // map from original name to struct field number
+ order []int // list of struct field numbers in tag order
+
+ // OneofTypes contains information about the oneof fields in this message.
+ // It is keyed by the original name of a field.
+ OneofTypes map[string]*OneofProperties
+}
+
+// OneofProperties represents information about a specific field in a oneof.
+type OneofProperties struct {
+ Type reflect.Type // pointer to generated struct type for this oneof field
+ Field int // struct field number of the containing oneof in the message
+ Prop *Properties
+}
+
+// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec.
+// See encode.go, (*Buffer).enc_struct.
+
+func (sp *StructProperties) Len() int { return len(sp.order) }
+func (sp *StructProperties) Less(i, j int) bool {
+ return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag
+}
+func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] }
+
+// Properties represents the protocol-specific behavior of a single struct field.
+type Properties struct {
+ Name string // name of the field, for error messages
+ OrigName string // original name before protocol compiler (always set)
+ JSONName string // name to use for JSON; determined by protoc
+ Wire string
+ WireType int
+ Tag int
+ Required bool
+ Optional bool
+ Repeated bool
+ Packed bool // relevant for repeated primitives only
+ Enum string // set for enum types only
+ proto3 bool // whether this is known to be a proto3 field; set for []byte only
+ oneof bool // whether this is a oneof field
+
+ Default string // default value
+ HasDefault bool // whether an explicit default was provided
+ CustomType string
+ CastType string
+ StdTime bool
+ StdDuration bool
+
+ stype reflect.Type // set for struct types only
+ ctype reflect.Type // set for custom types only
+ sprop *StructProperties // set for struct types only
+
+ mtype reflect.Type // set for map types only
+ mkeyprop *Properties // set for map types only
+ mvalprop *Properties // set for map types only
+}
+
+// String formats the properties in the protobuf struct field tag style.
+func (p *Properties) String() string {
+ s := p.Wire
+ s += ","
+ s += strconv.Itoa(p.Tag)
+ if p.Required {
+ s += ",req"
+ }
+ if p.Optional {
+ s += ",opt"
+ }
+ if p.Repeated {
+ s += ",rep"
+ }
+ if p.Packed {
+ s += ",packed"
+ }
+ s += ",name=" + p.OrigName
+ if p.JSONName != p.OrigName {
+ s += ",json=" + p.JSONName
+ }
+ if p.proto3 {
+ s += ",proto3"
+ }
+ if p.oneof {
+ s += ",oneof"
+ }
+ if len(p.Enum) > 0 {
+ s += ",enum=" + p.Enum
+ }
+ if p.HasDefault {
+ s += ",def=" + p.Default
+ }
+ return s
+}
+
+// Parse populates p by parsing a string in the protobuf struct field tag style.
+func (p *Properties) Parse(s string) {
+ // "bytes,49,opt,name=foo,def=hello!"
+ fields := strings.Split(s, ",") // breaks def=, but handled below.
+ if len(fields) < 2 {
+ fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s)
+ return
+ }
+
+ p.Wire = fields[0]
+ switch p.Wire {
+ case "varint":
+ p.WireType = WireVarint
+ case "fixed32":
+ p.WireType = WireFixed32
+ case "fixed64":
+ p.WireType = WireFixed64
+ case "zigzag32":
+ p.WireType = WireVarint
+ case "zigzag64":
+ p.WireType = WireVarint
+ case "bytes", "group":
+ p.WireType = WireBytes
+ // no numeric converter for non-numeric types
+ default:
+ fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s)
+ return
+ }
+
+ var err error
+ p.Tag, err = strconv.Atoi(fields[1])
+ if err != nil {
+ return
+ }
+
+outer:
+ for i := 2; i < len(fields); i++ {
+ f := fields[i]
+ switch {
+ case f == "req":
+ p.Required = true
+ case f == "opt":
+ p.Optional = true
+ case f == "rep":
+ p.Repeated = true
+ case f == "packed":
+ p.Packed = true
+ case strings.HasPrefix(f, "name="):
+ p.OrigName = f[5:]
+ case strings.HasPrefix(f, "json="):
+ p.JSONName = f[5:]
+ case strings.HasPrefix(f, "enum="):
+ p.Enum = f[5:]
+ case f == "proto3":
+ p.proto3 = true
+ case f == "oneof":
+ p.oneof = true
+ case strings.HasPrefix(f, "def="):
+ p.HasDefault = true
+ p.Default = f[4:] // rest of string
+ if i+1 < len(fields) {
+ // Commas aren't escaped, and def is always last.
+ p.Default += "," + strings.Join(fields[i+1:], ",")
+ break outer
+ }
+ case strings.HasPrefix(f, "embedded="):
+ p.OrigName = strings.Split(f, "=")[1]
+ case strings.HasPrefix(f, "customtype="):
+ p.CustomType = strings.Split(f, "=")[1]
+ case strings.HasPrefix(f, "casttype="):
+ p.CastType = strings.Split(f, "=")[1]
+ case f == "stdtime":
+ p.StdTime = true
+ case f == "stdduration":
+ p.StdDuration = true
+ }
+ }
+}
+
+var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem()
+
+// setFieldProps initializes the field properties for submessages and maps.
+func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) {
+ isMap := typ.Kind() == reflect.Map
+ if len(p.CustomType) > 0 && !isMap {
+ p.ctype = typ
+ p.setTag(lockGetProp)
+ return
+ }
+ if p.StdTime && !isMap {
+ p.setTag(lockGetProp)
+ return
+ }
+ if p.StdDuration && !isMap {
+ p.setTag(lockGetProp)
+ return
+ }
+ switch t1 := typ; t1.Kind() {
+ case reflect.Struct:
+ p.stype = typ
+ case reflect.Ptr:
+ if t1.Elem().Kind() == reflect.Struct {
+ p.stype = t1.Elem()
+ }
+ case reflect.Slice:
+ switch t2 := t1.Elem(); t2.Kind() {
+ case reflect.Ptr:
+ switch t3 := t2.Elem(); t3.Kind() {
+ case reflect.Struct:
+ p.stype = t3
+ }
+ case reflect.Struct:
+ p.stype = t2
+ }
+
+ case reflect.Map:
+
+ p.mtype = t1
+ p.mkeyprop = &Properties{}
+ p.mkeyprop.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp)
+ p.mvalprop = &Properties{}
+ vtype := p.mtype.Elem()
+ if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice {
+ // The value type is not a message (*T) or bytes ([]byte),
+ // so we need encoders for the pointer to this type.
+ vtype = reflect.PtrTo(vtype)
+ }
+
+ p.mvalprop.CustomType = p.CustomType
+ p.mvalprop.StdDuration = p.StdDuration
+ p.mvalprop.StdTime = p.StdTime
+ p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp)
+ }
+ p.setTag(lockGetProp)
+}
+
+func (p *Properties) setTag(lockGetProp bool) {
+ if p.stype != nil {
+ if lockGetProp {
+ p.sprop = GetProperties(p.stype)
+ } else {
+ p.sprop = getPropertiesLocked(p.stype)
+ }
+ }
+}
+
+var (
+ marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()
+)
+
+// Init populates the properties from a protocol buffer struct tag.
+func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) {
+ p.init(typ, name, tag, f, true)
+}
+
+func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) {
+ // "bytes,49,opt,def=hello!"
+ p.Name = name
+ p.OrigName = name
+ if tag == "" {
+ return
+ }
+ p.Parse(tag)
+ p.setFieldProps(typ, f, lockGetProp)
+}
+
+var (
+ propertiesMu sync.RWMutex
+ propertiesMap = make(map[reflect.Type]*StructProperties)
+)
+
+// GetProperties returns the list of properties for the type represented by t.
+// t must represent a generated struct type of a protocol message.
+func GetProperties(t reflect.Type) *StructProperties {
+ if t.Kind() != reflect.Struct {
+ panic("proto: type must have kind struct")
+ }
+
+ // Most calls to GetProperties in a long-running program will be
+ // retrieving details for types we have seen before.
+ propertiesMu.RLock()
+ sprop, ok := propertiesMap[t]
+ propertiesMu.RUnlock()
+ if ok {
+ if collectStats {
+ stats.Chit++
+ }
+ return sprop
+ }
+
+ propertiesMu.Lock()
+ sprop = getPropertiesLocked(t)
+ propertiesMu.Unlock()
+ return sprop
+}
+
+// getPropertiesLocked requires that propertiesMu is held.
+func getPropertiesLocked(t reflect.Type) *StructProperties {
+ if prop, ok := propertiesMap[t]; ok {
+ if collectStats {
+ stats.Chit++
+ }
+ return prop
+ }
+ if collectStats {
+ stats.Cmiss++
+ }
+
+ prop := new(StructProperties)
+ // in case of recursive protos, fill this in now.
+ propertiesMap[t] = prop
+
+ // build properties
+ prop.Prop = make([]*Properties, t.NumField())
+ prop.order = make([]int, t.NumField())
+
+ isOneofMessage := false
+ for i := 0; i < t.NumField(); i++ {
+ f := t.Field(i)
+ p := new(Properties)
+ name := f.Name
+ p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false)
+
+ oneof := f.Tag.Get("protobuf_oneof") // special case
+ if oneof != "" {
+ isOneofMessage = true
+ // Oneof fields don't use the traditional protobuf tag.
+ p.OrigName = oneof
+ }
+ prop.Prop[i] = p
+ prop.order[i] = i
+ if debug {
+ print(i, " ", f.Name, " ", t.String(), " ")
+ if p.Tag > 0 {
+ print(p.String())
+ }
+ print("\n")
+ }
+ }
+
+ // Re-order prop.order.
+ sort.Sort(prop)
+
+ type oneofMessage interface {
+ XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
+ }
+ if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); isOneofMessage && ok {
+ var oots []interface{}
+ _, _, _, oots = om.XXX_OneofFuncs()
+
+ // Interpret oneof metadata.
+ prop.OneofTypes = make(map[string]*OneofProperties)
+ for _, oot := range oots {
+ oop := &OneofProperties{
+ Type: reflect.ValueOf(oot).Type(), // *T
+ Prop: new(Properties),
+ }
+ sft := oop.Type.Elem().Field(0)
+ oop.Prop.Name = sft.Name
+ oop.Prop.Parse(sft.Tag.Get("protobuf"))
+ // There will be exactly one interface field that
+ // this new value is assignable to.
+ for i := 0; i < t.NumField(); i++ {
+ f := t.Field(i)
+ if f.Type.Kind() != reflect.Interface {
+ continue
+ }
+ if !oop.Type.AssignableTo(f.Type) {
+ continue
+ }
+ oop.Field = i
+ break
+ }
+ prop.OneofTypes[oop.Prop.OrigName] = oop
+ }
+ }
+
+ // build required counts
+ // build tags
+ reqCount := 0
+ prop.decoderOrigNames = make(map[string]int)
+ for i, p := range prop.Prop {
+ if strings.HasPrefix(p.Name, "XXX_") {
+ // Internal fields should not appear in tags/origNames maps.
+ // They are handled specially when encoding and decoding.
+ continue
+ }
+ if p.Required {
+ reqCount++
+ }
+ prop.decoderTags.put(p.Tag, i)
+ prop.decoderOrigNames[p.OrigName] = i
+ }
+ prop.reqCount = reqCount
+
+ return prop
+}
+
+// A global registry of enum types.
+// The generated code will register the generated maps by calling RegisterEnum.
+
+var enumValueMaps = make(map[string]map[string]int32)
+var enumStringMaps = make(map[string]map[int32]string)
+
+// RegisterEnum is called from the generated code to install the enum descriptor
+// maps into the global table to aid parsing text format protocol buffers.
+func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) {
+ if _, ok := enumValueMaps[typeName]; ok {
+ panic("proto: duplicate enum registered: " + typeName)
+ }
+ enumValueMaps[typeName] = valueMap
+ if _, ok := enumStringMaps[typeName]; ok {
+ panic("proto: duplicate enum registered: " + typeName)
+ }
+ enumStringMaps[typeName] = unusedNameMap
+}
+
+// EnumValueMap returns the mapping from names to integers of the
+// enum type enumType, or a nil if not found.
+func EnumValueMap(enumType string) map[string]int32 {
+ return enumValueMaps[enumType]
+}
+
+// A registry of all linked message types.
+// The string is a fully-qualified proto name ("pkg.Message").
+var (
+ protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers
+ protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types
+ revProtoTypes = make(map[reflect.Type]string)
+)
+
+// RegisterType is called from generated code and maps from the fully qualified
+// proto name to the type (pointer to struct) of the protocol buffer.
+func RegisterType(x Message, name string) {
+ if _, ok := protoTypedNils[name]; ok {
+ // TODO: Some day, make this a panic.
+ log.Printf("proto: duplicate proto type registered: %s", name)
+ return
+ }
+ t := reflect.TypeOf(x)
+ if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 {
+ // Generated code always calls RegisterType with nil x.
+ // This check is just for extra safety.
+ protoTypedNils[name] = x
+ } else {
+ protoTypedNils[name] = reflect.Zero(t).Interface().(Message)
+ }
+ revProtoTypes[t] = name
+}
+
+// RegisterMapType is called from generated code and maps from the fully qualified
+// proto name to the native map type of the proto map definition.
+func RegisterMapType(x interface{}, name string) {
+ if reflect.TypeOf(x).Kind() != reflect.Map {
+ panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name))
+ }
+ if _, ok := protoMapTypes[name]; ok {
+ log.Printf("proto: duplicate proto type registered: %s", name)
+ return
+ }
+ t := reflect.TypeOf(x)
+ protoMapTypes[name] = t
+ revProtoTypes[t] = name
+}
+
+// MessageName returns the fully-qualified proto name for the given message type.
+func MessageName(x Message) string {
+ type xname interface {
+ XXX_MessageName() string
+ }
+ if m, ok := x.(xname); ok {
+ return m.XXX_MessageName()
+ }
+ return revProtoTypes[reflect.TypeOf(x)]
+}
+
+// MessageType returns the message type (pointer to struct) for a named message.
+// The type is not guaranteed to implement proto.Message if the name refers to a
+// map entry.
+func MessageType(name string) reflect.Type {
+ if t, ok := protoTypedNils[name]; ok {
+ return reflect.TypeOf(t)
+ }
+ return protoMapTypes[name]
+}
+
+// A registry of all linked proto files.
+var (
+ protoFiles = make(map[string][]byte) // file name => fileDescriptor
+)
+
+// RegisterFile is called from generated code and maps from the
+// full file name of a .proto file to its compressed FileDescriptorProto.
+func RegisterFile(filename string, fileDescriptor []byte) {
+ protoFiles[filename] = fileDescriptor
+}
+
+// FileDescriptor returns the compressed FileDescriptorProto for a .proto file.
+func FileDescriptor(filename string) []byte { return protoFiles[filename] }
diff --git a/vendor/github.com/gogo/protobuf/proto/properties_gogo.go b/vendor/github.com/gogo/protobuf/proto/properties_gogo.go
new file mode 100644
index 0000000..40ea3dd
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/properties_gogo.go
@@ -0,0 +1,36 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "reflect"
+)
+
+var sizerType = reflect.TypeOf((*Sizer)(nil)).Elem()
+var protosizerType = reflect.TypeOf((*ProtoSizer)(nil)).Elem()
diff --git a/vendor/github.com/gogo/protobuf/proto/skip_gogo.go b/vendor/github.com/gogo/protobuf/proto/skip_gogo.go
new file mode 100644
index 0000000..5a5fd93
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/skip_gogo.go
@@ -0,0 +1,119 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "fmt"
+ "io"
+)
+
+func Skip(data []byte) (n int, err error) {
+ l := len(data)
+ index := 0
+ for index < l {
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if index >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ b := data[index]
+ index++
+ wire |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ wireType := int(wire & 0x7)
+ switch wireType {
+ case 0:
+ for {
+ if index >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ index++
+ if data[index-1] < 0x80 {
+ break
+ }
+ }
+ return index, nil
+ case 1:
+ index += 8
+ return index, nil
+ case 2:
+ var length int
+ for shift := uint(0); ; shift += 7 {
+ if index >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ b := data[index]
+ index++
+ length |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ index += length
+ return index, nil
+ case 3:
+ for {
+ var innerWire uint64
+ var start int = index
+ for shift := uint(0); ; shift += 7 {
+ if index >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ b := data[index]
+ index++
+ innerWire |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ innerWireType := int(innerWire & 0x7)
+ if innerWireType == 4 {
+ break
+ }
+ next, err := Skip(data[start:])
+ if err != nil {
+ return 0, err
+ }
+ index = start + next
+ }
+ return index, nil
+ case 4:
+ return index, nil
+ case 5:
+ index += 4
+ return index, nil
+ default:
+ return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
+ }
+ }
+ panic("unreachable")
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/table_marshal.go b/vendor/github.com/gogo/protobuf/proto/table_marshal.go
new file mode 100644
index 0000000..3d233d1
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/table_marshal.go
@@ -0,0 +1,2799 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "errors"
+ "fmt"
+ "math"
+ "reflect"
+ "sort"
+ "strconv"
+ "strings"
+ "sync"
+ "sync/atomic"
+ "unicode/utf8"
+)
+
+// a sizer takes a pointer to a field and the size of its tag, computes the size of
+// the encoded data.
+type sizer func(pointer, int) int
+
+// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format),
+// marshals the field to the end of the slice, returns the slice and error (if any).
+type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error)
+
+// marshalInfo is the information used for marshaling a message.
+type marshalInfo struct {
+ typ reflect.Type
+ fields []*marshalFieldInfo
+ unrecognized field // offset of XXX_unrecognized
+ extensions field // offset of XXX_InternalExtensions
+ v1extensions field // offset of XXX_extensions
+ sizecache field // offset of XXX_sizecache
+ initialized int32 // 0 -- only typ is set, 1 -- fully initialized
+ messageset bool // uses message set wire format
+ hasmarshaler bool // has custom marshaler
+ sync.RWMutex // protect extElems map, also for initialization
+ extElems map[int32]*marshalElemInfo // info of extension elements
+
+ hassizer bool // has custom sizer
+ hasprotosizer bool // has custom protosizer
+
+ bytesExtensions field // offset of XXX_extensions where the field type is []byte
+}
+
+// marshalFieldInfo is the information used for marshaling a field of a message.
+type marshalFieldInfo struct {
+ field field
+ wiretag uint64 // tag in wire format
+ tagsize int // size of tag in wire format
+ sizer sizer
+ marshaler marshaler
+ isPointer bool
+ required bool // field is required
+ name string // name of the field, for error reporting
+ oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements
+}
+
+// marshalElemInfo is the information used for marshaling an extension or oneof element.
+type marshalElemInfo struct {
+ wiretag uint64 // tag in wire format
+ tagsize int // size of tag in wire format
+ sizer sizer
+ marshaler marshaler
+ isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only)
+}
+
+var (
+ marshalInfoMap = map[reflect.Type]*marshalInfo{}
+ marshalInfoLock sync.Mutex
+)
+
+// getMarshalInfo returns the information to marshal a given type of message.
+// The info it returns may not necessarily initialized.
+// t is the type of the message (NOT the pointer to it).
+func getMarshalInfo(t reflect.Type) *marshalInfo {
+ marshalInfoLock.Lock()
+ u, ok := marshalInfoMap[t]
+ if !ok {
+ u = &marshalInfo{typ: t}
+ marshalInfoMap[t] = u
+ }
+ marshalInfoLock.Unlock()
+ return u
+}
+
+// Size is the entry point from generated code,
+// and should be ONLY called by generated code.
+// It computes the size of encoded data of msg.
+// a is a pointer to a place to store cached marshal info.
+func (a *InternalMessageInfo) Size(msg Message) int {
+ u := getMessageMarshalInfo(msg, a)
+ ptr := toPointer(&msg)
+ if ptr.isNil() {
+ // We get here if msg is a typed nil ((*SomeMessage)(nil)),
+ // so it satisfies the interface, and msg == nil wouldn't
+ // catch it. We don't want crash in this case.
+ return 0
+ }
+ return u.size(ptr)
+}
+
+// Marshal is the entry point from generated code,
+// and should be ONLY called by generated code.
+// It marshals msg to the end of b.
+// a is a pointer to a place to store cached marshal info.
+func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) {
+ u := getMessageMarshalInfo(msg, a)
+ ptr := toPointer(&msg)
+ if ptr.isNil() {
+ // We get here if msg is a typed nil ((*SomeMessage)(nil)),
+ // so it satisfies the interface, and msg == nil wouldn't
+ // catch it. We don't want crash in this case.
+ return b, ErrNil
+ }
+ return u.marshal(b, ptr, deterministic)
+}
+
+func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo {
+ // u := a.marshal, but atomically.
+ // We use an atomic here to ensure memory consistency.
+ u := atomicLoadMarshalInfo(&a.marshal)
+ if u == nil {
+ // Get marshal information from type of message.
+ t := reflect.ValueOf(msg).Type()
+ if t.Kind() != reflect.Ptr {
+ panic(fmt.Sprintf("cannot handle non-pointer message type %v", t))
+ }
+ u = getMarshalInfo(t.Elem())
+ // Store it in the cache for later users.
+ // a.marshal = u, but atomically.
+ atomicStoreMarshalInfo(&a.marshal, u)
+ }
+ return u
+}
+
+// size is the main function to compute the size of the encoded data of a message.
+// ptr is the pointer to the message.
+func (u *marshalInfo) size(ptr pointer) int {
+ if atomic.LoadInt32(&u.initialized) == 0 {
+ u.computeMarshalInfo()
+ }
+
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ if u.hasmarshaler {
+ // Uses the message's Size method if available
+ if u.hassizer {
+ s := ptr.asPointerTo(u.typ).Interface().(Sizer)
+ return s.Size()
+ }
+ // Uses the message's ProtoSize method if available
+ if u.hasprotosizer {
+ s := ptr.asPointerTo(u.typ).Interface().(ProtoSizer)
+ return s.ProtoSize()
+ }
+
+ m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
+ b, _ := m.Marshal()
+ return len(b)
+ }
+
+ n := 0
+ for _, f := range u.fields {
+ if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
+ // nil pointer always marshals to nothing
+ continue
+ }
+ n += f.sizer(ptr.offset(f.field), f.tagsize)
+ }
+ if u.extensions.IsValid() {
+ e := ptr.offset(u.extensions).toExtensions()
+ if u.messageset {
+ n += u.sizeMessageSet(e)
+ } else {
+ n += u.sizeExtensions(e)
+ }
+ }
+ if u.v1extensions.IsValid() {
+ m := *ptr.offset(u.v1extensions).toOldExtensions()
+ n += u.sizeV1Extensions(m)
+ }
+ if u.bytesExtensions.IsValid() {
+ s := *ptr.offset(u.bytesExtensions).toBytes()
+ n += len(s)
+ }
+ if u.unrecognized.IsValid() {
+ s := *ptr.offset(u.unrecognized).toBytes()
+ n += len(s)
+ }
+
+ // cache the result for use in marshal
+ if u.sizecache.IsValid() {
+ atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n))
+ }
+ return n
+}
+
+// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated),
+// fall back to compute the size.
+func (u *marshalInfo) cachedsize(ptr pointer) int {
+ if u.sizecache.IsValid() {
+ return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32()))
+ }
+ return u.size(ptr)
+}
+
+// marshal is the main function to marshal a message. It takes a byte slice and appends
+// the encoded data to the end of the slice, returns the slice and error (if any).
+// ptr is the pointer to the message.
+// If deterministic is true, map is marshaled in deterministic order.
+func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) {
+ if atomic.LoadInt32(&u.initialized) == 0 {
+ u.computeMarshalInfo()
+ }
+
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ if u.hasmarshaler {
+ if deterministic {
+ return nil, errors.New("proto: deterministic not supported by the Marshal method of " + u.typ.String())
+ }
+ m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
+ b1, err := m.Marshal()
+ b = append(b, b1...)
+ return b, err
+ }
+
+ var err, errreq error
+ // The old marshaler encodes extensions at beginning.
+ if u.extensions.IsValid() {
+ e := ptr.offset(u.extensions).toExtensions()
+ if u.messageset {
+ b, err = u.appendMessageSet(b, e, deterministic)
+ } else {
+ b, err = u.appendExtensions(b, e, deterministic)
+ }
+ if err != nil {
+ return b, err
+ }
+ }
+ if u.v1extensions.IsValid() {
+ m := *ptr.offset(u.v1extensions).toOldExtensions()
+ b, err = u.appendV1Extensions(b, m, deterministic)
+ if err != nil {
+ return b, err
+ }
+ }
+ if u.bytesExtensions.IsValid() {
+ s := *ptr.offset(u.bytesExtensions).toBytes()
+ b = append(b, s...)
+ }
+ for _, f := range u.fields {
+ if f.required && errreq == nil {
+ if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
+ // Required field is not set.
+ // We record the error but keep going, to give a complete marshaling.
+ errreq = &RequiredNotSetError{f.name}
+ continue
+ }
+ }
+ if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
+ // nil pointer always marshals to nothing
+ continue
+ }
+ b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic)
+ if err != nil {
+ if err1, ok := err.(*RequiredNotSetError); ok {
+ // Required field in submessage is not set.
+ // We record the error but keep going, to give a complete marshaling.
+ if errreq == nil {
+ errreq = &RequiredNotSetError{f.name + "." + err1.field}
+ }
+ continue
+ }
+ if err == errRepeatedHasNil {
+ err = errors.New("proto: repeated field " + f.name + " has nil element")
+ }
+ return b, err
+ }
+ }
+ if u.unrecognized.IsValid() {
+ s := *ptr.offset(u.unrecognized).toBytes()
+ b = append(b, s...)
+ }
+ return b, errreq
+}
+
+// computeMarshalInfo initializes the marshal info.
+func (u *marshalInfo) computeMarshalInfo() {
+ u.Lock()
+ defer u.Unlock()
+ if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock
+ return
+ }
+
+ t := u.typ
+ u.unrecognized = invalidField
+ u.extensions = invalidField
+ u.v1extensions = invalidField
+ u.bytesExtensions = invalidField
+ u.sizecache = invalidField
+ isOneofMessage := false
+
+ if reflect.PtrTo(t).Implements(sizerType) {
+ u.hassizer = true
+ }
+ if reflect.PtrTo(t).Implements(protosizerType) {
+ u.hasprotosizer = true
+ }
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ if reflect.PtrTo(t).Implements(marshalerType) {
+ u.hasmarshaler = true
+ atomic.StoreInt32(&u.initialized, 1)
+ return
+ }
+
+ n := t.NumField()
+
+ // deal with XXX fields first
+ for i := 0; i < t.NumField(); i++ {
+ f := t.Field(i)
+ if f.Tag.Get("protobuf_oneof") != "" {
+ isOneofMessage = true
+ }
+ if !strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ switch f.Name {
+ case "XXX_sizecache":
+ u.sizecache = toField(&f)
+ case "XXX_unrecognized":
+ u.unrecognized = toField(&f)
+ case "XXX_InternalExtensions":
+ u.extensions = toField(&f)
+ u.messageset = f.Tag.Get("protobuf_messageset") == "1"
+ case "XXX_extensions":
+ if f.Type.Kind() == reflect.Map {
+ u.v1extensions = toField(&f)
+ } else {
+ u.bytesExtensions = toField(&f)
+ }
+ case "XXX_NoUnkeyedLiteral":
+ // nothing to do
+ default:
+ panic("unknown XXX field: " + f.Name)
+ }
+ n--
+ }
+
+ // get oneof implementers
+ var oneofImplementers []interface{}
+ // gogo: isOneofMessage is needed for embedded oneof messages, without a marshaler and unmarshaler
+ if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok && isOneofMessage {
+ _, _, _, oneofImplementers = m.XXX_OneofFuncs()
+ }
+
+ // normal fields
+ fields := make([]marshalFieldInfo, n) // batch allocation
+ u.fields = make([]*marshalFieldInfo, 0, n)
+ for i, j := 0, 0; i < t.NumField(); i++ {
+ f := t.Field(i)
+
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ field := &fields[j]
+ j++
+ field.name = f.Name
+ u.fields = append(u.fields, field)
+ if f.Tag.Get("protobuf_oneof") != "" {
+ field.computeOneofFieldInfo(&f, oneofImplementers)
+ continue
+ }
+ if f.Tag.Get("protobuf") == "" {
+ // field has no tag (not in generated message), ignore it
+ u.fields = u.fields[:len(u.fields)-1]
+ j--
+ continue
+ }
+ field.computeMarshalFieldInfo(&f)
+ }
+
+ // fields are marshaled in tag order on the wire.
+ sort.Sort(byTag(u.fields))
+
+ atomic.StoreInt32(&u.initialized, 1)
+}
+
+// helper for sorting fields by tag
+type byTag []*marshalFieldInfo
+
+func (a byTag) Len() int { return len(a) }
+func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag }
+
+// getExtElemInfo returns the information to marshal an extension element.
+// The info it returns is initialized.
+func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo {
+ // get from cache first
+ u.RLock()
+ e, ok := u.extElems[desc.Field]
+ u.RUnlock()
+ if ok {
+ return e
+ }
+
+ t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct
+ tags := strings.Split(desc.Tag, ",")
+ tag, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("tag is not an integer")
+ }
+ wt := wiretype(tags[0])
+ sizr, marshalr := typeMarshaler(t, tags, false, false)
+ e = &marshalElemInfo{
+ wiretag: uint64(tag)<<3 | wt,
+ tagsize: SizeVarint(uint64(tag) << 3),
+ sizer: sizr,
+ marshaler: marshalr,
+ isptr: t.Kind() == reflect.Ptr,
+ }
+
+ // update cache
+ u.Lock()
+ if u.extElems == nil {
+ u.extElems = make(map[int32]*marshalElemInfo)
+ }
+ u.extElems[desc.Field] = e
+ u.Unlock()
+ return e
+}
+
+// computeMarshalFieldInfo fills up the information to marshal a field.
+func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) {
+ // parse protobuf tag of the field.
+ // tag has format of "bytes,49,opt,name=foo,def=hello!"
+ tags := strings.Split(f.Tag.Get("protobuf"), ",")
+ if tags[0] == "" {
+ return
+ }
+ tag, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("tag is not an integer")
+ }
+ wt := wiretype(tags[0])
+ if tags[2] == "req" {
+ fi.required = true
+ }
+ fi.setTag(f, tag, wt)
+ fi.setMarshaler(f, tags)
+}
+
+func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) {
+ fi.field = toField(f)
+ fi.wiretag = 1<<31 - 1 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire.
+ fi.isPointer = true
+ fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f)
+ fi.oneofElems = make(map[reflect.Type]*marshalElemInfo)
+
+ ityp := f.Type // interface type
+ for _, o := range oneofImplementers {
+ t := reflect.TypeOf(o)
+ if !t.Implements(ityp) {
+ continue
+ }
+ sf := t.Elem().Field(0) // oneof implementer is a struct with a single field
+ tags := strings.Split(sf.Tag.Get("protobuf"), ",")
+ tag, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("tag is not an integer")
+ }
+ wt := wiretype(tags[0])
+ sizr, marshalr := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value
+ fi.oneofElems[t.Elem()] = &marshalElemInfo{
+ wiretag: uint64(tag)<<3 | wt,
+ tagsize: SizeVarint(uint64(tag) << 3),
+ sizer: sizr,
+ marshaler: marshalr,
+ }
+ }
+}
+
+type oneofMessage interface {
+ XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
+}
+
+// wiretype returns the wire encoding of the type.
+func wiretype(encoding string) uint64 {
+ switch encoding {
+ case "fixed32":
+ return WireFixed32
+ case "fixed64":
+ return WireFixed64
+ case "varint", "zigzag32", "zigzag64":
+ return WireVarint
+ case "bytes":
+ return WireBytes
+ case "group":
+ return WireStartGroup
+ }
+ panic("unknown wire type " + encoding)
+}
+
+// setTag fills up the tag (in wire format) and its size in the info of a field.
+func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) {
+ fi.field = toField(f)
+ fi.wiretag = uint64(tag)<<3 | wt
+ fi.tagsize = SizeVarint(uint64(tag) << 3)
+}
+
+// setMarshaler fills up the sizer and marshaler in the info of a field.
+func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) {
+ switch f.Type.Kind() {
+ case reflect.Map:
+ // map field
+ fi.isPointer = true
+ fi.sizer, fi.marshaler = makeMapMarshaler(f)
+ return
+ case reflect.Ptr, reflect.Slice:
+ fi.isPointer = true
+ }
+ fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false)
+}
+
+// typeMarshaler returns the sizer and marshaler of a given field.
+// t is the type of the field.
+// tags is the generated "protobuf" tag of the field.
+// If nozero is true, zero value is not marshaled to the wire.
+// If oneof is true, it is a oneof field.
+func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) {
+ encoding := tags[0]
+
+ pointer := false
+ slice := false
+ if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
+ slice = true
+ t = t.Elem()
+ }
+ if t.Kind() == reflect.Ptr {
+ pointer = true
+ t = t.Elem()
+ }
+
+ packed := false
+ proto3 := false
+ ctype := false
+ isTime := false
+ isDuration := false
+ for i := 2; i < len(tags); i++ {
+ if tags[i] == "packed" {
+ packed = true
+ }
+ if tags[i] == "proto3" {
+ proto3 = true
+ }
+ if strings.HasPrefix(tags[i], "customtype=") {
+ ctype = true
+ }
+ if tags[i] == "stdtime" {
+ isTime = true
+ }
+ if tags[i] == "stdduration" {
+ isDuration = true
+ }
+ }
+ if !proto3 && !pointer && !slice {
+ nozero = false
+ }
+
+ if ctype {
+ if reflect.PtrTo(t).Implements(customType) {
+ if slice {
+ return makeMessageRefSliceMarshaler(getMarshalInfo(t))
+ }
+ if pointer {
+ return makeCustomPtrMarshaler(getMarshalInfo(t))
+ }
+ return makeCustomMarshaler(getMarshalInfo(t))
+ } else {
+ panic(fmt.Sprintf("custom type: type: %v, does not implement the proto.custom interface", t))
+ }
+ }
+
+ if isTime {
+ if pointer {
+ if slice {
+ return makeTimePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeTimePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeTimeSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeTimeMarshaler(getMarshalInfo(t))
+ }
+
+ if isDuration {
+ if pointer {
+ if slice {
+ return makeDurationPtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeDurationPtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeDurationSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeDurationMarshaler(getMarshalInfo(t))
+ }
+
+ switch t.Kind() {
+ case reflect.Bool:
+ if pointer {
+ return sizeBoolPtr, appendBoolPtr
+ }
+ if slice {
+ if packed {
+ return sizeBoolPackedSlice, appendBoolPackedSlice
+ }
+ return sizeBoolSlice, appendBoolSlice
+ }
+ if nozero {
+ return sizeBoolValueNoZero, appendBoolValueNoZero
+ }
+ return sizeBoolValue, appendBoolValue
+ case reflect.Uint32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return sizeFixed32Ptr, appendFixed32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixed32PackedSlice, appendFixed32PackedSlice
+ }
+ return sizeFixed32Slice, appendFixed32Slice
+ }
+ if nozero {
+ return sizeFixed32ValueNoZero, appendFixed32ValueNoZero
+ }
+ return sizeFixed32Value, appendFixed32Value
+ case "varint":
+ if pointer {
+ return sizeVarint32Ptr, appendVarint32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarint32PackedSlice, appendVarint32PackedSlice
+ }
+ return sizeVarint32Slice, appendVarint32Slice
+ }
+ if nozero {
+ return sizeVarint32ValueNoZero, appendVarint32ValueNoZero
+ }
+ return sizeVarint32Value, appendVarint32Value
+ }
+ case reflect.Int32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return sizeFixedS32Ptr, appendFixedS32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixedS32PackedSlice, appendFixedS32PackedSlice
+ }
+ return sizeFixedS32Slice, appendFixedS32Slice
+ }
+ if nozero {
+ return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero
+ }
+ return sizeFixedS32Value, appendFixedS32Value
+ case "varint":
+ if pointer {
+ return sizeVarintS32Ptr, appendVarintS32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarintS32PackedSlice, appendVarintS32PackedSlice
+ }
+ return sizeVarintS32Slice, appendVarintS32Slice
+ }
+ if nozero {
+ return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero
+ }
+ return sizeVarintS32Value, appendVarintS32Value
+ case "zigzag32":
+ if pointer {
+ return sizeZigzag32Ptr, appendZigzag32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeZigzag32PackedSlice, appendZigzag32PackedSlice
+ }
+ return sizeZigzag32Slice, appendZigzag32Slice
+ }
+ if nozero {
+ return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero
+ }
+ return sizeZigzag32Value, appendZigzag32Value
+ }
+ case reflect.Uint64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return sizeFixed64Ptr, appendFixed64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixed64PackedSlice, appendFixed64PackedSlice
+ }
+ return sizeFixed64Slice, appendFixed64Slice
+ }
+ if nozero {
+ return sizeFixed64ValueNoZero, appendFixed64ValueNoZero
+ }
+ return sizeFixed64Value, appendFixed64Value
+ case "varint":
+ if pointer {
+ return sizeVarint64Ptr, appendVarint64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarint64PackedSlice, appendVarint64PackedSlice
+ }
+ return sizeVarint64Slice, appendVarint64Slice
+ }
+ if nozero {
+ return sizeVarint64ValueNoZero, appendVarint64ValueNoZero
+ }
+ return sizeVarint64Value, appendVarint64Value
+ }
+ case reflect.Int64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return sizeFixedS64Ptr, appendFixedS64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixedS64PackedSlice, appendFixedS64PackedSlice
+ }
+ return sizeFixedS64Slice, appendFixedS64Slice
+ }
+ if nozero {
+ return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero
+ }
+ return sizeFixedS64Value, appendFixedS64Value
+ case "varint":
+ if pointer {
+ return sizeVarintS64Ptr, appendVarintS64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarintS64PackedSlice, appendVarintS64PackedSlice
+ }
+ return sizeVarintS64Slice, appendVarintS64Slice
+ }
+ if nozero {
+ return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero
+ }
+ return sizeVarintS64Value, appendVarintS64Value
+ case "zigzag64":
+ if pointer {
+ return sizeZigzag64Ptr, appendZigzag64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeZigzag64PackedSlice, appendZigzag64PackedSlice
+ }
+ return sizeZigzag64Slice, appendZigzag64Slice
+ }
+ if nozero {
+ return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero
+ }
+ return sizeZigzag64Value, appendZigzag64Value
+ }
+ case reflect.Float32:
+ if pointer {
+ return sizeFloat32Ptr, appendFloat32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFloat32PackedSlice, appendFloat32PackedSlice
+ }
+ return sizeFloat32Slice, appendFloat32Slice
+ }
+ if nozero {
+ return sizeFloat32ValueNoZero, appendFloat32ValueNoZero
+ }
+ return sizeFloat32Value, appendFloat32Value
+ case reflect.Float64:
+ if pointer {
+ return sizeFloat64Ptr, appendFloat64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFloat64PackedSlice, appendFloat64PackedSlice
+ }
+ return sizeFloat64Slice, appendFloat64Slice
+ }
+ if nozero {
+ return sizeFloat64ValueNoZero, appendFloat64ValueNoZero
+ }
+ return sizeFloat64Value, appendFloat64Value
+ case reflect.String:
+ if pointer {
+ return sizeStringPtr, appendStringPtr
+ }
+ if slice {
+ return sizeStringSlice, appendStringSlice
+ }
+ if nozero {
+ return sizeStringValueNoZero, appendStringValueNoZero
+ }
+ return sizeStringValue, appendStringValue
+ case reflect.Slice:
+ if slice {
+ return sizeBytesSlice, appendBytesSlice
+ }
+ if oneof {
+ // Oneof bytes field may also have "proto3" tag.
+ // We want to marshal it as a oneof field. Do this
+ // check before the proto3 check.
+ return sizeBytesOneof, appendBytesOneof
+ }
+ if proto3 {
+ return sizeBytes3, appendBytes3
+ }
+ return sizeBytes, appendBytes
+ case reflect.Struct:
+ switch encoding {
+ case "group":
+ if slice {
+ return makeGroupSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeGroupMarshaler(getMarshalInfo(t))
+ case "bytes":
+ if pointer {
+ if slice {
+ return makeMessageSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeMessageMarshaler(getMarshalInfo(t))
+ } else {
+ if slice {
+ return makeMessageRefSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeMessageRefMarshaler(getMarshalInfo(t))
+ }
+ }
+ }
+ panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding))
+}
+
+// Below are functions to size/marshal a specific type of a field.
+// They are stored in the field's info, and called by function pointers.
+// They have type sizer or marshaler.
+
+func sizeFixed32Value(_ pointer, tagsize int) int {
+ return 4 + tagsize
+}
+func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixed32Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixed32Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ return (4 + tagsize) * len(s)
+}
+func sizeFixed32PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFixedS32Value(_ pointer, tagsize int) int {
+ return 4 + tagsize
+}
+func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixedS32Ptr(ptr pointer, tagsize int) int {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixedS32Slice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ return (4 + tagsize) * len(s)
+}
+func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFloat32Value(_ pointer, tagsize int) int {
+ return 4 + tagsize
+}
+func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int {
+ v := math.Float32bits(*ptr.toFloat32())
+ if v == 0 {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFloat32Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toFloat32Ptr()
+ if p == nil {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFloat32Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat32Slice()
+ return (4 + tagsize) * len(s)
+}
+func sizeFloat32PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFixed64Value(_ pointer, tagsize int) int {
+ return 8 + tagsize
+}
+func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixed64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixed64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ return (8 + tagsize) * len(s)
+}
+func sizeFixed64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeFixedS64Value(_ pointer, tagsize int) int {
+ return 8 + tagsize
+}
+func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixedS64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixedS64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ return (8 + tagsize) * len(s)
+}
+func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeFloat64Value(_ pointer, tagsize int) int {
+ return 8 + tagsize
+}
+func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int {
+ v := math.Float64bits(*ptr.toFloat64())
+ if v == 0 {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFloat64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toFloat64Ptr()
+ if p == nil {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFloat64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat64Slice()
+ return (8 + tagsize) * len(s)
+}
+func sizeFloat64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeVarint32Value(ptr pointer, tagsize int) int {
+ v := *ptr.toUint32()
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarint32Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarint32Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v)) + tagsize
+ }
+ return n
+}
+func sizeVarint32PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarintS32Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS32Ptr(ptr pointer, tagsize int) int {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarintS32Slice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v)) + tagsize
+ }
+ return n
+}
+func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarint64Value(ptr pointer, tagsize int) int {
+ v := *ptr.toUint64()
+ return SizeVarint(v) + tagsize
+}
+func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(v) + tagsize
+}
+func sizeVarint64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(*p) + tagsize
+}
+func sizeVarint64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(v) + tagsize
+ }
+ return n
+}
+func sizeVarint64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(v)
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarintS64Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarintS64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v)) + tagsize
+ }
+ return n
+}
+func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeZigzag32Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32Ptr(ptr pointer, tagsize int) int {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return 0
+ }
+ v := *p
+ return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32Slice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+ }
+ return n
+}
+func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeZigzag64Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return 0
+ }
+ v := *p
+ return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+ }
+ return n
+}
+func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeBoolValue(_ pointer, tagsize int) int {
+ return 1 + tagsize
+}
+func sizeBoolValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toBool()
+ if !v {
+ return 0
+ }
+ return 1 + tagsize
+}
+func sizeBoolPtr(ptr pointer, tagsize int) int {
+ p := *ptr.toBoolPtr()
+ if p == nil {
+ return 0
+ }
+ return 1 + tagsize
+}
+func sizeBoolSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toBoolSlice()
+ return (1 + tagsize) * len(s)
+}
+func sizeBoolPackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toBoolSlice()
+ if len(s) == 0 {
+ return 0
+ }
+ return len(s) + SizeVarint(uint64(len(s))) + tagsize
+}
+func sizeStringValue(ptr pointer, tagsize int) int {
+ v := *ptr.toString()
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toString()
+ if v == "" {
+ return 0
+ }
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringPtr(ptr pointer, tagsize int) int {
+ p := *ptr.toStringPtr()
+ if p == nil {
+ return 0
+ }
+ v := *p
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toStringSlice()
+ n := 0
+ for _, v := range s {
+ n += len(v) + SizeVarint(uint64(len(v))) + tagsize
+ }
+ return n
+}
+func sizeBytes(ptr pointer, tagsize int) int {
+ v := *ptr.toBytes()
+ if v == nil {
+ return 0
+ }
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytes3(ptr pointer, tagsize int) int {
+ v := *ptr.toBytes()
+ if len(v) == 0 {
+ return 0
+ }
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytesOneof(ptr pointer, tagsize int) int {
+ v := *ptr.toBytes()
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytesSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toBytesSlice()
+ n := 0
+ for _, v := range s {
+ n += len(v) + SizeVarint(uint64(len(v))) + tagsize
+ }
+ return n
+}
+
+// appendFixed32 appends an encoded fixed32 to b.
+func appendFixed32(b []byte, v uint32) []byte {
+ b = append(b,
+ byte(v),
+ byte(v>>8),
+ byte(v>>16),
+ byte(v>>24))
+ return b
+}
+
+// appendFixed64 appends an encoded fixed64 to b.
+func appendFixed64(b []byte, v uint64) []byte {
+ b = append(b,
+ byte(v),
+ byte(v>>8),
+ byte(v>>16),
+ byte(v>>24),
+ byte(v>>32),
+ byte(v>>40),
+ byte(v>>48),
+ byte(v>>56))
+ return b
+}
+
+// appendVarint appends an encoded varint to b.
+func appendVarint(b []byte, v uint64) []byte {
+ // TODO: make 1-byte (maybe 2-byte) case inline-able, once we
+ // have non-leaf inliner.
+ switch {
+ case v < 1<<7:
+ b = append(b, byte(v))
+ case v < 1<<14:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte(v>>7))
+ case v < 1<<21:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte(v>>14))
+ case v < 1<<28:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte(v>>21))
+ case v < 1<<35:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte(v>>28))
+ case v < 1<<42:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte(v>>35))
+ case v < 1<<49:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte(v>>42))
+ case v < 1<<56:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte((v>>42)&0x7f|0x80),
+ byte(v>>49))
+ case v < 1<<63:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte((v>>42)&0x7f|0x80),
+ byte((v>>49)&0x7f|0x80),
+ byte(v>>56))
+ default:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte((v>>42)&0x7f|0x80),
+ byte((v>>49)&0x7f|0x80),
+ byte((v>>56)&0x7f|0x80),
+ 1)
+ }
+ return b
+}
+
+func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, *p)
+ return b, nil
+}
+func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ }
+ return b, nil
+}
+func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(4*len(s)))
+ for _, v := range s {
+ b = appendFixed32(b, v)
+ }
+ return b, nil
+}
+func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(v))
+ return b, nil
+}
+func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(v))
+ return b, nil
+}
+func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(*p))
+ return b, nil
+}
+func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(v))
+ }
+ return b, nil
+}
+func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(4*len(s)))
+ for _, v := range s {
+ b = appendFixed32(b, uint32(v))
+ }
+ return b, nil
+}
+func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float32bits(*ptr.toFloat32())
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float32bits(*ptr.toFloat32())
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toFloat32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, math.Float32bits(*p))
+ return b, nil
+}
+func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, math.Float32bits(v))
+ }
+ return b, nil
+}
+func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(4*len(s)))
+ for _, v := range s {
+ b = appendFixed32(b, math.Float32bits(v))
+ }
+ return b, nil
+}
+func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, *p)
+ return b, nil
+}
+func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ }
+ return b, nil
+}
+func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(8*len(s)))
+ for _, v := range s {
+ b = appendFixed64(b, v)
+ }
+ return b, nil
+}
+func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(v))
+ return b, nil
+}
+func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(v))
+ return b, nil
+}
+func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(*p))
+ return b, nil
+}
+func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(v))
+ }
+ return b, nil
+}
+func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(8*len(s)))
+ for _, v := range s {
+ b = appendFixed64(b, uint64(v))
+ }
+ return b, nil
+}
+func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float64bits(*ptr.toFloat64())
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float64bits(*ptr.toFloat64())
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toFloat64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, math.Float64bits(*p))
+ return b, nil
+}
+func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, math.Float64bits(v))
+ }
+ return b, nil
+}
+func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(8*len(s)))
+ for _, v := range s {
+ b = appendFixed64(b, math.Float64bits(v))
+ }
+ return b, nil
+}
+func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(*p))
+ return b, nil
+}
+func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(*p))
+ return b, nil
+}
+func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, v)
+ return b, nil
+}
+func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, v)
+ return b, nil
+}
+func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, *p)
+ return b, nil
+}
+func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, v)
+ }
+ return b, nil
+}
+func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(v)
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, v)
+ }
+ return b, nil
+}
+func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(*p))
+ return b, nil
+}
+func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ return b, nil
+}
+func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ return b, nil
+}
+func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ v := *p
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ return b, nil
+}
+func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ }
+ return b, nil
+}
+func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ }
+ return b, nil
+}
+func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ return b, nil
+}
+func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ return b, nil
+}
+func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ v := *p
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ return b, nil
+}
+func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ }
+ return b, nil
+}
+func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ }
+ return b, nil
+}
+func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBool()
+ b = appendVarint(b, wiretag)
+ if v {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ return b, nil
+}
+func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBool()
+ if !v {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = append(b, 1)
+ return b, nil
+}
+
+func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toBoolPtr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ if *p {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ return b, nil
+}
+func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toBoolSlice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ if v {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ }
+ return b, nil
+}
+func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toBoolSlice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(len(s)))
+ for _, v := range s {
+ if v {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ }
+ return b, nil
+}
+func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toString()
+ if !utf8.ValidString(v) {
+ return nil, errInvalidUTF8
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toString()
+ if v == "" {
+ return b, nil
+ }
+ if !utf8.ValidString(v) {
+ return nil, errInvalidUTF8
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toStringPtr()
+ if p == nil {
+ return b, nil
+ }
+ v := *p
+ if !utf8.ValidString(v) {
+ return nil, errInvalidUTF8
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toStringSlice()
+ for _, v := range s {
+ if !utf8.ValidString(v) {
+ return nil, errInvalidUTF8
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ }
+ return b, nil
+}
+func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBytes()
+ if v == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBytes()
+ if len(v) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBytes()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toBytesSlice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ }
+ return b, nil
+}
+
+// makeGroupMarshaler returns the sizer and marshaler for a group.
+// u is the marshal info of the underlying message.
+func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return 0
+ }
+ return u.size(p) + 2*tagsize
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return b, nil
+ }
+ var err error
+ b = appendVarint(b, wiretag) // start group
+ b, err = u.marshal(b, p, deterministic)
+ b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group
+ return b, err
+ }
+}
+
+// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice.
+// u is the marshal info of the underlying message.
+func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getPointerSlice()
+ n := 0
+ for _, v := range s {
+ if v.isNil() {
+ continue
+ }
+ n += u.size(v) + 2*tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getPointerSlice()
+ var err, errreq error
+ for _, v := range s {
+ if v.isNil() {
+ return b, errRepeatedHasNil
+ }
+ b = appendVarint(b, wiretag) // start group
+ b, err = u.marshal(b, v, deterministic)
+ b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group
+ if err != nil {
+ if _, ok := err.(*RequiredNotSetError); ok {
+ // Required field in submessage is not set.
+ // We record the error but keep going, to give a complete marshaling.
+ if errreq == nil {
+ errreq = err
+ }
+ continue
+ }
+ if err == ErrNil {
+ err = errRepeatedHasNil
+ }
+ return b, err
+ }
+ }
+ return b, errreq
+ }
+}
+
+// makeMessageMarshaler returns the sizer and marshaler for a message field.
+// u is the marshal info of the message.
+func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return 0
+ }
+ siz := u.size(p)
+ return siz + SizeVarint(uint64(siz)) + tagsize
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ siz := u.cachedsize(p)
+ b = appendVarint(b, uint64(siz))
+ return u.marshal(b, p, deterministic)
+ }
+}
+
+// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice.
+// u is the marshal info of the message.
+func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getPointerSlice()
+ n := 0
+ for _, v := range s {
+ if v.isNil() {
+ continue
+ }
+ siz := u.size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getPointerSlice()
+ var err, errreq error
+ for _, v := range s {
+ if v.isNil() {
+ return b, errRepeatedHasNil
+ }
+ b = appendVarint(b, wiretag)
+ siz := u.cachedsize(v)
+ b = appendVarint(b, uint64(siz))
+ b, err = u.marshal(b, v, deterministic)
+ if err != nil {
+ if _, ok := err.(*RequiredNotSetError); ok {
+ // Required field in submessage is not set.
+ // We record the error but keep going, to give a complete marshaling.
+ if errreq == nil {
+ errreq = err
+ }
+ continue
+ }
+ if err == ErrNil {
+ err = errRepeatedHasNil
+ }
+ return b, err
+ }
+ }
+ return b, errreq
+ }
+}
+
+// makeMapMarshaler returns the sizer and marshaler for a map field.
+// f is the pointer to the reflect data structure of the field.
+func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {
+ // figure out key and value type
+ t := f.Type
+ keyType := t.Key()
+ valType := t.Elem()
+ tags := strings.Split(f.Tag.Get("protobuf"), ",")
+ keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",")
+ valTags := strings.Split(f.Tag.Get("protobuf_val"), ",")
+ for _, t := range tags {
+ if strings.HasPrefix(t, "customtype=") {
+ valTags = append(valTags, t)
+ }
+ if t == "stdtime" {
+ valTags = append(valTags, t)
+ }
+ if t == "stdduration" {
+ valTags = append(valTags, t)
+ }
+ }
+ keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map
+ valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map
+ keyWireTag := 1<<3 | wiretype(keyTags[0])
+ valWireTag := 2<<3 | wiretype(valTags[0])
+
+ // We create an interface to get the addresses of the map key and value.
+ // If value is pointer-typed, the interface is a direct interface, the
+ // idata itself is the value. Otherwise, the idata is the pointer to the
+ // value.
+ // Key cannot be pointer-typed.
+ valIsPtr := valType.Kind() == reflect.Ptr
+ return func(ptr pointer, tagsize int) int {
+ m := ptr.asPointerTo(t).Elem() // the map
+ n := 0
+ for _, k := range m.MapKeys() {
+ ki := k.Interface()
+ vi := m.MapIndex(k).Interface()
+ kaddr := toAddrPointer(&ki, false) // pointer to key
+ vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value
+ siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) {
+ m := ptr.asPointerTo(t).Elem() // the map
+ var err error
+ keys := m.MapKeys()
+ if len(keys) > 1 && deterministic {
+ sort.Sort(mapKeys(keys))
+ }
+ for _, k := range keys {
+ ki := k.Interface()
+ vi := m.MapIndex(k).Interface()
+ kaddr := toAddrPointer(&ki, false) // pointer to key
+ vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value
+ b = appendVarint(b, tag)
+ siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
+ b = appendVarint(b, uint64(siz))
+ b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic)
+ if err != nil {
+ return b, err
+ }
+ b, err = valMarshaler(b, vaddr, valWireTag, deterministic)
+ if err != nil && err != ErrNil { // allow nil value in map
+ return b, err
+ }
+ }
+ return b, nil
+ }
+}
+
+// makeOneOfMarshaler returns the sizer and marshaler for a oneof field.
+// fi is the marshal info of the field.
+// f is the pointer to the reflect data structure of the field.
+func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) {
+ // Oneof field is an interface. We need to get the actual data type on the fly.
+ t := f.Type
+ return func(ptr pointer, _ int) int {
+ p := ptr.getInterfacePointer()
+ if p.isNil() {
+ return 0
+ }
+ v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct
+ telem := v.Type()
+ e := fi.oneofElems[telem]
+ return e.sizer(p, e.tagsize)
+ },
+ func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) {
+ p := ptr.getInterfacePointer()
+ if p.isNil() {
+ return b, nil
+ }
+ v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct
+ telem := v.Type()
+ if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() {
+ return b, errOneofHasNil
+ }
+ e := fi.oneofElems[telem]
+ return e.marshaler(b, p, e.wiretag, deterministic)
+ }
+}
+
+// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field.
+func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return 0
+ }
+ mu.Lock()
+
+ n := 0
+ for _, e := range m {
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ n += len(e.enc)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ n += ei.sizer(p, ei.tagsize)
+ }
+ mu.Unlock()
+ return n
+}
+
+// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b.
+func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return b, nil
+ }
+ mu.Lock()
+ defer mu.Unlock()
+
+ var err error
+
+ // Fast-path for common cases: zero or one extensions.
+ // Don't bother sorting the keys.
+ if len(m) <= 1 {
+ for _, e := range m {
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ b = append(b, e.enc...)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+ if err != nil {
+ return b, err
+ }
+ }
+ return b, nil
+ }
+
+ // Sort the keys to provide a deterministic encoding.
+ // Not sure this is required, but the old code does it.
+ keys := make([]int, 0, len(m))
+ for k := range m {
+ keys = append(keys, int(k))
+ }
+ sort.Ints(keys)
+
+ for _, k := range keys {
+ e := m[int32(k)]
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ b = append(b, e.enc...)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+ if err != nil {
+ return b, err
+ }
+ }
+ return b, nil
+}
+
+// message set format is:
+// message MessageSet {
+// repeated group Item = 1 {
+// required int32 type_id = 2;
+// required string message = 3;
+// };
+// }
+
+// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field
+// in message set format (above).
+func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return 0
+ }
+ mu.Lock()
+
+ n := 0
+ for id, e := range m {
+ n += 2 // start group, end group. tag = 1 (size=1)
+ n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1)
+
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+ siz := len(msgWithLen)
+ n += siz + 1 // message, tag = 3 (size=1)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ n += ei.sizer(p, 1) // message, tag = 3 (size=1)
+ }
+ mu.Unlock()
+ return n
+}
+
+// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above)
+// to the end of byte slice b.
+func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return b, nil
+ }
+ mu.Lock()
+ defer mu.Unlock()
+
+ var err error
+
+ // Fast-path for common cases: zero or one extensions.
+ // Don't bother sorting the keys.
+ if len(m) <= 1 {
+ for id, e := range m {
+ b = append(b, 1<<3|WireStartGroup)
+ b = append(b, 2<<3|WireVarint)
+ b = appendVarint(b, uint64(id))
+
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+ b = append(b, 3<<3|WireBytes)
+ b = append(b, msgWithLen...)
+ b = append(b, 1<<3|WireEndGroup)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
+ if err != nil {
+ return b, err
+ }
+ b = append(b, 1<<3|WireEndGroup)
+ }
+ return b, nil
+ }
+
+ // Sort the keys to provide a deterministic encoding.
+ keys := make([]int, 0, len(m))
+ for k := range m {
+ keys = append(keys, int(k))
+ }
+ sort.Ints(keys)
+
+ for _, id := range keys {
+ e := m[int32(id)]
+ b = append(b, 1<<3|WireStartGroup)
+ b = append(b, 2<<3|WireVarint)
+ b = appendVarint(b, uint64(id))
+
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+ b = append(b, 3<<3|WireBytes)
+ b = append(b, msgWithLen...)
+ b = append(b, 1<<3|WireEndGroup)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
+ b = append(b, 1<<3|WireEndGroup)
+ if err != nil {
+ return b, err
+ }
+ }
+ return b, nil
+}
+
+// sizeV1Extensions computes the size of encoded data for a V1-API extension field.
+func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int {
+ if m == nil {
+ return 0
+ }
+
+ n := 0
+ for _, e := range m {
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ n += len(e.enc)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ n += ei.sizer(p, ei.tagsize)
+ }
+ return n
+}
+
+// appendV1Extensions marshals a V1-API extension field to the end of byte slice b.
+func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) {
+ if m == nil {
+ return b, nil
+ }
+
+ // Sort the keys to provide a deterministic encoding.
+ keys := make([]int, 0, len(m))
+ for k := range m {
+ keys = append(keys, int(k))
+ }
+ sort.Ints(keys)
+
+ var err error
+ for _, k := range keys {
+ e := m[int32(k)]
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ b = append(b, e.enc...)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+ if err != nil {
+ return b, err
+ }
+ }
+ return b, nil
+}
+
+// newMarshaler is the interface representing objects that can marshal themselves.
+//
+// This exists to support protoc-gen-go generated messages.
+// The proto package will stop type-asserting to this interface in the future.
+//
+// DO NOT DEPEND ON THIS.
+type newMarshaler interface {
+ XXX_Size() int
+ XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
+}
+
+// Size returns the encoded size of a protocol buffer message.
+// This is the main entry point.
+func Size(pb Message) int {
+ if m, ok := pb.(newMarshaler); ok {
+ return m.XXX_Size()
+ }
+ if m, ok := pb.(Marshaler); ok {
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ b, _ := m.Marshal()
+ return len(b)
+ }
+ // in case somehow we didn't generate the wrapper
+ if pb == nil {
+ return 0
+ }
+ var info InternalMessageInfo
+ return info.Size(pb)
+}
+
+// Marshal takes a protocol buffer message
+// and encodes it into the wire format, returning the data.
+// This is the main entry point.
+func Marshal(pb Message) ([]byte, error) {
+ if m, ok := pb.(newMarshaler); ok {
+ siz := m.XXX_Size()
+ b := make([]byte, 0, siz)
+ return m.XXX_Marshal(b, false)
+ }
+ if m, ok := pb.(Marshaler); ok {
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ return m.Marshal()
+ }
+ // in case somehow we didn't generate the wrapper
+ if pb == nil {
+ return nil, ErrNil
+ }
+ var info InternalMessageInfo
+ siz := info.Size(pb)
+ b := make([]byte, 0, siz)
+ return info.Marshal(b, pb, false)
+}
+
+// Marshal takes a protocol buffer message
+// and encodes it into the wire format, writing the result to the
+// Buffer.
+// This is an alternative entry point. It is not necessary to use
+// a Buffer for most applications.
+func (p *Buffer) Marshal(pb Message) error {
+ var err error
+ if m, ok := pb.(newMarshaler); ok {
+ siz := m.XXX_Size()
+ p.grow(siz) // make sure buf has enough capacity
+ p.buf, err = m.XXX_Marshal(p.buf, p.deterministic)
+ return err
+ }
+ if m, ok := pb.(Marshaler); ok {
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ var b []byte
+ b, err = m.Marshal()
+ p.buf = append(p.buf, b...)
+ return err
+ }
+ // in case somehow we didn't generate the wrapper
+ if pb == nil {
+ return ErrNil
+ }
+ var info InternalMessageInfo
+ siz := info.Size(pb)
+ p.grow(siz) // make sure buf has enough capacity
+ p.buf, err = info.Marshal(p.buf, pb, p.deterministic)
+ return err
+}
+
+// grow grows the buffer's capacity, if necessary, to guarantee space for
+// another n bytes. After grow(n), at least n bytes can be written to the
+// buffer without another allocation.
+func (p *Buffer) grow(n int) {
+ need := len(p.buf) + n
+ if need <= cap(p.buf) {
+ return
+ }
+ newCap := len(p.buf) * 2
+ if newCap < need {
+ newCap = need
+ }
+ p.buf = append(make([]byte, 0, newCap), p.buf...)
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go b/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go
new file mode 100644
index 0000000..997f57c
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go
@@ -0,0 +1,388 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "reflect"
+ "time"
+)
+
+// makeMessageRefMarshaler differs a bit from makeMessageMarshaler
+// It marshal a message T instead of a *T
+func makeMessageRefMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ siz := u.size(ptr)
+ return siz + SizeVarint(uint64(siz)) + tagsize
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ b = appendVarint(b, wiretag)
+ siz := u.cachedsize(ptr)
+ b = appendVarint(b, uint64(siz))
+ return u.marshal(b, ptr, deterministic)
+ }
+}
+
+// makeMessageRefSliceMarshaler differs quite a lot from makeMessageSliceMarshaler
+// It marshals a slice of messages []T instead of []*T
+func makeMessageRefSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ e := elem.Interface()
+ v := toAddrPointer(&e, false)
+ siz := u.size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ var err, errreq error
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ e := elem.Interface()
+ v := toAddrPointer(&e, false)
+ b = appendVarint(b, wiretag)
+ siz := u.size(v)
+ b = appendVarint(b, uint64(siz))
+ b, err = u.marshal(b, v, deterministic)
+
+ if err != nil {
+ if _, ok := err.(*RequiredNotSetError); ok {
+ // Required field in submessage is not set.
+ // We record the error but keep going, to give a complete marshaling.
+ if errreq == nil {
+ errreq = err
+ }
+ continue
+ }
+ if err == ErrNil {
+ err = errRepeatedHasNil
+ }
+ return b, err
+ }
+ }
+
+ return b, errreq
+ }
+}
+
+func makeCustomPtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ m := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(custom)
+ siz := m.Size()
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ m := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(custom)
+ siz := m.Size()
+ buf, err := m.Marshal()
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeCustomMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ m := ptr.asPointerTo(u.typ).Interface().(custom)
+ siz := m.Size()
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ m := ptr.asPointerTo(u.typ).Interface().(custom)
+ siz := m.Size()
+ buf, err := m.Marshal()
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeTimeMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return 0
+ }
+ siz := Size(ts)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return nil, err
+ }
+ buf, err := Marshal(ts)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeTimePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return 0
+ }
+ siz := Size(ts)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return nil, err
+ }
+ buf, err := Marshal(ts)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeTimeSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(time.Time)
+ ts, err := timestampProto(t)
+ if err != nil {
+ return 0
+ }
+ siz := Size(ts)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(time.Time)
+ ts, err := timestampProto(t)
+ if err != nil {
+ return nil, err
+ }
+ siz := Size(ts)
+ buf, err := Marshal(ts)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeTimePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return 0
+ }
+ siz := Size(ts)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return nil, err
+ }
+ siz := Size(ts)
+ buf, err := Marshal(ts)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeDurationMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ d := ptr.asPointerTo(u.typ).Interface().(*time.Duration)
+ dur := durationProto(*d)
+ siz := Size(dur)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ d := ptr.asPointerTo(u.typ).Interface().(*time.Duration)
+ dur := durationProto(*d)
+ buf, err := Marshal(dur)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeDurationPtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ d := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Duration)
+ dur := durationProto(*d)
+ siz := Size(dur)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ d := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Duration)
+ dur := durationProto(*d)
+ buf, err := Marshal(dur)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeDurationSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ d := elem.Interface().(time.Duration)
+ dur := durationProto(d)
+ siz := Size(dur)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ d := elem.Interface().(time.Duration)
+ dur := durationProto(d)
+ siz := Size(dur)
+ buf, err := Marshal(dur)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeDurationPtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ d := elem.Interface().(*time.Duration)
+ dur := durationProto(*d)
+ siz := Size(dur)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ d := elem.Interface().(*time.Duration)
+ dur := durationProto(*d)
+ siz := Size(dur)
+ buf, err := Marshal(dur)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/table_merge.go b/vendor/github.com/gogo/protobuf/proto/table_merge.go
new file mode 100644
index 0000000..f520106
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/table_merge.go
@@ -0,0 +1,657 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "fmt"
+ "reflect"
+ "strings"
+ "sync"
+ "sync/atomic"
+)
+
+// Merge merges the src message into dst.
+// This assumes that dst and src of the same type and are non-nil.
+func (a *InternalMessageInfo) Merge(dst, src Message) {
+ mi := atomicLoadMergeInfo(&a.merge)
+ if mi == nil {
+ mi = getMergeInfo(reflect.TypeOf(dst).Elem())
+ atomicStoreMergeInfo(&a.merge, mi)
+ }
+ mi.merge(toPointer(&dst), toPointer(&src))
+}
+
+type mergeInfo struct {
+ typ reflect.Type
+
+ initialized int32 // 0: only typ is valid, 1: everything is valid
+ lock sync.Mutex
+
+ fields []mergeFieldInfo
+ unrecognized field // Offset of XXX_unrecognized
+}
+
+type mergeFieldInfo struct {
+ field field // Offset of field, guaranteed to be valid
+
+ // isPointer reports whether the value in the field is a pointer.
+ // This is true for the following situations:
+ // * Pointer to struct
+ // * Pointer to basic type (proto2 only)
+ // * Slice (first value in slice header is a pointer)
+ // * String (first value in string header is a pointer)
+ isPointer bool
+
+ // basicWidth reports the width of the field assuming that it is directly
+ // embedded in the struct (as is the case for basic types in proto3).
+ // The possible values are:
+ // 0: invalid
+ // 1: bool
+ // 4: int32, uint32, float32
+ // 8: int64, uint64, float64
+ basicWidth int
+
+ // Where dst and src are pointers to the types being merged.
+ merge func(dst, src pointer)
+}
+
+var (
+ mergeInfoMap = map[reflect.Type]*mergeInfo{}
+ mergeInfoLock sync.Mutex
+)
+
+func getMergeInfo(t reflect.Type) *mergeInfo {
+ mergeInfoLock.Lock()
+ defer mergeInfoLock.Unlock()
+ mi := mergeInfoMap[t]
+ if mi == nil {
+ mi = &mergeInfo{typ: t}
+ mergeInfoMap[t] = mi
+ }
+ return mi
+}
+
+// merge merges src into dst assuming they are both of type *mi.typ.
+func (mi *mergeInfo) merge(dst, src pointer) {
+ if dst.isNil() {
+ panic("proto: nil destination")
+ }
+ if src.isNil() {
+ return // Nothing to do.
+ }
+
+ if atomic.LoadInt32(&mi.initialized) == 0 {
+ mi.computeMergeInfo()
+ }
+
+ for _, fi := range mi.fields {
+ sfp := src.offset(fi.field)
+
+ // As an optimization, we can avoid the merge function call cost
+ // if we know for sure that the source will have no effect
+ // by checking if it is the zero value.
+ if unsafeAllowed {
+ if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string
+ continue
+ }
+ if fi.basicWidth > 0 {
+ switch {
+ case fi.basicWidth == 1 && !*sfp.toBool():
+ continue
+ case fi.basicWidth == 4 && *sfp.toUint32() == 0:
+ continue
+ case fi.basicWidth == 8 && *sfp.toUint64() == 0:
+ continue
+ }
+ }
+ }
+
+ dfp := dst.offset(fi.field)
+ fi.merge(dfp, sfp)
+ }
+
+ // TODO: Make this faster?
+ out := dst.asPointerTo(mi.typ).Elem()
+ in := src.asPointerTo(mi.typ).Elem()
+ if emIn, err := extendable(in.Addr().Interface()); err == nil {
+ emOut, _ := extendable(out.Addr().Interface())
+ mIn, muIn := emIn.extensionsRead()
+ if mIn != nil {
+ mOut := emOut.extensionsWrite()
+ muIn.Lock()
+ mergeExtension(mOut, mIn)
+ muIn.Unlock()
+ }
+ }
+
+ if mi.unrecognized.IsValid() {
+ if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 {
+ *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...)
+ }
+ }
+}
+
+func (mi *mergeInfo) computeMergeInfo() {
+ mi.lock.Lock()
+ defer mi.lock.Unlock()
+ if mi.initialized != 0 {
+ return
+ }
+ t := mi.typ
+ n := t.NumField()
+
+ props := GetProperties(t)
+ for i := 0; i < n; i++ {
+ f := t.Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+
+ mfi := mergeFieldInfo{field: toField(&f)}
+ tf := f.Type
+
+ // As an optimization, we can avoid the merge function call cost
+ // if we know for sure that the source will have no effect
+ // by checking if it is the zero value.
+ if unsafeAllowed {
+ switch tf.Kind() {
+ case reflect.Ptr, reflect.Slice, reflect.String:
+ // As a special case, we assume slices and strings are pointers
+ // since we know that the first field in the SliceSlice or
+ // StringHeader is a data pointer.
+ mfi.isPointer = true
+ case reflect.Bool:
+ mfi.basicWidth = 1
+ case reflect.Int32, reflect.Uint32, reflect.Float32:
+ mfi.basicWidth = 4
+ case reflect.Int64, reflect.Uint64, reflect.Float64:
+ mfi.basicWidth = 8
+ }
+ }
+
+ // Unwrap tf to get at its most basic type.
+ var isPointer, isSlice bool
+ if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+ isSlice = true
+ tf = tf.Elem()
+ }
+ if tf.Kind() == reflect.Ptr {
+ isPointer = true
+ tf = tf.Elem()
+ }
+ if isPointer && isSlice && tf.Kind() != reflect.Struct {
+ panic("both pointer and slice for basic type in " + tf.Name())
+ }
+
+ switch tf.Kind() {
+ case reflect.Int32:
+ switch {
+ case isSlice: // E.g., []int32
+ mfi.merge = func(dst, src pointer) {
+ // NOTE: toInt32Slice is not defined (see pointer_reflect.go).
+ /*
+ sfsp := src.toInt32Slice()
+ if *sfsp != nil {
+ dfsp := dst.toInt32Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []int64{}
+ }
+ }
+ */
+ sfs := src.getInt32Slice()
+ if sfs != nil {
+ dfs := dst.getInt32Slice()
+ dfs = append(dfs, sfs...)
+ if dfs == nil {
+ dfs = []int32{}
+ }
+ dst.setInt32Slice(dfs)
+ }
+ }
+ case isPointer: // E.g., *int32
+ mfi.merge = func(dst, src pointer) {
+ // NOTE: toInt32Ptr is not defined (see pointer_reflect.go).
+ /*
+ sfpp := src.toInt32Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toInt32Ptr()
+ if *dfpp == nil {
+ *dfpp = Int32(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ */
+ sfp := src.getInt32Ptr()
+ if sfp != nil {
+ dfp := dst.getInt32Ptr()
+ if dfp == nil {
+ dst.setInt32Ptr(*sfp)
+ } else {
+ *dfp = *sfp
+ }
+ }
+ }
+ default: // E.g., int32
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toInt32(); v != 0 {
+ *dst.toInt32() = v
+ }
+ }
+ }
+ case reflect.Int64:
+ switch {
+ case isSlice: // E.g., []int64
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toInt64Slice()
+ if *sfsp != nil {
+ dfsp := dst.toInt64Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []int64{}
+ }
+ }
+ }
+ case isPointer: // E.g., *int64
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toInt64Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toInt64Ptr()
+ if *dfpp == nil {
+ *dfpp = Int64(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., int64
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toInt64(); v != 0 {
+ *dst.toInt64() = v
+ }
+ }
+ }
+ case reflect.Uint32:
+ switch {
+ case isSlice: // E.g., []uint32
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toUint32Slice()
+ if *sfsp != nil {
+ dfsp := dst.toUint32Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []uint32{}
+ }
+ }
+ }
+ case isPointer: // E.g., *uint32
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toUint32Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toUint32Ptr()
+ if *dfpp == nil {
+ *dfpp = Uint32(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., uint32
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toUint32(); v != 0 {
+ *dst.toUint32() = v
+ }
+ }
+ }
+ case reflect.Uint64:
+ switch {
+ case isSlice: // E.g., []uint64
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toUint64Slice()
+ if *sfsp != nil {
+ dfsp := dst.toUint64Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []uint64{}
+ }
+ }
+ }
+ case isPointer: // E.g., *uint64
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toUint64Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toUint64Ptr()
+ if *dfpp == nil {
+ *dfpp = Uint64(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., uint64
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toUint64(); v != 0 {
+ *dst.toUint64() = v
+ }
+ }
+ }
+ case reflect.Float32:
+ switch {
+ case isSlice: // E.g., []float32
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toFloat32Slice()
+ if *sfsp != nil {
+ dfsp := dst.toFloat32Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []float32{}
+ }
+ }
+ }
+ case isPointer: // E.g., *float32
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toFloat32Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toFloat32Ptr()
+ if *dfpp == nil {
+ *dfpp = Float32(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., float32
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toFloat32(); v != 0 {
+ *dst.toFloat32() = v
+ }
+ }
+ }
+ case reflect.Float64:
+ switch {
+ case isSlice: // E.g., []float64
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toFloat64Slice()
+ if *sfsp != nil {
+ dfsp := dst.toFloat64Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []float64{}
+ }
+ }
+ }
+ case isPointer: // E.g., *float64
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toFloat64Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toFloat64Ptr()
+ if *dfpp == nil {
+ *dfpp = Float64(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., float64
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toFloat64(); v != 0 {
+ *dst.toFloat64() = v
+ }
+ }
+ }
+ case reflect.Bool:
+ switch {
+ case isSlice: // E.g., []bool
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toBoolSlice()
+ if *sfsp != nil {
+ dfsp := dst.toBoolSlice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []bool{}
+ }
+ }
+ }
+ case isPointer: // E.g., *bool
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toBoolPtr()
+ if *sfpp != nil {
+ dfpp := dst.toBoolPtr()
+ if *dfpp == nil {
+ *dfpp = Bool(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., bool
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toBool(); v {
+ *dst.toBool() = v
+ }
+ }
+ }
+ case reflect.String:
+ switch {
+ case isSlice: // E.g., []string
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toStringSlice()
+ if *sfsp != nil {
+ dfsp := dst.toStringSlice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []string{}
+ }
+ }
+ }
+ case isPointer: // E.g., *string
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toStringPtr()
+ if *sfpp != nil {
+ dfpp := dst.toStringPtr()
+ if *dfpp == nil {
+ *dfpp = String(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., string
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toString(); v != "" {
+ *dst.toString() = v
+ }
+ }
+ }
+ case reflect.Slice:
+ isProto3 := props.Prop[i].proto3
+ switch {
+ case isPointer:
+ panic("bad pointer in byte slice case in " + tf.Name())
+ case tf.Elem().Kind() != reflect.Uint8:
+ panic("bad element kind in byte slice case in " + tf.Name())
+ case isSlice: // E.g., [][]byte
+ mfi.merge = func(dst, src pointer) {
+ sbsp := src.toBytesSlice()
+ if *sbsp != nil {
+ dbsp := dst.toBytesSlice()
+ for _, sb := range *sbsp {
+ if sb == nil {
+ *dbsp = append(*dbsp, nil)
+ } else {
+ *dbsp = append(*dbsp, append([]byte{}, sb...))
+ }
+ }
+ if *dbsp == nil {
+ *dbsp = [][]byte{}
+ }
+ }
+ }
+ default: // E.g., []byte
+ mfi.merge = func(dst, src pointer) {
+ sbp := src.toBytes()
+ if *sbp != nil {
+ dbp := dst.toBytes()
+ if !isProto3 || len(*sbp) > 0 {
+ *dbp = append([]byte{}, *sbp...)
+ }
+ }
+ }
+ }
+ case reflect.Struct:
+ switch {
+ case !isPointer:
+ mergeInfo := getMergeInfo(tf)
+ mfi.merge = func(dst, src pointer) {
+ mergeInfo.merge(dst, src)
+ }
+ case isSlice: // E.g., []*pb.T
+ mergeInfo := getMergeInfo(tf)
+ mfi.merge = func(dst, src pointer) {
+ sps := src.getPointerSlice()
+ if sps != nil {
+ dps := dst.getPointerSlice()
+ for _, sp := range sps {
+ var dp pointer
+ if !sp.isNil() {
+ dp = valToPointer(reflect.New(tf))
+ mergeInfo.merge(dp, sp)
+ }
+ dps = append(dps, dp)
+ }
+ if dps == nil {
+ dps = []pointer{}
+ }
+ dst.setPointerSlice(dps)
+ }
+ }
+ default: // E.g., *pb.T
+ mergeInfo := getMergeInfo(tf)
+ mfi.merge = func(dst, src pointer) {
+ sp := src.getPointer()
+ if !sp.isNil() {
+ dp := dst.getPointer()
+ if dp.isNil() {
+ dp = valToPointer(reflect.New(tf))
+ dst.setPointer(dp)
+ }
+ mergeInfo.merge(dp, sp)
+ }
+ }
+ }
+ case reflect.Map:
+ switch {
+ case isPointer || isSlice:
+ panic("bad pointer or slice in map case in " + tf.Name())
+ default: // E.g., map[K]V
+ mfi.merge = func(dst, src pointer) {
+ sm := src.asPointerTo(tf).Elem()
+ if sm.Len() == 0 {
+ return
+ }
+ dm := dst.asPointerTo(tf).Elem()
+ if dm.IsNil() {
+ dm.Set(reflect.MakeMap(tf))
+ }
+
+ switch tf.Elem().Kind() {
+ case reflect.Ptr: // Proto struct (e.g., *T)
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ val = reflect.ValueOf(Clone(val.Interface().(Message)))
+ dm.SetMapIndex(key, val)
+ }
+ case reflect.Slice: // E.g. Bytes type (e.g., []byte)
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ val = reflect.ValueOf(append([]byte{}, val.Bytes()...))
+ dm.SetMapIndex(key, val)
+ }
+ default: // Basic type (e.g., string)
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ dm.SetMapIndex(key, val)
+ }
+ }
+ }
+ }
+ case reflect.Interface:
+ // Must be oneof field.
+ switch {
+ case isPointer || isSlice:
+ panic("bad pointer or slice in interface case in " + tf.Name())
+ default: // E.g., interface{}
+ // TODO: Make this faster?
+ mfi.merge = func(dst, src pointer) {
+ su := src.asPointerTo(tf).Elem()
+ if !su.IsNil() {
+ du := dst.asPointerTo(tf).Elem()
+ typ := su.Elem().Type()
+ if du.IsNil() || du.Elem().Type() != typ {
+ du.Set(reflect.New(typ.Elem())) // Initialize interface if empty
+ }
+ sv := su.Elem().Elem().Field(0)
+ if sv.Kind() == reflect.Ptr && sv.IsNil() {
+ return
+ }
+ dv := du.Elem().Elem().Field(0)
+ if dv.Kind() == reflect.Ptr && dv.IsNil() {
+ dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty
+ }
+ switch sv.Type().Kind() {
+ case reflect.Ptr: // Proto struct (e.g., *T)
+ Merge(dv.Interface().(Message), sv.Interface().(Message))
+ case reflect.Slice: // E.g. Bytes type (e.g., []byte)
+ dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...)))
+ default: // Basic type (e.g., string)
+ dv.Set(sv)
+ }
+ }
+ }
+ }
+ default:
+ panic(fmt.Sprintf("merger not found for type:%s", tf))
+ }
+ mi.fields = append(mi.fields, mfi)
+ }
+
+ mi.unrecognized = invalidField
+ if f, ok := t.FieldByName("XXX_unrecognized"); ok {
+ if f.Type != reflect.TypeOf([]byte{}) {
+ panic("expected XXX_unrecognized to be of type []byte")
+ }
+ mi.unrecognized = toField(&f)
+ }
+
+ atomic.StoreInt32(&mi.initialized, 1)
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go b/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go
new file mode 100644
index 0000000..910e2dd
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go
@@ -0,0 +1,2048 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "errors"
+ "fmt"
+ "io"
+ "math"
+ "reflect"
+ "strconv"
+ "strings"
+ "sync"
+ "sync/atomic"
+ "unicode/utf8"
+)
+
+// Unmarshal is the entry point from the generated .pb.go files.
+// This function is not intended to be used by non-generated code.
+// This function is not subject to any compatibility guarantee.
+// msg contains a pointer to a protocol buffer struct.
+// b is the data to be unmarshaled into the protocol buffer.
+// a is a pointer to a place to store cached unmarshal information.
+func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error {
+ // Load the unmarshal information for this message type.
+ // The atomic load ensures memory consistency.
+ u := atomicLoadUnmarshalInfo(&a.unmarshal)
+ if u == nil {
+ // Slow path: find unmarshal info for msg, update a with it.
+ u = getUnmarshalInfo(reflect.TypeOf(msg).Elem())
+ atomicStoreUnmarshalInfo(&a.unmarshal, u)
+ }
+ // Then do the unmarshaling.
+ err := u.unmarshal(toPointer(&msg), b)
+ return err
+}
+
+type unmarshalInfo struct {
+ typ reflect.Type // type of the protobuf struct
+
+ // 0 = only typ field is initialized
+ // 1 = completely initialized
+ initialized int32
+ lock sync.Mutex // prevents double initialization
+ dense []unmarshalFieldInfo // fields indexed by tag #
+ sparse map[uint64]unmarshalFieldInfo // fields indexed by tag #
+ reqFields []string // names of required fields
+ reqMask uint64 // 1<<len(reqFields)-1
+ unrecognized field // offset of []byte to put unrecognized data (or invalidField if we should throw it away)
+ extensions field // offset of extensions field (of type proto.XXX_InternalExtensions), or invalidField if it does not exist
+ oldExtensions field // offset of old-form extensions field (of type map[int]Extension)
+ extensionRanges []ExtensionRange // if non-nil, implies extensions field is valid
+ isMessageSet bool // if true, implies extensions field is valid
+
+ bytesExtensions field // offset of XXX_extensions with type []byte
+}
+
+// An unmarshaler takes a stream of bytes and a pointer to a field of a message.
+// It decodes the field, stores it at f, and returns the unused bytes.
+// w is the wire encoding.
+// b is the data after the tag and wire encoding have been read.
+type unmarshaler func(b []byte, f pointer, w int) ([]byte, error)
+
+type unmarshalFieldInfo struct {
+ // location of the field in the proto message structure.
+ field field
+
+ // function to unmarshal the data for the field.
+ unmarshal unmarshaler
+
+ // if a required field, contains a single set bit at this field's index in the required field list.
+ reqMask uint64
+}
+
+var (
+ unmarshalInfoMap = map[reflect.Type]*unmarshalInfo{}
+ unmarshalInfoLock sync.Mutex
+)
+
+// getUnmarshalInfo returns the data structure which can be
+// subsequently used to unmarshal a message of the given type.
+// t is the type of the message (note: not pointer to message).
+func getUnmarshalInfo(t reflect.Type) *unmarshalInfo {
+ // It would be correct to return a new unmarshalInfo
+ // unconditionally. We would end up allocating one
+ // per occurrence of that type as a message or submessage.
+ // We use a cache here just to reduce memory usage.
+ unmarshalInfoLock.Lock()
+ defer unmarshalInfoLock.Unlock()
+ u := unmarshalInfoMap[t]
+ if u == nil {
+ u = &unmarshalInfo{typ: t}
+ // Note: we just set the type here. The rest of the fields
+ // will be initialized on first use.
+ unmarshalInfoMap[t] = u
+ }
+ return u
+}
+
+// unmarshal does the main work of unmarshaling a message.
+// u provides type information used to unmarshal the message.
+// m is a pointer to a protocol buffer message.
+// b is a byte stream to unmarshal into m.
+// This is top routine used when recursively unmarshaling submessages.
+func (u *unmarshalInfo) unmarshal(m pointer, b []byte) error {
+ if atomic.LoadInt32(&u.initialized) == 0 {
+ u.computeUnmarshalInfo()
+ }
+ if u.isMessageSet {
+ return UnmarshalMessageSet(b, m.offset(u.extensions).toExtensions())
+ }
+ var reqMask uint64 // bitmask of required fields we've seen.
+ var rnse *RequiredNotSetError // an instance of a RequiredNotSetError returned by a submessage.
+ for len(b) > 0 {
+ // Read tag and wire type.
+ // Special case 1 and 2 byte varints.
+ var x uint64
+ if b[0] < 128 {
+ x = uint64(b[0])
+ b = b[1:]
+ } else if len(b) >= 2 && b[1] < 128 {
+ x = uint64(b[0]&0x7f) + uint64(b[1])<<7
+ b = b[2:]
+ } else {
+ var n int
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ }
+ tag := x >> 3
+ wire := int(x) & 7
+
+ // Dispatch on the tag to one of the unmarshal* functions below.
+ var f unmarshalFieldInfo
+ if tag < uint64(len(u.dense)) {
+ f = u.dense[tag]
+ } else {
+ f = u.sparse[tag]
+ }
+ if fn := f.unmarshal; fn != nil {
+ var err error
+ b, err = fn(b, m.offset(f.field), wire)
+ if err == nil {
+ reqMask |= f.reqMask
+ continue
+ }
+ if r, ok := err.(*RequiredNotSetError); ok {
+ // Remember this error, but keep parsing. We need to produce
+ // a full parse even if a required field is missing.
+ rnse = r
+ reqMask |= f.reqMask
+ continue
+ }
+ if err != errInternalBadWireType {
+ return err
+ }
+ // Fragments with bad wire type are treated as unknown fields.
+ }
+
+ // Unknown tag.
+ if !u.unrecognized.IsValid() {
+ // Don't keep unrecognized data; just skip it.
+ var err error
+ b, err = skipField(b, wire)
+ if err != nil {
+ return err
+ }
+ continue
+ }
+ // Keep unrecognized data around.
+ // maybe in extensions, maybe in the unrecognized field.
+ z := m.offset(u.unrecognized).toBytes()
+ var emap map[int32]Extension
+ var e Extension
+ for _, r := range u.extensionRanges {
+ if uint64(r.Start) <= tag && tag <= uint64(r.End) {
+ if u.extensions.IsValid() {
+ mp := m.offset(u.extensions).toExtensions()
+ emap = mp.extensionsWrite()
+ e = emap[int32(tag)]
+ z = &e.enc
+ break
+ }
+ if u.oldExtensions.IsValid() {
+ p := m.offset(u.oldExtensions).toOldExtensions()
+ emap = *p
+ if emap == nil {
+ emap = map[int32]Extension{}
+ *p = emap
+ }
+ e = emap[int32(tag)]
+ z = &e.enc
+ break
+ }
+ if u.bytesExtensions.IsValid() {
+ z = m.offset(u.bytesExtensions).toBytes()
+ break
+ }
+ panic("no extensions field available")
+ }
+ }
+ // Use wire type to skip data.
+ var err error
+ b0 := b
+ b, err = skipField(b, wire)
+ if err != nil {
+ return err
+ }
+ *z = encodeVarint(*z, tag<<3|uint64(wire))
+ *z = append(*z, b0[:len(b0)-len(b)]...)
+
+ if emap != nil {
+ emap[int32(tag)] = e
+ }
+ }
+ if rnse != nil {
+ // A required field of a submessage/group is missing. Return that error.
+ return rnse
+ }
+ if reqMask != u.reqMask {
+ // A required field of this message is missing.
+ for _, n := range u.reqFields {
+ if reqMask&1 == 0 {
+ return &RequiredNotSetError{n}
+ }
+ reqMask >>= 1
+ }
+ }
+ return nil
+}
+
+// computeUnmarshalInfo fills in u with information for use
+// in unmarshaling protocol buffers of type u.typ.
+func (u *unmarshalInfo) computeUnmarshalInfo() {
+ u.lock.Lock()
+ defer u.lock.Unlock()
+ if u.initialized != 0 {
+ return
+ }
+ t := u.typ
+ n := t.NumField()
+
+ // Set up the "not found" value for the unrecognized byte buffer.
+ // This is the default for proto3.
+ u.unrecognized = invalidField
+ u.extensions = invalidField
+ u.oldExtensions = invalidField
+ u.bytesExtensions = invalidField
+
+ // List of the generated type and offset for each oneof field.
+ type oneofField struct {
+ ityp reflect.Type // interface type of oneof field
+ field field // offset in containing message
+ }
+ var oneofFields []oneofField
+
+ for i := 0; i < n; i++ {
+ f := t.Field(i)
+ if f.Name == "XXX_unrecognized" {
+ // The byte slice used to hold unrecognized input is special.
+ if f.Type != reflect.TypeOf(([]byte)(nil)) {
+ panic("bad type for XXX_unrecognized field: " + f.Type.Name())
+ }
+ u.unrecognized = toField(&f)
+ continue
+ }
+ if f.Name == "XXX_InternalExtensions" {
+ // Ditto here.
+ if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) {
+ panic("bad type for XXX_InternalExtensions field: " + f.Type.Name())
+ }
+ u.extensions = toField(&f)
+ if f.Tag.Get("protobuf_messageset") == "1" {
+ u.isMessageSet = true
+ }
+ continue
+ }
+ if f.Name == "XXX_extensions" {
+ // An older form of the extensions field.
+ if f.Type == reflect.TypeOf((map[int32]Extension)(nil)) {
+ u.oldExtensions = toField(&f)
+ continue
+ } else if f.Type == reflect.TypeOf(([]byte)(nil)) {
+ u.bytesExtensions = toField(&f)
+ continue
+ }
+ panic("bad type for XXX_extensions field: " + f.Type.Name())
+ }
+ if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" {
+ continue
+ }
+
+ oneof := f.Tag.Get("protobuf_oneof")
+ if oneof != "" {
+ oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)})
+ // The rest of oneof processing happens below.
+ continue
+ }
+
+ tags := f.Tag.Get("protobuf")
+ tagArray := strings.Split(tags, ",")
+ if len(tagArray) < 2 {
+ panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags)
+ }
+ tag, err := strconv.Atoi(tagArray[1])
+ if err != nil {
+ panic("protobuf tag field not an integer: " + tagArray[1])
+ }
+
+ name := ""
+ for _, tag := range tagArray[3:] {
+ if strings.HasPrefix(tag, "name=") {
+ name = tag[5:]
+ }
+ }
+
+ // Extract unmarshaling function from the field (its type and tags).
+ unmarshal := fieldUnmarshaler(&f)
+
+ // Required field?
+ var reqMask uint64
+ if tagArray[2] == "req" {
+ bit := len(u.reqFields)
+ u.reqFields = append(u.reqFields, name)
+ reqMask = uint64(1) << uint(bit)
+ // TODO: if we have more than 64 required fields, we end up
+ // not verifying that all required fields are present.
+ // Fix this, perhaps using a count of required fields?
+ }
+
+ // Store the info in the correct slot in the message.
+ u.setTag(tag, toField(&f), unmarshal, reqMask)
+ }
+
+ // Find any types associated with oneof fields.
+ // TODO: XXX_OneofFuncs returns more info than we need. Get rid of some of it?
+ fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs")
+ // gogo: len(oneofFields) > 0 is needed for embedded oneof messages, without a marshaler and unmarshaler
+ if fn.IsValid() && len(oneofFields) > 0 {
+ res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{}
+ for i := res.Len() - 1; i >= 0; i-- {
+ v := res.Index(i) // interface{}
+ tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X
+ typ := tptr.Elem() // Msg_X
+
+ f := typ.Field(0) // oneof implementers have one field
+ baseUnmarshal := fieldUnmarshaler(&f)
+ tagstr := strings.Split(f.Tag.Get("protobuf"), ",")[1]
+ tag, err := strconv.Atoi(tagstr)
+ if err != nil {
+ panic("protobuf tag field not an integer: " + tagstr)
+ }
+
+ // Find the oneof field that this struct implements.
+ // Might take O(n^2) to process all of the oneofs, but who cares.
+ for _, of := range oneofFields {
+ if tptr.Implements(of.ityp) {
+ // We have found the corresponding interface for this struct.
+ // That lets us know where this struct should be stored
+ // when we encounter it during unmarshaling.
+ unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal)
+ u.setTag(tag, of.field, unmarshal, 0)
+ }
+ }
+ }
+ }
+
+ // Get extension ranges, if any.
+ fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray")
+ if fn.IsValid() {
+ if !u.extensions.IsValid() && !u.oldExtensions.IsValid() && !u.bytesExtensions.IsValid() {
+ panic("a message with extensions, but no extensions field in " + t.Name())
+ }
+ u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange)
+ }
+
+ // Explicitly disallow tag 0. This will ensure we flag an error
+ // when decoding a buffer of all zeros. Without this code, we
+ // would decode and skip an all-zero buffer of even length.
+ // [0 0] is [tag=0/wiretype=varint varint-encoded-0].
+ u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) {
+ return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w)
+ }, 0)
+
+ // Set mask for required field check.
+ u.reqMask = uint64(1)<<uint(len(u.reqFields)) - 1
+
+ atomic.StoreInt32(&u.initialized, 1)
+}
+
+// setTag stores the unmarshal information for the given tag.
+// tag = tag # for field
+// field/unmarshal = unmarshal info for that field.
+// reqMask = if required, bitmask for field position in required field list. 0 otherwise.
+func (u *unmarshalInfo) setTag(tag int, field field, unmarshal unmarshaler, reqMask uint64) {
+ i := unmarshalFieldInfo{field: field, unmarshal: unmarshal, reqMask: reqMask}
+ n := u.typ.NumField()
+ if tag >= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here?
+ for len(u.dense) <= tag {
+ u.dense = append(u.dense, unmarshalFieldInfo{})
+ }
+ u.dense[tag] = i
+ return
+ }
+ if u.sparse == nil {
+ u.sparse = map[uint64]unmarshalFieldInfo{}
+ }
+ u.sparse[uint64(tag)] = i
+}
+
+// fieldUnmarshaler returns an unmarshaler for the given field.
+func fieldUnmarshaler(f *reflect.StructField) unmarshaler {
+ if f.Type.Kind() == reflect.Map {
+ return makeUnmarshalMap(f)
+ }
+ return typeUnmarshaler(f.Type, f.Tag.Get("protobuf"))
+}
+
+// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair.
+func typeUnmarshaler(t reflect.Type, tags string) unmarshaler {
+ tagArray := strings.Split(tags, ",")
+ encoding := tagArray[0]
+ name := "unknown"
+ ctype := false
+ isTime := false
+ isDuration := false
+ for _, tag := range tagArray[3:] {
+ if strings.HasPrefix(tag, "name=") {
+ name = tag[5:]
+ }
+ if strings.HasPrefix(tag, "customtype=") {
+ ctype = true
+ }
+ if tag == "stdtime" {
+ isTime = true
+ }
+ if tag == "stdduration" {
+ isDuration = true
+ }
+ }
+
+ // Figure out packaging (pointer, slice, or both)
+ slice := false
+ pointer := false
+ if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
+ slice = true
+ t = t.Elem()
+ }
+ if t.Kind() == reflect.Ptr {
+ pointer = true
+ t = t.Elem()
+ }
+
+ if ctype {
+ if reflect.PtrTo(t).Implements(customType) {
+ if slice {
+ return makeUnmarshalCustomSlice(getUnmarshalInfo(t), name)
+ }
+ if pointer {
+ return makeUnmarshalCustomPtr(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalCustom(getUnmarshalInfo(t), name)
+ } else {
+ panic(fmt.Sprintf("custom type: type: %v, does not implement the proto.custom interface", t))
+ }
+ }
+
+ if isTime {
+ if pointer {
+ if slice {
+ return makeUnmarshalTimePtrSlice(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalTimePtr(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeUnmarshalTimeSlice(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalTime(getUnmarshalInfo(t), name)
+ }
+
+ if isDuration {
+ if pointer {
+ if slice {
+ return makeUnmarshalDurationPtrSlice(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalDurationPtr(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeUnmarshalDurationSlice(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalDuration(getUnmarshalInfo(t), name)
+ }
+
+ // We'll never have both pointer and slice for basic types.
+ if pointer && slice && t.Kind() != reflect.Struct {
+ panic("both pointer and slice for basic type in " + t.Name())
+ }
+
+ switch t.Kind() {
+ case reflect.Bool:
+ if pointer {
+ return unmarshalBoolPtr
+ }
+ if slice {
+ return unmarshalBoolSlice
+ }
+ return unmarshalBoolValue
+ case reflect.Int32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return unmarshalFixedS32Ptr
+ }
+ if slice {
+ return unmarshalFixedS32Slice
+ }
+ return unmarshalFixedS32Value
+ case "varint":
+ // this could be int32 or enum
+ if pointer {
+ return unmarshalInt32Ptr
+ }
+ if slice {
+ return unmarshalInt32Slice
+ }
+ return unmarshalInt32Value
+ case "zigzag32":
+ if pointer {
+ return unmarshalSint32Ptr
+ }
+ if slice {
+ return unmarshalSint32Slice
+ }
+ return unmarshalSint32Value
+ }
+ case reflect.Int64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return unmarshalFixedS64Ptr
+ }
+ if slice {
+ return unmarshalFixedS64Slice
+ }
+ return unmarshalFixedS64Value
+ case "varint":
+ if pointer {
+ return unmarshalInt64Ptr
+ }
+ if slice {
+ return unmarshalInt64Slice
+ }
+ return unmarshalInt64Value
+ case "zigzag64":
+ if pointer {
+ return unmarshalSint64Ptr
+ }
+ if slice {
+ return unmarshalSint64Slice
+ }
+ return unmarshalSint64Value
+ }
+ case reflect.Uint32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return unmarshalFixed32Ptr
+ }
+ if slice {
+ return unmarshalFixed32Slice
+ }
+ return unmarshalFixed32Value
+ case "varint":
+ if pointer {
+ return unmarshalUint32Ptr
+ }
+ if slice {
+ return unmarshalUint32Slice
+ }
+ return unmarshalUint32Value
+ }
+ case reflect.Uint64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return unmarshalFixed64Ptr
+ }
+ if slice {
+ return unmarshalFixed64Slice
+ }
+ return unmarshalFixed64Value
+ case "varint":
+ if pointer {
+ return unmarshalUint64Ptr
+ }
+ if slice {
+ return unmarshalUint64Slice
+ }
+ return unmarshalUint64Value
+ }
+ case reflect.Float32:
+ if pointer {
+ return unmarshalFloat32Ptr
+ }
+ if slice {
+ return unmarshalFloat32Slice
+ }
+ return unmarshalFloat32Value
+ case reflect.Float64:
+ if pointer {
+ return unmarshalFloat64Ptr
+ }
+ if slice {
+ return unmarshalFloat64Slice
+ }
+ return unmarshalFloat64Value
+ case reflect.Map:
+ panic("map type in typeUnmarshaler in " + t.Name())
+ case reflect.Slice:
+ if pointer {
+ panic("bad pointer in slice case in " + t.Name())
+ }
+ if slice {
+ return unmarshalBytesSlice
+ }
+ return unmarshalBytesValue
+ case reflect.String:
+ if pointer {
+ return unmarshalStringPtr
+ }
+ if slice {
+ return unmarshalStringSlice
+ }
+ return unmarshalStringValue
+ case reflect.Struct:
+ // message or group field
+ if !pointer {
+ switch encoding {
+ case "bytes":
+ if slice {
+ return makeUnmarshalMessageSlice(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalMessage(getUnmarshalInfo(t), name)
+ }
+ }
+ switch encoding {
+ case "bytes":
+ if slice {
+ return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name)
+ case "group":
+ if slice {
+ return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name)
+ }
+ }
+ panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding))
+}
+
+// Below are all the unmarshalers for individual fields of various types.
+
+func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ *f.toInt64() = v
+ return b, nil
+}
+
+func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ *f.toInt64Ptr() = &v
+ return b, nil
+}
+
+func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ *f.toInt64() = v
+ return b, nil
+}
+
+func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ *f.toInt64Ptr() = &v
+ return b, nil
+}
+
+func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ *f.toUint64() = v
+ return b, nil
+}
+
+func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ *f.toUint64Ptr() = &v
+ return b, nil
+}
+
+func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ *f.toInt32() = v
+ return b, nil
+}
+
+func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ f.setInt32Ptr(v)
+ return b, nil
+}
+
+func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ f.appendInt32Slice(v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ f.appendInt32Slice(v)
+ return b, nil
+}
+
+func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ *f.toInt32() = v
+ return b, nil
+}
+
+func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ f.setInt32Ptr(v)
+ return b, nil
+}
+
+func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ f.appendInt32Slice(v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ f.appendInt32Slice(v)
+ return b, nil
+}
+
+func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ *f.toUint32() = v
+ return b, nil
+}
+
+func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ *f.toUint32Ptr() = &v
+ return b, nil
+}
+
+func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := 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
+ *f.toUint64() = v
+ return b[8:], nil
+}
+
+func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := 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
+ *f.toUint64Ptr() = &v
+ return b[8:], nil
+}
+
+func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := 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
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ b = b[8:]
+ }
+ return res, nil
+ }
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := 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
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ return b[8:], nil
+}
+
+func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ *f.toInt64() = v
+ return b[8:], nil
+}
+
+func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ *f.toInt64Ptr() = &v
+ return b[8:], nil
+}
+
+func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ b = b[8:]
+ }
+ return res, nil
+ }
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ return b[8:], nil
+}
+
+func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ *f.toUint32() = v
+ return b[4:], nil
+}
+
+func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ *f.toUint32Ptr() = &v
+ return b[4:], nil
+}
+
+func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ b = b[4:]
+ }
+ return res, nil
+ }
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ return b[4:], nil
+}
+
+func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ *f.toInt32() = v
+ return b[4:], nil
+}
+
+func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ f.setInt32Ptr(v)
+ return b[4:], nil
+}
+
+func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ f.appendInt32Slice(v)
+ b = b[4:]
+ }
+ return res, nil
+ }
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ f.appendInt32Slice(v)
+ return b[4:], nil
+}
+
+func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ // Note: any length varint is allowed, even though any sane
+ // encoder will use one byte.
+ // See https://github.com/golang/protobuf/issues/76
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // TODO: check if x>1? Tests seem to indicate no.
+ v := x != 0
+ *f.toBool() = v
+ return b[n:], nil
+}
+
+func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := x != 0
+ *f.toBoolPtr() = &v
+ return b[n:], nil
+}
+
+func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := x != 0
+ s := f.toBoolSlice()
+ *s = append(*s, v)
+ b = b[n:]
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := x != 0
+ s := f.toBoolSlice()
+ *s = append(*s, v)
+ return b[n:], nil
+}
+
+func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(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)
+ *f.toFloat64() = v
+ return b[8:], nil
+}
+
+func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(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)
+ *f.toFloat64Ptr() = &v
+ return b[8:], nil
+}
+
+func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(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)
+ s := f.toFloat64Slice()
+ *s = append(*s, v)
+ b = b[8:]
+ }
+ return res, nil
+ }
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(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)
+ s := f.toFloat64Slice()
+ *s = append(*s, v)
+ return b[8:], nil
+}
+
+func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ *f.toFloat32() = v
+ return b[4:], nil
+}
+
+func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ *f.toFloat32Ptr() = &v
+ return b[4:], nil
+}
+
+func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ s := f.toFloat32Slice()
+ *s = append(*s, v)
+ b = b[4:]
+ }
+ return res, nil
+ }
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ s := f.toFloat32Slice()
+ *s = append(*s, v)
+ return b[4:], nil
+}
+
+func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ if !utf8.ValidString(v) {
+ return nil, errInvalidUTF8
+ }
+ *f.toString() = v
+ return b[x:], nil
+}
+
+func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ if !utf8.ValidString(v) {
+ return nil, errInvalidUTF8
+ }
+ *f.toStringPtr() = &v
+ return b[x:], nil
+}
+
+func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ if !utf8.ValidString(v) {
+ return nil, errInvalidUTF8
+ }
+ s := f.toStringSlice()
+ *s = append(*s, v)
+ return b[x:], nil
+}
+
+var emptyBuf [0]byte
+
+func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // The use of append here is a trick which avoids the zeroing
+ // that would be required if we used a make/copy pair.
+ // We append to emptyBuf instead of nil because we want
+ // a non-nil result even when the length is 0.
+ v := append(emptyBuf[:], b[:x]...)
+ *f.toBytes() = v
+ return b[x:], nil
+}
+
+func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := append(emptyBuf[:], b[:x]...)
+ s := f.toBytesSlice()
+ *s = append(*s, v)
+ return b[x:], nil
+}
+
+func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // First read the message field to see if something is there.
+ // The semantics of multiple submessages are weird. Instead of
+ // the last one winning (as it is for all other fields), multiple
+ // submessages are merged.
+ v := f.getPointer()
+ if v.isNil() {
+ v = valToPointer(reflect.New(sub.typ))
+ f.setPointer(v)
+ }
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ return b[x:], err
+ }
+}
+
+func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := valToPointer(reflect.New(sub.typ))
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ f.appendPointer(v)
+ return b[x:], err
+ }
+}
+
+func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireStartGroup {
+ return b, errInternalBadWireType
+ }
+ x, y := findEndGroup(b)
+ if x < 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := f.getPointer()
+ if v.isNil() {
+ v = valToPointer(reflect.New(sub.typ))
+ f.setPointer(v)
+ }
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ return b[y:], err
+ }
+}
+
+func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireStartGroup {
+ return b, errInternalBadWireType
+ }
+ x, y := findEndGroup(b)
+ if x < 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := valToPointer(reflect.New(sub.typ))
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ f.appendPointer(v)
+ return b[y:], err
+ }
+}
+
+func makeUnmarshalMap(f *reflect.StructField) unmarshaler {
+ t := f.Type
+ kt := t.Key()
+ vt := t.Elem()
+ tagArray := strings.Split(f.Tag.Get("protobuf"), ",")
+ valTags := strings.Split(f.Tag.Get("protobuf_val"), ",")
+ for _, t := range tagArray {
+ if strings.HasPrefix(t, "customtype=") {
+ valTags = append(valTags, t)
+ }
+ if t == "stdtime" {
+ valTags = append(valTags, t)
+ }
+ if t == "stdduration" {
+ valTags = append(valTags, t)
+ }
+ }
+ unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key"))
+ unmarshalVal := typeUnmarshaler(vt, strings.Join(valTags, ","))
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ // The map entry is a submessage. Figure out how big it is.
+ if w != WireBytes {
+ return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes)
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ r := b[x:] // unused data to return
+ b = b[:x] // data for map entry
+
+ // Note: we could use #keys * #values ~= 200 functions
+ // to do map decoding without reflection. Probably not worth it.
+ // Maps will be somewhat slow. Oh well.
+
+ // Read key and value from data.
+ k := reflect.New(kt)
+ v := reflect.New(vt)
+ for len(b) > 0 {
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ wire := int(x) & 7
+ b = b[n:]
+
+ var err error
+ switch x >> 3 {
+ case 1:
+ b, err = unmarshalKey(b, valToPointer(k), wire)
+ case 2:
+ b, err = unmarshalVal(b, valToPointer(v), wire)
+ default:
+ err = errInternalBadWireType // skip unknown tag
+ }
+
+ if err == nil {
+ continue
+ }
+ if err != errInternalBadWireType {
+ return nil, err
+ }
+
+ // Skip past unknown fields.
+ b, err = skipField(b, wire)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ // Get map, allocate if needed.
+ m := f.asPointerTo(t).Elem() // an addressable map[K]T
+ if m.IsNil() {
+ m.Set(reflect.MakeMap(t))
+ }
+
+ // Insert into map.
+ m.SetMapIndex(k.Elem(), v.Elem())
+
+ return r, nil
+ }
+}
+
+// makeUnmarshalOneof makes an unmarshaler for oneof fields.
+// for:
+// message Msg {
+// oneof F {
+// int64 X = 1;
+// float64 Y = 2;
+// }
+// }
+// typ is the type of the concrete entry for a oneof case (e.g. Msg_X).
+// ityp is the interface type of the oneof field (e.g. isMsg_F).
+// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64).
+// Note that this function will be called once for each case in the oneof.
+func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler {
+ sf := typ.Field(0)
+ field0 := toField(&sf)
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ // Allocate holder for value.
+ v := reflect.New(typ)
+
+ // Unmarshal data into holder.
+ // We unmarshal into the first field of the holder object.
+ var err error
+ b, err = unmarshal(b, valToPointer(v).offset(field0), w)
+ if err != nil {
+ return nil, err
+ }
+
+ // Write pointer to holder into target field.
+ f.asPointerTo(ityp).Elem().Set(v)
+
+ return b, nil
+ }
+}
+
+// Error used by decode internally.
+var errInternalBadWireType = errors.New("proto: internal error: bad wiretype")
+
+// skipField skips past a field of type wire and returns the remaining bytes.
+func skipField(b []byte, wire int) ([]byte, error) {
+ switch wire {
+ case WireVarint:
+ _, k := decodeVarint(b)
+ if k == 0 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[k:]
+ case WireFixed32:
+ if len(b) < 4 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[4:]
+ case WireFixed64:
+ if len(b) < 8 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[8:]
+ case WireBytes:
+ m, k := decodeVarint(b)
+ if k == 0 || uint64(len(b)-k) < m {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[uint64(k)+m:]
+ case WireStartGroup:
+ _, i := findEndGroup(b)
+ if i == -1 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[i:]
+ default:
+ return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire)
+ }
+ return b, nil
+}
+
+// findEndGroup finds the index of the next EndGroup tag.
+// Groups may be nested, so the "next" EndGroup tag is the first
+// unpaired EndGroup.
+// findEndGroup returns the indexes of the start and end of the EndGroup tag.
+// Returns (-1,-1) if it can't find one.
+func findEndGroup(b []byte) (int, int) {
+ depth := 1
+ i := 0
+ for {
+ x, n := decodeVarint(b[i:])
+ if n == 0 {
+ return -1, -1
+ }
+ j := i
+ i += n
+ switch x & 7 {
+ case WireVarint:
+ _, k := decodeVarint(b[i:])
+ if k == 0 {
+ return -1, -1
+ }
+ i += k
+ case WireFixed32:
+ if len(b)-4 < i {
+ return -1, -1
+ }
+ i += 4
+ case WireFixed64:
+ if len(b)-8 < i {
+ return -1, -1
+ }
+ i += 8
+ case WireBytes:
+ m, k := decodeVarint(b[i:])
+ if k == 0 {
+ return -1, -1
+ }
+ i += k
+ if uint64(len(b)-i) < m {
+ return -1, -1
+ }
+ i += int(m)
+ case WireStartGroup:
+ depth++
+ case WireEndGroup:
+ depth--
+ if depth == 0 {
+ return j, i
+ }
+ default:
+ return -1, -1
+ }
+ }
+}
+
+// encodeVarint appends a varint-encoded integer to b and returns the result.
+func encodeVarint(b []byte, x uint64) []byte {
+ for x >= 1<<7 {
+ b = append(b, byte(x&0x7f|0x80))
+ x >>= 7
+ }
+ return append(b, byte(x))
+}
+
+// decodeVarint reads a varint-encoded integer from b.
+// Returns the decoded integer and the number of bytes read.
+// If there is an error, it returns 0,0.
+func decodeVarint(b []byte) (uint64, int) {
+ var x, y uint64
+ if len(b) <= 0 {
+ goto bad
+ }
+ x = uint64(b[0])
+ if x < 0x80 {
+ return x, 1
+ }
+ x -= 0x80
+
+ if len(b) <= 1 {
+ goto bad
+ }
+ y = uint64(b[1])
+ x += y << 7
+ if y < 0x80 {
+ return x, 2
+ }
+ x -= 0x80 << 7
+
+ if len(b) <= 2 {
+ goto bad
+ }
+ y = uint64(b[2])
+ x += y << 14
+ if y < 0x80 {
+ return x, 3
+ }
+ x -= 0x80 << 14
+
+ if len(b) <= 3 {
+ goto bad
+ }
+ y = uint64(b[3])
+ x += y << 21
+ if y < 0x80 {
+ return x, 4
+ }
+ x -= 0x80 << 21
+
+ if len(b) <= 4 {
+ goto bad
+ }
+ y = uint64(b[4])
+ x += y << 28
+ if y < 0x80 {
+ return x, 5
+ }
+ x -= 0x80 << 28
+
+ if len(b) <= 5 {
+ goto bad
+ }
+ y = uint64(b[5])
+ x += y << 35
+ if y < 0x80 {
+ return x, 6
+ }
+ x -= 0x80 << 35
+
+ if len(b) <= 6 {
+ goto bad
+ }
+ y = uint64(b[6])
+ x += y << 42
+ if y < 0x80 {
+ return x, 7
+ }
+ x -= 0x80 << 42
+
+ if len(b) <= 7 {
+ goto bad
+ }
+ y = uint64(b[7])
+ x += y << 49
+ if y < 0x80 {
+ return x, 8
+ }
+ x -= 0x80 << 49
+
+ if len(b) <= 8 {
+ goto bad
+ }
+ y = uint64(b[8])
+ x += y << 56
+ if y < 0x80 {
+ return x, 9
+ }
+ x -= 0x80 << 56
+
+ if len(b) <= 9 {
+ goto bad
+ }
+ y = uint64(b[9])
+ x += y << 63
+ if y < 2 {
+ return x, 10
+ }
+
+bad:
+ return 0, 0
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go b/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go
new file mode 100644
index 0000000..00d6c7a
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go
@@ -0,0 +1,385 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "io"
+ "reflect"
+)
+
+func makeUnmarshalMessage(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // First read the message field to see if something is there.
+ // The semantics of multiple submessages are weird. Instead of
+ // the last one winning (as it is for all other fields), multiple
+ // submessages are merged.
+ v := f // gogo: changed from v := f.getPointer()
+ if v.isNil() {
+ v = valToPointer(reflect.New(sub.typ))
+ f.setPointer(v)
+ }
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ return b[x:], err
+ }
+}
+
+func makeUnmarshalMessageSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := valToPointer(reflect.New(sub.typ))
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ f.appendRef(v, sub.typ) // gogo: changed from f.appendPointer(v)
+ return b[x:], err
+ }
+}
+
+func makeUnmarshalCustomPtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.New(sub.typ))
+ m := s.Interface().(custom)
+ if err := m.Unmarshal(b[:x]); err != nil {
+ return nil, err
+ }
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalCustomSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := reflect.New(sub.typ)
+ c := m.Interface().(custom)
+ if err := c.Unmarshal(b[:x]); err != nil {
+ return nil, err
+ }
+ v := valToPointer(m)
+ f.appendRef(v, sub.typ)
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalCustom(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+
+ m := f.asPointerTo(sub.typ).Interface().(custom)
+ if err := m.Unmarshal(b[:x]); err != nil {
+ return nil, err
+ }
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalTime(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &timestamp{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ t, err := timestampFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(t))
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalTimePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &timestamp{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ t, err := timestampFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&t))
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalTimePtrSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &timestamp{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ t, err := timestampFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&t))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalTimeSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &timestamp{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ t, err := timestampFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(t))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalDurationPtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &duration{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ d, err := durationFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&d))
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalDuration(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &duration{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ d, err := durationFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(d))
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalDurationPtrSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &duration{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ d, err := durationFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&d))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalDurationSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &duration{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ d, err := durationFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(d))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/text.go b/vendor/github.com/gogo/protobuf/proto/text.go
new file mode 100644
index 0000000..4f5706d
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/text.go
@@ -0,0 +1,928 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+// Functions for writing the text protocol buffer format.
+
+import (
+ "bufio"
+ "bytes"
+ "encoding"
+ "errors"
+ "fmt"
+ "io"
+ "log"
+ "math"
+ "reflect"
+ "sort"
+ "strings"
+ "sync"
+ "time"
+)
+
+var (
+ newline = []byte("\n")
+ spaces = []byte(" ")
+ endBraceNewline = []byte("}\n")
+ backslashN = []byte{'\\', 'n'}
+ backslashR = []byte{'\\', 'r'}
+ backslashT = []byte{'\\', 't'}
+ backslashDQ = []byte{'\\', '"'}
+ backslashBS = []byte{'\\', '\\'}
+ posInf = []byte("inf")
+ negInf = []byte("-inf")
+ nan = []byte("nan")
+)
+
+type writer interface {
+ io.Writer
+ WriteByte(byte) error
+}
+
+// textWriter is an io.Writer that tracks its indentation level.
+type textWriter struct {
+ ind int
+ complete bool // if the current position is a complete line
+ compact bool // whether to write out as a one-liner
+ w writer
+}
+
+func (w *textWriter) WriteString(s string) (n int, err error) {
+ if !strings.Contains(s, "\n") {
+ if !w.compact && w.complete {
+ w.writeIndent()
+ }
+ w.complete = false
+ return io.WriteString(w.w, s)
+ }
+ // WriteString is typically called without newlines, so this
+ // codepath and its copy are rare. We copy to avoid
+ // duplicating all of Write's logic here.
+ return w.Write([]byte(s))
+}
+
+func (w *textWriter) Write(p []byte) (n int, err error) {
+ newlines := bytes.Count(p, newline)
+ if newlines == 0 {
+ if !w.compact && w.complete {
+ w.writeIndent()
+ }
+ n, err = w.w.Write(p)
+ w.complete = false
+ return n, err
+ }
+
+ frags := bytes.SplitN(p, newline, newlines+1)
+ if w.compact {
+ for i, frag := range frags {
+ if i > 0 {
+ if err := w.w.WriteByte(' '); err != nil {
+ return n, err
+ }
+ n++
+ }
+ nn, err := w.w.Write(frag)
+ n += nn
+ if err != nil {
+ return n, err
+ }
+ }
+ return n, nil
+ }
+
+ for i, frag := range frags {
+ if w.complete {
+ w.writeIndent()
+ }
+ nn, err := w.w.Write(frag)
+ n += nn
+ if err != nil {
+ return n, err
+ }
+ if i+1 < len(frags) {
+ if err := w.w.WriteByte('\n'); err != nil {
+ return n, err
+ }
+ n++
+ }
+ }
+ w.complete = len(frags[len(frags)-1]) == 0
+ return n, nil
+}
+
+func (w *textWriter) WriteByte(c byte) error {
+ if w.compact && c == '\n' {
+ c = ' '
+ }
+ if !w.compact && w.complete {
+ w.writeIndent()
+ }
+ err := w.w.WriteByte(c)
+ w.complete = c == '\n'
+ return err
+}
+
+func (w *textWriter) indent() { w.ind++ }
+
+func (w *textWriter) unindent() {
+ if w.ind == 0 {
+ log.Print("proto: textWriter unindented too far")
+ return
+ }
+ w.ind--
+}
+
+func writeName(w *textWriter, props *Properties) error {
+ if _, err := w.WriteString(props.OrigName); err != nil {
+ return err
+ }
+ if props.Wire != "group" {
+ return w.WriteByte(':')
+ }
+ return nil
+}
+
+func requiresQuotes(u string) bool {
+ // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted.
+ for _, ch := range u {
+ switch {
+ case ch == '.' || ch == '/' || ch == '_':
+ continue
+ case '0' <= ch && ch <= '9':
+ continue
+ case 'A' <= ch && ch <= 'Z':
+ continue
+ case 'a' <= ch && ch <= 'z':
+ continue
+ default:
+ return true
+ }
+ }
+ return false
+}
+
+// isAny reports whether sv is a google.protobuf.Any message
+func isAny(sv reflect.Value) bool {
+ type wkt interface {
+ XXX_WellKnownType() string
+ }
+ t, ok := sv.Addr().Interface().(wkt)
+ return ok && t.XXX_WellKnownType() == "Any"
+}
+
+// writeProto3Any writes an expanded google.protobuf.Any message.
+//
+// It returns (false, nil) if sv value can't be unmarshaled (e.g. because
+// required messages are not linked in).
+//
+// It returns (true, error) when sv was written in expanded format or an error
+// was encountered.
+func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) {
+ turl := sv.FieldByName("TypeUrl")
+ val := sv.FieldByName("Value")
+ if !turl.IsValid() || !val.IsValid() {
+ return true, errors.New("proto: invalid google.protobuf.Any message")
+ }
+
+ b, ok := val.Interface().([]byte)
+ if !ok {
+ return true, errors.New("proto: invalid google.protobuf.Any message")
+ }
+
+ parts := strings.Split(turl.String(), "/")
+ mt := MessageType(parts[len(parts)-1])
+ if mt == nil {
+ return false, nil
+ }
+ m := reflect.New(mt.Elem())
+ if err := Unmarshal(b, m.Interface().(Message)); err != nil {
+ return false, nil
+ }
+ w.Write([]byte("["))
+ u := turl.String()
+ if requiresQuotes(u) {
+ writeString(w, u)
+ } else {
+ w.Write([]byte(u))
+ }
+ if w.compact {
+ w.Write([]byte("]:<"))
+ } else {
+ w.Write([]byte("]: <\n"))
+ w.ind++
+ }
+ if err := tm.writeStruct(w, m.Elem()); err != nil {
+ return true, err
+ }
+ if w.compact {
+ w.Write([]byte("> "))
+ } else {
+ w.ind--
+ w.Write([]byte(">\n"))
+ }
+ return true, nil
+}
+
+func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
+ if tm.ExpandAny && isAny(sv) {
+ if canExpand, err := tm.writeProto3Any(w, sv); canExpand {
+ return err
+ }
+ }
+ st := sv.Type()
+ sprops := GetProperties(st)
+ for i := 0; i < sv.NumField(); i++ {
+ fv := sv.Field(i)
+ props := sprops.Prop[i]
+ name := st.Field(i).Name
+
+ if name == "XXX_NoUnkeyedLiteral" {
+ continue
+ }
+
+ if strings.HasPrefix(name, "XXX_") {
+ // There are two XXX_ fields:
+ // XXX_unrecognized []byte
+ // XXX_extensions map[int32]proto.Extension
+ // The first is handled here;
+ // the second is handled at the bottom of this function.
+ if name == "XXX_unrecognized" && !fv.IsNil() {
+ if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil {
+ return err
+ }
+ }
+ continue
+ }
+ if fv.Kind() == reflect.Ptr && fv.IsNil() {
+ // Field not filled in. This could be an optional field or
+ // a required field that wasn't filled in. Either way, there
+ // isn't anything we can show for it.
+ continue
+ }
+ if fv.Kind() == reflect.Slice && fv.IsNil() {
+ // Repeated field that is empty, or a bytes field that is unused.
+ continue
+ }
+
+ if props.Repeated && fv.Kind() == reflect.Slice {
+ // Repeated field.
+ for j := 0; j < fv.Len(); j++ {
+ if err := writeName(w, props); err != nil {
+ return err
+ }
+ if !w.compact {
+ if err := w.WriteByte(' '); err != nil {
+ return err
+ }
+ }
+ v := fv.Index(j)
+ if v.Kind() == reflect.Ptr && v.IsNil() {
+ // A nil message in a repeated field is not valid,
+ // but we can handle that more gracefully than panicking.
+ if _, err := w.Write([]byte("<nil>\n")); err != nil {
+ return err
+ }
+ continue
+ }
+ if len(props.Enum) > 0 {
+ if err := tm.writeEnum(w, v, props); err != nil {
+ return err
+ }
+ } else if err := tm.writeAny(w, v, props); err != nil {
+ return err
+ }
+ if err := w.WriteByte('\n'); err != nil {
+ return err
+ }
+ }
+ continue
+ }
+ if fv.Kind() == reflect.Map {
+ // Map fields are rendered as a repeated struct with key/value fields.
+ keys := fv.MapKeys()
+ sort.Sort(mapKeys(keys))
+ for _, key := range keys {
+ val := fv.MapIndex(key)
+ if err := writeName(w, props); err != nil {
+ return err
+ }
+ if !w.compact {
+ if err := w.WriteByte(' '); err != nil {
+ return err
+ }
+ }
+ // open struct
+ if err := w.WriteByte('<'); err != nil {
+ return err
+ }
+ if !w.compact {
+ if err := w.WriteByte('\n'); err != nil {
+ return err
+ }
+ }
+ w.indent()
+ // key
+ if _, err := w.WriteString("key:"); err != nil {
+ return err
+ }
+ if !w.compact {
+ if err := w.WriteByte(' '); err != nil {
+ return err
+ }
+ }
+ if err := tm.writeAny(w, key, props.mkeyprop); err != nil {
+ return err
+ }
+ if err := w.WriteByte('\n'); err != nil {
+ return err
+ }
+ // nil values aren't legal, but we can avoid panicking because of them.
+ if val.Kind() != reflect.Ptr || !val.IsNil() {
+ // value
+ if _, err := w.WriteString("value:"); err != nil {
+ return err
+ }
+ if !w.compact {
+ if err := w.WriteByte(' '); err != nil {
+ return err
+ }
+ }
+ if err := tm.writeAny(w, val, props.mvalprop); err != nil {
+ return err
+ }
+ if err := w.WriteByte('\n'); err != nil {
+ return err
+ }
+ }
+ // close struct
+ w.unindent()
+ if err := w.WriteByte('>'); err != nil {
+ return err
+ }
+ if err := w.WriteByte('\n'); err != nil {
+ return err
+ }
+ }
+ continue
+ }
+ if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 {
+ // empty bytes field
+ continue
+ }
+ if props.proto3 && fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice {
+ // proto3 non-repeated scalar field; skip if zero value
+ if isProto3Zero(fv) {
+ continue
+ }
+ }
+
+ if fv.Kind() == reflect.Interface {
+ // Check if it is a oneof.
+ if st.Field(i).Tag.Get("protobuf_oneof") != "" {
+ // fv is nil, or holds a pointer to generated struct.
+ // That generated struct has exactly one field,
+ // which has a protobuf struct tag.
+ if fv.IsNil() {
+ continue
+ }
+ inner := fv.Elem().Elem() // interface -> *T -> T
+ tag := inner.Type().Field(0).Tag.Get("protobuf")
+ props = new(Properties) // Overwrite the outer props var, but not its pointee.
+ props.Parse(tag)
+ // Write the value in the oneof, not the oneof itself.
+ fv = inner.Field(0)
+
+ // Special case to cope with malformed messages gracefully:
+ // If the value in the oneof is a nil pointer, don't panic
+ // in writeAny.
+ if fv.Kind() == reflect.Ptr && fv.IsNil() {
+ // Use errors.New so writeAny won't render quotes.
+ msg := errors.New("/* nil */")
+ fv = reflect.ValueOf(&msg).Elem()
+ }
+ }
+ }
+
+ if err := writeName(w, props); err != nil {
+ return err
+ }
+ if !w.compact {
+ if err := w.WriteByte(' '); err != nil {
+ return err
+ }
+ }
+
+ if len(props.Enum) > 0 {
+ if err := tm.writeEnum(w, fv, props); err != nil {
+ return err
+ }
+ } else if err := tm.writeAny(w, fv, props); err != nil {
+ return err
+ }
+
+ if err := w.WriteByte('\n'); err != nil {
+ return err
+ }
+ }
+
+ // Extensions (the XXX_extensions field).
+ pv := sv
+ if pv.CanAddr() {
+ pv = sv.Addr()
+ } else {
+ pv = reflect.New(sv.Type())
+ pv.Elem().Set(sv)
+ }
+ if _, err := extendable(pv.Interface()); err == nil {
+ if err := tm.writeExtensions(w, pv); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+// writeAny writes an arbitrary field.
+func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {
+ v = reflect.Indirect(v)
+
+ if props != nil {
+ if len(props.CustomType) > 0 {
+ custom, ok := v.Interface().(Marshaler)
+ if ok {
+ data, err := custom.Marshal()
+ if err != nil {
+ return err
+ }
+ if err := writeString(w, string(data)); err != nil {
+ return err
+ }
+ return nil
+ }
+ } else if len(props.CastType) > 0 {
+ if _, ok := v.Interface().(interface {
+ String() string
+ }); ok {
+ switch v.Kind() {
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
+ reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
+ _, err := fmt.Fprintf(w, "%d", v.Interface())
+ return err
+ }
+ }
+ } else if props.StdTime {
+ t, ok := v.Interface().(time.Time)
+ if !ok {
+ return fmt.Errorf("stdtime is not time.Time, but %T", v.Interface())
+ }
+ tproto, err := timestampProto(t)
+ if err != nil {
+ return err
+ }
+ propsCopy := *props // Make a copy so that this is goroutine-safe
+ propsCopy.StdTime = false
+ err = tm.writeAny(w, reflect.ValueOf(tproto), &propsCopy)
+ return err
+ } else if props.StdDuration {
+ d, ok := v.Interface().(time.Duration)
+ if !ok {
+ return fmt.Errorf("stdtime is not time.Duration, but %T", v.Interface())
+ }
+ dproto := durationProto(d)
+ propsCopy := *props // Make a copy so that this is goroutine-safe
+ propsCopy.StdDuration = false
+ err := tm.writeAny(w, reflect.ValueOf(dproto), &propsCopy)
+ return err
+ }
+ }
+
+ // Floats have special cases.
+ if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 {
+ x := v.Float()
+ var b []byte
+ switch {
+ case math.IsInf(x, 1):
+ b = posInf
+ case math.IsInf(x, -1):
+ b = negInf
+ case math.IsNaN(x):
+ b = nan
+ }
+ if b != nil {
+ _, err := w.Write(b)
+ return err
+ }
+ // Other values are handled below.
+ }
+
+ // We don't attempt to serialise every possible value type; only those
+ // that can occur in protocol buffers.
+ switch v.Kind() {
+ case reflect.Slice:
+ // Should only be a []byte; repeated fields are handled in writeStruct.
+ if err := writeString(w, string(v.Bytes())); err != nil {
+ return err
+ }
+ case reflect.String:
+ if err := writeString(w, v.String()); err != nil {
+ return err
+ }
+ case reflect.Struct:
+ // Required/optional group/message.
+ var bra, ket byte = '<', '>'
+ if props != nil && props.Wire == "group" {
+ bra, ket = '{', '}'
+ }
+ if err := w.WriteByte(bra); err != nil {
+ return err
+ }
+ if !w.compact {
+ if err := w.WriteByte('\n'); err != nil {
+ return err
+ }
+ }
+ w.indent()
+ if v.CanAddr() {
+ // Calling v.Interface on a struct causes the reflect package to
+ // copy the entire struct. This is racy with the new Marshaler
+ // since we atomically update the XXX_sizecache.
+ //
+ // Thus, we retrieve a pointer to the struct if possible to avoid
+ // a race since v.Interface on the pointer doesn't copy the struct.
+ //
+ // If v is not addressable, then we are not worried about a race
+ // since it implies that the binary Marshaler cannot possibly be
+ // mutating this value.
+ v = v.Addr()
+ }
+ if etm, ok := v.Interface().(encoding.TextMarshaler); ok {
+ text, err := etm.MarshalText()
+ if err != nil {
+ return err
+ }
+ if _, err = w.Write(text); err != nil {
+ return err
+ }
+ } else {
+ if v.Kind() == reflect.Ptr {
+ v = v.Elem()
+ }
+ if err := tm.writeStruct(w, v); err != nil {
+ return err
+ }
+ }
+ w.unindent()
+ if err := w.WriteByte(ket); err != nil {
+ return err
+ }
+ default:
+ _, err := fmt.Fprint(w, v.Interface())
+ return err
+ }
+ return nil
+}
+
+// equivalent to C's isprint.
+func isprint(c byte) bool {
+ return c >= 0x20 && c < 0x7f
+}
+
+// writeString writes a string in the protocol buffer text format.
+// It is similar to strconv.Quote except we don't use Go escape sequences,
+// we treat the string as a byte sequence, and we use octal escapes.
+// These differences are to maintain interoperability with the other
+// languages' implementations of the text format.
+func writeString(w *textWriter, s string) error {
+ // use WriteByte here to get any needed indent
+ if err := w.WriteByte('"'); err != nil {
+ return err
+ }
+ // Loop over the bytes, not the runes.
+ for i := 0; i < len(s); i++ {
+ var err error
+ // Divergence from C++: we don't escape apostrophes.
+ // There's no need to escape them, and the C++ parser
+ // copes with a naked apostrophe.
+ switch c := s[i]; c {
+ case '\n':
+ _, err = w.w.Write(backslashN)
+ case '\r':
+ _, err = w.w.Write(backslashR)
+ case '\t':
+ _, err = w.w.Write(backslashT)
+ case '"':
+ _, err = w.w.Write(backslashDQ)
+ case '\\':
+ _, err = w.w.Write(backslashBS)
+ default:
+ if isprint(c) {
+ err = w.w.WriteByte(c)
+ } else {
+ _, err = fmt.Fprintf(w.w, "\\%03o", c)
+ }
+ }
+ if err != nil {
+ return err
+ }
+ }
+ return w.WriteByte('"')
+}
+
+func writeUnknownStruct(w *textWriter, data []byte) (err error) {
+ if !w.compact {
+ if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil {
+ return err
+ }
+ }
+ b := NewBuffer(data)
+ for b.index < len(b.buf) {
+ x, err := b.DecodeVarint()
+ if err != nil {
+ _, ferr := fmt.Fprintf(w, "/* %v */\n", err)
+ return ferr
+ }
+ wire, tag := x&7, x>>3
+ if wire == WireEndGroup {
+ w.unindent()
+ if _, werr := w.Write(endBraceNewline); werr != nil {
+ return werr
+ }
+ continue
+ }
+ if _, ferr := fmt.Fprint(w, tag); ferr != nil {
+ return ferr
+ }
+ if wire != WireStartGroup {
+ if err = w.WriteByte(':'); err != nil {
+ return err
+ }
+ }
+ if !w.compact || wire == WireStartGroup {
+ if err = w.WriteByte(' '); err != nil {
+ return err
+ }
+ }
+ switch wire {
+ case WireBytes:
+ buf, e := b.DecodeRawBytes(false)
+ if e == nil {
+ _, err = fmt.Fprintf(w, "%q", buf)
+ } else {
+ _, err = fmt.Fprintf(w, "/* %v */", e)
+ }
+ case WireFixed32:
+ x, err = b.DecodeFixed32()
+ err = writeUnknownInt(w, x, err)
+ case WireFixed64:
+ x, err = b.DecodeFixed64()
+ err = writeUnknownInt(w, x, err)
+ case WireStartGroup:
+ err = w.WriteByte('{')
+ w.indent()
+ case WireVarint:
+ x, err = b.DecodeVarint()
+ err = writeUnknownInt(w, x, err)
+ default:
+ _, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire)
+ }
+ if err != nil {
+ return err
+ }
+ if err := w.WriteByte('\n'); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func writeUnknownInt(w *textWriter, x uint64, err error) error {
+ if err == nil {
+ _, err = fmt.Fprint(w, x)
+ } else {
+ _, err = fmt.Fprintf(w, "/* %v */", err)
+ }
+ return err
+}
+
+type int32Slice []int32
+
+func (s int32Slice) Len() int { return len(s) }
+func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }
+func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
+
+// writeExtensions writes all the extensions in pv.
+// pv is assumed to be a pointer to a protocol message struct that is extendable.
+func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error {
+ emap := extensionMaps[pv.Type().Elem()]
+ e := pv.Interface().(Message)
+
+ var m map[int32]Extension
+ var mu sync.Locker
+ if em, ok := e.(extensionsBytes); ok {
+ eb := em.GetExtensions()
+ var err error
+ m, err = BytesToExtensionsMap(*eb)
+ if err != nil {
+ return err
+ }
+ mu = notLocker{}
+ } else if _, ok := e.(extendableProto); ok {
+ ep, _ := extendable(e)
+ m, mu = ep.extensionsRead()
+ if m == nil {
+ return nil
+ }
+ }
+
+ // Order the extensions by ID.
+ // This isn't strictly necessary, but it will give us
+ // canonical output, which will also make testing easier.
+
+ mu.Lock()
+ ids := make([]int32, 0, len(m))
+ for id := range m {
+ ids = append(ids, id)
+ }
+ sort.Sort(int32Slice(ids))
+ mu.Unlock()
+
+ for _, extNum := range ids {
+ ext := m[extNum]
+ var desc *ExtensionDesc
+ if emap != nil {
+ desc = emap[extNum]
+ }
+ if desc == nil {
+ // Unknown extension.
+ if err := writeUnknownStruct(w, ext.enc); err != nil {
+ return err
+ }
+ continue
+ }
+
+ pb, err := GetExtension(e, desc)
+ if err != nil {
+ return fmt.Errorf("failed getting extension: %v", err)
+ }
+
+ // Repeated extensions will appear as a slice.
+ if !desc.repeated() {
+ if err := tm.writeExtension(w, desc.Name, pb); err != nil {
+ return err
+ }
+ } else {
+ v := reflect.ValueOf(pb)
+ for i := 0; i < v.Len(); i++ {
+ if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil {
+ return err
+ }
+ }
+ }
+ }
+ return nil
+}
+
+func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error {
+ if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil {
+ return err
+ }
+ if !w.compact {
+ if err := w.WriteByte(' '); err != nil {
+ return err
+ }
+ }
+ if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil {
+ return err
+ }
+ if err := w.WriteByte('\n'); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (w *textWriter) writeIndent() {
+ if !w.complete {
+ return
+ }
+ remain := w.ind * 2
+ for remain > 0 {
+ n := remain
+ if n > len(spaces) {
+ n = len(spaces)
+ }
+ w.w.Write(spaces[:n])
+ remain -= n
+ }
+ w.complete = false
+}
+
+// TextMarshaler is a configurable text format marshaler.
+type TextMarshaler struct {
+ Compact bool // use compact text format (one line).
+ ExpandAny bool // expand google.protobuf.Any messages of known types
+}
+
+// Marshal writes a given protocol buffer in text format.
+// The only errors returned are from w.
+func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error {
+ val := reflect.ValueOf(pb)
+ if pb == nil || val.IsNil() {
+ w.Write([]byte("<nil>"))
+ return nil
+ }
+ var bw *bufio.Writer
+ ww, ok := w.(writer)
+ if !ok {
+ bw = bufio.NewWriter(w)
+ ww = bw
+ }
+ aw := &textWriter{
+ w: ww,
+ complete: true,
+ compact: tm.Compact,
+ }
+
+ if etm, ok := pb.(encoding.TextMarshaler); ok {
+ text, err := etm.MarshalText()
+ if err != nil {
+ return err
+ }
+ if _, err = aw.Write(text); err != nil {
+ return err
+ }
+ if bw != nil {
+ return bw.Flush()
+ }
+ return nil
+ }
+ // Dereference the received pointer so we don't have outer < and >.
+ v := reflect.Indirect(val)
+ if err := tm.writeStruct(aw, v); err != nil {
+ return err
+ }
+ if bw != nil {
+ return bw.Flush()
+ }
+ return nil
+}
+
+// Text is the same as Marshal, but returns the string directly.
+func (tm *TextMarshaler) Text(pb Message) string {
+ var buf bytes.Buffer
+ tm.Marshal(&buf, pb)
+ return buf.String()
+}
+
+var (
+ defaultTextMarshaler = TextMarshaler{}
+ compactTextMarshaler = TextMarshaler{Compact: true}
+)
+
+// TODO: consider removing some of the Marshal functions below.
+
+// MarshalText writes a given protocol buffer in text format.
+// The only errors returned are from w.
+func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) }
+
+// MarshalTextString is the same as MarshalText, but returns the string directly.
+func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) }
+
+// CompactText writes a given protocol buffer in compact text format (one line).
+func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) }
+
+// CompactTextString is the same as CompactText, but returns the string directly.
+func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) }
diff --git a/vendor/github.com/gogo/protobuf/proto/text_gogo.go b/vendor/github.com/gogo/protobuf/proto/text_gogo.go
new file mode 100644
index 0000000..1d6c6aa
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/text_gogo.go
@@ -0,0 +1,57 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "fmt"
+ "reflect"
+)
+
+func (tm *TextMarshaler) writeEnum(w *textWriter, v reflect.Value, props *Properties) error {
+ m, ok := enumStringMaps[props.Enum]
+ if !ok {
+ if err := tm.writeAny(w, v, props); err != nil {
+ return err
+ }
+ }
+ key := int32(0)
+ if v.Kind() == reflect.Ptr {
+ key = int32(v.Elem().Int())
+ } else {
+ key = int32(v.Int())
+ }
+ s, ok := m[key]
+ if !ok {
+ if err := tm.writeAny(w, v, props); err != nil {
+ return err
+ }
+ }
+ _, err := fmt.Fprint(w, s)
+ return err
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/text_parser.go b/vendor/github.com/gogo/protobuf/proto/text_parser.go
new file mode 100644
index 0000000..fbb000d
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/text_parser.go
@@ -0,0 +1,998 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+// Functions for parsing the Text protocol buffer format.
+// TODO: message sets.
+
+import (
+ "encoding"
+ "errors"
+ "fmt"
+ "reflect"
+ "strconv"
+ "strings"
+ "time"
+ "unicode/utf8"
+)
+
+// Error string emitted when deserializing Any and fields are already set
+const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set"
+
+type ParseError struct {
+ Message string
+ Line int // 1-based line number
+ Offset int // 0-based byte offset from start of input
+}
+
+func (p *ParseError) Error() string {
+ if p.Line == 1 {
+ // show offset only for first line
+ return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message)
+ }
+ return fmt.Sprintf("line %d: %v", p.Line, p.Message)
+}
+
+type token struct {
+ value string
+ err *ParseError
+ line int // line number
+ offset int // byte number from start of input, not start of line
+ unquoted string // the unquoted version of value, if it was a quoted string
+}
+
+func (t *token) String() string {
+ if t.err == nil {
+ return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset)
+ }
+ return fmt.Sprintf("parse error: %v", t.err)
+}
+
+type textParser struct {
+ s string // remaining input
+ done bool // whether the parsing is finished (success or error)
+ backed bool // whether back() was called
+ offset, line int
+ cur token
+}
+
+func newTextParser(s string) *textParser {
+ p := new(textParser)
+ p.s = s
+ p.line = 1
+ p.cur.line = 1
+ return p
+}
+
+func (p *textParser) errorf(format string, a ...interface{}) *ParseError {
+ pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset}
+ p.cur.err = pe
+ p.done = true
+ return pe
+}
+
+// Numbers and identifiers are matched by [-+._A-Za-z0-9]
+func isIdentOrNumberChar(c byte) bool {
+ switch {
+ case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z':
+ return true
+ case '0' <= c && c <= '9':
+ return true
+ }
+ switch c {
+ case '-', '+', '.', '_':
+ return true
+ }
+ return false
+}
+
+func isWhitespace(c byte) bool {
+ switch c {
+ case ' ', '\t', '\n', '\r':
+ return true
+ }
+ return false
+}
+
+func isQuote(c byte) bool {
+ switch c {
+ case '"', '\'':
+ return true
+ }
+ return false
+}
+
+func (p *textParser) skipWhitespace() {
+ i := 0
+ for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') {
+ if p.s[i] == '#' {
+ // comment; skip to end of line or input
+ for i < len(p.s) && p.s[i] != '\n' {
+ i++
+ }
+ if i == len(p.s) {
+ break
+ }
+ }
+ if p.s[i] == '\n' {
+ p.line++
+ }
+ i++
+ }
+ p.offset += i
+ p.s = p.s[i:len(p.s)]
+ if len(p.s) == 0 {
+ p.done = true
+ }
+}
+
+func (p *textParser) advance() {
+ // Skip whitespace
+ p.skipWhitespace()
+ if p.done {
+ return
+ }
+
+ // Start of non-whitespace
+ p.cur.err = nil
+ p.cur.offset, p.cur.line = p.offset, p.line
+ p.cur.unquoted = ""
+ switch p.s[0] {
+ case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/':
+ // Single symbol
+ p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)]
+ case '"', '\'':
+ // Quoted string
+ i := 1
+ for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' {
+ if p.s[i] == '\\' && i+1 < len(p.s) {
+ // skip escaped char
+ i++
+ }
+ i++
+ }
+ if i >= len(p.s) || p.s[i] != p.s[0] {
+ p.errorf("unmatched quote")
+ return
+ }
+ unq, err := unquoteC(p.s[1:i], rune(p.s[0]))
+ if err != nil {
+ p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err)
+ return
+ }
+ p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)]
+ p.cur.unquoted = unq
+ default:
+ i := 0
+ for i < len(p.s) && isIdentOrNumberChar(p.s[i]) {
+ i++
+ }
+ if i == 0 {
+ p.errorf("unexpected byte %#x", p.s[0])
+ return
+ }
+ p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)]
+ }
+ p.offset += len(p.cur.value)
+}
+
+var (
+ errBadUTF8 = errors.New("proto: bad UTF-8")
+)
+
+func unquoteC(s string, quote rune) (string, error) {
+ // This is based on C++'s tokenizer.cc.
+ // Despite its name, this is *not* parsing C syntax.
+ // For instance, "\0" is an invalid quoted string.
+
+ // Avoid allocation in trivial cases.
+ simple := true
+ for _, r := range s {
+ if r == '\\' || r == quote {
+ simple = false
+ break
+ }
+ }
+ if simple {
+ return s, nil
+ }
+
+ buf := make([]byte, 0, 3*len(s)/2)
+ for len(s) > 0 {
+ r, n := utf8.DecodeRuneInString(s)
+ if r == utf8.RuneError && n == 1 {
+ return "", errBadUTF8
+ }
+ s = s[n:]
+ if r != '\\' {
+ if r < utf8.RuneSelf {
+ buf = append(buf, byte(r))
+ } else {
+ buf = append(buf, string(r)...)
+ }
+ continue
+ }
+
+ ch, tail, err := unescape(s)
+ if err != nil {
+ return "", err
+ }
+ buf = append(buf, ch...)
+ s = tail
+ }
+ return string(buf), nil
+}
+
+func unescape(s string) (ch string, tail string, err error) {
+ r, n := utf8.DecodeRuneInString(s)
+ if r == utf8.RuneError && n == 1 {
+ return "", "", errBadUTF8
+ }
+ s = s[n:]
+ switch r {
+ case 'a':
+ return "\a", s, nil
+ case 'b':
+ return "\b", s, nil
+ case 'f':
+ return "\f", s, nil
+ case 'n':
+ return "\n", s, nil
+ case 'r':
+ return "\r", s, nil
+ case 't':
+ return "\t", s, nil
+ case 'v':
+ return "\v", s, nil
+ case '?':
+ return "?", s, nil // trigraph workaround
+ case '\'', '"', '\\':
+ return string(r), s, nil
+ case '0', '1', '2', '3', '4', '5', '6', '7':
+ if len(s) < 2 {
+ return "", "", fmt.Errorf(`\%c requires 2 following digits`, r)
+ }
+ ss := string(r) + s[:2]
+ s = s[2:]
+ i, err := strconv.ParseUint(ss, 8, 8)
+ if err != nil {
+ return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss)
+ }
+ return string([]byte{byte(i)}), s, nil
+ case 'x', 'X', 'u', 'U':
+ var n int
+ switch r {
+ case 'x', 'X':
+ n = 2
+ case 'u':
+ n = 4
+ case 'U':
+ n = 8
+ }
+ if len(s) < n {
+ return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n)
+ }
+ ss := s[:n]
+ s = s[n:]
+ i, err := strconv.ParseUint(ss, 16, 64)
+ if err != nil {
+ return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss)
+ }
+ if r == 'x' || r == 'X' {
+ return string([]byte{byte(i)}), s, nil
+ }
+ if i > utf8.MaxRune {
+ return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss)
+ }
+ return string(i), s, nil
+ }
+ return "", "", fmt.Errorf(`unknown escape \%c`, r)
+}
+
+// Back off the parser by one token. Can only be done between calls to next().
+// It makes the next advance() a no-op.
+func (p *textParser) back() { p.backed = true }
+
+// Advances the parser and returns the new current token.
+func (p *textParser) next() *token {
+ if p.backed || p.done {
+ p.backed = false
+ return &p.cur
+ }
+ p.advance()
+ if p.done {
+ p.cur.value = ""
+ } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) {
+ // Look for multiple quoted strings separated by whitespace,
+ // and concatenate them.
+ cat := p.cur
+ for {
+ p.skipWhitespace()
+ if p.done || !isQuote(p.s[0]) {
+ break
+ }
+ p.advance()
+ if p.cur.err != nil {
+ return &p.cur
+ }
+ cat.value += " " + p.cur.value
+ cat.unquoted += p.cur.unquoted
+ }
+ p.done = false // parser may have seen EOF, but we want to return cat
+ p.cur = cat
+ }
+ return &p.cur
+}
+
+func (p *textParser) consumeToken(s string) error {
+ tok := p.next()
+ if tok.err != nil {
+ return tok.err
+ }
+ if tok.value != s {
+ p.back()
+ return p.errorf("expected %q, found %q", s, tok.value)
+ }
+ return nil
+}
+
+// Return a RequiredNotSetError indicating which required field was not set.
+func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError {
+ st := sv.Type()
+ sprops := GetProperties(st)
+ for i := 0; i < st.NumField(); i++ {
+ if !isNil(sv.Field(i)) {
+ continue
+ }
+
+ props := sprops.Prop[i]
+ if props.Required {
+ return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)}
+ }
+ }
+ return &RequiredNotSetError{fmt.Sprintf("%v.<unknown field name>", st)} // should not happen
+}
+
+// Returns the index in the struct for the named field, as well as the parsed tag properties.
+func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) {
+ i, ok := sprops.decoderOrigNames[name]
+ if ok {
+ return i, sprops.Prop[i], true
+ }
+ return -1, nil, false
+}
+
+// Consume a ':' from the input stream (if the next token is a colon),
+// returning an error if a colon is needed but not present.
+func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError {
+ tok := p.next()
+ if tok.err != nil {
+ return tok.err
+ }
+ if tok.value != ":" {
+ // Colon is optional when the field is a group or message.
+ needColon := true
+ switch props.Wire {
+ case "group":
+ needColon = false
+ case "bytes":
+ // A "bytes" field is either a message, a string, or a repeated field;
+ // those three become *T, *string and []T respectively, so we can check for
+ // this field being a pointer to a non-string.
+ if typ.Kind() == reflect.Ptr {
+ // *T or *string
+ if typ.Elem().Kind() == reflect.String {
+ break
+ }
+ } else if typ.Kind() == reflect.Slice {
+ // []T or []*T
+ if typ.Elem().Kind() != reflect.Ptr {
+ break
+ }
+ } else if typ.Kind() == reflect.String {
+ // The proto3 exception is for a string field,
+ // which requires a colon.
+ break
+ }
+ needColon = false
+ }
+ if needColon {
+ return p.errorf("expected ':', found %q", tok.value)
+ }
+ p.back()
+ }
+ return nil
+}
+
+func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
+ st := sv.Type()
+ sprops := GetProperties(st)
+ reqCount := sprops.reqCount
+ var reqFieldErr error
+ fieldSet := make(map[string]bool)
+ // A struct is a sequence of "name: value", terminated by one of
+ // '>' or '}', or the end of the input. A name may also be
+ // "[extension]" or "[type/url]".
+ //
+ // The whole struct can also be an expanded Any message, like:
+ // [type/url] < ... struct contents ... >
+ for {
+ tok := p.next()
+ if tok.err != nil {
+ return tok.err
+ }
+ if tok.value == terminator {
+ break
+ }
+ if tok.value == "[" {
+ // Looks like an extension or an Any.
+ //
+ // TODO: Check whether we need to handle
+ // namespace rooted names (e.g. ".something.Foo").
+ extName, err := p.consumeExtName()
+ if err != nil {
+ return err
+ }
+
+ if s := strings.LastIndex(extName, "/"); s >= 0 {
+ // If it contains a slash, it's an Any type URL.
+ messageName := extName[s+1:]
+ mt := MessageType(messageName)
+ if mt == nil {
+ return p.errorf("unrecognized message %q in google.protobuf.Any", messageName)
+ }
+ tok = p.next()
+ if tok.err != nil {
+ return tok.err
+ }
+ // consume an optional colon
+ if tok.value == ":" {
+ tok = p.next()
+ if tok.err != nil {
+ return tok.err
+ }
+ }
+ var terminator string
+ switch tok.value {
+ case "<":
+ terminator = ">"
+ case "{":
+ terminator = "}"
+ default:
+ return p.errorf("expected '{' or '<', found %q", tok.value)
+ }
+ v := reflect.New(mt.Elem())
+ if pe := p.readStruct(v.Elem(), terminator); pe != nil {
+ return pe
+ }
+ b, err := Marshal(v.Interface().(Message))
+ if err != nil {
+ return p.errorf("failed to marshal message of type %q: %v", messageName, err)
+ }
+ if fieldSet["type_url"] {
+ return p.errorf(anyRepeatedlyUnpacked, "type_url")
+ }
+ if fieldSet["value"] {
+ return p.errorf(anyRepeatedlyUnpacked, "value")
+ }
+ sv.FieldByName("TypeUrl").SetString(extName)
+ sv.FieldByName("Value").SetBytes(b)
+ fieldSet["type_url"] = true
+ fieldSet["value"] = true
+ continue
+ }
+
+ var desc *ExtensionDesc
+ // This could be faster, but it's functional.
+ // TODO: Do something smarter than a linear scan.
+ for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) {
+ if d.Name == extName {
+ desc = d
+ break
+ }
+ }
+ if desc == nil {
+ return p.errorf("unrecognized extension %q", extName)
+ }
+
+ props := &Properties{}
+ props.Parse(desc.Tag)
+
+ typ := reflect.TypeOf(desc.ExtensionType)
+ if err := p.checkForColon(props, typ); err != nil {
+ return err
+ }
+
+ rep := desc.repeated()
+
+ // Read the extension structure, and set it in
+ // the value we're constructing.
+ var ext reflect.Value
+ if !rep {
+ ext = reflect.New(typ).Elem()
+ } else {
+ ext = reflect.New(typ.Elem()).Elem()
+ }
+ if err := p.readAny(ext, props); err != nil {
+ if _, ok := err.(*RequiredNotSetError); !ok {
+ return err
+ }
+ reqFieldErr = err
+ }
+ ep := sv.Addr().Interface().(Message)
+ if !rep {
+ SetExtension(ep, desc, ext.Interface())
+ } else {
+ old, err := GetExtension(ep, desc)
+ var sl reflect.Value
+ if err == nil {
+ sl = reflect.ValueOf(old) // existing slice
+ } else {
+ sl = reflect.MakeSlice(typ, 0, 1)
+ }
+ sl = reflect.Append(sl, ext)
+ SetExtension(ep, desc, sl.Interface())
+ }
+ if err := p.consumeOptionalSeparator(); err != nil {
+ return err
+ }
+ continue
+ }
+
+ // This is a normal, non-extension field.
+ name := tok.value
+ var dst reflect.Value
+ fi, props, ok := structFieldByName(sprops, name)
+ if ok {
+ dst = sv.Field(fi)
+ } else if oop, ok := sprops.OneofTypes[name]; ok {
+ // It is a oneof.
+ props = oop.Prop
+ nv := reflect.New(oop.Type.Elem())
+ dst = nv.Elem().Field(0)
+ field := sv.Field(oop.Field)
+ if !field.IsNil() {
+ return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name)
+ }
+ field.Set(nv)
+ }
+ if !dst.IsValid() {
+ return p.errorf("unknown field name %q in %v", name, st)
+ }
+
+ if dst.Kind() == reflect.Map {
+ // Consume any colon.
+ if err := p.checkForColon(props, dst.Type()); err != nil {
+ return err
+ }
+
+ // Construct the map if it doesn't already exist.
+ if dst.IsNil() {
+ dst.Set(reflect.MakeMap(dst.Type()))
+ }
+ key := reflect.New(dst.Type().Key()).Elem()
+ val := reflect.New(dst.Type().Elem()).Elem()
+
+ // The map entry should be this sequence of tokens:
+ // < key : KEY value : VALUE >
+ // However, implementations may omit key or value, and technically
+ // we should support them in any order. See b/28924776 for a time
+ // this went wrong.
+
+ tok := p.next()
+ var terminator string
+ switch tok.value {
+ case "<":
+ terminator = ">"
+ case "{":
+ terminator = "}"
+ default:
+ return p.errorf("expected '{' or '<', found %q", tok.value)
+ }
+ for {
+ tok := p.next()
+ if tok.err != nil {
+ return tok.err
+ }
+ if tok.value == terminator {
+ break
+ }
+ switch tok.value {
+ case "key":
+ if err := p.consumeToken(":"); err != nil {
+ return err
+ }
+ if err := p.readAny(key, props.mkeyprop); err != nil {
+ return err
+ }
+ if err := p.consumeOptionalSeparator(); err != nil {
+ return err
+ }
+ case "value":
+ if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil {
+ return err
+ }
+ if err := p.readAny(val, props.mvalprop); err != nil {
+ return err
+ }
+ if err := p.consumeOptionalSeparator(); err != nil {
+ return err
+ }
+ default:
+ p.back()
+ return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value)
+ }
+ }
+
+ dst.SetMapIndex(key, val)
+ continue
+ }
+
+ // Check that it's not already set if it's not a repeated field.
+ if !props.Repeated && fieldSet[name] {
+ return p.errorf("non-repeated field %q was repeated", name)
+ }
+
+ if err := p.checkForColon(props, dst.Type()); err != nil {
+ return err
+ }
+
+ // Parse into the field.
+ fieldSet[name] = true
+ if err := p.readAny(dst, props); err != nil {
+ if _, ok := err.(*RequiredNotSetError); !ok {
+ return err
+ }
+ reqFieldErr = err
+ }
+ if props.Required {
+ reqCount--
+ }
+
+ if err := p.consumeOptionalSeparator(); err != nil {
+ return err
+ }
+
+ }
+
+ if reqCount > 0 {
+ return p.missingRequiredFieldError(sv)
+ }
+ return reqFieldErr
+}
+
+// consumeExtName consumes extension name or expanded Any type URL and the
+// following ']'. It returns the name or URL consumed.
+func (p *textParser) consumeExtName() (string, error) {
+ tok := p.next()
+ if tok.err != nil {
+ return "", tok.err
+ }
+
+ // If extension name or type url is quoted, it's a single token.
+ if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] {
+ name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0]))
+ if err != nil {
+ return "", err
+ }
+ return name, p.consumeToken("]")
+ }
+
+ // Consume everything up to "]"
+ var parts []string
+ for tok.value != "]" {
+ parts = append(parts, tok.value)
+ tok = p.next()
+ if tok.err != nil {
+ return "", p.errorf("unrecognized type_url or extension name: %s", tok.err)
+ }
+ if p.done && tok.value != "]" {
+ return "", p.errorf("unclosed type_url or extension name")
+ }
+ }
+ return strings.Join(parts, ""), nil
+}
+
+// consumeOptionalSeparator consumes an optional semicolon or comma.
+// It is used in readStruct to provide backward compatibility.
+func (p *textParser) consumeOptionalSeparator() error {
+ tok := p.next()
+ if tok.err != nil {
+ return tok.err
+ }
+ if tok.value != ";" && tok.value != "," {
+ p.back()
+ }
+ return nil
+}
+
+func (p *textParser) readAny(v reflect.Value, props *Properties) error {
+ tok := p.next()
+ if tok.err != nil {
+ return tok.err
+ }
+ if tok.value == "" {
+ return p.errorf("unexpected EOF")
+ }
+ if len(props.CustomType) > 0 {
+ if props.Repeated {
+ t := reflect.TypeOf(v.Interface())
+ if t.Kind() == reflect.Slice {
+ tc := reflect.TypeOf(new(Marshaler))
+ ok := t.Elem().Implements(tc.Elem())
+ if ok {
+ fv := v
+ flen := fv.Len()
+ if flen == fv.Cap() {
+ nav := reflect.MakeSlice(v.Type(), flen, 2*flen+1)
+ reflect.Copy(nav, fv)
+ fv.Set(nav)
+ }
+ fv.SetLen(flen + 1)
+
+ // Read one.
+ p.back()
+ return p.readAny(fv.Index(flen), props)
+ }
+ }
+ }
+ if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {
+ custom := reflect.New(props.ctype.Elem()).Interface().(Unmarshaler)
+ err := custom.Unmarshal([]byte(tok.unquoted))
+ if err != nil {
+ return p.errorf("%v %v: %v", err, v.Type(), tok.value)
+ }
+ v.Set(reflect.ValueOf(custom))
+ } else {
+ custom := reflect.New(reflect.TypeOf(v.Interface())).Interface().(Unmarshaler)
+ err := custom.Unmarshal([]byte(tok.unquoted))
+ if err != nil {
+ return p.errorf("%v %v: %v", err, v.Type(), tok.value)
+ }
+ v.Set(reflect.Indirect(reflect.ValueOf(custom)))
+ }
+ return nil
+ }
+ if props.StdTime {
+ fv := v
+ p.back()
+ props.StdTime = false
+ tproto := &timestamp{}
+ err := p.readAny(reflect.ValueOf(tproto).Elem(), props)
+ props.StdTime = true
+ if err != nil {
+ return err
+ }
+ tim, err := timestampFromProto(tproto)
+ if err != nil {
+ return err
+ }
+ if props.Repeated {
+ t := reflect.TypeOf(v.Interface())
+ if t.Kind() == reflect.Slice {
+ if t.Elem().Kind() == reflect.Ptr {
+ ts := fv.Interface().([]*time.Time)
+ ts = append(ts, &tim)
+ fv.Set(reflect.ValueOf(ts))
+ return nil
+ } else {
+ ts := fv.Interface().([]time.Time)
+ ts = append(ts, tim)
+ fv.Set(reflect.ValueOf(ts))
+ return nil
+ }
+ }
+ }
+ if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {
+ v.Set(reflect.ValueOf(&tim))
+ } else {
+ v.Set(reflect.Indirect(reflect.ValueOf(&tim)))
+ }
+ return nil
+ }
+ if props.StdDuration {
+ fv := v
+ p.back()
+ props.StdDuration = false
+ dproto := &duration{}
+ err := p.readAny(reflect.ValueOf(dproto).Elem(), props)
+ props.StdDuration = true
+ if err != nil {
+ return err
+ }
+ dur, err := durationFromProto(dproto)
+ if err != nil {
+ return err
+ }
+ if props.Repeated {
+ t := reflect.TypeOf(v.Interface())
+ if t.Kind() == reflect.Slice {
+ if t.Elem().Kind() == reflect.Ptr {
+ ds := fv.Interface().([]*time.Duration)
+ ds = append(ds, &dur)
+ fv.Set(reflect.ValueOf(ds))
+ return nil
+ } else {
+ ds := fv.Interface().([]time.Duration)
+ ds = append(ds, dur)
+ fv.Set(reflect.ValueOf(ds))
+ return nil
+ }
+ }
+ }
+ if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {
+ v.Set(reflect.ValueOf(&dur))
+ } else {
+ v.Set(reflect.Indirect(reflect.ValueOf(&dur)))
+ }
+ return nil
+ }
+ switch fv := v; fv.Kind() {
+ case reflect.Slice:
+ at := v.Type()
+ if at.Elem().Kind() == reflect.Uint8 {
+ // Special case for []byte
+ if tok.value[0] != '"' && tok.value[0] != '\'' {
+ // Deliberately written out here, as the error after
+ // this switch statement would write "invalid []byte: ...",
+ // which is not as user-friendly.
+ return p.errorf("invalid string: %v", tok.value)
+ }
+ bytes := []byte(tok.unquoted)
+ fv.Set(reflect.ValueOf(bytes))
+ return nil
+ }
+ // Repeated field.
+ if tok.value == "[" {
+ // Repeated field with list notation, like [1,2,3].
+ for {
+ fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))
+ err := p.readAny(fv.Index(fv.Len()-1), props)
+ if err != nil {
+ return err
+ }
+ ntok := p.next()
+ if ntok.err != nil {
+ return ntok.err
+ }
+ if ntok.value == "]" {
+ break
+ }
+ if ntok.value != "," {
+ return p.errorf("Expected ']' or ',' found %q", ntok.value)
+ }
+ }
+ return nil
+ }
+ // One value of the repeated field.
+ p.back()
+ fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))
+ return p.readAny(fv.Index(fv.Len()-1), props)
+ case reflect.Bool:
+ // true/1/t/True or false/f/0/False.
+ switch tok.value {
+ case "true", "1", "t", "True":
+ fv.SetBool(true)
+ return nil
+ case "false", "0", "f", "False":
+ fv.SetBool(false)
+ return nil
+ }
+ case reflect.Float32, reflect.Float64:
+ v := tok.value
+ // Ignore 'f' for compatibility with output generated by C++, but don't
+ // remove 'f' when the value is "-inf" or "inf".
+ if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" {
+ v = v[:len(v)-1]
+ }
+ if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil {
+ fv.SetFloat(f)
+ return nil
+ }
+ case reflect.Int32:
+ if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil {
+ fv.SetInt(x)
+ return nil
+ }
+
+ if len(props.Enum) == 0 {
+ break
+ }
+ m, ok := enumValueMaps[props.Enum]
+ if !ok {
+ break
+ }
+ x, ok := m[tok.value]
+ if !ok {
+ break
+ }
+ fv.SetInt(int64(x))
+ return nil
+ case reflect.Int64:
+ if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil {
+ fv.SetInt(x)
+ return nil
+ }
+
+ case reflect.Ptr:
+ // A basic field (indirected through pointer), or a repeated message/group
+ p.back()
+ fv.Set(reflect.New(fv.Type().Elem()))
+ return p.readAny(fv.Elem(), props)
+ case reflect.String:
+ if tok.value[0] == '"' || tok.value[0] == '\'' {
+ fv.SetString(tok.unquoted)
+ return nil
+ }
+ case reflect.Struct:
+ var terminator string
+ switch tok.value {
+ case "{":
+ terminator = "}"
+ case "<":
+ terminator = ">"
+ default:
+ return p.errorf("expected '{' or '<', found %q", tok.value)
+ }
+ // TODO: Handle nested messages which implement encoding.TextUnmarshaler.
+ return p.readStruct(fv, terminator)
+ case reflect.Uint32:
+ if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil {
+ fv.SetUint(uint64(x))
+ return nil
+ }
+ case reflect.Uint64:
+ if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil {
+ fv.SetUint(x)
+ return nil
+ }
+ }
+ return p.errorf("invalid %v: %v", v.Type(), tok.value)
+}
+
+// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb
+// before starting to unmarshal, so any existing data in pb is always removed.
+// If a required field is not set and no other error occurs,
+// UnmarshalText returns *RequiredNotSetError.
+func UnmarshalText(s string, pb Message) error {
+ if um, ok := pb.(encoding.TextUnmarshaler); ok {
+ return um.UnmarshalText([]byte(s))
+ }
+ pb.Reset()
+ v := reflect.ValueOf(pb)
+ return newTextParser(s).readStruct(v.Elem(), "")
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/timestamp.go b/vendor/github.com/gogo/protobuf/proto/timestamp.go
new file mode 100644
index 0000000..9324f65
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/timestamp.go
@@ -0,0 +1,113 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+// This file implements operations on google.protobuf.Timestamp.
+
+import (
+ "errors"
+ "fmt"
+ "time"
+)
+
+const (
+ // Seconds field of the earliest valid Timestamp.
+ // This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix().
+ minValidSeconds = -62135596800
+ // Seconds field just after the latest valid Timestamp.
+ // This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix().
+ maxValidSeconds = 253402300800
+)
+
+// validateTimestamp determines whether a Timestamp is valid.
+// A valid timestamp represents a time in the range
+// [0001-01-01, 10000-01-01) and has a Nanos field
+// in the range [0, 1e9).
+//
+// If the Timestamp is valid, validateTimestamp returns nil.
+// Otherwise, it returns an error that describes
+// the problem.
+//
+// Every valid Timestamp can be represented by a time.Time, but the converse is not true.
+func validateTimestamp(ts *timestamp) error {
+ if ts == nil {
+ return errors.New("timestamp: nil Timestamp")
+ }
+ if ts.Seconds < minValidSeconds {
+ return fmt.Errorf("timestamp: %#v before 0001-01-01", ts)
+ }
+ if ts.Seconds >= maxValidSeconds {
+ return fmt.Errorf("timestamp: %#v after 10000-01-01", ts)
+ }
+ if ts.Nanos < 0 || ts.Nanos >= 1e9 {
+ return fmt.Errorf("timestamp: %#v: nanos not in range [0, 1e9)", ts)
+ }
+ return nil
+}
+
+// TimestampFromProto converts a google.protobuf.Timestamp proto to a time.Time.
+// It returns an error if the argument is invalid.
+//
+// Unlike most Go functions, if Timestamp returns an error, the first return value
+// is not the zero time.Time. Instead, it is the value obtained from the
+// time.Unix function when passed the contents of the Timestamp, in the UTC
+// locale. This may or may not be a meaningful time; many invalid Timestamps
+// do map to valid time.Times.
+//
+// A nil Timestamp returns an error. The first return value in that case is
+// undefined.
+func timestampFromProto(ts *timestamp) (time.Time, error) {
+ // Don't return the zero value on error, because corresponds to a valid
+ // timestamp. Instead return whatever time.Unix gives us.
+ var t time.Time
+ if ts == nil {
+ t = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp
+ } else {
+ t = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC()
+ }
+ return t, validateTimestamp(ts)
+}
+
+// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.
+// It returns an error if the resulting Timestamp is invalid.
+func timestampProto(t time.Time) (*timestamp, error) {
+ seconds := t.Unix()
+ nanos := int32(t.Sub(time.Unix(seconds, 0)))
+ ts := &timestamp{
+ Seconds: seconds,
+ Nanos: nanos,
+ }
+ if err := validateTimestamp(ts); err != nil {
+ return nil, err
+ }
+ return ts, nil
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go b/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go
new file mode 100644
index 0000000..38439fa
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go
@@ -0,0 +1,49 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2016, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+ "reflect"
+ "time"
+)
+
+var timeType = reflect.TypeOf((*time.Time)(nil)).Elem()
+
+type timestamp struct {
+ Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
+ Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
+}
+
+func (m *timestamp) Reset() { *m = timestamp{} }
+func (*timestamp) ProtoMessage() {}
+func (*timestamp) String() string { return "timestamp<string>" }
+
+func init() {
+ RegisterType((*timestamp)(nil), "gogo.protobuf.proto.timestamp")
+}
diff --git a/vendor/github.com/golang/protobuf/proto/deprecated.go b/vendor/github.com/golang/protobuf/proto/deprecated.go
new file mode 100644
index 0000000..69de0ea
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/deprecated.go
@@ -0,0 +1,38 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2018 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+// Deprecated: do not use.
+type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 }
+
+// Deprecated: do not use.
+func GetStats() Stats { return Stats{} }
diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go
index 816a3b9..dacdd22 100644
--- a/vendor/github.com/golang/protobuf/proto/extensions.go
+++ b/vendor/github.com/golang/protobuf/proto/extensions.go
@@ -488,7 +488,7 @@ func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error
}
typ := reflect.TypeOf(extension.ExtensionType)
if typ != reflect.TypeOf(value) {
- return errors.New("proto: bad extension value type")
+ return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", value, extension.ExtensionType)
}
// nil extension values need to be caught early, because the
// encoder can't distinguish an ErrNil due to a nil extension
diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go
index 75565cc..c076dbd 100644
--- a/vendor/github.com/golang/protobuf/proto/lib.go
+++ b/vendor/github.com/golang/protobuf/proto/lib.go
@@ -341,26 +341,6 @@ type Message interface {
ProtoMessage()
}
-// Stats records allocation details about the protocol buffer encoders
-// and decoders. Useful for tuning the library itself.
-type Stats struct {
- Emalloc uint64 // mallocs in encode
- Dmalloc uint64 // mallocs in decode
- Encode uint64 // number of encodes
- Decode uint64 // number of decodes
- Chit uint64 // number of cache hits
- Cmiss uint64 // number of cache misses
- Size uint64 // number of sizes
-}
-
-// Set to true to enable stats collection.
-const collectStats = false
-
-var stats Stats
-
-// GetStats returns a copy of the global Stats structure.
-func GetStats() Stats { return stats }
-
// A Buffer is a buffer manager for marshaling and unmarshaling
// protocol buffers. It may be reused between invocations to
// reduce memory usage. It is not necessary to use a Buffer;
diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go
index 50b99b8..dce098e 100644
--- a/vendor/github.com/golang/protobuf/proto/properties.go
+++ b/vendor/github.com/golang/protobuf/proto/properties.go
@@ -334,9 +334,6 @@ func GetProperties(t reflect.Type) *StructProperties {
sprop, ok := propertiesMap[t]
propertiesMu.RUnlock()
if ok {
- if collectStats {
- stats.Chit++
- }
return sprop
}
@@ -349,14 +346,8 @@ func GetProperties(t reflect.Type) *StructProperties {
// getPropertiesLocked requires that propertiesMu is held.
func getPropertiesLocked(t reflect.Type) *StructProperties {
if prop, ok := propertiesMap[t]; ok {
- if collectStats {
- stats.Chit++
- }
return prop
}
- if collectStats {
- stats.Cmiss++
- }
prop := new(StructProperties)
// in case of recursive protos, fill this in now.
diff --git a/vendor/github.com/golang/protobuf/proto/table_marshal.go b/vendor/github.com/golang/protobuf/proto/table_marshal.go
index eafe04d..b167944 100644
--- a/vendor/github.com/golang/protobuf/proto/table_marshal.go
+++ b/vendor/github.com/golang/protobuf/proto/table_marshal.go
@@ -252,11 +252,13 @@ func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte
}
}
for _, f := range u.fields {
- if f.required && errLater == nil {
+ if f.required {
if ptr.offset(f.field).getPointer().isNil() {
// Required field is not set.
// We record the error but keep going, to give a complete marshaling.
- errLater = &RequiredNotSetError{f.name}
+ if errLater == nil {
+ errLater = &RequiredNotSetError{f.name}
+ }
continue
}
}
@@ -2592,7 +2594,7 @@ func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, de
p := toAddrPointer(&v, ei.isptr)
b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
b = append(b, 1<<3|WireEndGroup)
- if nerr.Merge(err) {
+ if !nerr.Merge(err) {
return b, err
}
}
diff --git a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go
index de868ae..ebf1caa 100644
--- a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go
+++ b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go
@@ -175,10 +175,12 @@ func (u *unmarshalInfo) unmarshal(m pointer, b []byte) error {
reqMask |= f.reqMask
continue
}
- if r, ok := err.(*RequiredNotSetError); ok && errLater == nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
// Remember this error, but keep parsing. We need to produce
// a full parse even if a required field is missing.
- errLater = r
+ if errLater == nil {
+ errLater = r
+ }
reqMask |= f.reqMask
continue
}
diff --git a/vendor/github.com/google/go-github/github/activity_events.go b/vendor/github.com/google/go-github/github/activity_events.go
index f337fcd..a919b11 100644
--- a/vendor/github.com/google/go-github/github/activity_events.go
+++ b/vendor/github.com/google/go-github/github/activity_events.go
@@ -32,6 +32,10 @@ func (e Event) String() string {
// a value of the corresponding struct type will be returned.
func (e *Event) ParsePayload() (payload interface{}, err error) {
switch *e.Type {
+ case "CheckRunEvent":
+ payload = &CheckRunEvent{}
+ case "CheckSuiteEvent":
+ payload = &CheckSuiteEvent{}
case "CommitCommentEvent":
payload = &CommitCommentEvent{}
case "CreateEvent":
diff --git a/vendor/github.com/google/go-github/github/apps.go b/vendor/github.com/google/go-github/github/apps.go
index c1f7f13..32d4f2f 100644
--- a/vendor/github.com/google/go-github/github/apps.go
+++ b/vendor/github.com/google/go-github/github/apps.go
@@ -20,6 +20,7 @@ type AppsService service
// App represents a GitHub App.
type App struct {
ID *int64 `json:"id,omitempty"`
+ NodeID *string `json:"node_id,omitempty"`
Owner *User `json:"owner,omitempty"`
Name *string `json:"name,omitempty"`
Description *string `json:"description,omitempty"`
@@ -57,6 +58,8 @@ type Installation struct {
RepositorySelection *string `json:"repository_selection,omitempty"`
Events []string `json:"events,omitempty"`
Permissions *InstallationPermissions `json:"permissions,omitempty"`
+ CreatedAt *Timestamp `json:"created_at,omitempty"`
+ UpdatedAt *Timestamp `json:"updated_at,omitempty"`
}
func (i Installation) String() string {
@@ -126,23 +129,7 @@ func (s *AppsService) ListInstallations(ctx context.Context, opt *ListOptions) (
//
// GitHub API docs: https://developer.github.com/v3/apps/#get-a-single-installation
func (s *AppsService) GetInstallation(ctx context.Context, id int64) (*Installation, *Response, error) {
- u := fmt.Sprintf("app/installations/%v", id)
-
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return nil, nil, err
- }
-
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
- i := new(Installation)
- resp, err := s.client.Do(ctx, req, i)
- if err != nil {
- return nil, resp, err
- }
-
- return i, resp, nil
+ return s.getInstallation(ctx, fmt.Sprintf("app/installations/%v", id))
}
// ListUserInstallations lists installations that are accessible to the authenticated user.
@@ -195,3 +182,49 @@ func (s *AppsService) CreateInstallationToken(ctx context.Context, id int64) (*I
return t, resp, nil
}
+
+// FindOrganizationInstallation finds the organization's installation information.
+//
+// GitHub API docs: https://developer.github.com/v3/apps/#find-organization-installation
+func (s *AppsService) FindOrganizationInstallation(ctx context.Context, org string) (*Installation, *Response, error) {
+ return s.getInstallation(ctx, fmt.Sprintf("orgs/%v/installation", org))
+}
+
+// FindRepositoryInstallation finds the repository's installation information.
+//
+// GitHub API docs: https://developer.github.com/v3/apps/#find-repository-installation
+func (s *AppsService) FindRepositoryInstallation(ctx context.Context, owner, repo string) (*Installation, *Response, error) {
+ return s.getInstallation(ctx, fmt.Sprintf("repos/%v/%v/installation", owner, repo))
+}
+
+// FindRepositoryInstallationByID finds the repository's installation information.
+//
+// Note: FindRepositoryInstallationByID uses the undocumented GitHub API endpoint /repositories/:id/installation.
+func (s *AppsService) FindRepositoryInstallationByID(ctx context.Context, id int64) (*Installation, *Response, error) {
+ return s.getInstallation(ctx, fmt.Sprintf("repositories/%d/installation", id))
+}
+
+// FindUserInstallation finds the user's installation information.
+//
+// GitHub API docs: https://developer.github.com/v3/apps/#find-repository-installation
+func (s *AppsService) FindUserInstallation(ctx context.Context, user string) (*Installation, *Response, error) {
+ return s.getInstallation(ctx, fmt.Sprintf("users/%v/installation", user))
+}
+
+func (s *AppsService) getInstallation(ctx context.Context, url string) (*Installation, *Response, error) {
+ req, err := s.client.NewRequest("GET", url, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeIntegrationPreview)
+
+ i := new(Installation)
+ resp, err := s.client.Do(ctx, req, i)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return i, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/github/apps_marketplace.go b/vendor/github.com/google/go-github/github/apps_marketplace.go
index 089cdbf..3f35b91 100644
--- a/vendor/github.com/google/go-github/github/apps_marketplace.go
+++ b/vendor/github.com/google/go-github/github/apps_marketplace.go
@@ -74,9 +74,6 @@ func (s *MarketplaceService) ListPlans(ctx context.Context, opt *ListOptions) ([
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeMarketplacePreview)
-
var plans []*MarketplacePlan
resp, err := s.client.Do(ctx, req, &plans)
if err != nil {
@@ -101,9 +98,6 @@ func (s *MarketplaceService) ListPlanAccountsForPlan(ctx context.Context, planID
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeMarketplacePreview)
-
var accounts []*MarketplacePlanAccount
resp, err := s.client.Do(ctx, req, &accounts)
if err != nil {
@@ -128,9 +122,6 @@ func (s *MarketplaceService) ListPlanAccountsForAccount(ctx context.Context, acc
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeMarketplacePreview)
-
var accounts []*MarketplacePlanAccount
resp, err := s.client.Do(ctx, req, &accounts)
if err != nil {
@@ -159,9 +150,6 @@ func (s *MarketplaceService) ListMarketplacePurchasesForUser(ctx context.Context
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeMarketplacePreview)
-
var purchases []*MarketplacePurchase
resp, err := s.client.Do(ctx, req, &purchases)
if err != nil {
diff --git a/vendor/github.com/google/go-github/github/checks.go b/vendor/github.com/google/go-github/github/checks.go
new file mode 100644
index 0000000..3549089
--- /dev/null
+++ b/vendor/github.com/google/go-github/github/checks.go
@@ -0,0 +1,428 @@
+// Copyright 2018 The go-github 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 github
+
+import (
+ "context"
+ "fmt"
+)
+
+// ChecksService provides access to the Checks API in the
+// GitHub API.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/
+type ChecksService service
+
+// CheckRun represents a GitHub check run on a repository associated with a GitHub app.
+type CheckRun struct {
+ ID *int64 `json:"id,omitempty"`
+ HeadSHA *string `json:"head_sha,omitempty"`
+ ExternalID *string `json:"external_id,omitempty"`
+ URL *string `json:"url,omitempty"`
+ HTMLURL *string `json:"html_url,omitempty"`
+ Status *string `json:"status,omitempty"`
+ Conclusion *string `json:"conclusion,omitempty"`
+ StartedAt *Timestamp `json:"started_at,omitempty"`
+ CompletedAt *Timestamp `json:"completed_at,omitempty"`
+ Output *CheckRunOutput `json:"output,omitempty"`
+ Name *string `json:"name,omitempty"`
+ CheckSuite *CheckSuite `json:"check_suite,omitempty"`
+ App *App `json:"app,omitempty"`
+ PullRequests []*PullRequest `json:"pull_requests,omitempty"`
+}
+
+// CheckRunOutput represents the output of a CheckRun.
+type CheckRunOutput struct {
+ Title *string `json:"title,omitempty"`
+ Summary *string `json:"summary,omitempty"`
+ Text *string `json:"text,omitempty"`
+ AnnotationsCount *int `json:"annotations_count,omitempty"`
+ AnnotationsURL *string `json:"annotations_url,omitempty"`
+ Annotations []*CheckRunAnnotation `json:"annotations,omitempty"`
+ Images []*CheckRunImage `json:"images,omitempty"`
+}
+
+// CheckRunAnnotation represents an annotation object for a CheckRun output.
+type CheckRunAnnotation struct {
+ FileName *string `json:"filename,omitempty"`
+ BlobHRef *string `json:"blob_href,omitempty"`
+ StartLine *int `json:"start_line,omitempty"`
+ EndLine *int `json:"end_line,omitempty"`
+ WarningLevel *string `json:"warning_level,omitempty"`
+ Message *string `json:"message,omitempty"`
+ Title *string `json:"title,omitempty"`
+ RawDetails *string `json:"raw_details,omitempty"`
+}
+
+// CheckRunImage represents an image object for a CheckRun output.
+type CheckRunImage struct {
+ Alt *string `json:"alt,omitempty"`
+ ImageURL *string `json:"image_url,omitempty"`
+ Caption *string `json:"caption,omitempty"`
+}
+
+// CheckSuite represents a suite of check runs.
+type CheckSuite struct {
+ ID *int64 `json:"id,omitempty"`
+ HeadBranch *string `json:"head_branch,omitempty"`
+ HeadSHA *string `json:"head_sha,omitempty"`
+ URL *string `json:"url,omitempty"`
+ BeforeSHA *string `json:"before,omitempty"`
+ AfterSHA *string `json:"after,omitempty"`
+ Status *string `json:"status,omitempty"`
+ Conclusion *string `json:"conclusion,omitempty"`
+ App *App `json:"app,omitempty"`
+ Repository *Repository `json:"repository,omitempty"`
+ PullRequests []*PullRequest `json:"pull_requests,omitempty"`
+}
+
+func (c CheckRun) String() string {
+ return Stringify(c)
+}
+
+func (c CheckSuite) String() string {
+ return Stringify(c)
+}
+
+// GetCheckRun gets a check-run for a repository.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/runs/#get-a-single-check-run
+func (s *ChecksService) GetCheckRun(ctx context.Context, owner, repo string, checkRunID int64) (*CheckRun, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/check-runs/%v", owner, repo, checkRunID)
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ checkRun := new(CheckRun)
+ resp, err := s.client.Do(ctx, req, checkRun)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return checkRun, resp, nil
+}
+
+// GetCheckSuite gets a single check suite.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/suites/#get-a-single-check-suite
+func (s *ChecksService) GetCheckSuite(ctx context.Context, owner, repo string, checkSuiteID int64) (*CheckSuite, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/check-suites/%v", owner, repo, checkSuiteID)
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ checkSuite := new(CheckSuite)
+ resp, err := s.client.Do(ctx, req, checkSuite)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return checkSuite, resp, nil
+}
+
+// CreateCheckRunOptions sets up parameters needed to create a CheckRun.
+type CreateCheckRunOptions struct {
+ Name string `json:"name"` // The name of the check (e.g., "code-coverage"). (Required.)
+ HeadBranch string `json:"head_branch"` // The name of the branch to perform a check against. (Required.)
+ HeadSHA string `json:"head_sha"` // The SHA of the commit. (Required.)
+ DetailsURL *string `json:"details_url,omitempty"` // The URL of the integrator's site that has the full details of the check. (Optional.)
+ ExternalID *string `json:"external_id,omitempty"` // A reference for the run on the integrator's system. (Optional.)
+ Status *string `json:"status,omitempty"` // The current status. Can be one of "queued", "in_progress", or "completed". Default: "queued". (Optional.)
+ Conclusion *string `json:"conclusion,omitempty"` // Can be one of "success", "failure", "neutral", "cancelled", "timed_out", or "action_required". (Optional. Required if you provide a status of "completed".)
+ StartedAt *Timestamp `json:"started_at,omitempty"` // The time that the check run began. (Optional.)
+ CompletedAt *Timestamp `json:"completed_at,omitempty"` // The time the check completed. (Optional. Required if you provide conclusion.)
+ Output *CheckRunOutput `json:"output,omitempty"` // Provide descriptive details about the run. (Optional)
+}
+
+// CreateCheckRun creates a check run for repository.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/runs/#create-a-check-run
+func (s *ChecksService) CreateCheckRun(ctx context.Context, owner, repo string, opt CreateCheckRunOptions) (*CheckRun, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/check-runs", owner, repo)
+ req, err := s.client.NewRequest("POST", u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ checkRun := new(CheckRun)
+ resp, err := s.client.Do(ctx, req, checkRun)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return checkRun, resp, nil
+}
+
+// UpdateCheckRunOptions sets up parameters needed to update a CheckRun.
+type UpdateCheckRunOptions struct {
+ Name string `json:"name"` // The name of the check (e.g., "code-coverage"). (Required.)
+ HeadBranch *string `json:"head_branch,omitempty"` // The name of the branch to perform a check against. (Optional.)
+ HeadSHA *string `json:"head_sha,omitempty"` // The SHA of the commit. (Optional.)
+ DetailsURL *string `json:"details_url,omitempty"` // The URL of the integrator's site that has the full details of the check. (Optional.)
+ ExternalID *string `json:"external_id,omitempty"` // A reference for the run on the integrator's system. (Optional.)
+ Status *string `json:"status,omitempty"` // The current status. Can be one of "queued", "in_progress", or "completed". Default: "queued". (Optional.)
+ Conclusion *string `json:"conclusion,omitempty"` // Can be one of "success", "failure", "neutral", "cancelled", "timed_out", or "action_required". (Optional. Required if you provide a status of "completed".)
+ CompletedAt *Timestamp `json:"completed_at,omitempty"` // The time the check completed. (Optional. Required if you provide conclusion.)
+ Output *CheckRunOutput `json:"output,omitempty"` // Provide descriptive details about the run. (Optional)
+}
+
+// UpdateCheckRun updates a check run for a specific commit in a repository.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/runs/#update-a-check-run
+func (s *ChecksService) UpdateCheckRun(ctx context.Context, owner, repo string, checkRunID int64, opt UpdateCheckRunOptions) (*CheckRun, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/check-runs/%v", owner, repo, checkRunID)
+ req, err := s.client.NewRequest("PATCH", u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ checkRun := new(CheckRun)
+ resp, err := s.client.Do(ctx, req, checkRun)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return checkRun, resp, nil
+}
+
+// ListCheckRunAnnotations lists the annotations for a check run.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/runs/#list-annotations-for-a-check-run
+func (s *ChecksService) ListCheckRunAnnotations(ctx context.Context, owner, repo string, checkRunID int64, opt *ListOptions) ([]*CheckRunAnnotation, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/check-runs/%v/annotations", owner, repo, checkRunID)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ var checkRunAnnotations []*CheckRunAnnotation
+ resp, err := s.client.Do(ctx, req, &checkRunAnnotations)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return checkRunAnnotations, resp, nil
+}
+
+// ListCheckRunsOptions represents parameters to list check runs.
+type ListCheckRunsOptions struct {
+ CheckName *string `url:"check_name,omitempty"` // Returns check runs with the specified name.
+ Status *string `url:"status,omitempty"` // Returns check runs with the specified status. Can be one of "queued", "in_progress", or "completed".
+ Filter *string `url:"filter,omitempty"` // Filters check runs by their completed_at timestamp. Can be one of "latest" (returning the most recent check runs) or "all". Default: "latest"
+
+ ListOptions
+}
+
+// ListCheckRunsResults represents the result of a check run list.
+type ListCheckRunsResults struct {
+ Total *int `json:"total_count,omitempty"`
+ CheckRuns []*CheckRun `json:"check_runs,omitempty"`
+}
+
+// ListCheckRunsForRef lists check runs for a specific ref.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/runs/#list-check-runs-for-a-specific-ref
+func (s *ChecksService) ListCheckRunsForRef(ctx context.Context, owner, repo, ref string, opt *ListCheckRunsOptions) (*ListCheckRunsResults, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/commits/%v/check-runs", owner, repo, ref)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ var checkRunResults *ListCheckRunsResults
+ resp, err := s.client.Do(ctx, req, &checkRunResults)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return checkRunResults, resp, nil
+}
+
+// ListCheckRunsCheckSuite lists check runs for a check suite.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/runs/#list-check-runs-in-a-check-suite
+func (s *ChecksService) ListCheckRunsCheckSuite(ctx context.Context, owner, repo string, checkSuiteID int64, opt *ListCheckRunsOptions) (*ListCheckRunsResults, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/check-suites/%v/check-runs", owner, repo, checkSuiteID)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ var checkRunResults *ListCheckRunsResults
+ resp, err := s.client.Do(ctx, req, &checkRunResults)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return checkRunResults, resp, nil
+}
+
+// ListCheckSuiteOptions represents parameters to list check suites.
+type ListCheckSuiteOptions struct {
+ CheckName *string `url:"check_name,omitempty"` // Filters checks suites by the name of the check run.
+ AppID *int `url:"app_id,omitempty"` // Filters check suites by GitHub App id.
+
+ ListOptions
+}
+
+// ListCheckSuiteResults represents the result of a check run list.
+type ListCheckSuiteResults struct {
+ Total *int `json:"total_count,omitempty"`
+ CheckSuites []*CheckSuite `json:"check_suites,omitempty"`
+}
+
+// ListCheckSuitesForRef lists check suite for a specific ref.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/suites/#list-check-suites-for-a-specific-ref
+func (s *ChecksService) ListCheckSuitesForRef(ctx context.Context, owner, repo, ref string, opt *ListCheckSuiteOptions) (*ListCheckSuiteResults, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/commits/%v/check-suites", owner, repo, ref)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ var checkSuiteResults *ListCheckSuiteResults
+ resp, err := s.client.Do(ctx, req, &checkSuiteResults)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return checkSuiteResults, resp, nil
+}
+
+// AutoTriggerCheck enables or disables automatic creation of CheckSuite events upon pushes to the repository.
+type AutoTriggerCheck struct {
+ AppID *int64 `json:"app_id,omitempty"` // The id of the GitHub App. (Required.)
+ Setting *bool `json:"setting,omitempty"` // Set to "true" to enable automatic creation of CheckSuite events upon pushes to the repository, or "false" to disable them. Default: "true" (Required.)
+}
+
+// CheckSuitePreferenceOptions set options for check suite preferences for a repository.
+type CheckSuitePreferenceOptions struct {
+ PreferenceList *PreferenceList `json:"auto_trigger_checks,omitempty"` // A list of auto trigger checks that can be set for a check suite in a repository.
+}
+
+// CheckSuitePreferenceResults represents the results of the preference set operation.
+type CheckSuitePreferenceResults struct {
+ Preferences *PreferenceList `json:"preferences,omitempty"`
+ Repository *Repository `json:"repository,omitempty"`
+}
+
+// PreferenceList represents a list of auto trigger checks for repository
+type PreferenceList struct {
+ AutoTriggerChecks []*AutoTriggerCheck `json:"auto_trigger_checks,omitempty"` // A slice of auto trigger checks that can be set for a check suite in a repository.
+}
+
+// SetCheckSuitePreferences changes the default automatic flow when creating check suites.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/suites/#set-preferences-for-check-suites-on-a-repository
+func (s *ChecksService) SetCheckSuitePreferences(ctx context.Context, owner, repo string, opt CheckSuitePreferenceOptions) (*CheckSuitePreferenceResults, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/check-suites/preferences", owner, repo)
+ req, err := s.client.NewRequest("PATCH", u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ var checkSuitePrefResults *CheckSuitePreferenceResults
+ resp, err := s.client.Do(ctx, req, &checkSuitePrefResults)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return checkSuitePrefResults, resp, nil
+}
+
+// CreateCheckSuiteOptions sets up parameters to manually create a check suites
+type CreateCheckSuiteOptions struct {
+ HeadSHA string `json:"head_sha"` // The sha of the head commit. (Required.)
+ HeadBranch *string `json:"head_branch,omitempty"` // The name of the head branch where the code changes are implemented.
+}
+
+// CreateCheckSuite manually creates a check suite for a repository.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/suites/#create-a-check-suite
+func (s *ChecksService) CreateCheckSuite(ctx context.Context, owner, repo string, opt CreateCheckSuiteOptions) (*CheckSuite, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/check-suites", owner, repo)
+ req, err := s.client.NewRequest("POST", u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ checkSuite := new(CheckSuite)
+ resp, err := s.client.Do(ctx, req, checkSuite)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return checkSuite, resp, nil
+}
+
+// RequestCheckSuiteOptions sets up the parameters for a request check suite endpoint.
+type RequestCheckSuiteOptions struct {
+ HeadSHA string `json:"head_sha"` // The sha of the head commit. (Required.)
+}
+
+// RequestCheckSuite triggers GitHub to create a new check suite, without pushing new code to a repository.
+//
+// GitHub API docs: https://developer.github.com/v3/checks/suites/#request-check-suites
+func (s *ChecksService) RequestCheckSuite(ctx context.Context, owner, repo string, opt RequestCheckSuiteOptions) (*Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/check-suite-requests", owner, repo)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, err
+ }
+
+ req, err := s.client.NewRequest("POST", u, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeCheckRunsPreview)
+
+ resp, err := s.client.Do(ctx, req, nil)
+ return resp, err
+}
diff --git a/vendor/github.com/google/go-github/github/event_types.go b/vendor/github.com/google/go-github/github/event_types.go
index 17c2b10..d68bf58 100644
--- a/vendor/github.com/google/go-github/github/event_types.go
+++ b/vendor/github.com/google/go-github/github/event_types.go
@@ -7,6 +7,38 @@
package github
+// CheckRunEvent is triggered when a check run is "created", "updated", or "re-requested".
+// The Webhook event name is "check_run".
+//
+// GitHub API docs: https://developer.github.com/v3/activity/events/types/#checkrunevent
+type CheckRunEvent struct {
+ CheckRun *CheckRun `json:"check_run,omitempty"`
+ // The action performed. Can be "created", "updated" or "re-requested".
+ Action *string `json:"action,omitempty"`
+
+ // The following fields are only populated by Webhook events.
+ Repo *Repository `json:"repository,omitempty"`
+ Org *Organization `json:"organization,omitempty"`
+ Sender *User `json:"sender,omitempty"`
+ Installation *Installation `json:"installation,omitempty"`
+}
+
+// CheckSuiteEvent is triggered when a check suite is "completed", "requested", or "re-requested".
+// The Webhook event name is "check_suite".
+//
+// GitHub API docs: https://developer.github.com/v3/activity/events/types/#checksuiteevent
+type CheckSuiteEvent struct {
+ CheckSuite *CheckSuite `json:"check_suite,omitempty"`
+ // The action performed. Can be "completed", "requested" or "re-requested".
+ Action *string `json:"action,omitempty"`
+
+ // The following fields are only populated by Webhook events.
+ Repo *Repository `json:"repository,omitempty"`
+ Org *Organization `json:"organization,omitempty"`
+ Sender *User `json:"sender,omitempty"`
+ Installation *Installation `json:"installation,omitempty"`
+}
+
// CommitCommentEvent is triggered when a commit comment is created.
// The Webhook event name is "commit_comment".
//
@@ -194,6 +226,7 @@ type TeamChange struct {
type InstallationEvent struct {
// The action that was performed. Can be either "created" or "deleted".
Action *string `json:"action,omitempty"`
+ Repositories []*Repository `json:"repositories,omitempty"`
Sender *User `json:"sender,omitempty"`
Installation *Installation `json:"installation,omitempty"`
}
@@ -597,38 +630,39 @@ func (p PushEventCommit) String() string {
// PushEventRepository represents the repo object in a PushEvent payload.
type PushEventRepository struct {
- ID *int64 `json:"id,omitempty"`
- Name *string `json:"name,omitempty"`
- FullName *string `json:"full_name,omitempty"`
- Owner *PushEventRepoOwner `json:"owner,omitempty"`
- Private *bool `json:"private,omitempty"`
- Description *string `json:"description,omitempty"`
- Fork *bool `json:"fork,omitempty"`
- CreatedAt *Timestamp `json:"created_at,omitempty"`
- PushedAt *Timestamp `json:"pushed_at,omitempty"`
- UpdatedAt *Timestamp `json:"updated_at,omitempty"`
- Homepage *string `json:"homepage,omitempty"`
- Size *int `json:"size,omitempty"`
- StargazersCount *int `json:"stargazers_count,omitempty"`
- WatchersCount *int `json:"watchers_count,omitempty"`
- Language *string `json:"language,omitempty"`
- HasIssues *bool `json:"has_issues,omitempty"`
- HasDownloads *bool `json:"has_downloads,omitempty"`
- HasWiki *bool `json:"has_wiki,omitempty"`
- HasPages *bool `json:"has_pages,omitempty"`
- ForksCount *int `json:"forks_count,omitempty"`
- OpenIssuesCount *int `json:"open_issues_count,omitempty"`
- DefaultBranch *string `json:"default_branch,omitempty"`
- MasterBranch *string `json:"master_branch,omitempty"`
- Organization *string `json:"organization,omitempty"`
- URL *string `json:"url,omitempty"`
- ArchiveURL *string `json:"archive_url,omitempty"`
- HTMLURL *string `json:"html_url,omitempty"`
- StatusesURL *string `json:"statuses_url,omitempty"`
- GitURL *string `json:"git_url,omitempty"`
- SSHURL *string `json:"ssh_url,omitempty"`
- CloneURL *string `json:"clone_url,omitempty"`
- SVNURL *string `json:"svn_url,omitempty"`
+ ID *int64 `json:"id,omitempty"`
+ NodeID *string `json:"node_id,omitempty"`
+ Name *string `json:"name,omitempty"`
+ FullName *string `json:"full_name,omitempty"`
+ Owner *User `json:"owner,omitempty"`
+ Private *bool `json:"private,omitempty"`
+ Description *string `json:"description,omitempty"`
+ Fork *bool `json:"fork,omitempty"`
+ CreatedAt *Timestamp `json:"created_at,omitempty"`
+ PushedAt *Timestamp `json:"pushed_at,omitempty"`
+ UpdatedAt *Timestamp `json:"updated_at,omitempty"`
+ Homepage *string `json:"homepage,omitempty"`
+ Size *int `json:"size,omitempty"`
+ StargazersCount *int `json:"stargazers_count,omitempty"`
+ WatchersCount *int `json:"watchers_count,omitempty"`
+ Language *string `json:"language,omitempty"`
+ HasIssues *bool `json:"has_issues,omitempty"`
+ HasDownloads *bool `json:"has_downloads,omitempty"`
+ HasWiki *bool `json:"has_wiki,omitempty"`
+ HasPages *bool `json:"has_pages,omitempty"`
+ ForksCount *int `json:"forks_count,omitempty"`
+ OpenIssuesCount *int `json:"open_issues_count,omitempty"`
+ DefaultBranch *string `json:"default_branch,omitempty"`
+ MasterBranch *string `json:"master_branch,omitempty"`
+ Organization *string `json:"organization,omitempty"`
+ URL *string `json:"url,omitempty"`
+ ArchiveURL *string `json:"archive_url,omitempty"`
+ HTMLURL *string `json:"html_url,omitempty"`
+ StatusesURL *string `json:"statuses_url,omitempty"`
+ GitURL *string `json:"git_url,omitempty"`
+ SSHURL *string `json:"ssh_url,omitempty"`
+ CloneURL *string `json:"clone_url,omitempty"`
+ SVNURL *string `json:"svn_url,omitempty"`
}
// PushEventRepoOwner is a basic representation of user/org in a PushEvent payload.
diff --git a/vendor/github.com/google/go-github/github/gists.go b/vendor/github.com/google/go-github/github/gists.go
index 9108b64..15e0bc2 100644
--- a/vendor/github.com/google/go-github/github/gists.go
+++ b/vendor/github.com/google/go-github/github/gists.go
@@ -114,9 +114,6 @@ func (s *GistsService) List(ctx context.Context, user string, opt *GistListOptio
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var gists []*Gist
resp, err := s.client.Do(ctx, req, &gists)
if err != nil {
@@ -140,9 +137,6 @@ func (s *GistsService) ListAll(ctx context.Context, opt *GistListOptions) ([]*Gi
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var gists []*Gist
resp, err := s.client.Do(ctx, req, &gists)
if err != nil {
@@ -166,9 +160,6 @@ func (s *GistsService) ListStarred(ctx context.Context, opt *GistListOptions) ([
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var gists []*Gist
resp, err := s.client.Do(ctx, req, &gists)
if err != nil {
@@ -188,9 +179,6 @@ func (s *GistsService) Get(ctx context.Context, id string) (*Gist, *Response, er
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
gist := new(Gist)
resp, err := s.client.Do(ctx, req, gist)
if err != nil {
@@ -210,9 +198,6 @@ func (s *GistsService) GetRevision(ctx context.Context, id, sha string) (*Gist,
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
gist := new(Gist)
resp, err := s.client.Do(ctx, req, gist)
if err != nil {
@@ -232,9 +217,6 @@ func (s *GistsService) Create(ctx context.Context, gist *Gist) (*Gist, *Response
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
g := new(Gist)
resp, err := s.client.Do(ctx, req, g)
if err != nil {
@@ -254,9 +236,6 @@ func (s *GistsService) Edit(ctx context.Context, id string, gist *Gist) (*Gist,
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
g := new(Gist)
resp, err := s.client.Do(ctx, req, g)
if err != nil {
@@ -281,9 +260,6 @@ func (s *GistsService) ListCommits(ctx context.Context, id string, opt *ListOpti
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var gistCommits []*GistCommit
resp, err := s.client.Do(ctx, req, &gistCommits)
if err != nil {
@@ -353,9 +329,6 @@ func (s *GistsService) Fork(ctx context.Context, id string) (*Gist, *Response, e
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
g := new(Gist)
resp, err := s.client.Do(ctx, req, g)
if err != nil {
@@ -375,9 +348,6 @@ func (s *GistsService) ListForks(ctx context.Context, id string) ([]*GistFork, *
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var gistForks []*GistFork
resp, err := s.client.Do(ctx, req, &gistForks)
if err != nil {
diff --git a/vendor/github.com/google/go-github/github/git_blobs.go b/vendor/github.com/google/go-github/github/git_blobs.go
index 5290c55..70aee14 100644
--- a/vendor/github.com/google/go-github/github/git_blobs.go
+++ b/vendor/github.com/google/go-github/github/git_blobs.go
@@ -31,9 +31,6 @@ func (s *GitService) GetBlob(ctx context.Context, owner string, repo string, sha
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
blob := new(Blob)
resp, err := s.client.Do(ctx, req, blob)
return blob, resp, err
@@ -66,9 +63,6 @@ func (s *GitService) CreateBlob(ctx context.Context, owner string, repo string,
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
t := new(Blob)
resp, err := s.client.Do(ctx, req, t)
return t, resp, err
diff --git a/vendor/github.com/google/go-github/github/git_commits.go b/vendor/github.com/google/go-github/github/git_commits.go
index 2988256..1eb48a8 100644
--- a/vendor/github.com/google/go-github/github/git_commits.go
+++ b/vendor/github.com/google/go-github/github/git_commits.go
@@ -8,7 +8,6 @@ package github
import (
"context"
"fmt"
- "strings"
"time"
)
@@ -70,8 +69,7 @@ func (s *GitService) GetCommit(ctx context.Context, owner string, repo string, s
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeGitSigningPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeGitSigningPreview)
c := new(Commit)
resp, err := s.client.Do(ctx, req, c)
@@ -126,9 +124,6 @@ func (s *GitService) CreateCommit(ctx context.Context, owner string, repo string
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
c := new(Commit)
resp, err := s.client.Do(ctx, req, c)
if err != nil {
diff --git a/vendor/github.com/google/go-github/github/git_refs.go b/vendor/github.com/google/go-github/github/git_refs.go
index 0947d86..3b2ced2 100644
--- a/vendor/github.com/google/go-github/github/git_refs.go
+++ b/vendor/github.com/google/go-github/github/git_refs.go
@@ -63,9 +63,6 @@ func (s *GitService) GetRef(ctx context.Context, owner string, repo string, ref
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
r := new(Reference)
resp, err := s.client.Do(ctx, req, r)
if _, ok := err.(*json.UnmarshalTypeError); ok {
@@ -97,9 +94,6 @@ func (s *GitService) GetRefs(ctx context.Context, owner string, repo string, ref
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var rawJSON json.RawMessage
resp, err := s.client.Do(ctx, req, &rawJSON)
if err != nil {
@@ -154,9 +148,6 @@ func (s *GitService) ListRefs(ctx context.Context, owner, repo string, opt *Refe
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var rs []*Reference
resp, err := s.client.Do(ctx, req, &rs)
if err != nil {
@@ -180,9 +171,6 @@ func (s *GitService) CreateRef(ctx context.Context, owner string, repo string, r
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
r := new(Reference)
resp, err := s.client.Do(ctx, req, r)
if err != nil {
@@ -206,9 +194,6 @@ func (s *GitService) UpdateRef(ctx context.Context, owner string, repo string, r
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
r := new(Reference)
resp, err := s.client.Do(ctx, req, r)
if err != nil {
diff --git a/vendor/github.com/google/go-github/github/git_tags.go b/vendor/github.com/google/go-github/github/git_tags.go
index f3822ff..90398b3 100644
--- a/vendor/github.com/google/go-github/github/git_tags.go
+++ b/vendor/github.com/google/go-github/github/git_tags.go
@@ -8,7 +8,6 @@ package github
import (
"context"
"fmt"
- "strings"
)
// Tag represents a tag object.
@@ -45,8 +44,7 @@ func (s *GitService) GetTag(ctx context.Context, owner string, repo string, sha
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeGitSigningPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeGitSigningPreview)
tag := new(Tag)
resp, err := s.client.Do(ctx, req, tag)
@@ -75,9 +73,6 @@ func (s *GitService) CreateTag(ctx context.Context, owner string, repo string, t
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
t := new(Tag)
resp, err := s.client.Do(ctx, req, t)
return t, resp, err
diff --git a/vendor/github.com/google/go-github/github/git_trees.go b/vendor/github.com/google/go-github/github/git_trees.go
index 4d6809a..4bc2913 100644
--- a/vendor/github.com/google/go-github/github/git_trees.go
+++ b/vendor/github.com/google/go-github/github/git_trees.go
@@ -14,6 +14,12 @@ import (
type Tree struct {
SHA *string `json:"sha,omitempty"`
Entries []TreeEntry `json:"tree,omitempty"`
+
+ // Truncated is true if the number of items in the tree
+ // exceeded GitHub's maximum limit and the Entries were truncated
+ // in the response. Only populated for requests that fetch
+ // trees like Git.GetTree.
+ Truncated *bool `json:"truncated,omitempty"`
}
func (t Tree) String() string {
diff --git a/vendor/github.com/google/go-github/github/github-accessors.go b/vendor/github.com/google/go-github/github/github-accessors.go
index d9939c2..8d03cc9 100644
--- a/vendor/github.com/google/go-github/github/github-accessors.go
+++ b/vendor/github.com/google/go-github/github/github-accessors.go
@@ -164,6 +164,14 @@ func (a *App) GetName() string {
return *a.Name
}
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (a *App) GetNodeID() string {
+ if a == nil || a.NodeID == nil {
+ return ""
+ }
+ return *a.NodeID
+}
+
// GetOwner returns the Owner field.
func (a *App) GetOwner() *User {
if a == nil {
@@ -364,6 +372,22 @@ func (a *AuthorizationUpdateRequest) GetNoteURL() string {
return *a.NoteURL
}
+// GetAppID returns the AppID field if it's non-nil, zero value otherwise.
+func (a *AutoTriggerCheck) GetAppID() int64 {
+ if a == nil || a.AppID == nil {
+ return 0
+ }
+ return *a.AppID
+}
+
+// GetSetting returns the Setting field if it's non-nil, zero value otherwise.
+func (a *AutoTriggerCheck) GetSetting() bool {
+ if a == nil || a.Setting == nil {
+ return false
+ }
+ return *a.Setting
+}
+
// GetContent returns the Content field if it's non-nil, zero value otherwise.
func (b *Blob) GetContent() string {
if b == nil || b.Content == nil {
@@ -436,6 +460,438 @@ func (b *Branch) GetProtected() bool {
return *b.Protected
}
+// GetApp returns the App field.
+func (c *CheckRun) GetApp() *App {
+ if c == nil {
+ return nil
+ }
+ return c.App
+}
+
+// GetCheckSuite returns the CheckSuite field.
+func (c *CheckRun) GetCheckSuite() *CheckSuite {
+ if c == nil {
+ return nil
+ }
+ return c.CheckSuite
+}
+
+// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetCompletedAt() Timestamp {
+ if c == nil || c.CompletedAt == nil {
+ return Timestamp{}
+ }
+ return *c.CompletedAt
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetConclusion() string {
+ if c == nil || c.Conclusion == nil {
+ return ""
+ }
+ return *c.Conclusion
+}
+
+// GetExternalID returns the ExternalID field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetExternalID() string {
+ if c == nil || c.ExternalID == nil {
+ return ""
+ }
+ return *c.ExternalID
+}
+
+// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetHeadSHA() string {
+ if c == nil || c.HeadSHA == nil {
+ return ""
+ }
+ return *c.HeadSHA
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetHTMLURL() string {
+ if c == nil || c.HTMLURL == nil {
+ return ""
+ }
+ return *c.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetID() int64 {
+ if c == nil || c.ID == nil {
+ return 0
+ }
+ return *c.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetName() string {
+ if c == nil || c.Name == nil {
+ return ""
+ }
+ return *c.Name
+}
+
+// GetOutput returns the Output field.
+func (c *CheckRun) GetOutput() *CheckRunOutput {
+ if c == nil {
+ return nil
+ }
+ return c.Output
+}
+
+// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetStartedAt() Timestamp {
+ if c == nil || c.StartedAt == nil {
+ return Timestamp{}
+ }
+ return *c.StartedAt
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetStatus() string {
+ if c == nil || c.Status == nil {
+ return ""
+ }
+ return *c.Status
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetURL() string {
+ if c == nil || c.URL == nil {
+ return ""
+ }
+ return *c.URL
+}
+
+// GetBlobHRef returns the BlobHRef field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetBlobHRef() string {
+ if c == nil || c.BlobHRef == nil {
+ return ""
+ }
+ return *c.BlobHRef
+}
+
+// GetEndLine returns the EndLine field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetEndLine() int {
+ if c == nil || c.EndLine == nil {
+ return 0
+ }
+ return *c.EndLine
+}
+
+// GetFileName returns the FileName field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetFileName() string {
+ if c == nil || c.FileName == nil {
+ return ""
+ }
+ return *c.FileName
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetMessage() string {
+ if c == nil || c.Message == nil {
+ return ""
+ }
+ return *c.Message
+}
+
+// GetRawDetails returns the RawDetails field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetRawDetails() string {
+ if c == nil || c.RawDetails == nil {
+ return ""
+ }
+ return *c.RawDetails
+}
+
+// GetStartLine returns the StartLine field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetStartLine() int {
+ if c == nil || c.StartLine == nil {
+ return 0
+ }
+ return *c.StartLine
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetTitle() string {
+ if c == nil || c.Title == nil {
+ return ""
+ }
+ return *c.Title
+}
+
+// GetWarningLevel returns the WarningLevel field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetWarningLevel() string {
+ if c == nil || c.WarningLevel == nil {
+ return ""
+ }
+ return *c.WarningLevel
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (c *CheckRunEvent) GetAction() string {
+ if c == nil || c.Action == nil {
+ return ""
+ }
+ return *c.Action
+}
+
+// GetCheckRun returns the CheckRun field.
+func (c *CheckRunEvent) GetCheckRun() *CheckRun {
+ if c == nil {
+ return nil
+ }
+ return c.CheckRun
+}
+
+// GetInstallation returns the Installation field.
+func (c *CheckRunEvent) GetInstallation() *Installation {
+ if c == nil {
+ return nil
+ }
+ return c.Installation
+}
+
+// GetOrg returns the Org field.
+func (c *CheckRunEvent) GetOrg() *Organization {
+ if c == nil {
+ return nil
+ }
+ return c.Org
+}
+
+// GetRepo returns the Repo field.
+func (c *CheckRunEvent) GetRepo() *Repository {
+ if c == nil {
+ return nil
+ }
+ return c.Repo
+}
+
+// GetSender returns the Sender field.
+func (c *CheckRunEvent) GetSender() *User {
+ if c == nil {
+ return nil
+ }
+ return c.Sender
+}
+
+// GetAlt returns the Alt field if it's non-nil, zero value otherwise.
+func (c *CheckRunImage) GetAlt() string {
+ if c == nil || c.Alt == nil {
+ return ""
+ }
+ return *c.Alt
+}
+
+// GetCaption returns the Caption field if it's non-nil, zero value otherwise.
+func (c *CheckRunImage) GetCaption() string {
+ if c == nil || c.Caption == nil {
+ return ""
+ }
+ return *c.Caption
+}
+
+// GetImageURL returns the ImageURL field if it's non-nil, zero value otherwise.
+func (c *CheckRunImage) GetImageURL() string {
+ if c == nil || c.ImageURL == nil {
+ return ""
+ }
+ return *c.ImageURL
+}
+
+// GetAnnotationsCount returns the AnnotationsCount field if it's non-nil, zero value otherwise.
+func (c *CheckRunOutput) GetAnnotationsCount() int {
+ if c == nil || c.AnnotationsCount == nil {
+ return 0
+ }
+ return *c.AnnotationsCount
+}
+
+// GetAnnotationsURL returns the AnnotationsURL field if it's non-nil, zero value otherwise.
+func (c *CheckRunOutput) GetAnnotationsURL() string {
+ if c == nil || c.AnnotationsURL == nil {
+ return ""
+ }
+ return *c.AnnotationsURL
+}
+
+// GetSummary returns the Summary field if it's non-nil, zero value otherwise.
+func (c *CheckRunOutput) GetSummary() string {
+ if c == nil || c.Summary == nil {
+ return ""
+ }
+ return *c.Summary
+}
+
+// GetText returns the Text field if it's non-nil, zero value otherwise.
+func (c *CheckRunOutput) GetText() string {
+ if c == nil || c.Text == nil {
+ return ""
+ }
+ return *c.Text
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (c *CheckRunOutput) GetTitle() string {
+ if c == nil || c.Title == nil {
+ return ""
+ }
+ return *c.Title
+}
+
+// GetAfterSHA returns the AfterSHA field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetAfterSHA() string {
+ if c == nil || c.AfterSHA == nil {
+ return ""
+ }
+ return *c.AfterSHA
+}
+
+// GetApp returns the App field.
+func (c *CheckSuite) GetApp() *App {
+ if c == nil {
+ return nil
+ }
+ return c.App
+}
+
+// GetBeforeSHA returns the BeforeSHA field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetBeforeSHA() string {
+ if c == nil || c.BeforeSHA == nil {
+ return ""
+ }
+ return *c.BeforeSHA
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetConclusion() string {
+ if c == nil || c.Conclusion == nil {
+ return ""
+ }
+ return *c.Conclusion
+}
+
+// GetHeadBranch returns the HeadBranch field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetHeadBranch() string {
+ if c == nil || c.HeadBranch == nil {
+ return ""
+ }
+ return *c.HeadBranch
+}
+
+// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetHeadSHA() string {
+ if c == nil || c.HeadSHA == nil {
+ return ""
+ }
+ return *c.HeadSHA
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetID() int64 {
+ if c == nil || c.ID == nil {
+ return 0
+ }
+ return *c.ID
+}
+
+// GetRepository returns the Repository field.
+func (c *CheckSuite) GetRepository() *Repository {
+ if c == nil {
+ return nil
+ }
+ return c.Repository
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetStatus() string {
+ if c == nil || c.Status == nil {
+ return ""
+ }
+ return *c.Status
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetURL() string {
+ if c == nil || c.URL == nil {
+ return ""
+ }
+ return *c.URL
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (c *CheckSuiteEvent) GetAction() string {
+ if c == nil || c.Action == nil {
+ return ""
+ }
+ return *c.Action
+}
+
+// GetCheckSuite returns the CheckSuite field.
+func (c *CheckSuiteEvent) GetCheckSuite() *CheckSuite {
+ if c == nil {
+ return nil
+ }
+ return c.CheckSuite
+}
+
+// GetInstallation returns the Installation field.
+func (c *CheckSuiteEvent) GetInstallation() *Installation {
+ if c == nil {
+ return nil
+ }
+ return c.Installation
+}
+
+// GetOrg returns the Org field.
+func (c *CheckSuiteEvent) GetOrg() *Organization {
+ if c == nil {
+ return nil
+ }
+ return c.Org
+}
+
+// GetRepo returns the Repo field.
+func (c *CheckSuiteEvent) GetRepo() *Repository {
+ if c == nil {
+ return nil
+ }
+ return c.Repo
+}
+
+// GetSender returns the Sender field.
+func (c *CheckSuiteEvent) GetSender() *User {
+ if c == nil {
+ return nil
+ }
+ return c.Sender
+}
+
+// GetPreferenceList returns the PreferenceList field.
+func (c *CheckSuitePreferenceOptions) GetPreferenceList() *PreferenceList {
+ if c == nil {
+ return nil
+ }
+ return c.PreferenceList
+}
+
+// GetPreferences returns the Preferences field.
+func (c *CheckSuitePreferenceResults) GetPreferences() *PreferenceList {
+ if c == nil {
+ return nil
+ }
+ return c.Preferences
+}
+
+// GetRepository returns the Repository field.
+func (c *CheckSuitePreferenceResults) GetRepository() *Repository {
+ if c == nil {
+ return nil
+ }
+ return c.Repository
+}
+
// GetBody returns the Body field if it's non-nil, zero value otherwise.
func (c *CodeOfConduct) GetBody() string {
if c == nil || c.Body == nil {
@@ -1060,6 +1516,14 @@ func (c *CommunityHealthFiles) GetContributing() *Metric {
return c.Contributing
}
+// GetIssueTemplate returns the IssueTemplate field.
+func (c *CommunityHealthFiles) GetIssueTemplate() *Metric {
+ if c == nil {
+ return nil
+ }
+ return c.IssueTemplate
+}
+
// GetLicense returns the License field.
func (c *CommunityHealthFiles) GetLicense() *Metric {
if c == nil {
@@ -1068,6 +1532,14 @@ func (c *CommunityHealthFiles) GetLicense() *Metric {
return c.License
}
+// GetPullRequestTemplate returns the PullRequestTemplate field.
+func (c *CommunityHealthFiles) GetPullRequestTemplate() *Metric {
+ if c == nil {
+ return nil
+ }
+ return c.PullRequestTemplate
+}
+
// GetReadme returns the Readme field.
func (c *CommunityHealthFiles) GetReadme() *Metric {
if c == nil {
@@ -1260,6 +1732,70 @@ func (c *ContributorStats) GetTotal() int {
return *c.Total
}
+// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetCompletedAt() Timestamp {
+ if c == nil || c.CompletedAt == nil {
+ return Timestamp{}
+ }
+ return *c.CompletedAt
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetConclusion() string {
+ if c == nil || c.Conclusion == nil {
+ return ""
+ }
+ return *c.Conclusion
+}
+
+// GetDetailsURL returns the DetailsURL field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetDetailsURL() string {
+ if c == nil || c.DetailsURL == nil {
+ return ""
+ }
+ return *c.DetailsURL
+}
+
+// GetExternalID returns the ExternalID field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetExternalID() string {
+ if c == nil || c.ExternalID == nil {
+ return ""
+ }
+ return *c.ExternalID
+}
+
+// GetOutput returns the Output field.
+func (c *CreateCheckRunOptions) GetOutput() *CheckRunOutput {
+ if c == nil {
+ return nil
+ }
+ return c.Output
+}
+
+// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetStartedAt() Timestamp {
+ if c == nil || c.StartedAt == nil {
+ return Timestamp{}
+ }
+ return *c.StartedAt
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetStatus() string {
+ if c == nil || c.Status == nil {
+ return ""
+ }
+ return *c.Status
+}
+
+// GetHeadBranch returns the HeadBranch field if it's non-nil, zero value otherwise.
+func (c *CreateCheckSuiteOptions) GetHeadBranch() string {
+ if c == nil || c.HeadBranch == nil {
+ return ""
+ }
+ return *c.HeadBranch
+}
+
// GetDescription returns the Description field if it's non-nil, zero value otherwise.
func (c *CreateEvent) GetDescription() string {
if c == nil || c.Description == nil {
@@ -1837,7 +2373,7 @@ func (d *DiscussionComment) GetNodeID() string {
}
// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetNumber() int64 {
+func (d *DiscussionComment) GetNumber() int {
if d == nil || d.Number == nil {
return 0
}
@@ -2828,6 +3364,14 @@ func (i *Installation) GetAppID() int64 {
return *i.AppID
}
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (i *Installation) GetCreatedAt() Timestamp {
+ if i == nil || i.CreatedAt == nil {
+ return Timestamp{}
+ }
+ return *i.CreatedAt
+}
+
// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
func (i *Installation) GetHTMLURL() string {
if i == nil || i.HTMLURL == nil {
@@ -2892,6 +3436,14 @@ func (i *Installation) GetTargetType() string {
return *i.TargetType
}
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (i *Installation) GetUpdatedAt() Timestamp {
+ if i == nil || i.UpdatedAt == nil {
+ return Timestamp{}
+ }
+ return *i.UpdatedAt
+}
+
// GetAction returns the Action field if it's non-nil, zero value otherwise.
func (i *InstallationEvent) GetAction() string {
if i == nil || i.Action == nil {
@@ -3060,6 +3612,14 @@ func (i *Invitation) GetTeamCount() int {
return *i.TeamCount
}
+// GetActiveLockReason returns the ActiveLockReason field if it's non-nil, zero value otherwise.
+func (i *Issue) GetActiveLockReason() string {
+ if i == nil || i.ActiveLockReason == nil {
+ return ""
+ }
+ return *i.ActiveLockReason
+}
+
// GetAssignee returns the Assignee field.
func (i *Issue) GetAssignee() *User {
if i == nil {
@@ -3460,6 +4020,14 @@ func (i *IssueEvent) GetLabel() *Label {
return i.Label
}
+// GetLockReason returns the LockReason field if it's non-nil, zero value otherwise.
+func (i *IssueEvent) GetLockReason() string {
+ if i == nil || i.LockReason == nil {
+ return ""
+ }
+ return *i.LockReason
+}
+
// GetMilestone returns the Milestone field.
func (i *IssueEvent) GetMilestone() *Milestone {
if i == nil {
@@ -3988,6 +4556,62 @@ func (l *License) GetURL() string {
return *l.URL
}
+// GetCheckName returns the CheckName field if it's non-nil, zero value otherwise.
+func (l *ListCheckRunsOptions) GetCheckName() string {
+ if l == nil || l.CheckName == nil {
+ return ""
+ }
+ return *l.CheckName
+}
+
+// GetFilter returns the Filter field if it's non-nil, zero value otherwise.
+func (l *ListCheckRunsOptions) GetFilter() string {
+ if l == nil || l.Filter == nil {
+ return ""
+ }
+ return *l.Filter
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (l *ListCheckRunsOptions) GetStatus() string {
+ if l == nil || l.Status == nil {
+ return ""
+ }
+ return *l.Status
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (l *ListCheckRunsResults) GetTotal() int {
+ if l == nil || l.Total == nil {
+ return 0
+ }
+ return *l.Total
+}
+
+// GetAppID returns the AppID field if it's non-nil, zero value otherwise.
+func (l *ListCheckSuiteOptions) GetAppID() int {
+ if l == nil || l.AppID == nil {
+ return 0
+ }
+ return *l.AppID
+}
+
+// GetCheckName returns the CheckName field if it's non-nil, zero value otherwise.
+func (l *ListCheckSuiteOptions) GetCheckName() string {
+ if l == nil || l.CheckName == nil {
+ return ""
+ }
+ return *l.CheckName
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (l *ListCheckSuiteResults) GetTotal() int {
+ if l == nil || l.Total == nil {
+ return 0
+ }
+ return *l.Total
+}
+
// GetAccountsURL returns the AccountsURL field if it's non-nil, zero value otherwise.
func (m *MarketplacePlan) GetAccountsURL() string {
if m == nil || m.AccountsURL == nil {
@@ -5500,6 +6124,38 @@ func (p *Plan) GetSpace() int {
return *p.Space
}
+// GetConfigURL returns the ConfigURL field if it's non-nil, zero value otherwise.
+func (p *PreReceiveHook) GetConfigURL() string {
+ if p == nil || p.ConfigURL == nil {
+ return ""
+ }
+ return *p.ConfigURL
+}
+
+// GetEnforcement returns the Enforcement field if it's non-nil, zero value otherwise.
+func (p *PreReceiveHook) GetEnforcement() string {
+ if p == nil || p.Enforcement == nil {
+ return ""
+ }
+ return *p.Enforcement
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PreReceiveHook) GetID() int64 {
+ if p == nil || p.ID == nil {
+ return 0
+ }
+ return *p.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PreReceiveHook) GetName() string {
+ if p == nil || p.Name == nil {
+ return ""
+ }
+ return *p.Name
+}
+
// GetBody returns the Body field if it's non-nil, zero value otherwise.
func (p *Project) GetBody() string {
if p == nil || p.Body == nil {
@@ -5508,6 +6164,14 @@ func (p *Project) GetBody() string {
return *p.Body
}
+// GetColumnsURL returns the ColumnsURL field if it's non-nil, zero value otherwise.
+func (p *Project) GetColumnsURL() string {
+ if p == nil || p.ColumnsURL == nil {
+ return ""
+ }
+ return *p.ColumnsURL
+}
+
// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
func (p *Project) GetCreatedAt() Timestamp {
if p == nil || p.CreatedAt == nil {
@@ -5524,6 +6188,14 @@ func (p *Project) GetCreator() *User {
return p.Creator
}
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *Project) GetHTMLURL() string {
+ if p == nil || p.HTMLURL == nil {
+ return ""
+ }
+ return *p.HTMLURL
+}
+
// GetID returns the ID field if it's non-nil, zero value otherwise.
func (p *Project) GetID() int64 {
if p == nil || p.ID == nil {
@@ -5564,6 +6236,14 @@ func (p *Project) GetOwnerURL() string {
return *p.OwnerURL
}
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (p *Project) GetState() string {
+ if p == nil || p.State == nil {
+ return ""
+ }
+ return *p.State
+}
+
// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
func (p *Project) GetUpdatedAt() Timestamp {
if p == nil || p.UpdatedAt == nil {
@@ -5580,6 +6260,14 @@ func (p *Project) GetURL() string {
return *p.URL
}
+// GetArchived returns the Archived field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetArchived() bool {
+ if p == nil || p.Archived == nil {
+ return false
+ }
+ return *p.Archived
+}
+
// GetColumnID returns the ColumnID field if it's non-nil, zero value otherwise.
func (p *ProjectCard) GetColumnID() int64 {
if p == nil || p.ColumnID == nil {
@@ -5724,6 +6412,30 @@ func (p *ProjectCardEvent) GetSender() *User {
return p.Sender
}
+// GetArchivedState returns the ArchivedState field if it's non-nil, zero value otherwise.
+func (p *ProjectCardListOptions) GetArchivedState() string {
+ if p == nil || p.ArchivedState == nil {
+ return ""
+ }
+ return *p.ArchivedState
+}
+
+// GetArchived returns the Archived field if it's non-nil, zero value otherwise.
+func (p *ProjectCardOptions) GetArchived() bool {
+ if p == nil || p.Archived == nil {
+ return false
+ }
+ return *p.Archived
+}
+
+// GetCardsURL returns the CardsURL field if it's non-nil, zero value otherwise.
+func (p *ProjectColumn) GetCardsURL() string {
+ if p == nil || p.CardsURL == nil {
+ return ""
+ }
+ return *p.CardsURL
+}
+
// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
func (p *ProjectColumn) GetCreatedAt() Timestamp {
if p == nil || p.CreatedAt == nil {
@@ -5772,6 +6484,14 @@ func (p *ProjectColumn) GetUpdatedAt() Timestamp {
return *p.UpdatedAt
}
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *ProjectColumn) GetURL() string {
+ if p == nil || p.URL == nil {
+ return ""
+ }
+ return *p.URL
+}
+
// GetAction returns the Action field if it's non-nil, zero value otherwise.
func (p *ProjectColumnEvent) GetAction() string {
if p == nil || p.Action == nil {
@@ -5892,6 +6612,46 @@ func (p *ProjectEvent) GetSender() *User {
return p.Sender
}
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (p *ProjectOptions) GetBody() string {
+ if p == nil || p.Body == nil {
+ return ""
+ }
+ return *p.Body
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *ProjectOptions) GetName() string {
+ if p == nil || p.Name == nil {
+ return ""
+ }
+ return *p.Name
+}
+
+// GetOrganizationPermission returns the OrganizationPermission field if it's non-nil, zero value otherwise.
+func (p *ProjectOptions) GetOrganizationPermission() string {
+ if p == nil || p.OrganizationPermission == nil {
+ return ""
+ }
+ return *p.OrganizationPermission
+}
+
+// GetPublic returns the Public field if it's non-nil, zero value otherwise.
+func (p *ProjectOptions) GetPublic() bool {
+ if p == nil || p.Public == nil {
+ return false
+ }
+ return *p.Public
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (p *ProjectOptions) GetState() string {
+ if p == nil || p.State == nil {
+ return ""
+ }
+ return *p.State
+}
+
// GetEnforceAdmins returns the EnforceAdmins field.
func (p *Protection) GetEnforceAdmins() *AdminEnforcement {
if p == nil {
@@ -5972,6 +6732,14 @@ func (p *PublicEvent) GetSender() *User {
return p.Sender
}
+// GetActiveLockReason returns the ActiveLockReason field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetActiveLockReason() string {
+ if p == nil || p.ActiveLockReason == nil {
+ return ""
+ }
+ return *p.ActiveLockReason
+}
+
// GetAdditions returns the Additions field if it's non-nil, zero value otherwise.
func (p *PullRequest) GetAdditions() int {
if p == nil || p.Additions == nil {
@@ -7244,6 +8012,14 @@ func (p *PushEventRepository) GetName() string {
return *p.Name
}
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetNodeID() string {
+ if p == nil || p.NodeID == nil {
+ return ""
+ }
+ return *p.NodeID
+}
+
// GetOpenIssuesCount returns the OpenIssuesCount field if it's non-nil, zero value otherwise.
func (p *PushEventRepository) GetOpenIssuesCount() int {
if p == nil || p.OpenIssuesCount == nil {
@@ -7261,7 +8037,7 @@ func (p *PushEventRepository) GetOrganization() string {
}
// GetOwner returns the Owner field.
-func (p *PushEventRepository) GetOwner() *PushEventRepoOwner {
+func (p *PushEventRepository) GetOwner() *User {
if p == nil {
return nil
}
@@ -8116,6 +8892,14 @@ func (r *Repository) GetNetworkCount() int {
return *r.NetworkCount
}
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (r *Repository) GetNodeID() string {
+ if r == nil || r.NodeID == nil {
+ return ""
+ }
+ return *r.NodeID
+}
+
// GetNotificationsURL returns the NotificationsURL field if it's non-nil, zero value otherwise.
func (r *Repository) GetNotificationsURL() string {
if r == nil || r.NotificationsURL == nil {
@@ -9140,6 +9924,14 @@ func (r *RepoStatus) GetURL() string {
return *r.URL
}
+// GetStrict returns the Strict field if it's non-nil, zero value otherwise.
+func (r *RequiredStatusChecksRequest) GetStrict() bool {
+ if r == nil || r.Strict == nil {
+ return false
+ }
+ return *r.Strict
+}
+
// GetName returns the Name field if it's non-nil, zero value otherwise.
func (s *ServiceHook) GetName() string {
if s == nil || s.Name == nil {
@@ -9701,7 +10493,7 @@ func (t *TeamDiscussion) GetBodyVersion() string {
}
// GetCommentsCount returns the CommentsCount field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetCommentsCount() int64 {
+func (t *TeamDiscussion) GetCommentsCount() int {
if t == nil || t.CommentsCount == nil {
return 0
}
@@ -9749,7 +10541,7 @@ func (t *TeamDiscussion) GetNodeID() string {
}
// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetNumber() int64 {
+func (t *TeamDiscussion) GetNumber() int {
if t == nil || t.Number == nil {
return 0
}
@@ -10188,6 +10980,14 @@ func (t *Tree) GetSHA() string {
return *t.SHA
}
+// GetTruncated returns the Truncated field if it's non-nil, zero value otherwise.
+func (t *Tree) GetTruncated() bool {
+ if t == nil || t.Truncated == nil {
+ return false
+ }
+ return *t.Truncated
+}
+
// GetContent returns the Content field if it's non-nil, zero value otherwise.
func (t *TreeEntry) GetContent() string {
if t == nil || t.Content == nil {
@@ -10244,6 +11044,70 @@ func (t *TreeEntry) GetURL() string {
return *t.URL
}
+// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetCompletedAt() Timestamp {
+ if u == nil || u.CompletedAt == nil {
+ return Timestamp{}
+ }
+ return *u.CompletedAt
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetConclusion() string {
+ if u == nil || u.Conclusion == nil {
+ return ""
+ }
+ return *u.Conclusion
+}
+
+// GetDetailsURL returns the DetailsURL field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetDetailsURL() string {
+ if u == nil || u.DetailsURL == nil {
+ return ""
+ }
+ return *u.DetailsURL
+}
+
+// GetExternalID returns the ExternalID field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetExternalID() string {
+ if u == nil || u.ExternalID == nil {
+ return ""
+ }
+ return *u.ExternalID
+}
+
+// GetHeadBranch returns the HeadBranch field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetHeadBranch() string {
+ if u == nil || u.HeadBranch == nil {
+ return ""
+ }
+ return *u.HeadBranch
+}
+
+// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetHeadSHA() string {
+ if u == nil || u.HeadSHA == nil {
+ return ""
+ }
+ return *u.HeadSHA
+}
+
+// GetOutput returns the Output field.
+func (u *UpdateCheckRunOptions) GetOutput() *CheckRunOutput {
+ if u == nil {
+ return nil
+ }
+ return u.Output
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetStatus() string {
+ if u == nil || u.Status == nil {
+ return ""
+ }
+ return *u.Status
+}
+
// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
func (u *User) GetAvatarURL() string {
if u == nil || u.AvatarURL == nil {
@@ -10412,6 +11276,14 @@ func (u *User) GetName() string {
return *u.Name
}
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (u *User) GetNodeID() string {
+ if u == nil || u.NodeID == nil {
+ return ""
+ }
+ return *u.NodeID
+}
+
// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise.
func (u *User) GetOrganizationsURL() string {
if u == nil || u.OrganizationsURL == nil {
@@ -10548,6 +11420,22 @@ func (u *User) GetURL() string {
return *u.URL
}
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (u *UserContext) GetMessage() string {
+ if u == nil || u.Message == nil {
+ return ""
+ }
+ return *u.Message
+}
+
+// GetOcticon returns the Octicon field if it's non-nil, zero value otherwise.
+func (u *UserContext) GetOcticon() string {
+ if u == nil || u.Octicon == nil {
+ return ""
+ }
+ return *u.Octicon
+}
+
// GetEmail returns the Email field if it's non-nil, zero value otherwise.
func (u *UserEmail) GetEmail() string {
if u == nil || u.Email == nil {
@@ -10708,6 +11596,70 @@ func (u *UserLDAPMapping) GetURL() string {
return *u.URL
}
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetCreatedAt() string {
+ if u == nil || u.CreatedAt == nil {
+ return ""
+ }
+ return *u.CreatedAt
+}
+
+// GetExcludeAttachments returns the ExcludeAttachments field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetExcludeAttachments() bool {
+ if u == nil || u.ExcludeAttachments == nil {
+ return false
+ }
+ return *u.ExcludeAttachments
+}
+
+// GetGUID returns the GUID field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetGUID() string {
+ if u == nil || u.GUID == nil {
+ return ""
+ }
+ return *u.GUID
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetID() int64 {
+ if u == nil || u.ID == nil {
+ return 0
+ }
+ return *u.ID
+}
+
+// GetLockRepositories returns the LockRepositories field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetLockRepositories() bool {
+ if u == nil || u.LockRepositories == nil {
+ return false
+ }
+ return *u.LockRepositories
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetState() string {
+ if u == nil || u.State == nil {
+ return ""
+ }
+ return *u.State
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetUpdatedAt() string {
+ if u == nil || u.UpdatedAt == nil {
+ return ""
+ }
+ return *u.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetURL() string {
+ if u == nil || u.URL == nil {
+ return ""
+ }
+ return *u.URL
+}
+
// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
func (u *UsersSearchResult) GetIncompleteResults() bool {
if u == nil || u.IncompleteResults == nil {
diff --git a/vendor/github.com/google/go-github/github/github.go b/vendor/github.com/google/go-github/github/github.go
index a0c78aa..0685852 100644
--- a/vendor/github.com/google/go-github/github/github.go
+++ b/vendor/github.com/google/go-github/github/github.go
@@ -45,15 +45,9 @@ const (
// Media Type values to access preview APIs
- // https://developer.github.com/changes/2015-03-09-licenses-api/
- mediaTypeLicensesPreview = "application/vnd.github.drax-preview+json"
-
// https://developer.github.com/changes/2014-12-09-new-attributes-for-stars-api/
mediaTypeStarringPreview = "application/vnd.github.v3.star+json"
- // https://developer.github.com/changes/2015-11-11-protected-branches-api/
- mediaTypeProtectedBranchesPreview = "application/vnd.github.loki-preview+json"
-
// https://help.github.com/enterprise/2.4/admin/guides/migrations/exporting-the-github-com-organization-s-repositories/
mediaTypeMigrationsPreview = "application/vnd.github.wyandotte-preview+json"
@@ -99,26 +93,35 @@ const (
// https://developer.github.com/changes/2017-07-17-update-topics-on-repositories/
mediaTypeTopicsPreview = "application/vnd.github.mercy-preview+json"
- // https://developer.github.com/v3/apps/marketplace/
- mediaTypeMarketplacePreview = "application/vnd.github.valkyrie-preview+json"
-
// https://developer.github.com/changes/2017-08-30-preview-nested-teams/
mediaTypeNestedTeamsPreview = "application/vnd.github.hellcat-preview+json"
// https://developer.github.com/changes/2017-11-09-repository-transfer-api-preview/
mediaTypeRepositoryTransferPreview = "application/vnd.github.nightshade-preview+json"
- // https://developer.github.com/changes/2017-12-19-graphql-node-id/
- mediaTypeGraphQLNodeIDPreview = "application/vnd.github.jean-grey-preview+json"
-
// https://developer.github.com/changes/2018-01-25-organization-invitation-api-preview/
mediaTypeOrganizationInvitationPreview = "application/vnd.github.dazzler-preview+json"
+ // https://developer.github.com/changes/2018-03-16-protected-branches-required-approving-reviews/
+ mediaTypeRequiredApprovingReviewsPreview = "application/vnd.github.luke-cage-preview+json"
+
// https://developer.github.com/changes/2018-02-22-label-description-search-preview/
mediaTypeLabelDescriptionSearchPreview = "application/vnd.github.symmetra-preview+json"
// https://developer.github.com/changes/2018-02-07-team-discussions-api/
mediaTypeTeamDiscussionsPreview = "application/vnd.github.echo-preview+json"
+
+ // https://developer.github.com/changes/2018-03-21-hovercard-api-preview/
+ mediaTypeHovercardPreview = "application/vnd.github.hagar-preview+json"
+
+ // https://developer.github.com/changes/2018-01-10-lock-reason-api-preview/
+ mediaTypeLockReasonPreview = "application/vnd.github.sailor-v-preview+json"
+
+ // https://developer.github.com/changes/2018-05-07-new-checks-api-public-beta/
+ mediaTypeCheckRunsPreview = "application/vnd.github.antiope-preview+json"
+
+ // https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/
+ mediaTypePreReceiveHooksPreview = "application/vnd.github.eye-scream-preview"
)
// A Client manages communication with the GitHub API.
@@ -147,6 +150,7 @@ type Client struct {
Admin *AdminService
Apps *AppsService
Authorizations *AuthorizationsService
+ Checks *ChecksService
Gists *GistsService
Git *GitService
Gitignores *GitignoresService
@@ -238,6 +242,7 @@ func NewClient(httpClient *http.Client) *Client {
c.Admin = (*AdminService)(&c.common)
c.Apps = (*AppsService)(&c.common)
c.Authorizations = (*AuthorizationsService)(&c.common)
+ c.Checks = (*ChecksService)(&c.common)
c.Gists = (*GistsService)(&c.common)
c.Git = (*GitService)(&c.common)
c.Gitignores = (*GitignoresService)(&c.common)
diff --git a/vendor/github.com/google/go-github/github/issues.go b/vendor/github.com/google/go-github/github/issues.go
index ded07f0..4753754 100644
--- a/vendor/github.com/google/go-github/github/issues.go
+++ b/vendor/github.com/google/go-github/github/issues.go
@@ -56,6 +56,10 @@ type Issue struct {
// TextMatches is only populated from search results that request text matches
// See: search.go and https://developer.github.com/v3/search/#text-match-metadata
TextMatches []TextMatch `json:"text_matches,omitempty"`
+
+ // ActiveLockReason is populated only when LockReason is provided while locking the issue.
+ // Possible values are: "off-topic", "too heated", "resolved", and "spam".
+ ActiveLockReason *string `json:"active_lock_reason,omitempty"`
}
func (i Issue) String() string {
@@ -156,7 +160,7 @@ func (s *IssuesService) listIssues(ctx context.Context, u string, opt *IssueList
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
+ acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeLabelDescriptionSearchPreview, mediaTypeLockReasonPreview}
req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
var issues []*Issue
@@ -224,7 +228,7 @@ func (s *IssuesService) ListByRepo(ctx context.Context, owner string, repo strin
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
+ acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeLabelDescriptionSearchPreview, mediaTypeLockReasonPreview}
req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
var issues []*Issue
@@ -247,7 +251,7 @@ func (s *IssuesService) Get(ctx context.Context, owner string, repo string, numb
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
+ acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeLabelDescriptionSearchPreview, mediaTypeLockReasonPreview}
req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
issue := new(Issue)
@@ -270,8 +274,7 @@ func (s *IssuesService) Create(ctx context.Context, owner string, repo string, i
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
i := new(Issue)
resp, err := s.client.Do(ctx, req, i)
@@ -293,8 +296,7 @@ func (s *IssuesService) Edit(ctx context.Context, owner string, repo string, num
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
i := new(Issue)
resp, err := s.client.Do(ctx, req, i)
@@ -305,16 +307,29 @@ func (s *IssuesService) Edit(ctx context.Context, owner string, repo string, num
return i, resp, nil
}
+// LockIssueOptions specifies the optional parameters to the
+// IssuesService.Lock method.
+type LockIssueOptions struct {
+ // LockReason specifies the reason to lock this issue.
+ // Providing a lock reason can help make it clearer to contributors why an issue
+ // was locked. Possible values are: "off-topic", "too heated", "resolved", and "spam".
+ LockReason string `json:"lock_reason,omitempty"`
+}
+
// Lock an issue's conversation.
//
// GitHub API docs: https://developer.github.com/v3/issues/#lock-an-issue
-func (s *IssuesService) Lock(ctx context.Context, owner string, repo string, number int) (*Response, error) {
+func (s *IssuesService) Lock(ctx context.Context, owner string, repo string, number int, opt *LockIssueOptions) (*Response, error) {
u := fmt.Sprintf("repos/%v/%v/issues/%d/lock", owner, repo, number)
- req, err := s.client.NewRequest("PUT", u, nil)
+ req, err := s.client.NewRequest("PUT", u, opt)
if err != nil {
return nil, err
}
+ if opt != nil {
+ req.Header.Set("Accept", mediaTypeLockReasonPreview)
+ }
+
return s.client.Do(ctx, req, nil)
}
diff --git a/vendor/github.com/google/go-github/github/issues_events.go b/vendor/github.com/google/go-github/github/issues_events.go
index 55e6d43..f71e463 100644
--- a/vendor/github.com/google/go-github/github/issues_events.go
+++ b/vendor/github.com/google/go-github/github/issues_events.go
@@ -34,9 +34,13 @@ type IssueEvent struct {
// The Actor committed to master a commit mentioning the issue in its commit message.
// CommitID holds the SHA1 of the commit.
//
- // reopened, locked, unlocked
+ // reopened, unlocked
// The Actor did that to the issue.
//
+ // locked
+ // The Actor locked the issue.
+ // LockReason holds the reason of locking the issue (if provided while locking).
+ //
// renamed
// The Actor changed the issue title from Rename.From to Rename.To.
//
@@ -64,12 +68,13 @@ type IssueEvent struct {
Issue *Issue `json:"issue,omitempty"`
// Only present on certain events; see above.
- Assignee *User `json:"assignee,omitempty"`
- Assigner *User `json:"assigner,omitempty"`
- CommitID *string `json:"commit_id,omitempty"`
- Milestone *Milestone `json:"milestone,omitempty"`
- Label *Label `json:"label,omitempty"`
- Rename *Rename `json:"rename,omitempty"`
+ Assignee *User `json:"assignee,omitempty"`
+ Assigner *User `json:"assigner,omitempty"`
+ CommitID *string `json:"commit_id,omitempty"`
+ Milestone *Milestone `json:"milestone,omitempty"`
+ Label *Label `json:"label,omitempty"`
+ Rename *Rename `json:"rename,omitempty"`
+ LockReason *string `json:"lock_reason,omitempty"`
}
// ListIssueEvents lists events for the specified issue.
@@ -87,6 +92,8 @@ func (s *IssuesService) ListIssueEvents(ctx context.Context, owner, repo string,
return nil, nil, err
}
+ req.Header.Set("Accept", mediaTypeLockReasonPreview)
+
var events []*IssueEvent
resp, err := s.client.Do(ctx, req, &events)
if err != nil {
diff --git a/vendor/github.com/google/go-github/github/issues_labels.go b/vendor/github.com/google/go-github/github/issues_labels.go
index 4328997..adcbe06 100644
--- a/vendor/github.com/google/go-github/github/issues_labels.go
+++ b/vendor/github.com/google/go-github/github/issues_labels.go
@@ -8,7 +8,6 @@ package github
import (
"context"
"fmt"
- "strings"
)
// Label represents a GitHub label on an Issue
@@ -42,8 +41,7 @@ func (s *IssuesService) ListLabels(ctx context.Context, owner string, repo strin
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
var labels []*Label
resp, err := s.client.Do(ctx, req, &labels)
@@ -65,8 +63,7 @@ func (s *IssuesService) GetLabel(ctx context.Context, owner string, repo string,
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
label := new(Label)
resp, err := s.client.Do(ctx, req, label)
@@ -88,8 +85,7 @@ func (s *IssuesService) CreateLabel(ctx context.Context, owner string, repo stri
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
l := new(Label)
resp, err := s.client.Do(ctx, req, l)
@@ -111,8 +107,7 @@ func (s *IssuesService) EditLabel(ctx context.Context, owner string, repo string
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
l := new(Label)
resp, err := s.client.Do(ctx, req, l)
@@ -151,8 +146,7 @@ func (s *IssuesService) ListLabelsByIssue(ctx context.Context, owner string, rep
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
var labels []*Label
resp, err := s.client.Do(ctx, req, &labels)
@@ -174,8 +168,7 @@ func (s *IssuesService) AddLabelsToIssue(ctx context.Context, owner string, repo
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
var l []*Label
resp, err := s.client.Do(ctx, req, &l)
@@ -213,8 +206,7 @@ func (s *IssuesService) ReplaceLabelsForIssue(ctx context.Context, owner string,
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
var l []*Label
resp, err := s.client.Do(ctx, req, &l)
@@ -257,8 +249,7 @@ func (s *IssuesService) ListLabelsForMilestone(ctx context.Context, owner string
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
var labels []*Label
resp, err := s.client.Do(ctx, req, &labels)
diff --git a/vendor/github.com/google/go-github/github/issues_milestones.go b/vendor/github.com/google/go-github/github/issues_milestones.go
index 6af1cc0..ffe9aae 100644
--- a/vendor/github.com/google/go-github/github/issues_milestones.go
+++ b/vendor/github.com/google/go-github/github/issues_milestones.go
@@ -68,9 +68,6 @@ func (s *IssuesService) ListMilestones(ctx context.Context, owner string, repo s
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var milestones []*Milestone
resp, err := s.client.Do(ctx, req, &milestones)
if err != nil {
@@ -90,9 +87,6 @@ func (s *IssuesService) GetMilestone(ctx context.Context, owner string, repo str
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
milestone := new(Milestone)
resp, err := s.client.Do(ctx, req, milestone)
if err != nil {
@@ -112,9 +106,6 @@ func (s *IssuesService) CreateMilestone(ctx context.Context, owner string, repo
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
m := new(Milestone)
resp, err := s.client.Do(ctx, req, m)
if err != nil {
@@ -134,9 +125,6 @@ func (s *IssuesService) EditMilestone(ctx context.Context, owner string, repo st
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
m := new(Milestone)
resp, err := s.client.Do(ctx, req, m)
if err != nil {
diff --git a/vendor/github.com/google/go-github/github/licenses.go b/vendor/github.com/google/go-github/github/licenses.go
index e9cd177..1176d3a 100644
--- a/vendor/github.com/google/go-github/github/licenses.go
+++ b/vendor/github.com/google/go-github/github/licenses.go
@@ -67,9 +67,6 @@ func (s *LicensesService) List(ctx context.Context) ([]*License, *Response, erro
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeLicensesPreview)
-
var licenses []*License
resp, err := s.client.Do(ctx, req, &licenses)
if err != nil {
@@ -90,9 +87,6 @@ func (s *LicensesService) Get(ctx context.Context, licenseName string) (*License
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeLicensesPreview)
-
license := new(License)
resp, err := s.client.Do(ctx, req, license)
if err != nil {
diff --git a/vendor/github.com/google/go-github/github/messages.go b/vendor/github.com/google/go-github/github/messages.go
index 2396fd4..b8d3380 100644
--- a/vendor/github.com/google/go-github/github/messages.go
+++ b/vendor/github.com/google/go-github/github/messages.go
@@ -41,6 +41,8 @@ const (
var (
// eventTypeMapping maps webhooks types to their corresponding go-github struct types.
eventTypeMapping = map[string]string{
+ "check_run": "CheckRunEvent",
+ "check_suite": "CheckSuiteEvent",
"commit_comment": "CommitCommentEvent",
"create": "CreateEvent",
"delete": "DeleteEvent",
diff --git a/vendor/github.com/google/go-github/github/migrations_user.go b/vendor/github.com/google/go-github/github/migrations_user.go
new file mode 100644
index 0000000..ae53e68
--- /dev/null
+++ b/vendor/github.com/google/go-github/github/migrations_user.go
@@ -0,0 +1,214 @@
+// Copyright 2018 The go-github 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 github
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "net/http"
+)
+
+// UserMigration represents a GitHub migration (archival).
+type UserMigration struct {
+ ID *int64 `json:"id,omitempty"`
+ GUID *string `json:"guid,omitempty"`
+ // State is the current state of a migration.
+ // Possible values are:
+ // "pending" which means the migration hasn't started yet,
+ // "exporting" which means the migration is in progress,
+ // "exported" which means the migration finished successfully, or
+ // "failed" which means the migration failed.
+ State *string `json:"state,omitempty"`
+ // LockRepositories indicates whether repositories are locked (to prevent
+ // manipulation) while migrating data.
+ LockRepositories *bool `json:"lock_repositories,omitempty"`
+ // ExcludeAttachments indicates whether attachments should be excluded from
+ // the migration (to reduce migration archive file size).
+ ExcludeAttachments *bool `json:"exclude_attachments,omitempty"`
+ URL *string `json:"url,omitempty"`
+ CreatedAt *string `json:"created_at,omitempty"`
+ UpdatedAt *string `json:"updated_at,omitempty"`
+ Repositories []*Repository `json:"repositories,omitempty"`
+}
+
+func (m UserMigration) String() string {
+ return Stringify(m)
+}
+
+// UserMigrationOptions specifies the optional parameters to Migration methods.
+type UserMigrationOptions struct {
+ // LockRepositories indicates whether repositories should be locked (to prevent
+ // manipulation) while migrating data.
+ LockRepositories bool
+
+ // ExcludeAttachments indicates whether attachments should be excluded from
+ // the migration (to reduce migration archive file size).
+ ExcludeAttachments bool
+}
+
+// startUserMigration represents the body of a StartMigration request.
+type startUserMigration struct {
+ // Repositories is a slice of repository names to migrate.
+ Repositories []string `json:"repositories,omitempty"`
+
+ // LockRepositories indicates whether repositories should be locked (to prevent
+ // manipulation) while migrating data.
+ LockRepositories *bool `json:"lock_repositories,omitempty"`
+
+ // ExcludeAttachments indicates whether attachments should be excluded from
+ // the migration (to reduce migration archive file size).
+ ExcludeAttachments *bool `json:"exclude_attachments,omitempty"`
+}
+
+// StartUserMigration starts the generation of a migration archive.
+// repos is a slice of repository names to migrate.
+//
+// GitHub API docs: https://developer.github.com/v3/migrations/users/#start-a-user-migration
+func (s *MigrationService) StartUserMigration(ctx context.Context, repos []string, opt *UserMigrationOptions) (*UserMigration, *Response, error) {
+ u := "user/migrations"
+
+ body := &startUserMigration{Repositories: repos}
+ if opt != nil {
+ body.LockRepositories = Bool(opt.LockRepositories)
+ body.ExcludeAttachments = Bool(opt.ExcludeAttachments)
+ }
+
+ req, err := s.client.NewRequest("POST", u, body)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+ m := &UserMigration{}
+ resp, err := s.client.Do(ctx, req, m)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return m, resp, nil
+}
+
+// ListUserMigrations lists the most recent migrations.
+//
+// GitHub API docs: https://developer.github.com/v3/migrations/users/#get-a-list-of-user-migrations
+func (s *MigrationService) ListUserMigrations(ctx context.Context) ([]*UserMigration, *Response, error) {
+ u := "user/migrations"
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+ var m []*UserMigration
+ resp, err := s.client.Do(ctx, req, &m)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return m, resp, nil
+}
+
+// UserMigrationStatus gets the status of a specific migration archive.
+// id is the migration ID.
+//
+// GitHub API docs: https://developer.github.com/v3/migrations/users/#get-the-status-of-a-user-migration
+func (s *MigrationService) UserMigrationStatus(ctx context.Context, id int64) (*UserMigration, *Response, error) {
+ u := fmt.Sprintf("user/migrations/%v", id)
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+ m := &UserMigration{}
+ resp, err := s.client.Do(ctx, req, m)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return m, resp, nil
+}
+
+// UserMigrationArchiveURL gets the URL for a specific migration archive.
+// id is the migration ID.
+//
+// GitHub API docs: https://developer.github.com/v3/migrations/users/#download-a-user-migration-archive
+func (s *MigrationService) UserMigrationArchiveURL(ctx context.Context, id int64) (string, error) {
+ url := fmt.Sprintf("user/migrations/%v/archive", id)
+
+ req, err := s.client.NewRequest("GET", url, nil)
+ if err != nil {
+ return "", err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+ m := &UserMigration{}
+
+ var loc string
+ originalRedirect := s.client.client.CheckRedirect
+ s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
+ loc = req.URL.String()
+ return http.ErrUseLastResponse
+ }
+ defer func() {
+ s.client.client.CheckRedirect = originalRedirect
+ }()
+ resp, err := s.client.Do(ctx, req, m)
+ if err == nil {
+ return "", errors.New("expected redirect, none provided")
+ }
+ loc = resp.Header.Get("Location")
+ return loc, nil
+}
+
+// DeleteUserMigration will delete a previous migration archive.
+// id is the migration ID.
+//
+// GitHub API docs: https://developer.github.com/v3/migrations/users/#delete-a-user-migration-archive
+func (s *MigrationService) DeleteUserMigration(ctx context.Context, id int64) (*Response, error) {
+ url := fmt.Sprintf("user/migrations/%v/archive", id)
+
+ req, err := s.client.NewRequest("DELETE", url, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+ return s.client.Do(ctx, req, nil)
+}
+
+// UnlockUserRepository will unlock a repo that was locked for migration.
+// id is migration ID.
+// You should unlock each migrated repository and delete them when the migration
+// is complete and you no longer need the source data.
+//
+// GitHub API docs: https://developer.github.com/v3/migrations/users/#unlock-a-user-repository
+func (s *MigrationService) UnlockUserRepo(ctx context.Context, id int64, repo string) (*Response, error) {
+ url := fmt.Sprintf("user/migrations/%v/repos/%v/lock", id, repo)
+
+ req, err := s.client.NewRequest("DELETE", url, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+ return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/github/orgs.go b/vendor/github.com/google/go-github/github/orgs.go
index 7832053..044dff5 100644
--- a/vendor/github.com/google/go-github/github/orgs.go
+++ b/vendor/github.com/google/go-github/github/orgs.go
@@ -21,6 +21,7 @@ type OrganizationsService service
type Organization struct {
Login *string `json:"login,omitempty"`
ID *int64 `json:"id,omitempty"`
+ NodeID *string `json:"node_id,omitempty"`
AvatarURL *string `json:"avatar_url,omitempty"`
HTMLURL *string `json:"html_url,omitempty"`
Name *string `json:"name,omitempty"`
@@ -43,7 +44,6 @@ type Organization struct {
BillingEmail *string `json:"billing_email,omitempty"`
Type *string `json:"type,omitempty"`
Plan *Plan `json:"plan,omitempty"`
- NodeID *string `json:"node_id,omitempty"`
// API URLs
URL *string `json:"url,omitempty"`
@@ -101,9 +101,6 @@ func (s *OrganizationsService) ListAll(ctx context.Context, opt *OrganizationsLi
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
orgs := []*Organization{}
resp, err := s.client.Do(ctx, req, &orgs)
if err != nil {
@@ -133,9 +130,6 @@ func (s *OrganizationsService) List(ctx context.Context, user string, opt *ListO
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var orgs []*Organization
resp, err := s.client.Do(ctx, req, &orgs)
if err != nil {
@@ -155,9 +149,6 @@ func (s *OrganizationsService) Get(ctx context.Context, org string) (*Organizati
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
organization := new(Organization)
resp, err := s.client.Do(ctx, req, organization)
if err != nil {
@@ -177,9 +168,6 @@ func (s *OrganizationsService) GetByID(ctx context.Context, id int64) (*Organiza
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
organization := new(Organization)
resp, err := s.client.Do(ctx, req, organization)
if err != nil {
@@ -199,9 +187,6 @@ func (s *OrganizationsService) Edit(ctx context.Context, name string, org *Organ
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
o := new(Organization)
resp, err := s.client.Do(ctx, req, o)
if err != nil {
diff --git a/vendor/github.com/google/go-github/github/orgs_members.go b/vendor/github.com/google/go-github/github/orgs_members.go
index 98e138e..d184359 100644
--- a/vendor/github.com/google/go-github/github/orgs_members.go
+++ b/vendor/github.com/google/go-github/github/orgs_members.go
@@ -59,7 +59,7 @@ type ListMembersOptions struct {
// Possible values are:
// all - all members of the organization, regardless of role
// admin - organization owners
- // member - non-organization members
+ // member - non-owner organization members
//
// Default is "all".
Role string `url:"role,omitempty"`
diff --git a/vendor/github.com/google/go-github/github/orgs_teams.go b/vendor/github.com/google/go-github/github/orgs_teams.go
deleted file mode 100644
index b3cc9f0..0000000
--- a/vendor/github.com/google/go-github/github/orgs_teams.go
+++ /dev/null
@@ -1,514 +0,0 @@
-// Copyright 2013 The go-github 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 github
-
-import (
- "context"
- "fmt"
- "strings"
- "time"
-)
-
-// Team represents a team within a GitHub organization. Teams are used to
-// manage access to an organization's repositories.
-type Team struct {
- ID *int64 `json:"id,omitempty"`
- Name *string `json:"name,omitempty"`
- Description *string `json:"description,omitempty"`
- URL *string `json:"url,omitempty"`
- Slug *string `json:"slug,omitempty"`
-
- // Permission specifies the default permission for repositories owned by the team.
- Permission *string `json:"permission,omitempty"`
-
- // Privacy identifies the level of privacy this team should have.
- // Possible values are:
- // secret - only visible to organization owners and members of this team
- // closed - visible to all members of this organization
- // Default is "secret".
- Privacy *string `json:"privacy,omitempty"`
-
- MembersCount *int `json:"members_count,omitempty"`
- ReposCount *int `json:"repos_count,omitempty"`
- Organization *Organization `json:"organization,omitempty"`
- MembersURL *string `json:"members_url,omitempty"`
- RepositoriesURL *string `json:"repositories_url,omitempty"`
- Parent *Team `json:"parent,omitempty"`
-
- // LDAPDN is only available in GitHub Enterprise and when the team
- // membership is synchronized with LDAP.
- LDAPDN *string `json:"ldap_dn,omitempty"`
-}
-
-func (t Team) String() string {
- return Stringify(t)
-}
-
-// Invitation represents a team member's invitation status.
-type Invitation struct {
- ID *int64 `json:"id,omitempty"`
- Login *string `json:"login,omitempty"`
- Email *string `json:"email,omitempty"`
- // Role can be one of the values - 'direct_member', 'admin', 'billing_manager', 'hiring_manager', or 'reinstate'.
- Role *string `json:"role,omitempty"`
- CreatedAt *time.Time `json:"created_at,omitempty"`
- Inviter *User `json:"inviter,omitempty"`
- TeamCount *int `json:"team_count,omitempty"`
- InvitationTeamURL *string `json:"invitation_team_url,omitempty"`
-}
-
-func (i Invitation) String() string {
- return Stringify(i)
-}
-
-// ListTeams lists all of the teams for an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-teams
-func (s *OrganizationsService) ListTeams(ctx context.Context, org string, opt *ListOptions) ([]*Team, *Response, error) {
- u := fmt.Sprintf("orgs/%v/teams", org)
- u, err := addOptions(u, opt)
- if err != nil {
- return nil, nil, err
- }
-
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return nil, nil, err
- }
-
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
-
- var teams []*Team
- resp, err := s.client.Do(ctx, req, &teams)
- if err != nil {
- return nil, resp, err
- }
-
- return teams, resp, nil
-}
-
-// GetTeam fetches a team by ID.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#get-team
-func (s *OrganizationsService) GetTeam(ctx context.Context, team int64) (*Team, *Response, error) {
- u := fmt.Sprintf("teams/%v", team)
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return nil, nil, err
- }
-
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
-
- t := new(Team)
- resp, err := s.client.Do(ctx, req, t)
- if err != nil {
- return nil, resp, err
- }
-
- return t, resp, nil
-}
-
-// NewTeam represents a team to be created or modified.
-type NewTeam struct {
- Name string `json:"name"` // Name of the team. (Required.)
- Description *string `json:"description,omitempty"`
- Maintainers []string `json:"maintainers,omitempty"`
- RepoNames []string `json:"repo_names,omitempty"`
- ParentTeamID *int64 `json:"parent_team_id,omitempty"`
-
- // Deprecated: Permission is deprecated when creating or editing a team in an org
- // using the new GitHub permission model. It no longer identifies the
- // permission a team has on its repos, but only specifies the default
- // permission a repo is initially added with. Avoid confusion by
- // specifying a permission value when calling AddTeamRepo.
- Permission *string `json:"permission,omitempty"`
-
- // Privacy identifies the level of privacy this team should have.
- // Possible values are:
- // secret - only visible to organization owners and members of this team
- // closed - visible to all members of this organization
- // Default is "secret".
- Privacy *string `json:"privacy,omitempty"`
-
- // LDAPDN may be used in GitHub Enterprise when the team membership
- // is synchronized with LDAP.
- LDAPDN *string `json:"ldap_dn,omitempty"`
-}
-
-func (s NewTeam) String() string {
- return Stringify(s)
-}
-
-// CreateTeam creates a new team within an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#create-team
-func (s *OrganizationsService) CreateTeam(ctx context.Context, org string, team *NewTeam) (*Team, *Response, error) {
- u := fmt.Sprintf("orgs/%v/teams", org)
- req, err := s.client.NewRequest("POST", u, team)
- if err != nil {
- return nil, nil, err
- }
-
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
-
- t := new(Team)
- resp, err := s.client.Do(ctx, req, t)
- if err != nil {
- return nil, resp, err
- }
-
- return t, resp, nil
-}
-
-// EditTeam edits a team.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#edit-team
-func (s *OrganizationsService) EditTeam(ctx context.Context, id int64, team *NewTeam) (*Team, *Response, error) {
- u := fmt.Sprintf("teams/%v", id)
- req, err := s.client.NewRequest("PATCH", u, team)
- if err != nil {
- return nil, nil, err
- }
-
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
-
- t := new(Team)
- resp, err := s.client.Do(ctx, req, t)
- if err != nil {
- return nil, resp, err
- }
-
- return t, resp, nil
-}
-
-// DeleteTeam deletes a team.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#delete-team
-func (s *OrganizationsService) DeleteTeam(ctx context.Context, team int64) (*Response, error) {
- u := fmt.Sprintf("teams/%v", team)
- req, err := s.client.NewRequest("DELETE", u, nil)
- if err != nil {
- return nil, err
- }
-
- req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
-
- return s.client.Do(ctx, req, nil)
-}
-
-// OrganizationListTeamMembersOptions specifies the optional parameters to the
-// OrganizationsService.ListTeamMembers method.
-type OrganizationListTeamMembersOptions struct {
- // Role filters members returned by their role in the team. Possible
- // values are "all", "member", "maintainer". Default is "all".
- Role string `url:"role,omitempty"`
-
- ListOptions
-}
-
-// ListChildTeams lists child teams for a team.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-child-teams
-func (s *OrganizationsService) ListChildTeams(ctx context.Context, teamID int64, opt *ListOptions) ([]*Team, *Response, error) {
- u := fmt.Sprintf("teams/%v/teams", teamID)
- u, err := addOptions(u, opt)
- if err != nil {
- return nil, nil, err
- }
-
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return nil, nil, err
- }
-
- req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
-
- var teams []*Team
- resp, err := s.client.Do(ctx, req, &teams)
- if err != nil {
- return nil, resp, err
- }
-
- return teams, resp, nil
-}
-
-// ListTeamMembers lists all of the users who are members of the specified
-// team.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-team-members
-func (s *OrganizationsService) ListTeamMembers(ctx context.Context, team int64, opt *OrganizationListTeamMembersOptions) ([]*User, *Response, error) {
- u := fmt.Sprintf("teams/%v/members", team)
- u, err := addOptions(u, opt)
- if err != nil {
- return nil, nil, err
- }
-
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return nil, nil, err
- }
-
- req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
-
- var members []*User
- resp, err := s.client.Do(ctx, req, &members)
- if err != nil {
- return nil, resp, err
- }
-
- return members, resp, nil
-}
-
-// IsTeamMember checks if a user is a member of the specified team.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#get-team-member
-//
-// Deprecated: This API has been marked as deprecated in the Github API docs,
-// OrganizationsService.GetTeamMembership method should be used instead.
-func (s *OrganizationsService) IsTeamMember(ctx context.Context, team int64, user string) (bool, *Response, error) {
- u := fmt.Sprintf("teams/%v/members/%v", team, user)
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return false, nil, err
- }
-
- resp, err := s.client.Do(ctx, req, nil)
- member, err := parseBoolResponse(err)
- return member, resp, err
-}
-
-// ListTeamRepos lists the repositories that the specified team has access to.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-team-repos
-func (s *OrganizationsService) ListTeamRepos(ctx context.Context, team int64, opt *ListOptions) ([]*Repository, *Response, error) {
- u := fmt.Sprintf("teams/%v/repos", team)
- u, err := addOptions(u, opt)
- if err != nil {
- return nil, nil, err
- }
-
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return nil, nil, err
- }
-
- // TODO: remove custom Accept header when topics API fully launches.
- headers := []string{mediaTypeTopicsPreview, mediaTypeNestedTeamsPreview}
- req.Header.Set("Accept", strings.Join(headers, ", "))
-
- var repos []*Repository
- resp, err := s.client.Do(ctx, req, &repos)
- if err != nil {
- return nil, resp, err
- }
-
- return repos, resp, nil
-}
-
-// IsTeamRepo checks if a team manages the specified repository. If the
-// repository is managed by team, a Repository is returned which includes the
-// permissions team has for that repo.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#check-if-a-team-manages-a-repository
-func (s *OrganizationsService) IsTeamRepo(ctx context.Context, team int64, owner string, repo string) (*Repository, *Response, error) {
- u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo)
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return nil, nil, err
- }
-
- headers := []string{mediaTypeOrgPermissionRepo, mediaTypeNestedTeamsPreview}
- req.Header.Set("Accept", strings.Join(headers, ", "))
-
- repository := new(Repository)
- resp, err := s.client.Do(ctx, req, repository)
- if err != nil {
- return nil, resp, err
- }
-
- return repository, resp, nil
-}
-
-// OrganizationAddTeamRepoOptions specifies the optional parameters to the
-// OrganizationsService.AddTeamRepo method.
-type OrganizationAddTeamRepoOptions struct {
- // Permission specifies the permission to grant the team on this repository.
- // Possible values are:
- // pull - team members can pull, but not push to or administer this repository
- // push - team members can pull and push, but not administer this repository
- // admin - team members can pull, push and administer this repository
- //
- // If not specified, the team's permission attribute will be used.
- Permission string `json:"permission,omitempty"`
-}
-
-// AddTeamRepo adds a repository to be managed by the specified team. The
-// specified repository must be owned by the organization to which the team
-// belongs, or a direct fork of a repository owned by the organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#add-team-repo
-func (s *OrganizationsService) AddTeamRepo(ctx context.Context, team int64, owner string, repo string, opt *OrganizationAddTeamRepoOptions) (*Response, error) {
- u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo)
- req, err := s.client.NewRequest("PUT", u, opt)
- if err != nil {
- return nil, err
- }
-
- return s.client.Do(ctx, req, nil)
-}
-
-// RemoveTeamRepo removes a repository from being managed by the specified
-// team. Note that this does not delete the repository, it just removes it
-// from the team.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#remove-team-repo
-func (s *OrganizationsService) RemoveTeamRepo(ctx context.Context, team int64, owner string, repo string) (*Response, error) {
- u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo)
- req, err := s.client.NewRequest("DELETE", u, nil)
- if err != nil {
- return nil, err
- }
-
- return s.client.Do(ctx, req, nil)
-}
-
-// ListUserTeams lists a user's teams
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-user-teams
-func (s *OrganizationsService) ListUserTeams(ctx context.Context, opt *ListOptions) ([]*Team, *Response, error) {
- u := "user/teams"
- u, err := addOptions(u, opt)
- if err != nil {
- return nil, nil, err
- }
-
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return nil, nil, err
- }
-
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
-
- var teams []*Team
- resp, err := s.client.Do(ctx, req, &teams)
- if err != nil {
- return nil, resp, err
- }
-
- return teams, resp, nil
-}
-
-// GetTeamMembership returns the membership status for a user in a team.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#get-team-membership
-func (s *OrganizationsService) GetTeamMembership(ctx context.Context, team int64, user string) (*Membership, *Response, error) {
- u := fmt.Sprintf("teams/%v/memberships/%v", team, user)
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return nil, nil, err
- }
-
- req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
-
- t := new(Membership)
- resp, err := s.client.Do(ctx, req, t)
- if err != nil {
- return nil, resp, err
- }
-
- return t, resp, nil
-}
-
-// OrganizationAddTeamMembershipOptions does stuff specifies the optional
-// parameters to the OrganizationsService.AddTeamMembership method.
-type OrganizationAddTeamMembershipOptions struct {
- // Role specifies the role the user should have in the team. Possible
- // values are:
- // member - a normal member of the team
- // maintainer - a team maintainer. Able to add/remove other team
- // members, promote other team members to team
- // maintainer, and edit the team’s name and description
- //
- // Default value is "member".
- Role string `json:"role,omitempty"`
-}
-
-// AddTeamMembership adds or invites a user to a team.
-//
-// In order to add a membership between a user and a team, the authenticated
-// user must have 'admin' permissions to the team or be an owner of the
-// organization that the team is associated with.
-//
-// If the user is already a part of the team's organization (meaning they're on
-// at least one other team in the organization), this endpoint will add the
-// user to the team.
-//
-// If the user is completely unaffiliated with the team's organization (meaning
-// they're on none of the organization's teams), this endpoint will send an
-// invitation to the user via email. This newly-created membership will be in
-// the "pending" state until the user accepts the invitation, at which point
-// the membership will transition to the "active" state and the user will be
-// added as a member of the team.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#add-team-membership
-func (s *OrganizationsService) AddTeamMembership(ctx context.Context, team int64, user string, opt *OrganizationAddTeamMembershipOptions) (*Membership, *Response, error) {
- u := fmt.Sprintf("teams/%v/memberships/%v", team, user)
- req, err := s.client.NewRequest("PUT", u, opt)
- if err != nil {
- return nil, nil, err
- }
-
- t := new(Membership)
- resp, err := s.client.Do(ctx, req, t)
- if err != nil {
- return nil, resp, err
- }
-
- return t, resp, nil
-}
-
-// RemoveTeamMembership removes a user from a team.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#remove-team-membership
-func (s *OrganizationsService) RemoveTeamMembership(ctx context.Context, team int64, user string) (*Response, error) {
- u := fmt.Sprintf("teams/%v/memberships/%v", team, user)
- req, err := s.client.NewRequest("DELETE", u, nil)
- if err != nil {
- return nil, err
- }
-
- return s.client.Do(ctx, req, nil)
-}
-
-// ListPendingTeamInvitations get pending invitaion list in team.
-// Warning: The API may change without advance notice during the preview period.
-// Preview features are not supported for production use.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-pending-team-invitations
-func (s *OrganizationsService) ListPendingTeamInvitations(ctx context.Context, team int64, opt *ListOptions) ([]*Invitation, *Response, error) {
- u := fmt.Sprintf("teams/%v/invitations", team)
- u, err := addOptions(u, opt)
- if err != nil {
- return nil, nil, err
- }
-
- req, err := s.client.NewRequest("GET", u, nil)
- if err != nil {
- return nil, nil, err
- }
-
- var pendingInvitations []*Invitation
- resp, err := s.client.Do(ctx, req, &pendingInvitations)
- if err != nil {
- return nil, resp, err
- }
-
- return pendingInvitations, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/github/projects.go b/vendor/github.com/google/go-github/github/projects.go
index 409ed4a..76ef1e0 100644
--- a/vendor/github.com/google/go-github/github/projects.go
+++ b/vendor/github.com/google/go-github/github/projects.go
@@ -8,7 +8,6 @@ package github
import (
"context"
"fmt"
- "strings"
)
// ProjectsService provides access to the projects functions in the
@@ -19,15 +18,18 @@ type ProjectsService service
// Project represents a GitHub Project.
type Project struct {
- ID *int64 `json:"id,omitempty"`
- URL *string `json:"url,omitempty"`
- OwnerURL *string `json:"owner_url,omitempty"`
- Name *string `json:"name,omitempty"`
- Body *string `json:"body,omitempty"`
- Number *int `json:"number,omitempty"`
- CreatedAt *Timestamp `json:"created_at,omitempty"`
- UpdatedAt *Timestamp `json:"updated_at,omitempty"`
- NodeID *string `json:"node_id,omitempty"`
+ ID *int64 `json:"id,omitempty"`
+ URL *string `json:"url,omitempty"`
+ HTMLURL *string `json:"html_url,omitempty"`
+ ColumnsURL *string `json:"columns_url,omitempty"`
+ OwnerURL *string `json:"owner_url,omitempty"`
+ Name *string `json:"name,omitempty"`
+ Body *string `json:"body,omitempty"`
+ Number *int `json:"number,omitempty"`
+ State *string `json:"state,omitempty"`
+ CreatedAt *Timestamp `json:"created_at,omitempty"`
+ UpdatedAt *Timestamp `json:"updated_at,omitempty"`
+ NodeID *string `json:"node_id,omitempty"`
// The User object that generated the project.
Creator *User `json:"creator,omitempty"`
@@ -48,8 +50,7 @@ func (s *ProjectsService) GetProject(ctx context.Context, id int64) (*Project, *
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
project := &Project{}
resp, err := s.client.Do(ctx, req, project)
@@ -65,15 +66,24 @@ func (s *ProjectsService) GetProject(ctx context.Context, id int64) (*Project, *
// ProjectsService.UpdateProject methods.
type ProjectOptions struct {
// The name of the project. (Required for creation; optional for update.)
- Name string `json:"name,omitempty"`
+ Name *string `json:"name,omitempty"`
// The body of the project. (Optional.)
- Body string `json:"body,omitempty"`
+ Body *string `json:"body,omitempty"`
// The following field(s) are only applicable for update.
// They should be left with zero values for creation.
// State of the project. Either "open" or "closed". (Optional.)
- State string `json:"state,omitempty"`
+ State *string `json:"state,omitempty"`
+ // The permission level that all members of the project's organization
+ // will have on this project.
+ // Setting the organization permission is only available
+ // for organization projects. (Optional.)
+ OrganizationPermission *string `json:"organization_permission,omitempty"`
+ // Sets visibility of the project within the organization.
+ // Setting visibility is only available
+ // for organization projects.(Optional.)
+ Public *bool `json:"public,omitempty"`
}
// UpdateProject updates a repository project.
@@ -87,8 +97,7 @@ func (s *ProjectsService) UpdateProject(ctx context.Context, id int64, opt *Proj
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
project := &Project{}
resp, err := s.client.Do(ctx, req, project)
@@ -121,7 +130,9 @@ func (s *ProjectsService) DeleteProject(ctx context.Context, id int64) (*Respons
type ProjectColumn struct {
ID *int64 `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
+ URL *string `json:"url,omitempty"`
ProjectURL *string `json:"project_url,omitempty"`
+ CardsURL *string `json:"cards_url,omitempty"`
CreatedAt *Timestamp `json:"created_at,omitempty"`
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
NodeID *string `json:"node_id,omitempty"`
@@ -143,8 +154,7 @@ func (s *ProjectsService) ListProjectColumns(ctx context.Context, projectID int6
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
columns := []*ProjectColumn{}
resp, err := s.client.Do(ctx, req, &columns)
@@ -166,8 +176,7 @@ func (s *ProjectsService) GetProjectColumn(ctx context.Context, id int64) (*Proj
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
column := &ProjectColumn{}
resp, err := s.client.Do(ctx, req, column)
@@ -197,8 +206,7 @@ func (s *ProjectsService) CreateProjectColumn(ctx context.Context, projectID int
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
column := &ProjectColumn{}
resp, err := s.client.Do(ctx, req, column)
@@ -220,8 +228,7 @@ func (s *ProjectsService) UpdateProjectColumn(ctx context.Context, columnID int6
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
column := &ProjectColumn{}
resp, err := s.client.Do(ctx, req, column)
@@ -285,15 +292,26 @@ type ProjectCard struct {
CreatedAt *Timestamp `json:"created_at,omitempty"`
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
NodeID *string `json:"node_id,omitempty"`
+ Archived *bool `json:"archived,omitempty"`
// The following fields are only populated by Webhook events.
ColumnID *int64 `json:"column_id,omitempty"`
}
+// ProjectCardListOptions specifies the optional parameters to the
+// ProjectsService.ListProjectCards method.
+type ProjectCardListOptions struct {
+ // ArchivedState is used to list all, archived, or not_archived project cards.
+ // Defaults to not_archived when you omit this parameter.
+ ArchivedState *string `url:"archived_state,omitempty"`
+
+ ListOptions
+}
+
// ListProjectCards lists the cards in a column of a GitHub Project.
//
// GitHub API docs: https://developer.github.com/v3/projects/cards/#list-project-cards
-func (s *ProjectsService) ListProjectCards(ctx context.Context, columnID int64, opt *ListOptions) ([]*ProjectCard, *Response, error) {
+func (s *ProjectsService) ListProjectCards(ctx context.Context, columnID int64, opt *ProjectCardListOptions) ([]*ProjectCard, *Response, error) {
u := fmt.Sprintf("projects/columns/%v/cards", columnID)
u, err := addOptions(u, opt)
if err != nil {
@@ -306,8 +324,7 @@ func (s *ProjectsService) ListProjectCards(ctx context.Context, columnID int64,
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
cards := []*ProjectCard{}
resp, err := s.client.Do(ctx, req, &cards)
@@ -329,8 +346,7 @@ func (s *ProjectsService) GetProjectCard(ctx context.Context, columnID int64) (*
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
card := &ProjectCard{}
resp, err := s.client.Do(ctx, req, card)
@@ -352,6 +368,9 @@ type ProjectCardOptions struct {
ContentID int64 `json:"content_id,omitempty"`
// The type of content to associate with this card. Possible values are: "Issue".
ContentType string `json:"content_type,omitempty"`
+ // Use true to archive a project card.
+ // Specify false if you need to restore a previously archived project card.
+ Archived *bool `json:"archived,omitempty"`
}
// CreateProjectCard creates a card in the specified column of a GitHub Project.
@@ -365,8 +384,7 @@ func (s *ProjectsService) CreateProjectCard(ctx context.Context, columnID int64,
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
card := &ProjectCard{}
resp, err := s.client.Do(ctx, req, card)
@@ -388,8 +406,7 @@ func (s *ProjectsService) UpdateProjectCard(ctx context.Context, cardID int64, o
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
card := &ProjectCard{}
resp, err := s.client.Do(ctx, req, card)
diff --git a/vendor/github.com/google/go-github/github/pulls.go b/vendor/github.com/google/go-github/github/pulls.go
index 1f34469..a123ec5 100644
--- a/vendor/github.com/google/go-github/github/pulls.go
+++ b/vendor/github.com/google/go-github/github/pulls.go
@@ -62,6 +62,10 @@ type PullRequest struct {
Head *PullRequestBranch `json:"head,omitempty"`
Base *PullRequestBranch `json:"base,omitempty"`
+
+ // ActiveLockReason is populated only when LockReason is provided while locking the pull request.
+ // Possible values are: "off-topic", "too heated", "resolved", and "spam".
+ ActiveLockReason *string `json:"active_lock_reason,omitempty"`
}
func (p PullRequest) String() string {
@@ -119,7 +123,7 @@ func (s *PullRequestsService) List(ctx context.Context, owner string, repo strin
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
+ acceptHeaders := []string{mediaTypeLabelDescriptionSearchPreview, mediaTypeLockReasonPreview}
req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
var pulls []*PullRequest
@@ -142,7 +146,7 @@ func (s *PullRequestsService) Get(ctx context.Context, owner string, repo string
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
+ acceptHeaders := []string{mediaTypeLabelDescriptionSearchPreview, mediaTypeLockReasonPreview}
req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
pull := new(PullRequest)
@@ -201,8 +205,7 @@ func (s *PullRequestsService) Create(ctx context.Context, owner string, repo str
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
p := new(PullRequest)
resp, err := s.client.Do(ctx, req, p)
@@ -251,7 +254,7 @@ func (s *PullRequestsService) Edit(ctx context.Context, owner string, repo strin
}
// TODO: remove custom Accept header when this API fully launches.
- acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview}
+ acceptHeaders := []string{mediaTypeLabelDescriptionSearchPreview, mediaTypeLockReasonPreview}
req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
p := new(PullRequest)
diff --git a/vendor/github.com/google/go-github/github/pulls_comments.go b/vendor/github.com/google/go-github/github/pulls_comments.go
index a7f8ac3..f306776 100644
--- a/vendor/github.com/google/go-github/github/pulls_comments.go
+++ b/vendor/github.com/google/go-github/github/pulls_comments.go
@@ -14,7 +14,7 @@ import (
// PullRequestComment represents a comment left on a pull request.
type PullRequestComment struct {
ID *int64 `json:"id,omitempty"`
- InReplyTo *int64 `json:"in_reply_to,omitempty"`
+ InReplyTo *int64 `json:"in_reply_to_id,omitempty"`
Body *string `json:"body,omitempty"`
Path *string `json:"path,omitempty"`
DiffHunk *string `json:"diff_hunk,omitempty"`
@@ -129,6 +129,32 @@ func (s *PullRequestsService) CreateComment(ctx context.Context, owner string, r
return c, resp, nil
}
+// CreateCommentInReplyTo creates a new comment as a reply to an existing pull request comment.
+//
+// GitHub API docs: https://developer.github.com/v3/pulls/comments/#alternative-input
+func (s *PullRequestsService) CreateCommentInReplyTo(ctx context.Context, owner string, repo string, number int, body string, commentID int64) (*PullRequestComment, *Response, error) {
+ comment := &struct {
+ Body string `json:"body,omitempty"`
+ InReplyTo int64 `json:"in_reply_to,omitempty"`
+ }{
+ Body: body,
+ InReplyTo: commentID,
+ }
+ u := fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number)
+ req, err := s.client.NewRequest("POST", u, comment)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ c := new(PullRequestComment)
+ resp, err := s.client.Do(ctx, req, c)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return c, resp, nil
+}
+
// EditComment updates a pull request comment.
// A non-nil comment.Body must be provided. Other comment fields should be left nil.
//
diff --git a/vendor/github.com/google/go-github/github/reactions.go b/vendor/github.com/google/go-github/github/reactions.go
index 19b533f..97b2818 100644
--- a/vendor/github.com/google/go-github/github/reactions.go
+++ b/vendor/github.com/google/go-github/github/reactions.go
@@ -8,7 +8,6 @@ package github
import (
"context"
"fmt"
- "strings"
)
// ReactionsService provides access to the reactions-related functions in the
@@ -61,8 +60,7 @@ func (s *ReactionsService) ListCommentReactions(ctx context.Context, owner, repo
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeReactionsPreview)
var m []*Reaction
resp, err := s.client.Do(ctx, req, &m)
@@ -88,8 +86,7 @@ func (s ReactionsService) CreateCommentReaction(ctx context.Context, owner, repo
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeReactionsPreview)
m := &Reaction{}
resp, err := s.client.Do(ctx, req, m)
@@ -116,8 +113,7 @@ func (s *ReactionsService) ListIssueReactions(ctx context.Context, owner, repo s
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeReactionsPreview)
var m []*Reaction
resp, err := s.client.Do(ctx, req, &m)
@@ -143,8 +139,7 @@ func (s ReactionsService) CreateIssueReaction(ctx context.Context, owner, repo s
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeReactionsPreview)
m := &Reaction{}
resp, err := s.client.Do(ctx, req, m)
@@ -171,8 +166,7 @@ func (s *ReactionsService) ListIssueCommentReactions(ctx context.Context, owner,
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeReactionsPreview)
var m []*Reaction
resp, err := s.client.Do(ctx, req, &m)
@@ -198,8 +192,7 @@ func (s ReactionsService) CreateIssueCommentReaction(ctx context.Context, owner,
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeReactionsPreview)
m := &Reaction{}
resp, err := s.client.Do(ctx, req, m)
@@ -226,8 +219,7 @@ func (s *ReactionsService) ListPullRequestCommentReactions(ctx context.Context,
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeReactionsPreview)
var m []*Reaction
resp, err := s.client.Do(ctx, req, &m)
@@ -253,8 +245,7 @@ func (s ReactionsService) CreatePullRequestCommentReaction(ctx context.Context,
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeReactionsPreview)
m := &Reaction{}
resp, err := s.client.Do(ctx, req, m)
diff --git a/vendor/github.com/google/go-github/github/repos.go b/vendor/github.com/google/go-github/github/repos.go
index aa9b6ac..fe05272 100644
--- a/vendor/github.com/google/go-github/github/repos.go
+++ b/vendor/github.com/google/go-github/github/repos.go
@@ -20,6 +20,7 @@ type RepositoriesService service
// Repository represents a GitHub repository.
type Repository struct {
ID *int64 `json:"id,omitempty"`
+ NodeID *string `json:"node_id,omitempty"`
Owner *User `json:"owner,omitempty"`
Name *string `json:"name,omitempty"`
FullName *string `json:"full_name,omitempty"`
@@ -178,7 +179,7 @@ func (s *RepositoriesService) List(ctx context.Context, user string, opt *Reposi
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeLicensesPreview, mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview}
+ acceptHeaders := []string{mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview}
req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
var repos []*Repository
@@ -216,7 +217,7 @@ func (s *RepositoriesService) ListByOrg(ctx context.Context, org string, opt *Re
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeLicensesPreview, mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview}
+ acceptHeaders := []string{mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview}
req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
var repos []*Repository
@@ -297,7 +298,7 @@ func (s *RepositoriesService) Get(ctx context.Context, owner, repo string) (*Rep
// TODO: remove custom Accept header when the license support fully launches
// https://developer.github.com/v3/licenses/#get-a-repositorys-license
- acceptHeaders := []string{mediaTypeLicensesPreview, mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview}
+ acceptHeaders := []string{mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview}
req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
repository := new(Repository)
@@ -341,10 +342,6 @@ func (s *RepositoriesService) GetByID(ctx context.Context, id int64) (*Repositor
return nil, nil, err
}
- // TODO: remove custom Accept header when the license support fully launches
- // https://developer.github.com/v3/licenses/#get-a-repositorys-license
- req.Header.Set("Accept", mediaTypeLicensesPreview)
-
repository := new(Repository)
resp, err := s.client.Do(ctx, req, repository)
if err != nil {
@@ -557,6 +554,12 @@ type RequiredStatusChecks struct {
Contexts []string `json:"contexts"`
}
+// RequiredStatusChecksRequest represents a request to edit a protected branch's status checks.
+type RequiredStatusChecksRequest struct {
+ Strict *bool `json:"strict,omitempty"`
+ Contexts []string `json:"contexts,omitempty"`
+}
+
// PullRequestReviewsEnforcement represents the pull request reviews enforcement of a protected branch.
type PullRequestReviewsEnforcement struct {
// Specifies which users and teams can dismiss pull request reviews.
@@ -565,6 +568,9 @@ type PullRequestReviewsEnforcement struct {
DismissStaleReviews bool `json:"dismiss_stale_reviews"`
// RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner.
RequireCodeOwnerReviews bool `json:"require_code_owner_reviews"`
+ // RequiredApprovingReviewCount specifies the number of approvals required before the pull request can be merged.
+ // Valid values are 1-6.
+ RequiredApprovingReviewCount int `json:"required_approving_review_count"`
}
// PullRequestReviewsEnforcementRequest represents request to set the pull request review
@@ -579,6 +585,9 @@ type PullRequestReviewsEnforcementRequest struct {
DismissStaleReviews bool `json:"dismiss_stale_reviews"`
// RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner.
RequireCodeOwnerReviews bool `json:"require_code_owner_reviews"`
+ // RequiredApprovingReviewCount specifies the number of approvals required before the pull request can be merged.
+ // Valid values are 1-6.
+ RequiredApprovingReviewCount int `json:"required_approving_review_count"`
}
// PullRequestReviewsEnforcementUpdate represents request to patch the pull request review
@@ -591,6 +600,9 @@ type PullRequestReviewsEnforcementUpdate struct {
DismissStaleReviews *bool `json:"dismiss_stale_reviews,omitempty"`
// RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner.
RequireCodeOwnerReviews bool `json:"require_code_owner_reviews,omitempty"`
+ // RequiredApprovingReviewCount specifies the number of approvals required before the pull request can be merged.
+ // Valid values are 1 - 6.
+ RequiredApprovingReviewCount int `json:"required_approving_review_count"`
}
// AdminEnforcement represents the configuration to enforce required status checks for repository administrators.
@@ -655,7 +667,7 @@ func (s *RepositoriesService) ListBranches(ctx context.Context, owner string, re
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
var branches []*Branch
resp, err := s.client.Do(ctx, req, &branches)
@@ -677,7 +689,7 @@ func (s *RepositoriesService) GetBranch(ctx context.Context, owner, repo, branch
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
b := new(Branch)
resp, err := s.client.Do(ctx, req, b)
@@ -699,7 +711,7 @@ func (s *RepositoriesService) GetBranchProtection(ctx context.Context, owner, re
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
p := new(Protection)
resp, err := s.client.Do(ctx, req, p)
@@ -721,7 +733,7 @@ func (s *RepositoriesService) GetRequiredStatusChecks(ctx context.Context, owner
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
p := new(RequiredStatusChecks)
resp, err := s.client.Do(ctx, req, p)
@@ -743,7 +755,7 @@ func (s *RepositoriesService) ListRequiredStatusChecksContexts(ctx context.Conte
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
resp, err = s.client.Do(ctx, req, &contexts)
if err != nil {
@@ -764,7 +776,7 @@ func (s *RepositoriesService) UpdateBranchProtection(ctx context.Context, owner,
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
p := new(Protection)
resp, err := s.client.Do(ctx, req, p)
@@ -786,11 +798,30 @@ func (s *RepositoriesService) RemoveBranchProtection(ctx context.Context, owner,
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
return s.client.Do(ctx, req, nil)
}
+// UpdateRequiredStatusChecks updates the required status checks for a given protected branch.
+//
+// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-required-status-checks-of-protected-branch
+func (s *RepositoriesService) UpdateRequiredStatusChecks(ctx context.Context, owner, repo, branch string, sreq *RequiredStatusChecksRequest) (*RequiredStatusChecks, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks", owner, repo, branch)
+ req, err := s.client.NewRequest("PATCH", u, sreq)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ sc := new(RequiredStatusChecks)
+ resp, err := s.client.Do(ctx, req, sc)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return sc, resp, nil
+}
+
// License gets the contents of a repository's license if one is detected.
//
// GitHub API docs: https://developer.github.com/v3/licenses/#get-the-contents-of-a-repositorys-license
@@ -821,7 +852,7 @@ func (s *RepositoriesService) GetPullRequestReviewEnforcement(ctx context.Contex
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
r := new(PullRequestReviewsEnforcement)
resp, err := s.client.Do(ctx, req, r)
@@ -844,7 +875,7 @@ func (s *RepositoriesService) UpdatePullRequestReviewEnforcement(ctx context.Con
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
r := new(PullRequestReviewsEnforcement)
resp, err := s.client.Do(ctx, req, r)
@@ -872,7 +903,7 @@ func (s *RepositoriesService) DisableDismissalRestrictions(ctx context.Context,
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
r := new(PullRequestReviewsEnforcement)
resp, err := s.client.Do(ctx, req, r)
@@ -894,7 +925,7 @@ func (s *RepositoriesService) RemovePullRequestReviewEnforcement(ctx context.Con
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
return s.client.Do(ctx, req, nil)
}
@@ -910,7 +941,7 @@ func (s *RepositoriesService) GetAdminEnforcement(ctx context.Context, owner, re
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
r := new(AdminEnforcement)
resp, err := s.client.Do(ctx, req, r)
@@ -933,7 +964,7 @@ func (s *RepositoriesService) AddAdminEnforcement(ctx context.Context, owner, re
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
r := new(AdminEnforcement)
resp, err := s.client.Do(ctx, req, r)
@@ -955,7 +986,7 @@ func (s *RepositoriesService) RemoveAdminEnforcement(ctx context.Context, owner,
}
// TODO: remove custom Accept header when this API fully launches
- req.Header.Set("Accept", mediaTypeProtectedBranchesPreview)
+ req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
return s.client.Do(ctx, req, nil)
}
@@ -1018,7 +1049,7 @@ func (s *RepositoriesService) ReplaceAllTopics(ctx context.Context, owner, repo
// TransferRequest represents a request to transfer a repository.
type TransferRequest struct {
NewOwner string `json:"new_owner"`
- TeamID []int64 `json:"team_id,omitempty"`
+ TeamID []int64 `json:"team_ids,omitempty"`
}
// Transfer transfers a repository from one account or organization to another.
diff --git a/vendor/github.com/google/go-github/github/repos_commits.go b/vendor/github.com/google/go-github/github/repos_commits.go
index 0484737..04faa3e 100644
--- a/vendor/github.com/google/go-github/github/repos_commits.go
+++ b/vendor/github.com/google/go-github/github/repos_commits.go
@@ -218,7 +218,7 @@ func (s *RepositoriesService) GetCommitSHA1(ctx context.Context, owner, repo, re
// CompareCommits compares a range of commits with each other.
// todo: support media formats - https://github.com/google/go-github/issues/6
//
-// GitHub API docs: https://developer.github.com/v3/repos/commits/index.html#compare-two-commits
+// GitHub API docs: https://developer.github.com/v3/repos/commits/#compare-two-commits
func (s *RepositoriesService) CompareCommits(ctx context.Context, owner, repo string, base, head string) (*CommitsComparison, *Response, error) {
u := fmt.Sprintf("repos/%v/%v/compare/%v...%v", owner, repo, base, head)
diff --git a/vendor/github.com/google/go-github/github/repos_community_health.go b/vendor/github.com/google/go-github/github/repos_community_health.go
index b5c75d6..73d1d57 100644
--- a/vendor/github.com/google/go-github/github/repos_community_health.go
+++ b/vendor/github.com/google/go-github/github/repos_community_health.go
@@ -21,10 +21,12 @@ type Metric struct {
// CommunityHealthFiles represents the different files in the community health metrics response.
type CommunityHealthFiles struct {
- CodeOfConduct *Metric `json:"code_of_conduct"`
- Contributing *Metric `json:"contributing"`
- License *Metric `json:"license"`
- Readme *Metric `json:"readme"`
+ CodeOfConduct *Metric `json:"code_of_conduct"`
+ Contributing *Metric `json:"contributing"`
+ IssueTemplate *Metric `json:"issue_template"`
+ PullRequestTemplate *Metric `json:"pull_request_template"`
+ License *Metric `json:"license"`
+ Readme *Metric `json:"readme"`
}
// CommunityHealthMetrics represents a response containing the community metrics of a repository.
diff --git a/vendor/github.com/google/go-github/github/repos_deployments.go b/vendor/github.com/google/go-github/github/repos_deployments.go
index 1300f05..794c323 100644
--- a/vendor/github.com/google/go-github/github/repos_deployments.go
+++ b/vendor/github.com/google/go-github/github/repos_deployments.go
@@ -9,7 +9,6 @@ import (
"context"
"encoding/json"
"fmt"
- "strings"
)
// Deployment represents a deployment in a repo
@@ -76,9 +75,6 @@ func (s *RepositoriesService) ListDeployments(ctx context.Context, owner, repo s
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var deployments []*Deployment
resp, err := s.client.Do(ctx, req, &deployments)
if err != nil {
@@ -99,9 +95,6 @@ func (s *RepositoriesService) GetDeployment(ctx context.Context, owner, repo str
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
deployment := new(Deployment)
resp, err := s.client.Do(ctx, req, deployment)
if err != nil {
@@ -123,8 +116,7 @@ func (s *RepositoriesService) CreateDeployment(ctx context.Context, owner, repo
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeDeploymentStatusPreview)
d := new(Deployment)
resp, err := s.client.Do(ctx, req, d)
@@ -176,9 +168,6 @@ func (s *RepositoriesService) ListDeploymentStatuses(ctx context.Context, owner,
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var statuses []*DeploymentStatus
resp, err := s.client.Do(ctx, req, &statuses)
if err != nil {
@@ -200,8 +189,7 @@ func (s *RepositoriesService) GetDeploymentStatus(ctx context.Context, owner, re
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeDeploymentStatusPreview)
d := new(DeploymentStatus)
resp, err := s.client.Do(ctx, req, d)
@@ -224,8 +212,7 @@ func (s *RepositoriesService) CreateDeploymentStatus(ctx context.Context, owner,
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeDeploymentStatusPreview)
d := new(DeploymentStatus)
resp, err := s.client.Do(ctx, req, d)
diff --git a/vendor/github.com/google/go-github/github/repos_hooks.go b/vendor/github.com/google/go-github/github/repos_hooks.go
index f7ab3a1..1e9e884 100644
--- a/vendor/github.com/google/go-github/github/repos_hooks.go
+++ b/vendor/github.com/google/go-github/github/repos_hooks.go
@@ -136,9 +136,13 @@ func (s *RepositoriesService) GetHook(ctx context.Context, owner, repo string, i
if err != nil {
return nil, nil, err
}
- hook := new(Hook)
- resp, err := s.client.Do(ctx, req, hook)
- return hook, resp, err
+ h := new(Hook)
+ resp, err := s.client.Do(ctx, req, h)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return h, resp, nil
}
// EditHook updates a specified Hook.
@@ -152,7 +156,11 @@ func (s *RepositoriesService) EditHook(ctx context.Context, owner, repo string,
}
h := new(Hook)
resp, err := s.client.Do(ctx, req, h)
- return h, resp, err
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return h, resp, nil
}
// DeleteHook deletes a specified Hook.
diff --git a/vendor/github.com/google/go-github/github/repos_prereceive_hooks.go b/vendor/github.com/google/go-github/github/repos_prereceive_hooks.go
new file mode 100644
index 0000000..cab09f7
--- /dev/null
+++ b/vendor/github.com/google/go-github/github/repos_prereceive_hooks.go
@@ -0,0 +1,110 @@
+// Copyright 2018 The go-github 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 github
+
+import (
+ "context"
+ "fmt"
+)
+
+// PreReceiveHook represents a GitHub pre-receive hook for a repository.
+type PreReceiveHook struct {
+ ID *int64 `json:"id,omitempty"`
+ Name *string `json:"name,omitempty"`
+ Enforcement *string `json:"enforcement,omitempty"`
+ ConfigURL *string `json:"configuration_url,omitempty"`
+}
+
+func (p PreReceiveHook) String() string {
+ return Stringify(p)
+}
+
+// ListPreReceiveHooks lists all pre-receive hooks for the specified repository.
+//
+// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#list-pre-receive-hooks
+func (s *RepositoriesService) ListPreReceiveHooks(ctx context.Context, owner, repo string, opt *ListOptions) ([]*PreReceiveHook, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks", owner, repo)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
+
+ var hooks []*PreReceiveHook
+ resp, err := s.client.Do(ctx, req, &hooks)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return hooks, resp, nil
+}
+
+// GetPreReceiveHook returns a single specified pre-receive hook.
+//
+// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#get-a-single-pre-receive-hook
+func (s *RepositoriesService) GetPreReceiveHook(ctx context.Context, owner, repo string, id int64) (*PreReceiveHook, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks/%d", owner, repo, id)
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
+
+ h := new(PreReceiveHook)
+ resp, err := s.client.Do(ctx, req, h)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return h, resp, nil
+}
+
+// UpdatePreReceiveHook updates a specified pre-receive hook.
+//
+// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#update-pre-receive-hook-enforcement
+func (s *RepositoriesService) UpdatePreReceiveHook(ctx context.Context, owner, repo string, id int64, hook *PreReceiveHook) (*PreReceiveHook, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks/%d", owner, repo, id)
+ req, err := s.client.NewRequest("PATCH", u, hook)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
+
+ h := new(PreReceiveHook)
+ resp, err := s.client.Do(ctx, req, h)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return h, resp, nil
+}
+
+// DeletePreReceiveHook deletes a specified pre-receive hook.
+//
+// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#remove-enforcement-overrides-for-a-pre-receive-hook
+func (s *RepositoriesService) DeletePreReceiveHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks/%d", owner, repo, id)
+ req, err := s.client.NewRequest("DELETE", u, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
+
+ return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/github/repos_projects.go b/vendor/github.com/google/go-github/github/repos_projects.go
index 97a045f..d6486d2 100644
--- a/vendor/github.com/google/go-github/github/repos_projects.go
+++ b/vendor/github.com/google/go-github/github/repos_projects.go
@@ -8,7 +8,6 @@ package github
import (
"context"
"fmt"
- "strings"
)
// ProjectListOptions specifies the optional parameters to the
@@ -36,8 +35,7 @@ func (s *RepositoriesService) ListProjects(ctx context.Context, owner, repo stri
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
var projects []*Project
resp, err := s.client.Do(ctx, req, &projects)
@@ -59,8 +57,7 @@ func (s *RepositoriesService) CreateProject(ctx context.Context, owner, repo str
}
// TODO: remove custom Accept headers when APIs fully launch.
- acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview}
- req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+ req.Header.Set("Accept", mediaTypeProjectsPreview)
project := &Project{}
resp, err := s.client.Do(ctx, req, project)
diff --git a/vendor/github.com/google/go-github/github/repos_releases.go b/vendor/github.com/google/go-github/github/repos_releases.go
index d5dfc70..c23601d 100644
--- a/vendor/github.com/google/go-github/github/repos_releases.go
+++ b/vendor/github.com/google/go-github/github/repos_releases.go
@@ -79,9 +79,6 @@ func (s *RepositoriesService) ListReleases(ctx context.Context, owner, repo stri
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var releases []*RepositoryRelease
resp, err := s.client.Do(ctx, req, &releases)
if err != nil {
@@ -120,9 +117,6 @@ func (s *RepositoriesService) getSingleRelease(ctx context.Context, url string)
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
release := new(RepositoryRelease)
resp, err := s.client.Do(ctx, req, release)
if err != nil {
@@ -142,9 +136,6 @@ func (s *RepositoriesService) CreateRelease(ctx context.Context, owner, repo str
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
r := new(RepositoryRelease)
resp, err := s.client.Do(ctx, req, r)
if err != nil {
@@ -164,9 +155,6 @@ func (s *RepositoriesService) EditRelease(ctx context.Context, owner, repo strin
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
r := new(RepositoryRelease)
resp, err := s.client.Do(ctx, req, r)
if err != nil {
@@ -203,9 +191,6 @@ func (s *RepositoriesService) ListReleaseAssets(ctx context.Context, owner, repo
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
var assets []*ReleaseAsset
resp, err := s.client.Do(ctx, req, &assets)
if err != nil {
@@ -225,9 +210,6 @@ func (s *RepositoriesService) GetReleaseAsset(ctx context.Context, owner, repo s
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
asset := new(ReleaseAsset)
resp, err := s.client.Do(ctx, req, asset)
if err != nil {
@@ -292,9 +274,6 @@ func (s *RepositoriesService) EditReleaseAsset(ctx context.Context, owner, repo
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
asset := new(ReleaseAsset)
resp, err := s.client.Do(ctx, req, asset)
if err != nil {
@@ -341,9 +320,6 @@ func (s *RepositoriesService) UploadReleaseAsset(ctx context.Context, owner, rep
return nil, nil, err
}
- // TODO: remove custom Accept header when this API fully launches.
- req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview)
-
asset := new(ReleaseAsset)
resp, err := s.client.Do(ctx, req, asset)
if err != nil {
diff --git a/vendor/github.com/google/go-github/github/search.go b/vendor/github.com/google/go-github/github/search.go
index 6e0000d..abaf5e1 100644
--- a/vendor/github.com/google/go-github/github/search.go
+++ b/vendor/github.com/google/go-github/github/search.go
@@ -8,7 +8,9 @@ package github
import (
"context"
"fmt"
+ "net/url"
"strconv"
+ "strings"
qs "github.com/google/go-querystring/query"
)
@@ -221,11 +223,15 @@ func (s *SearchService) search(ctx context.Context, searchType string, parameter
if err != nil {
return nil, err
}
- params.Set("q", parameters.Query)
+ q := strings.Replace(parameters.Query, " ", "+", -1)
if parameters.RepositoryID != nil {
params.Set("repository_id", strconv.FormatInt(*parameters.RepositoryID, 10))
}
- u := fmt.Sprintf("search/%s?%s", searchType, params.Encode())
+ query := "q=" + url.PathEscape(q)
+ if v := params.Encode(); v != "" {
+ query = query + "&" + v
+ }
+ u := fmt.Sprintf("search/%s?%s", searchType, query)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
diff --git a/vendor/github.com/google/go-github/github/teams.go b/vendor/github.com/google/go-github/github/teams.go
index 1021d53..c3773e0 100644
--- a/vendor/github.com/google/go-github/github/teams.go
+++ b/vendor/github.com/google/go-github/github/teams.go
@@ -1,7 +1,357 @@
+// Copyright 2018 The go-github 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 github
+import (
+ "context"
+ "fmt"
+ "strings"
+ "time"
+)
+
// TeamsService provides access to the team-related functions
// in the GitHub API.
//
// GitHub API docs: https://developer.github.com/v3/teams/
type TeamsService service
+
+// Team represents a team within a GitHub organization. Teams are used to
+// manage access to an organization's repositories.
+type Team struct {
+ ID *int64 `json:"id,omitempty"`
+ Name *string `json:"name,omitempty"`
+ Description *string `json:"description,omitempty"`
+ URL *string `json:"url,omitempty"`
+ Slug *string `json:"slug,omitempty"`
+
+ // Permission specifies the default permission for repositories owned by the team.
+ Permission *string `json:"permission,omitempty"`
+
+ // Privacy identifies the level of privacy this team should have.
+ // Possible values are:
+ // secret - only visible to organization owners and members of this team
+ // closed - visible to all members of this organization
+ // Default is "secret".
+ Privacy *string `json:"privacy,omitempty"`
+
+ MembersCount *int `json:"members_count,omitempty"`
+ ReposCount *int `json:"repos_count,omitempty"`
+ Organization *Organization `json:"organization,omitempty"`
+ MembersURL *string `json:"members_url,omitempty"`
+ RepositoriesURL *string `json:"repositories_url,omitempty"`
+ Parent *Team `json:"parent,omitempty"`
+
+ // LDAPDN is only available in GitHub Enterprise and when the team
+ // membership is synchronized with LDAP.
+ LDAPDN *string `json:"ldap_dn,omitempty"`
+}
+
+func (t Team) String() string {
+ return Stringify(t)
+}
+
+// Invitation represents a team member's invitation status.
+type Invitation struct {
+ ID *int64 `json:"id,omitempty"`
+ Login *string `json:"login,omitempty"`
+ Email *string `json:"email,omitempty"`
+ // Role can be one of the values - 'direct_member', 'admin', 'billing_manager', 'hiring_manager', or 'reinstate'.
+ Role *string `json:"role,omitempty"`
+ CreatedAt *time.Time `json:"created_at,omitempty"`
+ Inviter *User `json:"inviter,omitempty"`
+ TeamCount *int `json:"team_count,omitempty"`
+ InvitationTeamURL *string `json:"invitation_team_url,omitempty"`
+}
+
+func (i Invitation) String() string {
+ return Stringify(i)
+}
+
+// ListTeams lists all of the teams for an organization.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/#list-teams
+func (s *TeamsService) ListTeams(ctx context.Context, org string, opt *ListOptions) ([]*Team, *Response, error) {
+ u := fmt.Sprintf("orgs/%v/teams", org)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
+
+ var teams []*Team
+ resp, err := s.client.Do(ctx, req, &teams)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return teams, resp, nil
+}
+
+// GetTeam fetches a team by ID.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/#get-team
+func (s *TeamsService) GetTeam(ctx context.Context, team int64) (*Team, *Response, error) {
+ u := fmt.Sprintf("teams/%v", team)
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
+
+ t := new(Team)
+ resp, err := s.client.Do(ctx, req, t)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return t, resp, nil
+}
+
+// NewTeam represents a team to be created or modified.
+type NewTeam struct {
+ Name string `json:"name"` // Name of the team. (Required.)
+ Description *string `json:"description,omitempty"`
+ Maintainers []string `json:"maintainers,omitempty"`
+ RepoNames []string `json:"repo_names,omitempty"`
+ ParentTeamID *int64 `json:"parent_team_id,omitempty"`
+
+ // Deprecated: Permission is deprecated when creating or editing a team in an org
+ // using the new GitHub permission model. It no longer identifies the
+ // permission a team has on its repos, but only specifies the default
+ // permission a repo is initially added with. Avoid confusion by
+ // specifying a permission value when calling AddTeamRepo.
+ Permission *string `json:"permission,omitempty"`
+
+ // Privacy identifies the level of privacy this team should have.
+ // Possible values are:
+ // secret - only visible to organization owners and members of this team
+ // closed - visible to all members of this organization
+ // Default is "secret".
+ Privacy *string `json:"privacy,omitempty"`
+
+ // LDAPDN may be used in GitHub Enterprise when the team membership
+ // is synchronized with LDAP.
+ LDAPDN *string `json:"ldap_dn,omitempty"`
+}
+
+func (s NewTeam) String() string {
+ return Stringify(s)
+}
+
+// CreateTeam creates a new team within an organization.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/#create-team
+func (s *TeamsService) CreateTeam(ctx context.Context, org string, team NewTeam) (*Team, *Response, error) {
+ u := fmt.Sprintf("orgs/%v/teams", org)
+ req, err := s.client.NewRequest("POST", u, team)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
+
+ t := new(Team)
+ resp, err := s.client.Do(ctx, req, t)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return t, resp, nil
+}
+
+// EditTeam edits a team.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/#edit-team
+func (s *TeamsService) EditTeam(ctx context.Context, id int64, team NewTeam) (*Team, *Response, error) {
+ u := fmt.Sprintf("teams/%v", id)
+ req, err := s.client.NewRequest("PATCH", u, team)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
+
+ t := new(Team)
+ resp, err := s.client.Do(ctx, req, t)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return t, resp, nil
+}
+
+// DeleteTeam deletes a team.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/#delete-team
+func (s *TeamsService) DeleteTeam(ctx context.Context, team int64) (*Response, error) {
+ u := fmt.Sprintf("teams/%v", team)
+ req, err := s.client.NewRequest("DELETE", u, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
+
+ return s.client.Do(ctx, req, nil)
+}
+
+// ListChildTeams lists child teams for a team.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/#list-child-teams
+func (s *TeamsService) ListChildTeams(ctx context.Context, teamID int64, opt *ListOptions) ([]*Team, *Response, error) {
+ u := fmt.Sprintf("teams/%v/teams", teamID)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
+
+ var teams []*Team
+ resp, err := s.client.Do(ctx, req, &teams)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return teams, resp, nil
+}
+
+// ListTeamRepos lists the repositories that the specified team has access to.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/#list-team-repos
+func (s *TeamsService) ListTeamRepos(ctx context.Context, team int64, opt *ListOptions) ([]*Repository, *Response, error) {
+ u := fmt.Sprintf("teams/%v/repos", team)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when topics API fully launches.
+ headers := []string{mediaTypeTopicsPreview, mediaTypeNestedTeamsPreview}
+ req.Header.Set("Accept", strings.Join(headers, ", "))
+
+ var repos []*Repository
+ resp, err := s.client.Do(ctx, req, &repos)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return repos, resp, nil
+}
+
+// IsTeamRepo checks if a team manages the specified repository. If the
+// repository is managed by team, a Repository is returned which includes the
+// permissions team has for that repo.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/#check-if-a-team-manages-a-repository
+func (s *TeamsService) IsTeamRepo(ctx context.Context, team int64, owner string, repo string) (*Repository, *Response, error) {
+ u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo)
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ headers := []string{mediaTypeOrgPermissionRepo, mediaTypeNestedTeamsPreview}
+ req.Header.Set("Accept", strings.Join(headers, ", "))
+
+ repository := new(Repository)
+ resp, err := s.client.Do(ctx, req, repository)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return repository, resp, nil
+}
+
+// TeamAddTeamRepoOptions specifies the optional parameters to the
+// TeamsService.AddTeamRepo method.
+type TeamAddTeamRepoOptions struct {
+ // Permission specifies the permission to grant the team on this repository.
+ // Possible values are:
+ // pull - team members can pull, but not push to or administer this repository
+ // push - team members can pull and push, but not administer this repository
+ // admin - team members can pull, push and administer this repository
+ //
+ // If not specified, the team's permission attribute will be used.
+ Permission string `json:"permission,omitempty"`
+}
+
+// AddTeamRepo adds a repository to be managed by the specified team. The
+// specified repository must be owned by the organization to which the team
+// belongs, or a direct fork of a repository owned by the organization.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/#add-team-repo
+func (s *TeamsService) AddTeamRepo(ctx context.Context, team int64, owner string, repo string, opt *TeamAddTeamRepoOptions) (*Response, error) {
+ u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo)
+ req, err := s.client.NewRequest("PUT", u, opt)
+ if err != nil {
+ return nil, err
+ }
+
+ return s.client.Do(ctx, req, nil)
+}
+
+// RemoveTeamRepo removes a repository from being managed by the specified
+// team. Note that this does not delete the repository, it just removes it
+// from the team.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/#remove-team-repo
+func (s *TeamsService) RemoveTeamRepo(ctx context.Context, team int64, owner string, repo string) (*Response, error) {
+ u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo)
+ req, err := s.client.NewRequest("DELETE", u, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ return s.client.Do(ctx, req, nil)
+}
+
+// ListUserTeams lists a user's teams
+// GitHub API docs: https://developer.github.com/v3/teams/#list-user-teams
+func (s *TeamsService) ListUserTeams(ctx context.Context, opt *ListOptions) ([]*Team, *Response, error) {
+ u := "user/teams"
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
+
+ var teams []*Team
+ resp, err := s.client.Do(ctx, req, &teams)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return teams, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/github/teams_discussion_comments.go b/vendor/github.com/google/go-github/github/teams_discussion_comments.go
index 26d0e8c..383d559 100644
--- a/vendor/github.com/google/go-github/github/teams_discussion_comments.go
+++ b/vendor/github.com/google/go-github/github/teams_discussion_comments.go
@@ -21,7 +21,7 @@ type DiscussionComment struct {
DiscussionURL *string `json:"discussion_url,omitempty"`
HTMLURL *string `json:"html_url,omitempty"`
NodeID *string `json:"node_id,omitempty"`
- Number *int64 `json:"number,omitempty"`
+ Number *int `json:"number,omitempty"`
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
URL *string `json:"url,omitempty"`
}
diff --git a/vendor/github.com/google/go-github/github/teams_discussions.go b/vendor/github.com/google/go-github/github/teams_discussions.go
index fc9b25a..5db06d1 100644
--- a/vendor/github.com/google/go-github/github/teams_discussions.go
+++ b/vendor/github.com/google/go-github/github/teams_discussions.go
@@ -16,13 +16,13 @@ type TeamDiscussion struct {
Body *string `json:"body,omitempty"`
BodyHTML *string `json:"body_html,omitempty"`
BodyVersion *string `json:"body_version,omitempty"`
- CommentsCount *int64 `json:"comments_count,omitempty"`
+ CommentsCount *int `json:"comments_count,omitempty"`
CommentsURL *string `json:"comments_url,omitempty"`
CreatedAt *Timestamp `json:"created_at,omitempty"`
LastEditedAt *Timestamp `json:"last_edited_at,omitempty"`
HTMLURL *string `json:"html_url,omitempty"`
NodeID *string `json:"node_id,omitempty"`
- Number *int64 `json:"number,omitempty"`
+ Number *int `json:"number,omitempty"`
Pinned *bool `json:"pinned,omitempty"`
Private *bool `json:"private,omitempty"`
TeamURL *string `json:"team_url,omitempty"`
diff --git a/vendor/github.com/google/go-github/github/teams_members.go b/vendor/github.com/google/go-github/github/teams_members.go
new file mode 100644
index 0000000..d5cfa0d
--- /dev/null
+++ b/vendor/github.com/google/go-github/github/teams_members.go
@@ -0,0 +1,174 @@
+// Copyright 2018 The go-github 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 github
+
+import (
+ "context"
+ "fmt"
+)
+
+// TeamListTeamMembersOptions specifies the optional parameters to the
+// TeamsService.ListTeamMembers method.
+type TeamListTeamMembersOptions struct {
+ // Role filters members returned by their role in the team. Possible
+ // values are "all", "member", "maintainer". Default is "all".
+ Role string `url:"role,omitempty"`
+
+ ListOptions
+}
+
+// ListTeamMembers lists all of the users who are members of the specified
+// team.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/members/#list-team-members
+func (s *TeamsService) ListTeamMembers(ctx context.Context, team int64, opt *TeamListTeamMembersOptions) ([]*User, *Response, error) {
+ u := fmt.Sprintf("teams/%v/members", team)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
+
+ var members []*User
+ resp, err := s.client.Do(ctx, req, &members)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return members, resp, nil
+}
+
+// IsTeamMember checks if a user is a member of the specified team.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/members/#get-team-member
+//
+// Deprecated: This API has been marked as deprecated in the Github API docs,
+// TeamsService.GetTeamMembership method should be used instead.
+func (s *TeamsService) IsTeamMember(ctx context.Context, team int64, user string) (bool, *Response, error) {
+ u := fmt.Sprintf("teams/%v/members/%v", team, user)
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return false, nil, err
+ }
+
+ resp, err := s.client.Do(ctx, req, nil)
+ member, err := parseBoolResponse(err)
+ return member, resp, err
+}
+
+// GetTeamMembership returns the membership status for a user in a team.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/members/#get-team-membership
+func (s *TeamsService) GetTeamMembership(ctx context.Context, team int64, user string) (*Membership, *Response, error) {
+ u := fmt.Sprintf("teams/%v/memberships/%v", team, user)
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req.Header.Set("Accept", mediaTypeNestedTeamsPreview)
+
+ t := new(Membership)
+ resp, err := s.client.Do(ctx, req, t)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return t, resp, nil
+}
+
+// TeamAddTeamMembershipOptions specifies the optional
+// parameters to the TeamsService.AddTeamMembership method.
+type TeamAddTeamMembershipOptions struct {
+ // Role specifies the role the user should have in the team. Possible
+ // values are:
+ // member - a normal member of the team
+ // maintainer - a team maintainer. Able to add/remove other team
+ // members, promote other team members to team
+ // maintainer, and edit the team’s name and description
+ //
+ // Default value is "member".
+ Role string `json:"role,omitempty"`
+}
+
+// AddTeamMembership adds or invites a user to a team.
+//
+// In order to add a membership between a user and a team, the authenticated
+// user must have 'admin' permissions to the team or be an owner of the
+// organization that the team is associated with.
+//
+// If the user is already a part of the team's organization (meaning they're on
+// at least one other team in the organization), this endpoint will add the
+// user to the team.
+//
+// If the user is completely unaffiliated with the team's organization (meaning
+// they're on none of the organization's teams), this endpoint will send an
+// invitation to the user via email. This newly-created membership will be in
+// the "pending" state until the user accepts the invitation, at which point
+// the membership will transition to the "active" state and the user will be
+// added as a member of the team.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/members/#add-or-update-team-membership
+func (s *TeamsService) AddTeamMembership(ctx context.Context, team int64, user string, opt *TeamAddTeamMembershipOptions) (*Membership, *Response, error) {
+ u := fmt.Sprintf("teams/%v/memberships/%v", team, user)
+ req, err := s.client.NewRequest("PUT", u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ t := new(Membership)
+ resp, err := s.client.Do(ctx, req, t)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return t, resp, nil
+}
+
+// RemoveTeamMembership removes a user from a team.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/members/#remove-team-membership
+func (s *TeamsService) RemoveTeamMembership(ctx context.Context, team int64, user string) (*Response, error) {
+ u := fmt.Sprintf("teams/%v/memberships/%v", team, user)
+ req, err := s.client.NewRequest("DELETE", u, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ return s.client.Do(ctx, req, nil)
+}
+
+// ListPendingTeamInvitations get pending invitaion list in team.
+// Warning: The API may change without advance notice during the preview period.
+// Preview features are not supported for production use.
+//
+// GitHub API docs: https://developer.github.com/v3/teams/members/#list-pending-team-invitations
+func (s *TeamsService) ListPendingTeamInvitations(ctx context.Context, team int64, opt *ListOptions) ([]*Invitation, *Response, error) {
+ u := fmt.Sprintf("teams/%v/invitations", team)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var pendingInvitations []*Invitation
+ resp, err := s.client.Do(ctx, req, &pendingInvitations)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return pendingInvitations, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/github/timestamp.go b/vendor/github.com/google/go-github/github/timestamp.go
index a1c1554..90929d5 100644
--- a/vendor/github.com/google/go-github/github/timestamp.go
+++ b/vendor/github.com/google/go-github/github/timestamp.go
@@ -28,9 +28,9 @@ func (t *Timestamp) UnmarshalJSON(data []byte) (err error) {
str := string(data)
i, err := strconv.ParseInt(str, 10, 64)
if err == nil {
- (*t).Time = time.Unix(i, 0)
+ t.Time = time.Unix(i, 0)
} else {
- (*t).Time, err = time.Parse(`"`+time.RFC3339+`"`, str)
+ t.Time, err = time.Parse(`"`+time.RFC3339+`"`, str)
}
return
}
diff --git a/vendor/github.com/google/go-github/github/users.go b/vendor/github.com/google/go-github/github/users.go
index 8c4efe1..f164d55 100644
--- a/vendor/github.com/google/go-github/github/users.go
+++ b/vendor/github.com/google/go-github/github/users.go
@@ -20,6 +20,7 @@ type UsersService service
type User struct {
Login *string `json:"login,omitempty"`
ID *int64 `json:"id,omitempty"`
+ NodeID *string `json:"node_id,omitempty"`
AvatarURL *string `json:"avatar_url,omitempty"`
HTMLURL *string `json:"html_url,omitempty"`
GravatarID *string `json:"gravatar_id,omitempty"`
@@ -134,6 +135,56 @@ func (s *UsersService) Edit(ctx context.Context, user *User) (*User, *Response,
return uResp, resp, nil
}
+// HovercardOptions specifies optional parameters to the UsersService.GetHovercard
+// method.
+type HovercardOptions struct {
+ // SubjectType specifies the additional information to be received about the hovercard.
+ // Possible values are: organization, repository, issue, pull_request. (Required when using subject_id.)
+ SubjectType string `url:"subject_type"`
+
+ // SubjectID specifies the ID for the SubjectType. (Required when using subject_type.)
+ SubjectID string `url:"subject_id"`
+}
+
+// Hovercard represents hovercard information about a user.
+type Hovercard struct {
+ Contexts []*UserContext `json:"contexts,omitempty"`
+}
+
+// UserContext represents the contextual information about user.
+type UserContext struct {
+ Message *string `json:"message,omitempty"`
+ Octicon *string `json:"octicon,omitempty"`
+}
+
+// GetHovercard fetches contextual information about user. It requires authentication
+// via Basic Auth or via OAuth with the repo scope.
+//
+// GitHub API docs: https://developer.github.com/v3/users/#get-contextual-information-about-a-user
+func (s *UsersService) GetHovercard(ctx context.Context, user string, opt *HovercardOptions) (*Hovercard, *Response, error) {
+ u := fmt.Sprintf("users/%v/hovercard", user)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeHovercardPreview)
+
+ hc := new(Hovercard)
+ resp, err := s.client.Do(ctx, req, hc)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return hc, resp, nil
+}
+
// UserListOptions specifies optional parameters to the UsersService.ListAll
// method.
type UserListOptions struct {
diff --git a/vendor/github.com/google/go-github/github/with_appengine.go b/vendor/github.com/google/go-github/github/with_appengine.go
deleted file mode 100644
index 59ce26b..0000000
--- a/vendor/github.com/google/go-github/github/with_appengine.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build appengine
-
-// This file provides glue for making github work on App Engine.
-
-package github
-
-import (
- "context"
- "net/http"
-)
-
-func withContext(ctx context.Context, req *http.Request) *http.Request {
- // No-op because App Engine adds context to a request differently.
- return req
-}
diff --git a/vendor/github.com/googleapis/gax-go/CODE_OF_CONDUCT.md b/vendor/github.com/googleapis/gax-go/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..46b2a08
--- /dev/null
+++ b/vendor/github.com/googleapis/gax-go/CODE_OF_CONDUCT.md
@@ -0,0 +1,43 @@
+# Contributor Code of Conduct
+
+As contributors and maintainers of this project,
+and in the interest of fostering an open and welcoming community,
+we pledge to respect all people who contribute through reporting issues,
+posting feature requests, updating documentation,
+submitting pull requests or patches, and other activities.
+
+We are committed to making participation in this project
+a harassment-free experience for everyone,
+regardless of level of experience, gender, gender identity and expression,
+sexual orientation, disability, personal appearance,
+body size, race, ethnicity, age, religion, or nationality.
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery
+* Personal attacks
+* Trolling or insulting/derogatory comments
+* Public or private harassment
+* Publishing other's private information,
+such as physical or electronic
+addresses, without explicit permission
+* Other unethical or unprofessional conduct.
+
+Project maintainers have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct.
+By adopting this Code of Conduct,
+project maintainers commit themselves to fairly and consistently
+applying these principles to every aspect of managing this project.
+Project maintainers who do not follow or enforce the Code of Conduct
+may be permanently removed from the project team.
+
+This code of conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community.
+
+Instances of abusive, harassing, or otherwise unacceptable behavior
+may be reported by opening an issue
+or contacting one or more of the project maintainers.
+
+This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,
+available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)
diff --git a/vendor/github.com/gorilla/csrf/README.md b/vendor/github.com/gorilla/csrf/README.md
index 75e8525..6bcca60 100644
--- a/vendor/github.com/gorilla/csrf/README.md
+++ b/vendor/github.com/gorilla/csrf/README.md
@@ -1,26 +1,27 @@
# gorilla/csrf
+
[![GoDoc](https://godoc.org/github.com/gorilla/csrf?status.svg)](https://godoc.org/github.com/gorilla/csrf) [![Build Status](https://travis-ci.org/gorilla/csrf.svg?branch=master)](https://travis-ci.org/gorilla/csrf) [![Sourcegraph](https://sourcegraph.com/github.com/gorilla/csrf/-/badge.svg)](https://sourcegraph.com/github.com/gorilla/csrf?badge)
gorilla/csrf is a HTTP middleware library that provides [cross-site request
forgery](http://blog.codinghorror.com/preventing-csrf-and-xsrf-attacks/) (CSRF)
- protection. It includes:
+protection. It includes:
-* The `csrf.Protect` middleware/handler provides CSRF protection on routes
+- The `csrf.Protect` middleware/handler provides CSRF protection on routes
attached to a router or a sub-router.
-* A `csrf.Token` function that provides the token to pass into your response,
+- A `csrf.Token` function that provides the token to pass into your response,
whether that be a HTML form or a JSON response body.
-* ... and a `csrf.TemplateField` helper that you can pass into your `html/template`
+- ... and a `csrf.TemplateField` helper that you can pass into your `html/template`
templates to replace a `{{ .csrfField }}` template tag with a hidden input
field.
gorilla/csrf is designed to work with any Go web framework, including:
-* The [Gorilla](http://www.gorillatoolkit.org/) toolkit
-* Go's built-in [net/http](http://golang.org/pkg/net/http/) package
-* [Goji](https://goji.io) - see the [tailored fork](https://github.com/goji/csrf)
-* [Gin](https://github.com/gin-gonic/gin)
-* [Echo](https://github.com/labstack/echo)
-* ... and any other router/framework that rallies around Go's `http.Handler` interface.
+- The [Gorilla](http://www.gorillatoolkit.org/) toolkit
+- Go's built-in [net/http](http://golang.org/pkg/net/http/) package
+- [Goji](https://goji.io) - see the [tailored fork](https://github.com/goji/csrf)
+- [Gin](https://github.com/gin-gonic/gin)
+- [Echo](https://github.com/labstack/echo)
+- ... and any other router/framework that rallies around Go's `http.Handler` interface.
gorilla/csrf is also compatible with middleware 'helper' libraries like
[Alice](https://github.com/justinas/alice) and [Negroni](https://github.com/codegangsta/negroni).
@@ -28,16 +29,17 @@ gorilla/csrf is also compatible with middleware 'helper' libraries like
## Install
With a properly configured Go toolchain:
+
```sh
go get github.com/gorilla/csrf
```
## Examples
-* [HTML Forms](#html-forms)
-* [JavaScript Apps](#javascript-applications)
-* [Google App Engine](#google-app-engine)
-* [Setting Options](#setting-options)
+- [HTML Forms](#html-forms)
+- [JavaScript Apps](#javascript-applications)
+- [Google App Engine](#google-app-engine)
+- [Setting Options](#setting-options)
gorilla/csrf is easy to use: add the middleware to your router with
the below:
@@ -77,7 +79,10 @@ func main() {
r := mux.NewRouter()
r.HandleFunc("/signup", ShowSignupForm)
// All POST requests without a valid token will return HTTP 403 Forbidden.
- r.HandleFunc("/signup/post", SubmitSignupForm)
+ // We should also ensure that our mutating (non-idempotent) handler only
+ // matches on POST requests. We can check that here, at the router level, or
+ // within the handler itself via r.Method.
+ r.HandleFunc("/signup/post", SubmitSignupForm).Methods("POST")
// Add the middleware to your router by wrapping it.
http.ListenAndServe(":8000",
@@ -207,22 +212,22 @@ added, open an issue.
Getting CSRF protection right is important, so here's some background:
-* This library generates unique-per-request (masked) tokens as a mitigation
+- This library generates unique-per-request (masked) tokens as a mitigation
against the [BREACH attack](http://breachattack.com/).
-* The 'base' (unmasked) token is stored in the session, which means that
+- The 'base' (unmasked) token is stored in the session, which means that
multiple browser tabs won't cause a user problems as their per-request token
is compared with the base token.
-* Operates on a "whitelist only" approach where safe (non-mutating) HTTP methods
- (GET, HEAD, OPTIONS, TRACE) are the *only* methods where token validation is not
+- Operates on a "whitelist only" approach where safe (non-mutating) HTTP methods
+ (GET, HEAD, OPTIONS, TRACE) are the _only_ methods where token validation is not
enforced.
-* The design is based on the battle-tested
+- The design is based on the battle-tested
[Django](https://docs.djangoproject.com/en/1.8/ref/csrf/) and [Ruby on
Rails](http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html)
approaches.
-* Cookies are authenticated and based on the [securecookie](https://github.com/gorilla/securecookie)
+- Cookies are authenticated and based on the [securecookie](https://github.com/gorilla/securecookie)
library. They're also Secure (issued over HTTPS only) and are HttpOnly
by default, because sane defaults are important.
-* Go's `crypto/rand` library is used to generate the 32 byte (256 bit) tokens
+- Go's `crypto/rand` library is used to generate the 32 byte (256 bit) tokens
and the one-time-pad used for masking them.
This library does not seek to be adventurous.
diff --git a/vendor/github.com/gorilla/csrf/doc.go b/vendor/github.com/gorilla/csrf/doc.go
index 3046cdc..503c948 100644
--- a/vendor/github.com/gorilla/csrf/doc.go
+++ b/vendor/github.com/gorilla/csrf/doc.go
@@ -71,7 +71,10 @@ in order to protect malicious POST requests being made:
r := mux.NewRouter()
r.HandleFunc("/signup", ShowSignupForm)
// All POST requests without a valid token will return HTTP 403 Forbidden.
- r.HandleFunc("/signup/post", SubmitSignupForm)
+ // We should also ensure that our mutating (non-idempotent) handler only
+ // matches on POST requests. We can check that here, at the router level, or
+ // within the handler itself via r.Method.
+ r.HandleFunc("/signup/post", SubmitSignupForm).Methods("POST")
// Add the middleware to your router by wrapping it.
http.ListenAndServe(":8000",
diff --git a/vendor/github.com/gorilla/handlers/cors.go b/vendor/github.com/gorilla/handlers/cors.go
index 16efb8a..1acf80d 100644
--- a/vendor/github.com/gorilla/handlers/cors.go
+++ b/vendor/github.com/gorilla/handlers/cors.go
@@ -119,7 +119,7 @@ func (ch *cors) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} else {
for _, o := range ch.allowedOrigins {
// A configuration of * is different than explicitly setting an allowed
- // origin. Returning arbitrary origin headers an an access control allow
+ // origin. Returning arbitrary origin headers in an access control allow
// origin header is unsafe and is not required by any use case.
if o == corsOriginMatchAll {
returnOrigin = "*"
diff --git a/vendor/github.com/gorilla/handlers/handlers.go b/vendor/github.com/gorilla/handlers/handlers.go
index 75db7f8..d03f2bf 100644
--- a/vendor/github.com/gorilla/handlers/handlers.go
+++ b/vendor/github.com/gorilla/handlers/handlers.go
@@ -7,15 +7,10 @@ package handlers
import (
"bufio"
"fmt"
- "io"
"net"
"net/http"
- "net/url"
"sort"
- "strconv"
"strings"
- "time"
- "unicode/utf8"
)
// MethodHandler is an http.Handler that dispatches to a handler whose key in the
@@ -48,59 +43,6 @@ func (h MethodHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
}
}
-// loggingHandler is the http.Handler implementation for LoggingHandlerTo and its
-// friends
-type loggingHandler struct {
- writer io.Writer
- handler http.Handler
-}
-
-// combinedLoggingHandler is the http.Handler implementation for LoggingHandlerTo
-// and its friends
-type combinedLoggingHandler struct {
- writer io.Writer
- handler http.Handler
-}
-
-func (h loggingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
- t := time.Now()
- logger := makeLogger(w)
- url := *req.URL
- h.handler.ServeHTTP(logger, req)
- writeLog(h.writer, req, url, t, logger.Status(), logger.Size())
-}
-
-func (h combinedLoggingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
- t := time.Now()
- logger := makeLogger(w)
- url := *req.URL
- h.handler.ServeHTTP(logger, req)
- writeCombinedLog(h.writer, req, url, t, logger.Status(), logger.Size())
-}
-
-func makeLogger(w http.ResponseWriter) loggingResponseWriter {
- var logger loggingResponseWriter = &responseLogger{w: w, status: http.StatusOK}
- if _, ok := w.(http.Hijacker); ok {
- logger = &hijackLogger{responseLogger{w: w, status: http.StatusOK}}
- }
- h, ok1 := logger.(http.Hijacker)
- c, ok2 := w.(http.CloseNotifier)
- if ok1 && ok2 {
- return hijackCloseNotifier{logger, h, c}
- }
- if ok2 {
- return &closeNotifyWriter{logger, c}
- }
- return logger
-}
-
-type commonLoggingResponseWriter interface {
- http.ResponseWriter
- http.Flusher
- Status() int
- Size() int
-}
-
// responseLogger is wrapper of http.ResponseWriter that keeps track of its HTTP
// status code and body size
type responseLogger struct {
@@ -165,173 +107,6 @@ type hijackCloseNotifier struct {
http.CloseNotifier
}
-const lowerhex = "0123456789abcdef"
-
-func appendQuoted(buf []byte, s string) []byte {
- var runeTmp [utf8.UTFMax]byte
- for width := 0; len(s) > 0; s = s[width:] {
- r := rune(s[0])
- width = 1
- if r >= utf8.RuneSelf {
- r, width = utf8.DecodeRuneInString(s)
- }
- if width == 1 && r == utf8.RuneError {
- buf = append(buf, `\x`...)
- buf = append(buf, lowerhex[s[0]>>4])
- buf = append(buf, lowerhex[s[0]&0xF])
- continue
- }
- if r == rune('"') || r == '\\' { // always backslashed
- buf = append(buf, '\\')
- buf = append(buf, byte(r))
- continue
- }
- if strconv.IsPrint(r) {
- n := utf8.EncodeRune(runeTmp[:], r)
- buf = append(buf, runeTmp[:n]...)
- continue
- }
- switch r {
- case '\a':
- buf = append(buf, `\a`...)
- case '\b':
- buf = append(buf, `\b`...)
- case '\f':
- buf = append(buf, `\f`...)
- case '\n':
- buf = append(buf, `\n`...)
- case '\r':
- buf = append(buf, `\r`...)
- case '\t':
- buf = append(buf, `\t`...)
- case '\v':
- buf = append(buf, `\v`...)
- default:
- switch {
- case r < ' ':
- buf = append(buf, `\x`...)
- buf = append(buf, lowerhex[s[0]>>4])
- buf = append(buf, lowerhex[s[0]&0xF])
- case r > utf8.MaxRune:
- r = 0xFFFD
- fallthrough
- case r < 0x10000:
- buf = append(buf, `\u`...)
- for s := 12; s >= 0; s -= 4 {
- buf = append(buf, lowerhex[r>>uint(s)&0xF])
- }
- default:
- buf = append(buf, `\U`...)
- for s := 28; s >= 0; s -= 4 {
- buf = append(buf, lowerhex[r>>uint(s)&0xF])
- }
- }
- }
- }
- return buf
-
-}
-
-// buildCommonLogLine builds a log entry for req in Apache Common Log Format.
-// ts is the timestamp with which the entry should be logged.
-// status and size are used to provide the response HTTP status and size.
-func buildCommonLogLine(req *http.Request, url url.URL, ts time.Time, status int, size int) []byte {
- username := "-"
- if url.User != nil {
- if name := url.User.Username(); name != "" {
- username = name
- }
- }
-
- host, _, err := net.SplitHostPort(req.RemoteAddr)
-
- if err != nil {
- host = req.RemoteAddr
- }
-
- uri := req.RequestURI
-
- // Requests using the CONNECT method over HTTP/2.0 must use
- // the authority field (aka r.Host) to identify the target.
- // Refer: https://httpwg.github.io/specs/rfc7540.html#CONNECT
- if req.ProtoMajor == 2 && req.Method == "CONNECT" {
- uri = req.Host
- }
- if uri == "" {
- uri = url.RequestURI()
- }
-
- buf := make([]byte, 0, 3*(len(host)+len(username)+len(req.Method)+len(uri)+len(req.Proto)+50)/2)
- buf = append(buf, host...)
- buf = append(buf, " - "...)
- buf = append(buf, username...)
- buf = append(buf, " ["...)
- buf = append(buf, ts.Format("02/Jan/2006:15:04:05 -0700")...)
- buf = append(buf, `] "`...)
- buf = append(buf, req.Method...)
- buf = append(buf, " "...)
- buf = appendQuoted(buf, uri)
- buf = append(buf, " "...)
- buf = append(buf, req.Proto...)
- buf = append(buf, `" `...)
- buf = append(buf, strconv.Itoa(status)...)
- buf = append(buf, " "...)
- buf = append(buf, strconv.Itoa(size)...)
- return buf
-}
-
-// writeLog writes a log entry for req to w in Apache Common Log Format.
-// ts is the timestamp with which the entry should be logged.
-// status and size are used to provide the response HTTP status and size.
-func writeLog(w io.Writer, req *http.Request, url url.URL, ts time.Time, status, size int) {
- buf := buildCommonLogLine(req, url, ts, status, size)
- buf = append(buf, '\n')
- w.Write(buf)
-}
-
-// writeCombinedLog writes a log entry for req to w in Apache Combined Log Format.
-// ts is the timestamp with which the entry should be logged.
-// status and size are used to provide the response HTTP status and size.
-func writeCombinedLog(w io.Writer, req *http.Request, url url.URL, ts time.Time, status, size int) {
- buf := buildCommonLogLine(req, url, ts, status, size)
- buf = append(buf, ` "`...)
- buf = appendQuoted(buf, req.Referer())
- buf = append(buf, `" "`...)
- buf = appendQuoted(buf, req.UserAgent())
- buf = append(buf, '"', '\n')
- w.Write(buf)
-}
-
-// CombinedLoggingHandler return a http.Handler that wraps h and logs requests to out in
-// Apache Combined Log Format.
-//
-// See http://httpd.apache.org/docs/2.2/logs.html#combined for a description of this format.
-//
-// LoggingHandler always sets the ident field of the log to -
-func CombinedLoggingHandler(out io.Writer, h http.Handler) http.Handler {
- return combinedLoggingHandler{out, h}
-}
-
-// LoggingHandler return a http.Handler that wraps h and logs requests to out in
-// Apache Common Log Format (CLF).
-//
-// See http://httpd.apache.org/docs/2.2/logs.html#common for a description of this format.
-//
-// LoggingHandler always sets the ident field of the log to -
-//
-// Example:
-//
-// r := mux.NewRouter()
-// r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
-// w.Write([]byte("This is a catch-all route"))
-// })
-// loggedRouter := handlers.LoggingHandler(os.Stdout, r)
-// http.ListenAndServe(":1123", loggedRouter)
-//
-func LoggingHandler(out io.Writer, h http.Handler) http.Handler {
- return loggingHandler{out, h}
-}
-
// isContentType validates the Content-Type header matches the supplied
// contentType. That is, its type and subtype match.
func isContentType(h http.Header, contentType string) bool {
diff --git a/vendor/github.com/gorilla/handlers/logging.go b/vendor/github.com/gorilla/handlers/logging.go
new file mode 100644
index 0000000..cbd182f
--- /dev/null
+++ b/vendor/github.com/gorilla/handlers/logging.go
@@ -0,0 +1,252 @@
+// Copyright 2013 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 handlers
+
+import (
+ "io"
+ "net"
+ "net/http"
+ "net/url"
+ "strconv"
+ "time"
+ "unicode/utf8"
+)
+
+// Logging
+
+// FormatterParams is the structure any formatter will be handed when time to log comes
+type LogFormatterParams struct {
+ Request *http.Request
+ URL url.URL
+ TimeStamp time.Time
+ StatusCode int
+ Size int
+}
+
+// LogFormatter gives the signature of the formatter function passed to CustomLoggingHandler
+type LogFormatter func(writer io.Writer, params LogFormatterParams)
+
+// loggingHandler is the http.Handler implementation for LoggingHandlerTo and its
+// friends
+
+type loggingHandler struct {
+ writer io.Writer
+ handler http.Handler
+ formatter LogFormatter
+}
+
+func (h loggingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+ t := time.Now()
+ logger := makeLogger(w)
+ url := *req.URL
+
+ h.handler.ServeHTTP(logger, req)
+
+ params := LogFormatterParams{
+ Request: req,
+ URL: url,
+ TimeStamp: t,
+ StatusCode: logger.Status(),
+ Size: logger.Size(),
+ }
+
+ h.formatter(h.writer, params)
+}
+
+func makeLogger(w http.ResponseWriter) loggingResponseWriter {
+ var logger loggingResponseWriter = &responseLogger{w: w, status: http.StatusOK}
+ if _, ok := w.(http.Hijacker); ok {
+ logger = &hijackLogger{responseLogger{w: w, status: http.StatusOK}}
+ }
+ h, ok1 := logger.(http.Hijacker)
+ c, ok2 := w.(http.CloseNotifier)
+ if ok1 && ok2 {
+ return hijackCloseNotifier{logger, h, c}
+ }
+ if ok2 {
+ return &closeNotifyWriter{logger, c}
+ }
+ return logger
+}
+
+type commonLoggingResponseWriter interface {
+ http.ResponseWriter
+ http.Flusher
+ Status() int
+ Size() int
+}
+
+const lowerhex = "0123456789abcdef"
+
+func appendQuoted(buf []byte, s string) []byte {
+ var runeTmp [utf8.UTFMax]byte
+ for width := 0; len(s) > 0; s = s[width:] {
+ r := rune(s[0])
+ width = 1
+ if r >= utf8.RuneSelf {
+ r, width = utf8.DecodeRuneInString(s)
+ }
+ if width == 1 && r == utf8.RuneError {
+ buf = append(buf, `\x`...)
+ buf = append(buf, lowerhex[s[0]>>4])
+ buf = append(buf, lowerhex[s[0]&0xF])
+ continue
+ }
+ if r == rune('"') || r == '\\' { // always backslashed
+ buf = append(buf, '\\')
+ buf = append(buf, byte(r))
+ continue
+ }
+ if strconv.IsPrint(r) {
+ n := utf8.EncodeRune(runeTmp[:], r)
+ buf = append(buf, runeTmp[:n]...)
+ continue
+ }
+ switch r {
+ case '\a':
+ buf = append(buf, `\a`...)
+ case '\b':
+ buf = append(buf, `\b`...)
+ case '\f':
+ buf = append(buf, `\f`...)
+ case '\n':
+ buf = append(buf, `\n`...)
+ case '\r':
+ buf = append(buf, `\r`...)
+ case '\t':
+ buf = append(buf, `\t`...)
+ case '\v':
+ buf = append(buf, `\v`...)
+ default:
+ switch {
+ case r < ' ':
+ buf = append(buf, `\x`...)
+ buf = append(buf, lowerhex[s[0]>>4])
+ buf = append(buf, lowerhex[s[0]&0xF])
+ case r > utf8.MaxRune:
+ r = 0xFFFD
+ fallthrough
+ case r < 0x10000:
+ buf = append(buf, `\u`...)
+ for s := 12; s >= 0; s -= 4 {
+ buf = append(buf, lowerhex[r>>uint(s)&0xF])
+ }
+ default:
+ buf = append(buf, `\U`...)
+ for s := 28; s >= 0; s -= 4 {
+ buf = append(buf, lowerhex[r>>uint(s)&0xF])
+ }
+ }
+ }
+ }
+ return buf
+
+}
+
+// buildCommonLogLine builds a log entry for req in Apache Common Log Format.
+// ts is the timestamp with which the entry should be logged.
+// status and size are used to provide the response HTTP status and size.
+func buildCommonLogLine(req *http.Request, url url.URL, ts time.Time, status int, size int) []byte {
+ username := "-"
+ if url.User != nil {
+ if name := url.User.Username(); name != "" {
+ username = name
+ }
+ }
+
+ host, _, err := net.SplitHostPort(req.RemoteAddr)
+
+ if err != nil {
+ host = req.RemoteAddr
+ }
+
+ uri := req.RequestURI
+
+ // Requests using the CONNECT method over HTTP/2.0 must use
+ // the authority field (aka r.Host) to identify the target.
+ // Refer: https://httpwg.github.io/specs/rfc7540.html#CONNECT
+ if req.ProtoMajor == 2 && req.Method == "CONNECT" {
+ uri = req.Host
+ }
+ if uri == "" {
+ uri = url.RequestURI()
+ }
+
+ buf := make([]byte, 0, 3*(len(host)+len(username)+len(req.Method)+len(uri)+len(req.Proto)+50)/2)
+ buf = append(buf, host...)
+ buf = append(buf, " - "...)
+ buf = append(buf, username...)
+ buf = append(buf, " ["...)
+ buf = append(buf, ts.Format("02/Jan/2006:15:04:05 -0700")...)
+ buf = append(buf, `] "`...)
+ buf = append(buf, req.Method...)
+ buf = append(buf, " "...)
+ buf = appendQuoted(buf, uri)
+ buf = append(buf, " "...)
+ buf = append(buf, req.Proto...)
+ buf = append(buf, `" `...)
+ buf = append(buf, strconv.Itoa(status)...)
+ buf = append(buf, " "...)
+ buf = append(buf, strconv.Itoa(size)...)
+ return buf
+}
+
+// writeLog writes a log entry for req to w in Apache Common Log Format.
+// ts is the timestamp with which the entry should be logged.
+// status and size are used to provide the response HTTP status and size.
+func writeLog(writer io.Writer, params LogFormatterParams) {
+ buf := buildCommonLogLine(params.Request, params.URL, params.TimeStamp, params.StatusCode, params.Size)
+ buf = append(buf, '\n')
+ writer.Write(buf)
+}
+
+// writeCombinedLog writes a log entry for req to w in Apache Combined Log Format.
+// ts is the timestamp with which the entry should be logged.
+// status and size are used to provide the response HTTP status and size.
+func writeCombinedLog(writer io.Writer, params LogFormatterParams) {
+ buf := buildCommonLogLine(params.Request, params.URL, params.TimeStamp, params.StatusCode, params.Size)
+ buf = append(buf, ` "`...)
+ buf = appendQuoted(buf, params.Request.Referer())
+ buf = append(buf, `" "`...)
+ buf = appendQuoted(buf, params.Request.UserAgent())
+ buf = append(buf, '"', '\n')
+ writer.Write(buf)
+}
+
+// CombinedLoggingHandler return a http.Handler that wraps h and logs requests to out in
+// Apache Combined Log Format.
+//
+// See http://httpd.apache.org/docs/2.2/logs.html#combined for a description of this format.
+//
+// LoggingHandler always sets the ident field of the log to -
+func CombinedLoggingHandler(out io.Writer, h http.Handler) http.Handler {
+ return loggingHandler{out, h, writeCombinedLog}
+}
+
+// LoggingHandler return a http.Handler that wraps h and logs requests to out in
+// Apache Common Log Format (CLF).
+//
+// See http://httpd.apache.org/docs/2.2/logs.html#common for a description of this format.
+//
+// LoggingHandler always sets the ident field of the log to -
+//
+// Example:
+//
+// r := mux.NewRouter()
+// r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+// w.Write([]byte("This is a catch-all route"))
+// })
+// loggedRouter := handlers.LoggingHandler(os.Stdout, r)
+// http.ListenAndServe(":1123", loggedRouter)
+//
+func LoggingHandler(out io.Writer, h http.Handler) http.Handler {
+ return loggingHandler{out, h, writeLog}
+}
+
+// CustomLoggingHandler provides a way to supply a custom log formatter
+// while taking advantage of the mechanisms in this package
+func CustomLoggingHandler(out io.Writer, h http.Handler, f LogFormatter) http.Handler {
+ return loggingHandler{out, h, f}
+}
diff --git a/vendor/github.com/gorilla/mux/route.go b/vendor/github.com/gorilla/mux/route.go
index a591d73..c8bb5c7 100644
--- a/vendor/github.com/gorilla/mux/route.go
+++ b/vendor/github.com/gorilla/mux/route.go
@@ -137,7 +137,7 @@ func (r *Route) GetHandler() http.Handler {
// Name -----------------------------------------------------------------------
// Name sets the name for the route, used to build URLs.
-// If the name was registered already it will be overwritten.
+// 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",
diff --git a/vendor/github.com/hashicorp/errwrap/README.md b/vendor/github.com/hashicorp/errwrap/README.md
index 1c95f59..444df08 100644
--- a/vendor/github.com/hashicorp/errwrap/README.md
+++ b/vendor/github.com/hashicorp/errwrap/README.md
@@ -48,7 +48,7 @@ func main() {
// We can use the Contains helpers to check if an error contains
// another error. It is safe to do this with a nil error, or with
// an error that doesn't even use the errwrap package.
- if errwrap.Contains(err, ErrNotExist) {
+ if errwrap.Contains(err, "does not exist") {
// Do something
}
if errwrap.ContainsType(err, new(os.PathError)) {
diff --git a/vendor/github.com/hashicorp/go-multierror/format.go b/vendor/github.com/hashicorp/go-multierror/format.go
index 6c7a3cc..47f13c4 100644
--- a/vendor/github.com/hashicorp/go-multierror/format.go
+++ b/vendor/github.com/hashicorp/go-multierror/format.go
@@ -13,7 +13,7 @@ type ErrorFormatFunc func([]error) string
// that occurred along with a bullet point list of the errors.
func ListFormatFunc(es []error) string {
if len(es) == 1 {
- return fmt.Sprintf("1 error occurred:\n\n* %s", es[0])
+ return fmt.Sprintf("1 error occurred:\n\t* %s\n\n", es[0])
}
points := make([]string, len(es))
@@ -22,6 +22,6 @@ func ListFormatFunc(es []error) string {
}
return fmt.Sprintf(
- "%d errors occurred:\n\n%s",
- len(es), strings.Join(points, "\n"))
+ "%d errors occurred:\n\t%s\n\n",
+ len(es), strings.Join(points, "\n\t"))
}
diff --git a/vendor/github.com/hashicorp/go-multierror/sort.go b/vendor/github.com/hashicorp/go-multierror/sort.go
new file mode 100644
index 0000000..fecb14e
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/sort.go
@@ -0,0 +1,16 @@
+package multierror
+
+// Len implements sort.Interface function for length
+func (err Error) Len() int {
+ return len(err.Errors)
+}
+
+// Swap implements sort.Interface function for swapping elements
+func (err Error) Swap(i, j int) {
+ err.Errors[i], err.Errors[j] = err.Errors[j], err.Errors[i]
+}
+
+// Less implements sort.Interface function for determining order
+func (err Error) Less(i, j int) bool {
+ return err.Errors[i].Error() < err.Errors[j].Error()
+}
diff --git a/vendor/github.com/hashicorp/go-retryablehttp/client.go b/vendor/github.com/hashicorp/go-retryablehttp/client.go
index c016939..21f45e5 100644
--- a/vendor/github.com/hashicorp/go-retryablehttp/client.go
+++ b/vendor/github.com/hashicorp/go-retryablehttp/client.go
@@ -23,6 +23,7 @@ package retryablehttp
import (
"bytes"
+ "context"
"fmt"
"io"
"io/ioutil"
@@ -73,6 +74,13 @@ type Request struct {
*http.Request
}
+// WithContext returns wrapped Request with a shallow copy of underlying *http.Request
+// with its context changed to ctx. The provided ctx must be non-nil.
+func (r *Request) WithContext(ctx context.Context) *Request {
+ r.Request = r.Request.WithContext(ctx)
+ return r
+}
+
// NewRequest creates a new wrapped request.
func NewRequest(method, url string, rawBody interface{}) (*Request, error) {
var err error
@@ -196,7 +204,7 @@ type ResponseLogHook func(*log.Logger, *http.Response)
// Client will close any response body when retrying, but if the retry is
// aborted it is up to the CheckResponse callback to properly close any
// response body before returning.
-type CheckRetry func(resp *http.Response, err error) (bool, error)
+type CheckRetry func(ctx context.Context, resp *http.Response, err error) (bool, error)
// Backoff specifies a policy for how long to wait between retries.
// It is called after a failing request to determine the amount of time
@@ -253,7 +261,12 @@ func NewClient() *Client {
// DefaultRetryPolicy provides a default callback for Client.CheckRetry, which
// will retry on connection errors and server errors.
-func DefaultRetryPolicy(resp *http.Response, err error) (bool, error) {
+func DefaultRetryPolicy(ctx context.Context, resp *http.Response, err error) (bool, error) {
+ // do not retry on context.Canceled or context.DeadlineExceeded
+ if ctx.Err() != nil {
+ return false, ctx.Err()
+ }
+
if err != nil {
return true, err
}
@@ -361,7 +374,7 @@ func (c *Client) Do(req *Request) (*http.Response, error) {
}
// Check if we should continue with retries.
- checkOK, checkErr := c.CheckRetry(resp, err)
+ checkOK, checkErr := c.CheckRetry(req.Request.Context(), resp, err)
if err != nil {
if c.Logger != nil {
diff --git a/vendor/github.com/hashicorp/vault/api/auth_token.go b/vendor/github.com/hashicorp/vault/api/auth_token.go
index 4f74f61..c66fba3 100644
--- a/vendor/github.com/hashicorp/vault/api/auth_token.go
+++ b/vendor/github.com/hashicorp/vault/api/auth_token.go
@@ -1,5 +1,7 @@
package api
+import "context"
+
// TokenAuth is used to perform token backend operations on Vault
type TokenAuth struct {
c *Client
@@ -16,7 +18,9 @@ func (c *TokenAuth) Create(opts *TokenCreateRequest) (*Secret, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -31,7 +35,9 @@ func (c *TokenAuth) CreateOrphan(opts *TokenCreateRequest) (*Secret, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -46,7 +52,9 @@ func (c *TokenAuth) CreateWithRole(opts *TokenCreateRequest, roleName string) (*
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -63,7 +71,9 @@ func (c *TokenAuth) Lookup(token string) (*Secret, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -79,7 +89,10 @@ func (c *TokenAuth) LookupAccessor(accessor string) (*Secret, error) {
}); err != nil {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -91,7 +104,9 @@ func (c *TokenAuth) LookupAccessor(accessor string) (*Secret, error) {
func (c *TokenAuth) LookupSelf() (*Secret, error) {
r := c.c.NewRequest("GET", "/v1/auth/token/lookup-self")
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -109,7 +124,9 @@ func (c *TokenAuth) Renew(token string, increment int) (*Secret, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -126,7 +143,9 @@ func (c *TokenAuth) RenewSelf(increment int) (*Secret, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -146,7 +165,9 @@ func (c *TokenAuth) RenewTokenAsSelf(token string, increment int) (*Secret, erro
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -164,7 +185,10 @@ func (c *TokenAuth) RevokeAccessor(accessor string) error {
}); err != nil {
return err
}
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return err
}
@@ -183,7 +207,9 @@ func (c *TokenAuth) RevokeOrphan(token string) error {
return err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return err
}
@@ -197,7 +223,10 @@ func (c *TokenAuth) RevokeOrphan(token string) error {
// an effect.
func (c *TokenAuth) RevokeSelf(token string) error {
r := c.c.NewRequest("PUT", "/v1/auth/token/revoke-self")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return err
}
@@ -217,7 +246,9 @@ func (c *TokenAuth) RevokeTree(token string) error {
return err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return err
}
diff --git a/vendor/github.com/hashicorp/vault/api/client.go b/vendor/github.com/hashicorp/vault/api/client.go
index 8f0d3f8..c7ced82 100644
--- a/vendor/github.com/hashicorp/vault/api/client.go
+++ b/vendor/github.com/hashicorp/vault/api/client.go
@@ -19,6 +19,7 @@ import (
"github.com/hashicorp/go-cleanhttp"
retryablehttp "github.com/hashicorp/go-retryablehttp"
"github.com/hashicorp/go-rootcerts"
+ "github.com/hashicorp/vault/helper/consts"
"github.com/hashicorp/vault/helper/parseutil"
"golang.org/x/net/http2"
"golang.org/x/time/rate"
@@ -464,6 +465,19 @@ func (c *Client) SetMFACreds(creds []string) {
c.mfaCreds = creds
}
+// SetNamespace sets the namespace supplied either via the environment
+// variable or via the command line.
+func (c *Client) SetNamespace(namespace string) {
+ c.modifyLock.Lock()
+ defer c.modifyLock.Unlock()
+
+ if c.headers == nil {
+ c.headers = make(http.Header)
+ }
+
+ c.headers.Set(consts.NamespaceHeaderName, namespace)
+}
+
// Token returns the access token being used by this client. It will
// return the empty string if there is no token set.
func (c *Client) Token() string {
@@ -490,6 +504,26 @@ func (c *Client) ClearToken() {
c.token = ""
}
+// Headers gets the current set of headers used for requests. This returns a
+// copy; to modify it make modifications locally and use SetHeaders.
+func (c *Client) Headers() http.Header {
+ c.modifyLock.RLock()
+ defer c.modifyLock.RUnlock()
+
+ if c.headers == nil {
+ return nil
+ }
+
+ ret := make(http.Header)
+ for k, v := range c.headers {
+ for _, val := range v {
+ ret[k] = append(ret[k], val)
+ }
+ }
+
+ return ret
+}
+
// SetHeaders sets the headers to be used for future requests.
func (c *Client) SetHeaders(headers http.Header) {
c.modifyLock.Lock()
@@ -608,6 +642,13 @@ func (c *Client) NewRequest(method, requestPath string) *Request {
// a Vault server not configured with this client. This is an advanced operation
// that generally won't need to be called externally.
func (c *Client) RawRequest(r *Request) (*Response, error) {
+ return c.RawRequestWithContext(context.Background(), r)
+}
+
+// RawRequestWithContext performs the raw request given. This request may be against
+// a Vault server not configured with this client. This is an advanced operation
+// that generally won't need to be called externally.
+func (c *Client) RawRequestWithContext(ctx context.Context, r *Request) (*Response, error) {
c.modifyLock.RLock()
token := c.token
@@ -622,7 +663,7 @@ func (c *Client) RawRequest(r *Request) (*Response, error) {
c.modifyLock.RUnlock()
if limiter != nil {
- limiter.Wait(context.Background())
+ limiter.Wait(ctx)
}
// Sanity check the token before potentially erroring from the API
@@ -643,13 +684,10 @@ START:
return nil, fmt.Errorf("nil request created")
}
- // Set the timeout, if any
- var cancelFunc context.CancelFunc
if timeout != 0 {
- var ctx context.Context
- ctx, cancelFunc = context.WithTimeout(context.Background(), timeout)
- req.Request = req.Request.WithContext(ctx)
+ ctx, _ = context.WithTimeout(ctx, timeout)
}
+ req.Request = req.Request.WithContext(ctx)
if backoff == nil {
backoff = retryablehttp.LinearJitterBackoff
@@ -667,9 +705,6 @@ START:
var result *Response
resp, err := client.Do(req)
- if cancelFunc != nil {
- cancelFunc()
- }
if resp != nil {
result = &Response{Response: resp}
}
diff --git a/vendor/github.com/hashicorp/vault/api/help.go b/vendor/github.com/hashicorp/vault/api/help.go
index b9ae100..472ca03 100644
--- a/vendor/github.com/hashicorp/vault/api/help.go
+++ b/vendor/github.com/hashicorp/vault/api/help.go
@@ -1,6 +1,7 @@
package api
import (
+ "context"
"fmt"
)
@@ -8,7 +9,10 @@ import (
func (c *Client) Help(path string) (*Help, error) {
r := c.NewRequest("GET", fmt.Sprintf("/v1/%s", path))
r.Params.Add("help", "1")
- resp, err := c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/hashicorp/vault/api/logical.go b/vendor/github.com/hashicorp/vault/api/logical.go
index 346a711..d13daac 100644
--- a/vendor/github.com/hashicorp/vault/api/logical.go
+++ b/vendor/github.com/hashicorp/vault/api/logical.go
@@ -2,8 +2,10 @@ package api
import (
"bytes"
+ "context"
"fmt"
"io"
+ "net/url"
"os"
"github.com/hashicorp/errwrap"
@@ -45,8 +47,29 @@ func (c *Client) Logical() *Logical {
}
func (c *Logical) Read(path string) (*Secret, error) {
+ return c.ReadWithData(path, nil)
+}
+
+func (c *Logical) ReadWithData(path string, data map[string][]string) (*Secret, error) {
r := c.c.NewRequest("GET", "/v1/"+path)
- resp, err := c.c.RawRequest(r)
+
+ var values url.Values
+ for k, v := range data {
+ if values == nil {
+ values = make(url.Values)
+ }
+ for _, val := range v {
+ values.Add(k, val)
+ }
+ }
+
+ if values != nil {
+ r.Params = values
+ }
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if resp != nil {
defer resp.Body.Close()
}
@@ -77,7 +100,10 @@ func (c *Logical) List(path string) (*Secret, error) {
// handle the wrapping lookup function
r.Method = "GET"
r.Params.Set("list", "true")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if resp != nil {
defer resp.Body.Close()
}
@@ -108,7 +134,9 @@ func (c *Logical) Write(path string, data map[string]interface{}) (*Secret, erro
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if resp != nil {
defer resp.Body.Close()
}
@@ -129,16 +157,15 @@ func (c *Logical) Write(path string, data map[string]interface{}) (*Secret, erro
return nil, err
}
- if resp.StatusCode == 200 {
- return ParseSecret(resp.Body)
- }
-
- return nil, nil
+ return ParseSecret(resp.Body)
}
func (c *Logical) Delete(path string) (*Secret, error) {
r := c.c.NewRequest("DELETE", "/v1/"+path)
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if resp != nil {
defer resp.Body.Close()
}
@@ -159,11 +186,7 @@ func (c *Logical) Delete(path string) (*Secret, error) {
return nil, err
}
- if resp.StatusCode == 200 {
- return ParseSecret(resp.Body)
- }
-
- return nil, nil
+ return ParseSecret(resp.Body)
}
func (c *Logical) Unwrap(wrappingToken string) (*Secret, error) {
@@ -183,7 +206,9 @@ func (c *Logical) Unwrap(wrappingToken string) (*Secret, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if resp != nil {
defer resp.Body.Close()
}
diff --git a/vendor/github.com/hashicorp/vault/api/secret.go b/vendor/github.com/hashicorp/vault/api/secret.go
index b6517c4..e259626 100644
--- a/vendor/github.com/hashicorp/vault/api/secret.go
+++ b/vendor/github.com/hashicorp/vault/api/secret.go
@@ -1,6 +1,7 @@
package api
import (
+ "bytes"
"fmt"
"io"
"time"
@@ -298,9 +299,20 @@ type SecretAuth struct {
// ParseSecret is used to parse a secret value from JSON from an io.Reader.
func ParseSecret(r io.Reader) (*Secret, error) {
+ // First read the data into a buffer. Not super efficient but we want to
+ // know if we actually have a body or not.
+ var buf bytes.Buffer
+ _, err := buf.ReadFrom(r)
+ if err != nil {
+ return nil, err
+ }
+ if buf.Len() == 0 {
+ return nil, nil
+ }
+
// First decode the JSON into a map[string]interface{}
var secret Secret
- if err := jsonutil.DecodeJSONFromReader(r, &secret); err != nil {
+ if err := jsonutil.DecodeJSONFromReader(&buf, &secret); err != nil {
return nil, err
}
diff --git a/vendor/github.com/hashicorp/vault/api/ssh.go b/vendor/github.com/hashicorp/vault/api/ssh.go
index a17b0eb..837eac4 100644
--- a/vendor/github.com/hashicorp/vault/api/ssh.go
+++ b/vendor/github.com/hashicorp/vault/api/ssh.go
@@ -1,6 +1,9 @@
package api
-import "fmt"
+import (
+ "context"
+ "fmt"
+)
// SSH is used to return a client to invoke operations on SSH backend.
type SSH struct {
@@ -28,7 +31,9 @@ func (c *SSH) Credential(role string, data map[string]interface{}) (*Secret, err
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -45,7 +50,9 @@ func (c *SSH) SignKey(role string, data map[string]interface{}) (*Secret, error)
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/hashicorp/vault/api/ssh_agent.go b/vendor/github.com/hashicorp/vault/api/ssh_agent.go
index 032fb43..1dd681a 100644
--- a/vendor/github.com/hashicorp/vault/api/ssh_agent.go
+++ b/vendor/github.com/hashicorp/vault/api/ssh_agent.go
@@ -1,6 +1,7 @@
package api
import (
+ "context"
"crypto/tls"
"crypto/x509"
"fmt"
@@ -207,7 +208,9 @@ func (c *SSHHelper) Verify(otp string) (*SSHVerifyResponse, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_audit.go b/vendor/github.com/hashicorp/vault/api/sys_audit.go
index 05cd756..2448c03 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_audit.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_audit.go
@@ -1,6 +1,8 @@
package api
import (
+ "context"
+ "errors"
"fmt"
"github.com/mitchellh/mapstructure"
@@ -16,56 +18,58 @@ func (c *Sys) AuditHash(path string, input string) (string, error) {
return "", err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return "", err
}
defer resp.Body.Close()
- type d struct {
- Hash string `json:"hash"`
- }
-
- var result d
- err = resp.DecodeJSON(&result)
+ secret, err := ParseSecret(resp.Body)
if err != nil {
return "", err
}
+ if secret == nil || secret.Data == nil {
+ return "", errors.New("data from server response is empty")
+ }
- return result.Hash, err
+ hash, ok := secret.Data["hash"]
+ if !ok {
+ return "", errors.New("hash not found in response data")
+ }
+ hashStr, ok := hash.(string)
+ if !ok {
+ return "", errors.New("could not parse hash in response data")
+ }
+
+ return hashStr, nil
}
func (c *Sys) ListAudit() (map[string]*Audit, error) {
r := c.c.NewRequest("GET", "/v1/sys/audit")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
+
if err != nil {
return nil, err
}
defer resp.Body.Close()
- var result map[string]interface{}
- err = resp.DecodeJSON(&result)
+ secret, err := ParseSecret(resp.Body)
if err != nil {
return nil, err
}
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
+ }
mounts := map[string]*Audit{}
- for k, v := range result {
- switch v.(type) {
- case map[string]interface{}:
- default:
- continue
- }
- var res Audit
- err = mapstructure.Decode(v, &res)
- if err != nil {
- return nil, err
- }
- // Not a mount, some other api.Secret data
- if res.Type == "" {
- continue
- }
- mounts[k] = &res
+ err = mapstructure.Decode(secret.Data, &mounts)
+ if err != nil {
+ return nil, err
}
return mounts, nil
@@ -87,7 +91,10 @@ func (c *Sys) EnableAuditWithOptions(path string, options *EnableAuditOptions) e
return err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
+
if err != nil {
return err
}
@@ -98,7 +105,11 @@ func (c *Sys) EnableAuditWithOptions(path string, options *EnableAuditOptions) e
func (c *Sys) DisableAudit(path string) error {
r := c.c.NewRequest("DELETE", fmt.Sprintf("/v1/sys/audit/%s", path))
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
+
if err == nil {
defer resp.Body.Close()
}
@@ -110,16 +121,16 @@ func (c *Sys) DisableAudit(path string) error {
// documentation. Please refer to that documentation for more details.
type EnableAuditOptions struct {
- Type string `json:"type"`
- Description string `json:"description"`
- Options map[string]string `json:"options"`
- Local bool `json:"local"`
+ Type string `json:"type" mapstructure:"type"`
+ Description string `json:"description" mapstructure:"description"`
+ Options map[string]string `json:"options" mapstructure:"options"`
+ Local bool `json:"local" mapstructure:"local"`
}
type Audit struct {
- Path string
- Type string
- Description string
- Options map[string]string
- Local bool
+ Type string `json:"type" mapstructure:"type"`
+ Description string `json:"description" mapstructure:"description"`
+ Options map[string]string `json:"options" mapstructure:"options"`
+ Local bool `json:"local" mapstructure:"local"`
+ Path string `json:"path" mapstructure:"path"`
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_auth.go b/vendor/github.com/hashicorp/vault/api/sys_auth.go
index 0b1a319..447c5d5 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_auth.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_auth.go
@@ -1,6 +1,8 @@
package api
import (
+ "context"
+ "errors"
"fmt"
"github.com/mitchellh/mapstructure"
@@ -8,35 +10,27 @@ import (
func (c *Sys) ListAuth() (map[string]*AuthMount, error) {
r := c.c.NewRequest("GET", "/v1/sys/auth")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
- var result map[string]interface{}
- err = resp.DecodeJSON(&result)
+ secret, err := ParseSecret(resp.Body)
if err != nil {
return nil, err
}
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
+ }
mounts := map[string]*AuthMount{}
- for k, v := range result {
- switch v.(type) {
- case map[string]interface{}:
- default:
- continue
- }
- var res AuthMount
- err = mapstructure.Decode(v, &res)
- if err != nil {
- return nil, err
- }
- // Not a mount, some other api.Secret data
- if res.Type == "" {
- continue
- }
- mounts[k] = &res
+ err = mapstructure.Decode(secret.Data, &mounts)
+ if err != nil {
+ return nil, err
}
return mounts, nil
@@ -56,7 +50,9 @@ func (c *Sys) EnableAuthWithOptions(path string, options *EnableAuthOptions) err
return err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return err
}
@@ -67,7 +63,10 @@ func (c *Sys) EnableAuthWithOptions(path string, options *EnableAuthOptions) err
func (c *Sys) DisableAuth(path string) error {
r := c.c.NewRequest("DELETE", fmt.Sprintf("/v1/sys/auth/%s", path))
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_capabilities.go b/vendor/github.com/hashicorp/vault/api/sys_capabilities.go
index cbb3a72..242acf9 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_capabilities.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_capabilities.go
@@ -1,6 +1,12 @@
package api
-import "fmt"
+import (
+ "context"
+ "errors"
+ "fmt"
+
+ "github.com/mitchellh/mapstructure"
+)
func (c *Sys) CapabilitiesSelf(path string) ([]string, error) {
return c.Capabilities(c.c.Token(), path)
@@ -22,28 +28,27 @@ func (c *Sys) Capabilities(token, path string) ([]string, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
- var result map[string]interface{}
- err = resp.DecodeJSON(&result)
+ secret, err := ParseSecret(resp.Body)
if err != nil {
return nil, err
}
-
- if result["capabilities"] == nil {
- return nil, nil
- }
- var capabilities []string
- capabilitiesRaw, ok := result["capabilities"].([]interface{})
- if !ok {
- return nil, fmt.Errorf("error interpreting returned capabilities")
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
}
- for _, capability := range capabilitiesRaw {
- capabilities = append(capabilities, capability.(string))
+
+ var res []string
+ err = mapstructure.Decode(secret.Data[path], &res)
+ if err != nil {
+ return nil, err
}
- return capabilities, nil
+
+ return res, nil
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_config_cors.go b/vendor/github.com/hashicorp/vault/api/sys_config_cors.go
index e7f2a59..d153a47 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_config_cors.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_config_cors.go
@@ -1,15 +1,37 @@
package api
+import (
+ "context"
+ "errors"
+
+ "github.com/mitchellh/mapstructure"
+)
+
func (c *Sys) CORSStatus() (*CORSResponse, error) {
r := c.c.NewRequest("GET", "/v1/sys/config/cors")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
+ secret, err := ParseSecret(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
+ }
+
var result CORSResponse
- err = resp.DecodeJSON(&result)
+ err = mapstructure.Decode(secret.Data, &result)
+ if err != nil {
+ return nil, err
+ }
+
return &result, err
}
@@ -19,38 +41,65 @@ func (c *Sys) ConfigureCORS(req *CORSRequest) (*CORSResponse, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
+ secret, err := ParseSecret(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
+ }
+
var result CORSResponse
- err = resp.DecodeJSON(&result)
+ err = mapstructure.Decode(secret.Data, &result)
+ if err != nil {
+ return nil, err
+ }
+
return &result, err
}
func (c *Sys) DisableCORS() (*CORSResponse, error) {
r := c.c.NewRequest("DELETE", "/v1/sys/config/cors")
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
+ secret, err := ParseSecret(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
+ }
+
var result CORSResponse
- err = resp.DecodeJSON(&result)
- return &result, err
+ err = mapstructure.Decode(secret.Data, &result)
+ if err != nil {
+ return nil, err
+ }
+ return &result, err
}
type CORSRequest struct {
- AllowedOrigins string `json:"allowed_origins"`
- Enabled bool `json:"enabled"`
+ AllowedOrigins string `json:"allowed_origins" mapstructure:"allowed_origins"`
+ Enabled bool `json:"enabled" mapstructure:"enabled"`
}
type CORSResponse struct {
- AllowedOrigins string `json:"allowed_origins"`
- Enabled bool `json:"enabled"`
+ AllowedOrigins string `json:"allowed_origins" mapstructure:"allowed_origins"`
+ Enabled bool `json:"enabled" mapstructure:"enabled"`
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_generate_root.go b/vendor/github.com/hashicorp/vault/api/sys_generate_root.go
index adb5496..66f72df 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_generate_root.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_generate_root.go
@@ -1,5 +1,7 @@
package api
+import "context"
+
func (c *Sys) GenerateRootStatus() (*GenerateRootStatusResponse, error) {
return c.generateRootStatusCommon("/v1/sys/generate-root/attempt")
}
@@ -10,7 +12,10 @@ func (c *Sys) GenerateDROperationTokenStatus() (*GenerateRootStatusResponse, err
func (c *Sys) generateRootStatusCommon(path string) (*GenerateRootStatusResponse, error) {
r := c.c.NewRequest("GET", path)
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -40,7 +45,9 @@ func (c *Sys) generateRootInitCommon(path, otp, pgpKey string) (*GenerateRootSta
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -61,7 +68,10 @@ func (c *Sys) GenerateDROperationTokenCancel() error {
func (c *Sys) generateRootCancelCommon(path string) error {
r := c.c.NewRequest("DELETE", path)
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -87,7 +97,9 @@ func (c *Sys) generateRootUpdateCommon(path, shard, nonce string) (*GenerateRoot
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -107,4 +119,6 @@ type GenerateRootStatusResponse struct {
EncodedToken string `json:"encoded_token"`
EncodedRootToken string `json:"encoded_root_token"`
PGPFingerprint string `json:"pgp_fingerprint"`
+ OTP string `json:"otp"`
+ OTPLength int `json:"otp_length"`
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_health.go b/vendor/github.com/hashicorp/vault/api/sys_health.go
index 82fd1f6..f49d05b 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_health.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_health.go
@@ -1,5 +1,7 @@
package api
+import "context"
+
func (c *Sys) Health() (*HealthResponse, error) {
r := c.c.NewRequest("GET", "/v1/sys/health")
// If the code is 400 or above it will automatically turn into an error,
@@ -9,7 +11,10 @@ func (c *Sys) Health() (*HealthResponse, error) {
r.Params.Add("sealedcode", "299")
r.Params.Add("standbycode", "299")
r.Params.Add("drsecondarycode", "299")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_init.go b/vendor/github.com/hashicorp/vault/api/sys_init.go
index f824ab7..0e499c6 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_init.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_init.go
@@ -1,8 +1,13 @@
package api
+import "context"
+
func (c *Sys) InitStatus() (bool, error) {
r := c.c.NewRequest("GET", "/v1/sys/init")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return false, err
}
@@ -19,7 +24,9 @@ func (c *Sys) Init(opts *InitRequest) (*InitResponse, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_leader.go b/vendor/github.com/hashicorp/vault/api/sys_leader.go
index 4951c46..170a55f 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_leader.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_leader.go
@@ -1,8 +1,13 @@
package api
+import "context"
+
func (c *Sys) Leader() (*LeaderResponse, error) {
r := c.c.NewRequest("GET", "/v1/sys/leader")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_leases.go b/vendor/github.com/hashicorp/vault/api/sys_leases.go
index 34bd99e..09c9642 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_leases.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_leases.go
@@ -1,5 +1,10 @@
package api
+import (
+ "context"
+ "errors"
+)
+
func (c *Sys) Renew(id string, increment int) (*Secret, error) {
r := c.c.NewRequest("PUT", "/v1/sys/leases/renew")
@@ -11,7 +16,9 @@ func (c *Sys) Renew(id string, increment int) (*Secret, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -22,7 +29,10 @@ func (c *Sys) Renew(id string, increment int) (*Secret, error) {
func (c *Sys) Revoke(id string) error {
r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke/"+id)
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -31,7 +41,10 @@ func (c *Sys) Revoke(id string) error {
func (c *Sys) RevokePrefix(id string) error {
r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke-prefix/"+id)
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -40,9 +53,53 @@ func (c *Sys) RevokePrefix(id string) error {
func (c *Sys) RevokeForce(id string) error {
r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke-force/"+id)
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
+ if err == nil {
+ defer resp.Body.Close()
+ }
+ return err
+}
+
+func (c *Sys) RevokeWithOptions(opts *RevokeOptions) error {
+ if opts == nil {
+ return errors.New("nil options provided")
+ }
+
+ // Construct path
+ path := "/v1/sys/leases/revoke/"
+ switch {
+ case opts.Force:
+ path = "/v1/sys/leases/revoke-force/"
+ case opts.Prefix:
+ path = "/v1/sys/leases/revoke-prefix/"
+ }
+ path += opts.LeaseID
+
+ r := c.c.NewRequest("PUT", path)
+ if !opts.Force {
+ body := map[string]interface{}{
+ "sync": opts.Sync,
+ }
+ if err := r.SetJSONBody(body); err != nil {
+ return err
+ }
+ }
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
return err
}
+
+type RevokeOptions struct {
+ LeaseID string
+ Force bool
+ Prefix bool
+ Sync bool
+}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_mounts.go b/vendor/github.com/hashicorp/vault/api/sys_mounts.go
index 8ac5b45..8a32b09 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_mounts.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_mounts.go
@@ -1,6 +1,8 @@
package api
import (
+ "context"
+ "errors"
"fmt"
"github.com/mitchellh/mapstructure"
@@ -8,35 +10,27 @@ import (
func (c *Sys) ListMounts() (map[string]*MountOutput, error) {
r := c.c.NewRequest("GET", "/v1/sys/mounts")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
- var result map[string]interface{}
- err = resp.DecodeJSON(&result)
+ secret, err := ParseSecret(resp.Body)
if err != nil {
return nil, err
}
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
+ }
mounts := map[string]*MountOutput{}
- for k, v := range result {
- switch v.(type) {
- case map[string]interface{}:
- default:
- continue
- }
- var res MountOutput
- err = mapstructure.Decode(v, &res)
- if err != nil {
- return nil, err
- }
- // Not a mount, some other api.Secret data
- if res.Type == "" {
- continue
- }
- mounts[k] = &res
+ err = mapstructure.Decode(secret.Data, &mounts)
+ if err != nil {
+ return nil, err
}
return mounts, nil
@@ -48,7 +42,9 @@ func (c *Sys) Mount(path string, mountInfo *MountInput) error {
return err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return err
}
@@ -59,7 +55,10 @@ func (c *Sys) Mount(path string, mountInfo *MountInput) error {
func (c *Sys) Unmount(path string) error {
r := c.c.NewRequest("DELETE", fmt.Sprintf("/v1/sys/mounts/%s", path))
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -77,7 +76,9 @@ func (c *Sys) Remount(from, to string) error {
return err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -90,7 +91,9 @@ func (c *Sys) TuneMount(path string, config MountConfigInput) error {
return err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -100,14 +103,24 @@ func (c *Sys) TuneMount(path string, config MountConfigInput) error {
func (c *Sys) MountConfig(path string) (*MountConfigOutput, error) {
r := c.c.NewRequest("GET", fmt.Sprintf("/v1/sys/mounts/%s/tune", path))
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
+ secret, err := ParseSecret(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
+ }
+
var result MountConfigOutput
- err = resp.DecodeJSON(&result)
+ err = mapstructure.Decode(secret.Data, &result)
if err != nil {
return nil, err
}
@@ -128,6 +141,7 @@ type MountInput struct {
type MountConfigInput struct {
Options map[string]string `json:"options" mapstructure:"options"`
DefaultLeaseTTL string `json:"default_lease_ttl" mapstructure:"default_lease_ttl"`
+ Description *string `json:"description,omitempty" mapstructure:"description"`
MaxLeaseTTL string `json:"max_lease_ttl" mapstructure:"max_lease_ttl"`
ForceNoCache bool `json:"force_no_cache" mapstructure:"force_no_cache"`
PluginName string `json:"plugin_name,omitempty" mapstructure:"plugin_name"`
diff --git a/vendor/github.com/hashicorp/vault/api/sys_plugins.go b/vendor/github.com/hashicorp/vault/api/sys_plugins.go
index 8183b10..b2f18d9 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_plugins.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_plugins.go
@@ -1,6 +1,7 @@
package api
import (
+ "context"
"fmt"
"net/http"
)
@@ -11,7 +12,7 @@ type ListPluginsInput struct{}
// ListPluginsResponse is the response from the ListPlugins call.
type ListPluginsResponse struct {
// Names is the list of names of the plugins.
- Names []string
+ Names []string `json:"names"`
}
// ListPlugins lists all plugins in the catalog and returns their names as a
@@ -19,7 +20,10 @@ type ListPluginsResponse struct {
func (c *Sys) ListPlugins(i *ListPluginsInput) (*ListPluginsResponse, error) {
path := "/v1/sys/plugins/catalog"
req := c.c.NewRequest("LIST", path)
- resp, err := c.c.RawRequest(req)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, req)
if err != nil {
return nil, err
}
@@ -54,18 +58,23 @@ type GetPluginResponse struct {
func (c *Sys) GetPlugin(i *GetPluginInput) (*GetPluginResponse, error) {
path := fmt.Sprintf("/v1/sys/plugins/catalog/%s", i.Name)
req := c.c.NewRequest(http.MethodGet, path)
- resp, err := c.c.RawRequest(req)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
- var result GetPluginResponse
+ var result struct {
+ Data GetPluginResponse
+ }
err = resp.DecodeJSON(&result)
if err != nil {
return nil, err
}
- return &result, err
+ return &result.Data, err
}
// RegisterPluginInput is used as input to the RegisterPlugin function.
@@ -91,7 +100,9 @@ func (c *Sys) RegisterPlugin(i *RegisterPluginInput) error {
return err
}
- resp, err := c.c.RawRequest(req)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, req)
if err == nil {
defer resp.Body.Close()
}
@@ -109,7 +120,10 @@ type DeregisterPluginInput struct {
func (c *Sys) DeregisterPlugin(i *DeregisterPluginInput) error {
path := fmt.Sprintf("/v1/sys/plugins/catalog/%s", i.Name)
req := c.c.NewRequest(http.MethodDelete, path)
- resp, err := c.c.RawRequest(req)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, req)
if err == nil {
defer resp.Body.Close()
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_policy.go b/vendor/github.com/hashicorp/vault/api/sys_policy.go
index 9c9d9c0..1fa3259 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_policy.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_policy.go
@@ -1,39 +1,47 @@
package api
-import "fmt"
+import (
+ "context"
+ "errors"
+ "fmt"
+
+ "github.com/mitchellh/mapstructure"
+)
func (c *Sys) ListPolicies() ([]string, error) {
r := c.c.NewRequest("GET", "/v1/sys/policy")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
- var result map[string]interface{}
- err = resp.DecodeJSON(&result)
+ secret, err := ParseSecret(resp.Body)
if err != nil {
return nil, err
}
-
- var ok bool
- if _, ok = result["policies"]; !ok {
- return nil, fmt.Errorf("policies not found in response")
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
}
- listRaw := result["policies"].([]interface{})
- var policies []string
-
- for _, val := range listRaw {
- policies = append(policies, val.(string))
+ var result []string
+ err = mapstructure.Decode(secret.Data["policies"], &result)
+ if err != nil {
+ return nil, err
}
- return policies, err
+ return result, err
}
func (c *Sys) GetPolicy(name string) (string, error) {
- r := c.c.NewRequest("GET", fmt.Sprintf("/v1/sys/policy/%s", name))
- resp, err := c.c.RawRequest(r)
+ r := c.c.NewRequest("GET", fmt.Sprintf("/v1/sys/policies/acl/%s", name))
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if resp != nil {
defer resp.Body.Close()
if resp.StatusCode == 404 {
@@ -44,16 +52,15 @@ func (c *Sys) GetPolicy(name string) (string, error) {
return "", err
}
- var result map[string]interface{}
- err = resp.DecodeJSON(&result)
+ secret, err := ParseSecret(resp.Body)
if err != nil {
return "", err
}
-
- if rulesRaw, ok := result["rules"]; ok {
- return rulesRaw.(string), nil
+ if secret == nil || secret.Data == nil {
+ return "", errors.New("data from server response is empty")
}
- if policyRaw, ok := result["policy"]; ok {
+
+ if policyRaw, ok := secret.Data["policy"]; ok {
return policyRaw.(string), nil
}
@@ -70,7 +77,9 @@ func (c *Sys) PutPolicy(name, rules string) error {
return err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return err
}
@@ -81,7 +90,10 @@ func (c *Sys) PutPolicy(name, rules string) error {
func (c *Sys) DeletePolicy(name string) error {
r := c.c.NewRequest("DELETE", fmt.Sprintf("/v1/sys/policy/%s", name))
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_rekey.go b/vendor/github.com/hashicorp/vault/api/sys_rekey.go
index ddeac01..55f1a70 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_rekey.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_rekey.go
@@ -1,8 +1,18 @@
package api
+import (
+ "context"
+ "errors"
+
+ "github.com/mitchellh/mapstructure"
+)
+
func (c *Sys) RekeyStatus() (*RekeyStatusResponse, error) {
r := c.c.NewRequest("GET", "/v1/sys/rekey/init")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -15,7 +25,10 @@ func (c *Sys) RekeyStatus() (*RekeyStatusResponse, error) {
func (c *Sys) RekeyRecoveryKeyStatus() (*RekeyStatusResponse, error) {
r := c.c.NewRequest("GET", "/v1/sys/rekey-recovery-key/init")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -28,7 +41,10 @@ func (c *Sys) RekeyRecoveryKeyStatus() (*RekeyStatusResponse, error) {
func (c *Sys) RekeyVerificationStatus() (*RekeyVerificationStatusResponse, error) {
r := c.c.NewRequest("GET", "/v1/sys/rekey/verify")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -41,7 +57,10 @@ func (c *Sys) RekeyVerificationStatus() (*RekeyVerificationStatusResponse, error
func (c *Sys) RekeyRecoveryKeyVerificationStatus() (*RekeyVerificationStatusResponse, error) {
r := c.c.NewRequest("GET", "/v1/sys/rekey-recovery-key/verify")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -58,7 +77,9 @@ func (c *Sys) RekeyInit(config *RekeyInitRequest) (*RekeyStatusResponse, error)
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -75,7 +96,9 @@ func (c *Sys) RekeyRecoveryKeyInit(config *RekeyInitRequest) (*RekeyStatusRespon
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -88,7 +111,10 @@ func (c *Sys) RekeyRecoveryKeyInit(config *RekeyInitRequest) (*RekeyStatusRespon
func (c *Sys) RekeyCancel() error {
r := c.c.NewRequest("DELETE", "/v1/sys/rekey/init")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -97,7 +123,10 @@ func (c *Sys) RekeyCancel() error {
func (c *Sys) RekeyRecoveryKeyCancel() error {
r := c.c.NewRequest("DELETE", "/v1/sys/rekey-recovery-key/init")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -106,7 +135,10 @@ func (c *Sys) RekeyRecoveryKeyCancel() error {
func (c *Sys) RekeyVerificationCancel() error {
r := c.c.NewRequest("DELETE", "/v1/sys/rekey/verify")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -115,7 +147,10 @@ func (c *Sys) RekeyVerificationCancel() error {
func (c *Sys) RekeyRecoveryKeyVerificationCancel() error {
r := c.c.NewRequest("DELETE", "/v1/sys/rekey-recovery-key/verify")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -133,7 +168,9 @@ func (c *Sys) RekeyUpdate(shard, nonce string) (*RekeyUpdateResponse, error) {
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -155,7 +192,9 @@ func (c *Sys) RekeyRecoveryKeyUpdate(shard, nonce string) (*RekeyUpdateResponse,
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -168,33 +207,66 @@ func (c *Sys) RekeyRecoveryKeyUpdate(shard, nonce string) (*RekeyUpdateResponse,
func (c *Sys) RekeyRetrieveBackup() (*RekeyRetrieveResponse, error) {
r := c.c.NewRequest("GET", "/v1/sys/rekey/backup")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
+ secret, err := ParseSecret(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
+ }
+
var result RekeyRetrieveResponse
- err = resp.DecodeJSON(&result)
+ err = mapstructure.Decode(secret.Data, &result)
+ if err != nil {
+ return nil, err
+ }
+
return &result, err
}
func (c *Sys) RekeyRetrieveRecoveryBackup() (*RekeyRetrieveResponse, error) {
r := c.c.NewRequest("GET", "/v1/sys/rekey/recovery-backup")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
+ secret, err := ParseSecret(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
+ }
+
var result RekeyRetrieveResponse
- err = resp.DecodeJSON(&result)
+ err = mapstructure.Decode(secret.Data, &result)
+ if err != nil {
+ return nil, err
+ }
+
return &result, err
}
func (c *Sys) RekeyDeleteBackup() error {
r := c.c.NewRequest("DELETE", "/v1/sys/rekey/backup")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -204,7 +276,10 @@ func (c *Sys) RekeyDeleteBackup() error {
func (c *Sys) RekeyDeleteRecoveryBackup() error {
r := c.c.NewRequest("DELETE", "/v1/sys/rekey/recovery-backup")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -223,7 +298,9 @@ func (c *Sys) RekeyVerificationUpdate(shard, nonce string) (*RekeyVerificationUp
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -245,7 +322,9 @@ func (c *Sys) RekeyRecoveryKeyVerificationUpdate(shard, nonce string) (*RekeyVer
return nil, err
}
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
@@ -290,9 +369,9 @@ type RekeyUpdateResponse struct {
}
type RekeyRetrieveResponse struct {
- Nonce string `json:"nonce"`
- Keys map[string][]string `json:"keys"`
- KeysB64 map[string][]string `json:"keys_base64"`
+ Nonce string `json:"nonce" mapstructure:"nonce"`
+ Keys map[string][]string `json:"keys" mapstructure:"keys"`
+ KeysB64 map[string][]string `json:"keys_base64" mapstructure:"keys_base64"`
}
type RekeyVerificationStatusResponse struct {
diff --git a/vendor/github.com/hashicorp/vault/api/sys_rotate.go b/vendor/github.com/hashicorp/vault/api/sys_rotate.go
index 8108dce..c525feb 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_rotate.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_rotate.go
@@ -1,10 +1,18 @@
package api
-import "time"
+import (
+ "context"
+ "encoding/json"
+ "errors"
+ "time"
+)
func (c *Sys) Rotate() error {
r := c.c.NewRequest("POST", "/v1/sys/rotate")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -13,15 +21,54 @@ func (c *Sys) Rotate() error {
func (c *Sys) KeyStatus() (*KeyStatus, error) {
r := c.c.NewRequest("GET", "/v1/sys/key-status")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
- result := new(KeyStatus)
- err = resp.DecodeJSON(result)
- return result, err
+ secret, err := ParseSecret(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+ if secret == nil || secret.Data == nil {
+ return nil, errors.New("data from server response is empty")
+ }
+
+ var result KeyStatus
+
+ termRaw, ok := secret.Data["term"]
+ if !ok {
+ return nil, errors.New("term not found in response")
+ }
+ term, ok := termRaw.(json.Number)
+ if !ok {
+ return nil, errors.New("could not convert term to a number")
+ }
+ term64, err := term.Int64()
+ if err != nil {
+ return nil, err
+ }
+ result.Term = int(term64)
+
+ installTimeRaw, ok := secret.Data["install_time"]
+ if !ok {
+ return nil, errors.New("install_time not found in response")
+ }
+ installTimeStr, ok := installTimeRaw.(string)
+ if !ok {
+ return nil, errors.New("could not convert install_time to a string")
+ }
+ installTime, err := time.Parse(time.RFC3339Nano, installTimeStr)
+ if err != nil {
+ return nil, err
+ }
+ result.InstallTime = installTime
+
+ return &result, err
}
type KeyStatus struct {
diff --git a/vendor/github.com/hashicorp/vault/api/sys_seal.go b/vendor/github.com/hashicorp/vault/api/sys_seal.go
index 3d594ba..7cc32ac 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_seal.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_seal.go
@@ -1,5 +1,7 @@
package api
+import "context"
+
func (c *Sys) SealStatus() (*SealStatusResponse, error) {
r := c.c.NewRequest("GET", "/v1/sys/seal-status")
return sealStatusRequest(c, r)
@@ -7,7 +9,10 @@ func (c *Sys) SealStatus() (*SealStatusResponse, error) {
func (c *Sys) Seal() error {
r := c.c.NewRequest("PUT", "/v1/sys/seal")
- resp, err := c.c.RawRequest(r)
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err == nil {
defer resp.Body.Close()
}
@@ -37,7 +42,9 @@ func (c *Sys) Unseal(shard string) (*SealStatusResponse, error) {
}
func sealStatusRequest(c *Sys, r *Request) (*SealStatusResponse, error) {
- resp, err := c.c.RawRequest(r)
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/hashicorp/vault/api/sys_stepdown.go b/vendor/github.com/hashicorp/vault/api/sys_stepdown.go
index 421e5f1..55dc6fb 100644
--- a/vendor/github.com/hashicorp/vault/api/sys_stepdown.go
+++ b/vendor/github.com/hashicorp/vault/api/sys_stepdown.go
@@ -1,10 +1,15 @@
package api
+import "context"
+
func (c *Sys) StepDown() error {
r := c.c.NewRequest("PUT", "/v1/sys/step-down")
- resp, err := c.c.RawRequest(r)
- if err == nil {
- defer resp.Body.Close()
+
+ ctx, cancelFunc := context.WithCancel(context.Background())
+ defer cancelFunc()
+ resp, err := c.c.RawRequestWithContext(ctx, r)
+ if resp != nil && resp.Body != nil {
+ resp.Body.Close()
}
return err
}
diff --git a/vendor/github.com/hashicorp/vault/helper/consts/consts.go b/vendor/github.com/hashicorp/vault/helper/consts/consts.go
new file mode 100644
index 0000000..972a69f
--- /dev/null
+++ b/vendor/github.com/hashicorp/vault/helper/consts/consts.go
@@ -0,0 +1,14 @@
+package consts
+
+const (
+ // ExpirationRestoreWorkerCount specifies the number of workers to use while
+ // restoring leases into the expiration manager
+ ExpirationRestoreWorkerCount = 64
+
+ // NamespaceHeaderName is the header set to specify which namespace the
+ // request is indented for.
+ NamespaceHeaderName = "X-Vault-Namespace"
+
+ // AuthHeaderName is the name of the header containing the token.
+ AuthHeaderName = "X-Vault-Token"
+)
diff --git a/vendor/github.com/hashicorp/vault/helper/consts/error.go b/vendor/github.com/hashicorp/vault/helper/consts/error.go
new file mode 100644
index 0000000..06977d5
--- /dev/null
+++ b/vendor/github.com/hashicorp/vault/helper/consts/error.go
@@ -0,0 +1,16 @@
+package consts
+
+import "errors"
+
+var (
+ // ErrSealed is returned if an operation is performed on a sealed barrier.
+ // No operation is expected to succeed before unsealing
+ ErrSealed = errors.New("Vault is sealed")
+
+ // ErrStandby is returned if an operation is performed on a standby Vault.
+ // No operation is expected to succeed until active.
+ ErrStandby = errors.New("Vault is in standby mode")
+
+ // Used when .. is used in a path
+ ErrPathContainsParentReferences = errors.New("path cannot contain parent references")
+)
diff --git a/vendor/github.com/hashicorp/vault/helper/consts/replication.go b/vendor/github.com/hashicorp/vault/helper/consts/replication.go
new file mode 100644
index 0000000..c109977
--- /dev/null
+++ b/vendor/github.com/hashicorp/vault/helper/consts/replication.go
@@ -0,0 +1,82 @@
+package consts
+
+type ReplicationState uint32
+
+const (
+ _ ReplicationState = iota
+ OldReplicationPrimary
+ OldReplicationSecondary
+ OldReplicationBootstrapping
+ // Don't add anything here. Adding anything to this Old block would cause
+ // the rest of the values to change below. This was done originally to
+ // ensure no overlap between old and new values.
+
+ ReplicationUnknown ReplicationState = 0
+ ReplicationPerformancePrimary ReplicationState = 1 << iota
+ ReplicationPerformanceSecondary
+ OldSplitReplicationBootstrapping
+ ReplicationDRPrimary
+ ReplicationDRSecondary
+ ReplicationPerformanceBootstrapping
+ ReplicationDRBootstrapping
+ ReplicationPerformanceDisabled
+ ReplicationDRDisabled
+)
+
+func (r ReplicationState) string() string {
+ switch r {
+ case ReplicationPerformanceSecondary:
+ return "secondary"
+ case ReplicationPerformancePrimary:
+ return "primary"
+ case ReplicationPerformanceBootstrapping:
+ return "bootstrapping"
+ case ReplicationPerformanceDisabled:
+ return "disabled"
+ case ReplicationDRPrimary:
+ return "primary"
+ case ReplicationDRSecondary:
+ return "secondary"
+ case ReplicationDRBootstrapping:
+ return "bootstrapping"
+ case ReplicationDRDisabled:
+ return "disabled"
+ }
+
+ return "unknown"
+}
+
+func (r ReplicationState) GetDRString() string {
+ switch {
+ case r.HasState(ReplicationDRBootstrapping):
+ return ReplicationDRBootstrapping.string()
+ case r.HasState(ReplicationDRPrimary):
+ return ReplicationDRPrimary.string()
+ case r.HasState(ReplicationDRSecondary):
+ return ReplicationDRSecondary.string()
+ case r.HasState(ReplicationDRDisabled):
+ return ReplicationDRDisabled.string()
+ default:
+ return "unknown"
+ }
+}
+
+func (r ReplicationState) GetPerformanceString() string {
+ switch {
+ case r.HasState(ReplicationPerformanceBootstrapping):
+ return ReplicationPerformanceBootstrapping.string()
+ case r.HasState(ReplicationPerformancePrimary):
+ return ReplicationPerformancePrimary.string()
+ case r.HasState(ReplicationPerformanceSecondary):
+ return ReplicationPerformanceSecondary.string()
+ case r.HasState(ReplicationPerformanceDisabled):
+ return ReplicationPerformanceDisabled.string()
+ default:
+ return "unknown"
+ }
+}
+
+func (r ReplicationState) HasState(flag ReplicationState) bool { return r&flag != 0 }
+func (r *ReplicationState) AddState(flag ReplicationState) { *r |= flag }
+func (r *ReplicationState) ClearState(flag ReplicationState) { *r &= ^flag }
+func (r *ReplicationState) ToggleState(flag ReplicationState) { *r ^= flag }
diff --git a/vendor/github.com/hashicorp/vault/helper/parseutil/parseutil.go b/vendor/github.com/hashicorp/vault/helper/parseutil/parseutil.go
index ae8c58b..9b32bf7 100644
--- a/vendor/github.com/hashicorp/vault/helper/parseutil/parseutil.go
+++ b/vendor/github.com/hashicorp/vault/helper/parseutil/parseutil.go
@@ -28,7 +28,7 @@ func ParseDurationSecond(in interface{}) (time.Duration, error) {
}
var err error
// Look for a suffix otherwise its a plain second value
- if strings.HasSuffix(inp, "s") || strings.HasSuffix(inp, "m") || strings.HasSuffix(inp, "h") {
+ if strings.HasSuffix(inp, "s") || strings.HasSuffix(inp, "m") || strings.HasSuffix(inp, "h") || strings.HasSuffix(inp, "ms") {
dur, err = time.ParseDuration(inp)
if err != nil {
return dur, err
diff --git a/vendor/github.com/hashicorp/vault/helper/strutil/strutil.go b/vendor/github.com/hashicorp/vault/helper/strutil/strutil.go
index a77e60d..8d84c1e 100644
--- a/vendor/github.com/hashicorp/vault/helper/strutil/strutil.go
+++ b/vendor/github.com/hashicorp/vault/helper/strutil/strutil.go
@@ -43,9 +43,9 @@ func StrListSubset(super, sub []string) bool {
return true
}
-// Parses a comma separated list of strings into a slice of strings.
-// The return slice will be sorted and will not contain duplicate or
-// empty items.
+// ParseDedupAndSortStrings parses a comma separated list of strings
+// into a slice of strings. The return slice will be sorted and will
+// not contain duplicate or empty items.
func ParseDedupAndSortStrings(input string, sep string) []string {
input = strings.TrimSpace(input)
parsed := []string{}
@@ -56,9 +56,10 @@ func ParseDedupAndSortStrings(input string, sep string) []string {
return RemoveDuplicates(strings.Split(input, sep), false)
}
-// Parses a comma separated list of strings into a slice of strings.
-// The return slice will be sorted and will not contain duplicate or
-// empty items. The values will be converted to lower case.
+// ParseDedupLowercaseAndSortStrings parses a comma separated list of
+// strings into a slice of strings. The return slice will be sorted and
+// will not contain duplicate or empty items. The values will be converted
+// to lower case.
func ParseDedupLowercaseAndSortStrings(input string, sep string) []string {
input = strings.TrimSpace(input)
parsed := []string{}
@@ -69,8 +70,8 @@ func ParseDedupLowercaseAndSortStrings(input string, sep string) []string {
return RemoveDuplicates(strings.Split(input, sep), true)
}
-// Parses a comma separated list of `<key>=<value>` tuples into a
-// map[string]string.
+// ParseKeyValues parses a comma separated list of `<key>=<value>` tuples
+// into a map[string]string.
func ParseKeyValues(input string, out map[string]string, sep string) error {
if out == nil {
return fmt.Errorf("'out is nil")
@@ -97,8 +98,8 @@ func ParseKeyValues(input string, out map[string]string, sep string) error {
return nil
}
-// Parses arbitrary <key,value> tuples. The input can be one of
-// the following:
+// ParseArbitraryKeyValues parses arbitrary <key,value> tuples. The input
+// can be one of the following:
// * JSON string
// * Base64 encoded JSON string
// * Comma separated list of `<key>=<value>` pairs
@@ -144,8 +145,8 @@ func ParseArbitraryKeyValues(input string, out map[string]string, sep string) er
return nil
}
-// Parses a `sep`-separated list of strings into a
-// []string.
+// ParseStringSlice parses a `sep`-separated list of strings into a
+// []string with surrounding whitespace removed.
//
// The output will always be a valid slice but may be of length zero.
func ParseStringSlice(input string, sep string) []string {
@@ -157,14 +158,14 @@ func ParseStringSlice(input string, sep string) []string {
splitStr := strings.Split(input, sep)
ret := make([]string, len(splitStr))
for i, val := range splitStr {
- ret[i] = val
+ ret[i] = strings.TrimSpace(val)
}
return ret
}
-// Parses arbitrary string slice. The input can be one of
-// the following:
+// ParseArbitraryStringSlice parses arbitrary string slice. The input
+// can be one of the following:
// * JSON string
// * Base64 encoded JSON string
// * `sep` separated list of values
@@ -215,8 +216,9 @@ func TrimStrings(items []string) []string {
return ret
}
-// Removes duplicate and empty elements from a slice of strings. This also may
-// convert the items in the slice to lower case and returns a sorted slice.
+// RemoveDuplicates removes duplicate and empty elements from a slice of
+// strings. This also may convert the items in the slice to lower case and
+// returns a sorted slice.
func RemoveDuplicates(items []string, lowercase bool) []string {
itemsMap := map[string]bool{}
for _, item := range items {
@@ -230,7 +232,7 @@ func RemoveDuplicates(items []string, lowercase bool) []string {
itemsMap[item] = true
}
items = make([]string, 0, len(itemsMap))
- for item, _ := range itemsMap {
+ for item := range itemsMap {
items = append(items, item)
}
sort.Strings(items)
@@ -260,10 +262,10 @@ func EquivalentSlices(a, b []string) bool {
// Now we'll build our checking slices
var sortedA, sortedB []string
- for keyA, _ := range mapA {
+ for keyA := range mapA {
sortedA = append(sortedA, keyA)
}
- for keyB, _ := range mapB {
+ for keyB := range mapB {
sortedB = append(sortedB, keyB)
}
sort.Strings(sortedA)
@@ -299,6 +301,8 @@ func StrListDelete(s []string, d string) []string {
return s
}
+// GlobbedStringsMatch compares item to val with support for a leading and/or
+// trailing wildcard '*' in item.
func GlobbedStringsMatch(item, val string) bool {
if len(item) < 2 {
return val == item
@@ -325,3 +329,20 @@ func AppendIfMissing(slice []string, i string) []string {
}
return append(slice, i)
}
+
+// MergeSlices adds an arbitrary number of slices together, uniquely
+func MergeSlices(args ...[]string) []string {
+ all := map[string]struct{}{}
+ for _, slice := range args {
+ for _, v := range slice {
+ all[v] = struct{}{}
+ }
+ }
+
+ result := make([]string, 0, len(all))
+ for k, _ := range all {
+ result = append(result, k)
+ }
+ sort.Strings(result)
+ return result
+}
diff --git a/vendor/github.com/mattn/go-sqlite3/README.md b/vendor/github.com/mattn/go-sqlite3/README.md
index 37d017a..a764be8 100644
--- a/vendor/github.com/mattn/go-sqlite3/README.md
+++ b/vendor/github.com/mattn/go-sqlite3/README.md
@@ -473,7 +473,7 @@ For an example see [shaxbee/go-spatialite](https://github.com/shaxbee/go-spatial
For more information see [#289](https://github.com/mattn/go-sqlite3/issues/289)
-- Trying to execure a `.` (dot) command throws an error.
+- Trying to execute a `.` (dot) command throws an error.
Error: `Error: near ".": syntax error`
Dot command are part of SQLite3 CLI not of this library.
diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3.go b/vendor/github.com/mattn/go-sqlite3/sqlite3.go
index d8fe4b0..b97647b 100644
--- a/vendor/github.com/mattn/go-sqlite3/sqlite3.go
+++ b/vendor/github.com/mattn/go-sqlite3/sqlite3.go
@@ -1883,11 +1883,11 @@ func (rc *SQLiteRows) DeclTypes() []string {
// Next move cursor to next.
func (rc *SQLiteRows) Next(dest []driver.Value) error {
+ rc.s.mu.Lock()
+ defer rc.s.mu.Unlock()
if rc.s.closed {
return io.EOF
}
- rc.s.mu.Lock()
- defer rc.s.mu.Unlock()
rv := C.sqlite3_step(rc.s.s)
if rv == C.SQLITE_DONE {
return io.EOF
diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_other.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_other.go
index 086ed43..71778fc 100644
--- a/vendor/github.com/mattn/go-sqlite3/sqlite3_other.go
+++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_other.go
@@ -10,5 +10,8 @@ package sqlite3
/*
#cgo CFLAGS: -I.
#cgo linux LDFLAGS: -ldl
+#cgo linux,ppc LDFLAGS: -lpthread
+#cgo linux,ppc64 LDFLAGS: -lpthread
+#cgo linux,ppc64le LDFLAGS: -lpthread
*/
import "C"
diff --git a/vendor/github.com/mitchellh/go-homedir/homedir.go b/vendor/github.com/mitchellh/go-homedir/homedir.go
index acbb605..fb87bef 100644
--- a/vendor/github.com/mitchellh/go-homedir/homedir.go
+++ b/vendor/github.com/mitchellh/go-homedir/homedir.go
@@ -141,14 +141,16 @@ func dirWindows() (string, error) {
return home, nil
}
+ // Prefer standard environment variable USERPROFILE
+ if home := os.Getenv("USERPROFILE"); home != "" {
+ return home, nil
+ }
+
drive := os.Getenv("HOMEDRIVE")
path := os.Getenv("HOMEPATH")
home := drive + path
if drive == "" || path == "" {
- home = os.Getenv("USERPROFILE")
- }
- if home == "" {
- return "", errors.New("HOMEDRIVE, HOMEPATH, and USERPROFILE are blank")
+ return "", errors.New("HOMEDRIVE, HOMEPATH, or USERPROFILE are blank")
}
return home, nil
diff --git a/vendor/github.com/mitchellh/mapstructure/mapstructure.go b/vendor/github.com/mitchellh/mapstructure/mapstructure.go
index 13cc5e3..d3222b8 100644
--- a/vendor/github.com/mitchellh/mapstructure/mapstructure.go
+++ b/vendor/github.com/mitchellh/mapstructure/mapstructure.go
@@ -762,6 +762,9 @@ func (d *Decoder) decodeSlice(name string, data interface{}, val reflect.Value)
val.Set(reflect.MakeSlice(sliceType, 0, 0))
return nil
}
+ // Create slice of maps of other sizes
+ return d.decodeSlice(name, []interface{}{data}, val)
+
case dataValKind == reflect.String && valElemType.Kind() == reflect.Uint8:
return d.decodeSlice(name, []byte(dataVal.String()), val)
// All other types we try to convert to the slice type
diff --git a/vendor/github.com/pelletier/go-toml/PULL_REQUEST_TEMPLATE.md b/vendor/github.com/pelletier/go-toml/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..041cdc4
--- /dev/null
+++ b/vendor/github.com/pelletier/go-toml/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,5 @@
+**Issue:** add link to pelletier/go-toml issue here
+
+Explanation of what this pull request does.
+
+More detailed description of the decisions being made and the reasons why (if the patch is non-trivial).
diff --git a/vendor/github.com/pelletier/go-toml/README.md b/vendor/github.com/pelletier/go-toml/README.md
index 0d357ac..d00b666 100644
--- a/vendor/github.com/pelletier/go-toml/README.md
+++ b/vendor/github.com/pelletier/go-toml/README.md
@@ -8,7 +8,8 @@ This library supports TOML version
[![GoDoc](https://godoc.org/github.com/pelletier/go-toml?status.svg)](http://godoc.org/github.com/pelletier/go-toml)
[![license](https://img.shields.io/github/license/pelletier/go-toml.svg)](https://github.com/pelletier/go-toml/blob/master/LICENSE)
[![Build Status](https://travis-ci.org/pelletier/go-toml.svg?branch=master)](https://travis-ci.org/pelletier/go-toml)
-[![Coverage Status](https://coveralls.io/repos/github/pelletier/go-toml/badge.svg?branch=master)](https://coveralls.io/github/pelletier/go-toml?branch=master)
+[![Windows Build status](https://ci.appveyor.com/api/projects/status/4aepwwjori266hkt/branch/master?svg=true)](https://ci.appveyor.com/project/pelletier/go-toml/branch/master)
+[![codecov](https://codecov.io/gh/pelletier/go-toml/branch/master/graph/badge.svg)](https://codecov.io/gh/pelletier/go-toml)
[![Go Report Card](https://goreportcard.com/badge/github.com/pelletier/go-toml)](https://goreportcard.com/report/github.com/pelletier/go-toml)
## Features
diff --git a/vendor/github.com/pelletier/go-toml/appveyor.yml b/vendor/github.com/pelletier/go-toml/appveyor.yml
new file mode 100644
index 0000000..714a9aa
--- /dev/null
+++ b/vendor/github.com/pelletier/go-toml/appveyor.yml
@@ -0,0 +1,39 @@
+version: "{build}"
+
+# Source Config
+
+clone_folder: c:\gopath\src\github.com\pelletier\go-toml
+
+# Build host
+
+environment:
+ GOPATH: c:\gopath
+ DEPTESTBYPASS501: 1
+ GOVERSION: 1.9
+
+init:
+ - git config --global core.autocrlf input
+
+# Build
+
+install:
+ # Install the specific Go version.
+ - rmdir c:\go /s /q
+ - appveyor DownloadFile https://storage.googleapis.com/golang/go%GOVERSION%.windows-amd64.msi
+ - msiexec /i go%GOVERSION%.windows-amd64.msi /q
+ - choco install bzr
+ - set Path=c:\go\bin;c:\gopath\bin;C:\Program Files (x86)\Bazaar\;C:\Program Files\Mercurial\%Path%
+ - go version
+ - go env
+
+build: false
+deploy: false
+
+test_script:
+ - go get github.com/davecgh/go-spew/spew
+ - go get gopkg.in/yaml.v2
+ - go get github.com/BurntSushi/toml
+ - go build github.com/pelletier/go-toml
+ - go test github.com/pelletier/go-toml
+ - go test github.com/pelletier/go-toml/cmd/tomljson
+ - go test github.com/pelletier/go-toml/query
diff --git a/vendor/github.com/pelletier/go-toml/test.sh b/vendor/github.com/pelletier/go-toml/test.sh
index ba6adf3..af013e8 100755
--- a/vendor/github.com/pelletier/go-toml/test.sh
+++ b/vendor/github.com/pelletier/go-toml/test.sh
@@ -23,15 +23,13 @@ function git_clone() {
# Remove potential previous runs
rm -rf src test_program_bin toml-test
-go get github.com/pelletier/go-buffruneio
go get github.com/davecgh/go-spew/spew
go get gopkg.in/yaml.v2
go get github.com/BurntSushi/toml
# get code for BurntSushi TOML validation
-# pinning all to 'HEAD' for version 0.3.x work (TODO: pin to commit hash when tests stabilize)
-git_clone github.com/BurntSushi/toml master HEAD
-git_clone github.com/BurntSushi/toml-test master HEAD #was: 0.2.0 HEAD
+git_clone github.com/BurntSushi/toml master a368813
+git_clone github.com/BurntSushi/toml-test master 39e37e6
# build the BurntSushi test application
go build -o toml-test github.com/BurntSushi/toml-test
@@ -46,7 +44,7 @@ cp -R query/* src/github.com/pelletier/go-toml/query
go build -o test_program_bin src/github.com/pelletier/go-toml/cmd/test_program.go
# Run basic unit tests
-go test github.com/pelletier/go-toml -covermode=count -coverprofile=coverage.out
+go test github.com/pelletier/go-toml -race -coverprofile=coverage.txt -covermode=atomic
go test github.com/pelletier/go-toml/cmd/tomljson
go test github.com/pelletier/go-toml/query
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collector.go b/vendor/github.com/prometheus/client_golang/prometheus/collector.go
index 623d3d8..3c9bae2 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/collector.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/collector.go
@@ -29,24 +29,35 @@ type Collector interface {
// collected by this Collector to the provided channel and returns once
// the last descriptor has been sent. The sent descriptors fulfill the
// consistency and uniqueness requirements described in the Desc
- // documentation. (It is valid if one and the same Collector sends
- // duplicate descriptors. Those duplicates are simply ignored. However,
- // two different Collectors must not send duplicate descriptors.) This
- // method idempotently sends the same descriptors throughout the
- // lifetime of the Collector. If a Collector encounters an error while
- // executing this method, it must send an invalid descriptor (created
- // with NewInvalidDesc) to signal the error to the registry.
+ // documentation.
+ //
+ // It is valid if one and the same Collector sends duplicate
+ // descriptors. Those duplicates are simply ignored. However, two
+ // different Collectors must not send duplicate descriptors.
+ //
+ // Sending no descriptor at all marks the Collector as “unchecked”,
+ // i.e. no checks will be performed at registration time, and the
+ // Collector may yield any Metric it sees fit in its Collect method.
+ //
+ // This method idempotently sends the same descriptors throughout the
+ // lifetime of the Collector.
+ //
+ // If a Collector encounters an error while executing this method, it
+ // must send an invalid descriptor (created with NewInvalidDesc) to
+ // signal the error to the registry.
Describe(chan<- *Desc)
// Collect is called by the Prometheus registry when collecting
// metrics. The implementation sends each collected metric via the
// provided channel and returns once the last metric has been sent. The
- // descriptor of each sent metric is one of those returned by
- // Describe. Returned metrics that share the same descriptor must differ
- // in their variable label values. This method may be called
- // concurrently and must therefore be implemented in a concurrency safe
- // way. Blocking occurs at the expense of total performance of rendering
- // all registered metrics. Ideally, Collector implementations support
- // concurrent readers.
+ // descriptor of each sent metric is one of those returned by Describe
+ // (unless the Collector is unchecked, see above). Returned metrics that
+ // share the same descriptor must differ in their variable label
+ // values.
+ //
+ // This method may be called concurrently and must therefore be
+ // implemented in a concurrency safe way. Blocking occurs at the expense
+ // of total performance of rendering all registered metrics. Ideally,
+ // Collector implementations support concurrent readers.
Collect(chan<- Metric)
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/doc.go b/vendor/github.com/prometheus/client_golang/prometheus/doc.go
index 83c3657..5d9525d 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/doc.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/doc.go
@@ -121,7 +121,17 @@
// NewConstSummary (and their respective Must… versions). That will happen in
// the Collect method. The Describe method has to return separate Desc
// instances, representative of the “throw-away” metrics to be created later.
-// NewDesc comes in handy to create those Desc instances.
+// NewDesc comes in handy to create those Desc instances. Alternatively, you
+// could return no Desc at all, which will marke the Collector “unchecked”. No
+// checks are porformed at registration time, but metric consistency will still
+// be ensured at scrape time, i.e. any inconsistencies will lead to scrape
+// errors. Thus, with unchecked Collectors, the responsibility to not collect
+// metrics that lead to inconsistencies in the total scrape result lies with the
+// implementer of the Collector. While this is not a desirable state, it is
+// sometimes necessary. The typical use case is a situatios where the exact
+// metrics to be returned by a Collector cannot be predicted at registration
+// time, but the implementer has sufficient knowledge of the whole system to
+// guarantee metric consistency.
//
// The Collector example illustrates the use case. You can also look at the
// source code of the processCollector (mirroring process metrics), the
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/fnv.go b/vendor/github.com/prometheus/client_golang/prometheus/fnv.go
index e3b67df..3d383a7 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/fnv.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/fnv.go
@@ -1,3 +1,16 @@
+// Copyright 2018 The Prometheus Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
package prometheus
// Inline and byte-free variant of hash/fnv's fnv64a.
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go
index 0440bd1..ba3b933 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go
@@ -1,3 +1,16 @@
+// Copyright 2018 The Prometheus Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
package prometheus
import (
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/http.go b/vendor/github.com/prometheus/client_golang/prometheus/http.go
index 4d08154..3f1fa15 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/http.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/http.go
@@ -307,7 +307,7 @@ func InstrumentHandlerFuncWithOpts(opts SummaryOpts, handlerFunc func(http.Respo
}
func computeApproximateRequestSize(r *http.Request) <-chan int {
- // Get URL length in current go routine for avoiding a race condition.
+ // Get URL length in current goroutine for avoiding a race condition.
// HandlerFunc that runs in parallel may modify the URL.
s := 0
if r.URL != nil {
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/labels.go b/vendor/github.com/prometheus/client_golang/prometheus/labels.go
index 2502e37..e68f132 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/labels.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/labels.go
@@ -1,3 +1,16 @@
+// Copyright 2018 The Prometheus Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
package prometheus
import (
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/metric.go
index 76035bc..06897f2 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/metric.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/metric.go
@@ -15,6 +15,9 @@ package prometheus
import (
"strings"
+ "time"
+
+ "github.com/gogo/protobuf/proto"
dto "github.com/prometheus/client_model/go"
)
@@ -142,3 +145,31 @@ func NewInvalidMetric(desc *Desc, err error) Metric {
func (m *invalidMetric) Desc() *Desc { return m.desc }
func (m *invalidMetric) Write(*dto.Metric) error { return m.err }
+
+type timestampedMetric struct {
+ Metric
+ t time.Time
+}
+
+func (m timestampedMetric) Write(pb *dto.Metric) error {
+ e := m.Metric.Write(pb)
+ pb.TimestampMs = proto.Int64(m.t.Unix()*1000 + int64(m.t.Nanosecond()/1000000))
+ return e
+}
+
+// NewMetricWithTimestamp returns a new Metric wrapping the provided Metric in a
+// way that it has an explicit timestamp set to the provided Time. This is only
+// useful in rare cases as the timestamp of a Prometheus metric should usually
+// be set by the Prometheus server during scraping. Exceptions include mirroring
+// metrics with given timestamps from other metric
+// sources.
+//
+// NewMetricWithTimestamp works best with MustNewConstMetric,
+// MustNewConstHistogram, and MustNewConstSummary, see example.
+//
+// Currently, the exposition formats used by Prometheus are limited to
+// millisecond resolution. Thus, the provided time will be rounded down to the
+// next full millisecond value.
+func NewMetricWithTimestamp(t time.Time, m Metric) Metric {
+ return timestampedMetric{Metric: m, t: t}
+}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go
index b80adc6..5ab2b1c 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go
@@ -20,7 +20,8 @@ type processCollector struct {
pidFn func() (int, error)
cpuTotal *Desc
openFDs, maxFDs *Desc
- vsize, rss *Desc
+ vsize, maxVsize *Desc
+ rss *Desc
startTime *Desc
}
@@ -72,6 +73,11 @@ func NewProcessCollectorPIDFn(
"Virtual memory size in bytes.",
nil, nil,
),
+ maxVsize: NewDesc(
+ ns+"process_virtual_memory_max_bytes",
+ "Maximum amount of virtual memory available in bytes.",
+ nil, nil,
+ ),
rss: NewDesc(
ns+"process_resident_memory_bytes",
"Resident memory size in bytes.",
@@ -98,6 +104,7 @@ func (c *processCollector) Describe(ch chan<- *Desc) {
ch <- c.openFDs
ch <- c.maxFDs
ch <- c.vsize
+ ch <- c.maxVsize
ch <- c.rss
ch <- c.startTime
}
@@ -135,5 +142,6 @@ func (c *processCollector) processCollect(ch chan<- Metric) {
if limits, err := p.NewLimits(); err == nil {
ch <- MustNewConstMetric(c.maxFDs, GaugeValue, float64(limits.OpenFiles))
+ ch <- MustNewConstMetric(c.maxVsize, GaugeValue, float64(limits.AddressSpace))
}
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go
index 9c1c66d..67b56d3 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go
@@ -76,16 +76,16 @@ type flusherDelegator struct{ *responseWriterDelegator }
type hijackerDelegator struct{ *responseWriterDelegator }
type readerFromDelegator struct{ *responseWriterDelegator }
-func (d *closeNotifierDelegator) CloseNotify() <-chan bool {
+func (d closeNotifierDelegator) CloseNotify() <-chan bool {
return d.ResponseWriter.(http.CloseNotifier).CloseNotify()
}
-func (d *flusherDelegator) Flush() {
+func (d flusherDelegator) Flush() {
d.ResponseWriter.(http.Flusher).Flush()
}
-func (d *hijackerDelegator) Hijack() (net.Conn, *bufio.ReadWriter, error) {
+func (d hijackerDelegator) Hijack() (net.Conn, *bufio.ReadWriter, error) {
return d.ResponseWriter.(http.Hijacker).Hijack()
}
-func (d *readerFromDelegator) ReadFrom(re io.Reader) (int64, error) {
+func (d readerFromDelegator) ReadFrom(re io.Reader) (int64, error) {
if !d.wroteHeader {
d.WriteHeader(http.StatusOK)
}
@@ -102,34 +102,34 @@ func init() {
return d
}
pickDelegator[closeNotifier] = func(d *responseWriterDelegator) delegator { // 1
- return &closeNotifierDelegator{d}
+ return closeNotifierDelegator{d}
}
pickDelegator[flusher] = func(d *responseWriterDelegator) delegator { // 2
- return &flusherDelegator{d}
+ return flusherDelegator{d}
}
pickDelegator[flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 3
return struct {
*responseWriterDelegator
http.Flusher
http.CloseNotifier
- }{d, &flusherDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, flusherDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[hijacker] = func(d *responseWriterDelegator) delegator { // 4
- return &hijackerDelegator{d}
+ return hijackerDelegator{d}
}
pickDelegator[hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 5
return struct {
*responseWriterDelegator
http.Hijacker
http.CloseNotifier
- }{d, &hijackerDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, hijackerDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 6
return struct {
*responseWriterDelegator
http.Hijacker
http.Flusher
- }{d, &hijackerDelegator{d}, &flusherDelegator{d}}
+ }{d, hijackerDelegator{d}, flusherDelegator{d}}
}
pickDelegator[hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 7
return struct {
@@ -137,7 +137,7 @@ func init() {
http.Hijacker
http.Flusher
http.CloseNotifier
- }{d, &hijackerDelegator{d}, &flusherDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[readerFrom] = func(d *responseWriterDelegator) delegator { // 8
return readerFromDelegator{d}
@@ -147,14 +147,14 @@ func init() {
*responseWriterDelegator
io.ReaderFrom
http.CloseNotifier
- }{d, &readerFromDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, readerFromDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[readerFrom+flusher] = func(d *responseWriterDelegator) delegator { // 10
return struct {
*responseWriterDelegator
io.ReaderFrom
http.Flusher
- }{d, &readerFromDelegator{d}, &flusherDelegator{d}}
+ }{d, readerFromDelegator{d}, flusherDelegator{d}}
}
pickDelegator[readerFrom+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 11
return struct {
@@ -162,14 +162,14 @@ func init() {
io.ReaderFrom
http.Flusher
http.CloseNotifier
- }{d, &readerFromDelegator{d}, &flusherDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, readerFromDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[readerFrom+hijacker] = func(d *responseWriterDelegator) delegator { // 12
return struct {
*responseWriterDelegator
io.ReaderFrom
http.Hijacker
- }{d, &readerFromDelegator{d}, &hijackerDelegator{d}}
+ }{d, readerFromDelegator{d}, hijackerDelegator{d}}
}
pickDelegator[readerFrom+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 13
return struct {
@@ -177,7 +177,7 @@ func init() {
io.ReaderFrom
http.Hijacker
http.CloseNotifier
- }{d, &readerFromDelegator{d}, &hijackerDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, readerFromDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[readerFrom+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 14
return struct {
@@ -185,7 +185,7 @@ func init() {
io.ReaderFrom
http.Hijacker
http.Flusher
- }{d, &readerFromDelegator{d}, &hijackerDelegator{d}, &flusherDelegator{d}}
+ }{d, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}}
}
pickDelegator[readerFrom+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 15
return struct {
@@ -194,6 +194,6 @@ func init() {
http.Hijacker
http.Flusher
http.CloseNotifier
- }{d, &readerFromDelegator{d}, &hijackerDelegator{d}, &flusherDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
}
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go
index 75a905e..31a7069 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go
@@ -22,27 +22,27 @@ import (
type pusherDelegator struct{ *responseWriterDelegator }
-func (d *pusherDelegator) Push(target string, opts *http.PushOptions) error {
+func (d pusherDelegator) Push(target string, opts *http.PushOptions) error {
return d.ResponseWriter.(http.Pusher).Push(target, opts)
}
func init() {
pickDelegator[pusher] = func(d *responseWriterDelegator) delegator { // 16
- return &pusherDelegator{d}
+ return pusherDelegator{d}
}
pickDelegator[pusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 17
return struct {
*responseWriterDelegator
http.Pusher
http.CloseNotifier
- }{d, &pusherDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, pusherDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[pusher+flusher] = func(d *responseWriterDelegator) delegator { // 18
return struct {
*responseWriterDelegator
http.Pusher
http.Flusher
- }{d, &pusherDelegator{d}, &flusherDelegator{d}}
+ }{d, pusherDelegator{d}, flusherDelegator{d}}
}
pickDelegator[pusher+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 19
return struct {
@@ -50,14 +50,14 @@ func init() {
http.Pusher
http.Flusher
http.CloseNotifier
- }{d, &pusherDelegator{d}, &flusherDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, pusherDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[pusher+hijacker] = func(d *responseWriterDelegator) delegator { // 20
return struct {
*responseWriterDelegator
http.Pusher
http.Hijacker
- }{d, &pusherDelegator{d}, &hijackerDelegator{d}}
+ }{d, pusherDelegator{d}, hijackerDelegator{d}}
}
pickDelegator[pusher+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 21
return struct {
@@ -65,7 +65,7 @@ func init() {
http.Pusher
http.Hijacker
http.CloseNotifier
- }{d, &pusherDelegator{d}, &hijackerDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, pusherDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[pusher+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 22
return struct {
@@ -73,7 +73,7 @@ func init() {
http.Pusher
http.Hijacker
http.Flusher
- }{d, &pusherDelegator{d}, &hijackerDelegator{d}, &flusherDelegator{d}}
+ }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}}
}
pickDelegator[pusher+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { //23
return struct {
@@ -82,14 +82,14 @@ func init() {
http.Hijacker
http.Flusher
http.CloseNotifier
- }{d, &pusherDelegator{d}, &hijackerDelegator{d}, &flusherDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[pusher+readerFrom] = func(d *responseWriterDelegator) delegator { // 24
return struct {
*responseWriterDelegator
http.Pusher
io.ReaderFrom
- }{d, &pusherDelegator{d}, &readerFromDelegator{d}}
+ }{d, pusherDelegator{d}, readerFromDelegator{d}}
}
pickDelegator[pusher+readerFrom+closeNotifier] = func(d *responseWriterDelegator) delegator { // 25
return struct {
@@ -97,7 +97,7 @@ func init() {
http.Pusher
io.ReaderFrom
http.CloseNotifier
- }{d, &pusherDelegator{d}, &readerFromDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, pusherDelegator{d}, readerFromDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[pusher+readerFrom+flusher] = func(d *responseWriterDelegator) delegator { // 26
return struct {
@@ -105,7 +105,7 @@ func init() {
http.Pusher
io.ReaderFrom
http.Flusher
- }{d, &pusherDelegator{d}, &readerFromDelegator{d}, &flusherDelegator{d}}
+ }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}}
}
pickDelegator[pusher+readerFrom+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 27
return struct {
@@ -114,7 +114,7 @@ func init() {
io.ReaderFrom
http.Flusher
http.CloseNotifier
- }{d, &pusherDelegator{d}, &readerFromDelegator{d}, &flusherDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[pusher+readerFrom+hijacker] = func(d *responseWriterDelegator) delegator { // 28
return struct {
@@ -122,7 +122,7 @@ func init() {
http.Pusher
io.ReaderFrom
http.Hijacker
- }{d, &pusherDelegator{d}, &readerFromDelegator{d}, &hijackerDelegator{d}}
+ }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}}
}
pickDelegator[pusher+readerFrom+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 29
return struct {
@@ -131,7 +131,7 @@ func init() {
io.ReaderFrom
http.Hijacker
http.CloseNotifier
- }{d, &pusherDelegator{d}, &readerFromDelegator{d}, &hijackerDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}}
}
pickDelegator[pusher+readerFrom+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 30
return struct {
@@ -140,7 +140,7 @@ func init() {
io.ReaderFrom
http.Hijacker
http.Flusher
- }{d, &pusherDelegator{d}, &readerFromDelegator{d}, &hijackerDelegator{d}, &flusherDelegator{d}}
+ }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}}
}
pickDelegator[pusher+readerFrom+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 31
return struct {
@@ -150,7 +150,7 @@ func init() {
http.Hijacker
http.Flusher
http.CloseNotifier
- }{d, &pusherDelegator{d}, &readerFromDelegator{d}, &hijackerDelegator{d}, &flusherDelegator{d}, &closeNotifierDelegator{d}}
+ }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
}
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/registry.go b/vendor/github.com/prometheus/client_golang/prometheus/registry.go
index fdb7bad..896838f 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/registry.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/registry.go
@@ -15,11 +15,11 @@ package prometheus
import (
"bytes"
- "errors"
"fmt"
"os"
"runtime"
"sort"
+ "strings"
"sync"
"unicode/utf8"
@@ -68,7 +68,8 @@ func NewRegistry() *Registry {
// NewPedanticRegistry returns a registry that checks during collection if each
// collected Metric is consistent with its reported Desc, and if the Desc has
-// actually been registered with the registry.
+// actually been registered with the registry. Unchecked Collectors (those whose
+// Describe methed does not yield any descriptors) are excluded from the check.
//
// Usually, a Registry will be happy as long as the union of all collected
// Metrics is consistent and valid even if some metrics are not consistent with
@@ -98,6 +99,14 @@ type Registerer interface {
// returned error is an instance of AlreadyRegisteredError, which
// contains the previously registered Collector.
//
+ // A Collector whose Describe method does not yield any Desc is treated
+ // as unchecked. Registration will always succeed. No check for
+ // re-registering (see previous paragraph) is performed. Thus, the
+ // caller is responsible for not double-registering the same unchecked
+ // Collector, and for providing a Collector that will not cause
+ // inconsistent metrics on collection. (This would lead to scrape
+ // errors.)
+ //
// It is in general not safe to register the same Collector multiple
// times concurrently.
Register(Collector) error
@@ -108,7 +117,9 @@ type Registerer interface {
// Unregister unregisters the Collector that equals the Collector passed
// in as an argument. (Two Collectors are considered equal if their
// Describe method yields the same set of descriptors.) The function
- // returns whether a Collector was unregistered.
+ // returns whether a Collector was unregistered. Note that an unchecked
+ // Collector cannot be unregistered (as its Describe method does not
+ // yield any descriptor).
//
// Note that even after unregistering, it will not be possible to
// register a new Collector that is inconsistent with the unregistered
@@ -243,6 +254,7 @@ type Registry struct {
collectorsByID map[uint64]Collector // ID is a hash of the descIDs.
descIDs map[uint64]struct{}
dimHashesByName map[string]uint64
+ uncheckedCollectors []Collector
pedanticChecksEnabled bool
}
@@ -300,9 +312,10 @@ func (r *Registry) Register(c Collector) error {
}
}
}
- // Did anything happen at all?
+ // A Collector yielding no Desc at all is considered unchecked.
if len(newDescIDs) == 0 {
- return errors.New("collector has no descriptors")
+ r.uncheckedCollectors = append(r.uncheckedCollectors, c)
+ return nil
}
if existing, exists := r.collectorsByID[collectorID]; exists {
return AlreadyRegisteredError{
@@ -376,19 +389,24 @@ func (r *Registry) MustRegister(cs ...Collector) {
// Gather implements Gatherer.
func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
var (
- metricChan = make(chan Metric, capMetricChan)
- metricHashes = map[uint64]struct{}{}
- wg sync.WaitGroup
- errs MultiError // The collected errors to return in the end.
- registeredDescIDs map[uint64]struct{} // Only used for pedantic checks
+ checkedMetricChan = make(chan Metric, capMetricChan)
+ uncheckedMetricChan = make(chan Metric, capMetricChan)
+ metricHashes = map[uint64]struct{}{}
+ wg sync.WaitGroup
+ errs MultiError // The collected errors to return in the end.
+ registeredDescIDs map[uint64]struct{} // Only used for pedantic checks
)
r.mtx.RLock()
- goroutineBudget := len(r.collectorsByID)
+ goroutineBudget := len(r.collectorsByID) + len(r.uncheckedCollectors)
metricFamiliesByName := make(map[string]*dto.MetricFamily, len(r.dimHashesByName))
- collectors := make(chan Collector, len(r.collectorsByID))
+ checkedCollectors := make(chan Collector, len(r.collectorsByID))
+ uncheckedCollectors := make(chan Collector, len(r.uncheckedCollectors))
for _, collector := range r.collectorsByID {
- collectors <- collector
+ checkedCollectors <- collector
+ }
+ for _, collector := range r.uncheckedCollectors {
+ uncheckedCollectors <- collector
}
// In case pedantic checks are enabled, we have to copy the map before
// giving up the RLock.
@@ -405,12 +423,14 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
collectWorker := func() {
for {
select {
- case collector := <-collectors:
- collector.Collect(metricChan)
- wg.Done()
+ case collector := <-checkedCollectors:
+ collector.Collect(checkedMetricChan)
+ case collector := <-uncheckedCollectors:
+ collector.Collect(uncheckedMetricChan)
default:
return
}
+ wg.Done()
}
}
@@ -418,51 +438,94 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
go collectWorker()
goroutineBudget--
- // Close the metricChan once all collectors are collected.
+ // Close checkedMetricChan and uncheckedMetricChan once all collectors
+ // are collected.
go func() {
wg.Wait()
- close(metricChan)
+ close(checkedMetricChan)
+ close(uncheckedMetricChan)
}()
- // Drain metricChan in case of premature return.
+ // Drain checkedMetricChan and uncheckedMetricChan in case of premature return.
defer func() {
- for range metricChan {
+ if checkedMetricChan != nil {
+ for range checkedMetricChan {
+ }
+ }
+ if uncheckedMetricChan != nil {
+ for range uncheckedMetricChan {
+ }
}
}()
-collectLoop:
+ // Copy the channel references so we can nil them out later to remove
+ // them from the select statements below.
+ cmc := checkedMetricChan
+ umc := uncheckedMetricChan
+
for {
select {
- case metric, ok := <-metricChan:
+ case metric, ok := <-cmc:
if !ok {
- // metricChan is closed, we are done.
- break collectLoop
+ cmc = nil
+ break
}
errs.Append(processMetric(
metric, metricFamiliesByName,
metricHashes,
registeredDescIDs,
))
+ case metric, ok := <-umc:
+ if !ok {
+ umc = nil
+ break
+ }
+ errs.Append(processMetric(
+ metric, metricFamiliesByName,
+ metricHashes,
+ nil,
+ ))
default:
- if goroutineBudget <= 0 || len(collectors) == 0 {
+ if goroutineBudget <= 0 || len(checkedCollectors)+len(uncheckedCollectors) == 0 {
// All collectors are already being worked on or
// we have already as many goroutines started as
- // there are collectors. Just process metrics
- // from now on.
- for metric := range metricChan {
+ // there are collectors. Do the same as above,
+ // just without the default.
+ select {
+ case metric, ok := <-cmc:
+ if !ok {
+ cmc = nil
+ break
+ }
errs.Append(processMetric(
metric, metricFamiliesByName,
metricHashes,
registeredDescIDs,
))
+ case metric, ok := <-umc:
+ if !ok {
+ umc = nil
+ break
+ }
+ errs.Append(processMetric(
+ metric, metricFamiliesByName,
+ metricHashes,
+ nil,
+ ))
}
- break collectLoop
+ break
}
// Start more workers.
go collectWorker()
goroutineBudget--
runtime.Gosched()
}
+ // Once both checkedMetricChan and uncheckdMetricChan are closed
+ // and drained, the contraption above will nil out cmc and umc,
+ // and then we can leave the collect loop here.
+ if cmc == nil && umc == nil {
+ break
+ }
}
return normalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap()
}
@@ -480,7 +543,7 @@ func processMetric(
return fmt.Errorf("error collecting metric %v: %s", desc, err)
}
metricFamily, ok := metricFamiliesByName[desc.fqName]
- if ok {
+ if ok { // Existing name.
if metricFamily.GetHelp() != desc.help {
return fmt.Errorf(
"collected metric %s %s has help %q but should have %q",
@@ -527,7 +590,7 @@ func processMetric(
default:
panic("encountered MetricFamily with invalid type")
}
- } else {
+ } else { // New name.
metricFamily = &dto.MetricFamily{}
metricFamily.Name = proto.String(desc.fqName)
metricFamily.Help = proto.String(desc.help)
@@ -546,6 +609,9 @@ func processMetric(
default:
return fmt.Errorf("empty metric collected: %s", dtoMetric)
}
+ if err := checkSuffixCollisions(metricFamily, metricFamiliesByName); err != nil {
+ return err
+ }
metricFamiliesByName[desc.fqName] = metricFamily
}
if err := checkMetricConsistency(metricFamily, dtoMetric, metricHashes); err != nil {
@@ -626,6 +692,10 @@ func (gs Gatherers) Gather() ([]*dto.MetricFamily, error) {
existingMF.Name = mf.Name
existingMF.Help = mf.Help
existingMF.Type = mf.Type
+ if err := checkSuffixCollisions(existingMF, metricFamiliesByName); err != nil {
+ errs = append(errs, err)
+ continue
+ }
metricFamiliesByName[mf.GetName()] = existingMF
}
for _, m := range mf.Metric {
@@ -705,6 +775,66 @@ func normalizeMetricFamilies(metricFamiliesByName map[string]*dto.MetricFamily)
return result
}
+// checkSuffixCollisions checks for collisions with the “magic” suffixes the
+// Prometheus text format and the internal metric representation of the
+// Prometheus server add while flattening Summaries and Histograms.
+func checkSuffixCollisions(mf *dto.MetricFamily, mfs map[string]*dto.MetricFamily) error {
+ var (
+ newName = mf.GetName()
+ newType = mf.GetType()
+ newNameWithoutSuffix = ""
+ )
+ switch {
+ case strings.HasSuffix(newName, "_count"):
+ newNameWithoutSuffix = newName[:len(newName)-6]
+ case strings.HasSuffix(newName, "_sum"):
+ newNameWithoutSuffix = newName[:len(newName)-4]
+ case strings.HasSuffix(newName, "_bucket"):
+ newNameWithoutSuffix = newName[:len(newName)-7]
+ }
+ if newNameWithoutSuffix != "" {
+ if existingMF, ok := mfs[newNameWithoutSuffix]; ok {
+ switch existingMF.GetType() {
+ case dto.MetricType_SUMMARY:
+ if !strings.HasSuffix(newName, "_bucket") {
+ return fmt.Errorf(
+ "collected metric named %q collides with previously collected summary named %q",
+ newName, newNameWithoutSuffix,
+ )
+ }
+ case dto.MetricType_HISTOGRAM:
+ return fmt.Errorf(
+ "collected metric named %q collides with previously collected histogram named %q",
+ newName, newNameWithoutSuffix,
+ )
+ }
+ }
+ }
+ if newType == dto.MetricType_SUMMARY || newType == dto.MetricType_HISTOGRAM {
+ if _, ok := mfs[newName+"_count"]; ok {
+ return fmt.Errorf(
+ "collected histogram or summary named %q collides with previously collected metric named %q",
+ newName, newName+"_count",
+ )
+ }
+ if _, ok := mfs[newName+"_sum"]; ok {
+ return fmt.Errorf(
+ "collected histogram or summary named %q collides with previously collected metric named %q",
+ newName, newName+"_sum",
+ )
+ }
+ }
+ if newType == dto.MetricType_HISTOGRAM {
+ if _, ok := mfs[newName+"_bucket"]; ok {
+ return fmt.Errorf(
+ "collected histogram named %q collides with previously collected metric named %q",
+ newName, newName+"_bucket",
+ )
+ }
+ }
+ return nil
+}
+
// checkMetricConsistency checks if the provided Metric is consistent with the
// provided MetricFamily. It also hashes the Metric labels and the MetricFamily
// name. If the resulting hash is already in the provided metricHashes, an error
@@ -721,14 +851,28 @@ func checkMetricConsistency(
metricFamily.GetType() == dto.MetricType_HISTOGRAM && dtoMetric.Histogram == nil ||
metricFamily.GetType() == dto.MetricType_UNTYPED && dtoMetric.Untyped == nil {
return fmt.Errorf(
- "collected metric %s %s is not a %s",
+ "collected metric %q { %s} is not a %s",
metricFamily.GetName(), dtoMetric, metricFamily.GetType(),
)
}
for _, labelPair := range dtoMetric.GetLabel() {
+ if !checkLabelName(labelPair.GetName()) {
+ return fmt.Errorf(
+ "collected metric %q { %s} has a label with an invalid name: %s",
+ metricFamily.GetName(), dtoMetric, labelPair.GetName(),
+ )
+ }
+ if dtoMetric.Summary != nil && labelPair.GetName() == quantileLabel {
+ return fmt.Errorf(
+ "collected metric %q { %s} must not have an explicit %q label",
+ metricFamily.GetName(), dtoMetric, quantileLabel,
+ )
+ }
if !utf8.ValidString(labelPair.GetValue()) {
- return fmt.Errorf("collected metric's label %s is not utf8: %#v", labelPair.GetName(), labelPair.GetValue())
+ return fmt.Errorf(
+ "collected metric %q { %s} has a label named %q whose value is not utf8: %#v",
+ metricFamily.GetName(), dtoMetric, labelPair.GetName(), labelPair.GetValue())
}
}
@@ -747,7 +891,7 @@ func checkMetricConsistency(
}
if _, exists := metricHashes[h]; exists {
return fmt.Errorf(
- "collected metric %s %s was collected before with the same name and label values",
+ "collected metric %q { %s} was collected before with the same name and label values",
metricFamily.GetName(), dtoMetric,
)
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/vendor/github.com/prometheus/client_golang/prometheus/summary.go
index f7dc85b..83b403c 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/summary.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/summary.go
@@ -105,6 +105,11 @@ type SummaryOpts struct {
// with the same fully-qualified name must have the same label names in
// their ConstLabels.
//
+ // Due to the way a Summary is represented in the Prometheus text format
+ // and how it is handled by the Prometheus server internally, “quantile”
+ // is an illegal label name. Construction of a Summary or SummaryVec
+ // will panic if this label name is used in ConstLabels.
+ //
// ConstLabels are only used rarely. In particular, do not use them to
// attach the same labels to all your metrics. Those use cases are
// better covered by target labels set by the scraping Prometheus
@@ -402,7 +407,16 @@ type SummaryVec struct {
// NewSummaryVec creates a new SummaryVec based on the provided SummaryOpts and
// partitioned by the given label names.
+//
+// Due to the way a Summary is represented in the Prometheus text format and how
+// it is handled by the Prometheus server internally, “quantile” is an illegal
+// label name. NewSummaryVec will panic if this label name is used.
func NewSummaryVec(opts SummaryOpts, labelNames []string) *SummaryVec {
+ for _, ln := range labelNames {
+ if ln == quantileLabel {
+ panic(errQuantileLabelNotAllowed)
+ }
+ }
desc := NewDesc(
BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
opts.Help,
diff --git a/vendor/github.com/prometheus/client_model/go/metrics.pb.go b/vendor/github.com/prometheus/client_model/go/metrics.pb.go
index b065f86..9805432 100644
--- a/vendor/github.com/prometheus/client_model/go/metrics.pb.go
+++ b/vendor/github.com/prometheus/client_model/go/metrics.pb.go
@@ -1,34 +1,23 @@
-// Code generated by protoc-gen-go.
+// Code generated by protoc-gen-go. DO NOT EDIT.
// source: metrics.proto
-// DO NOT EDIT!
-
-/*
-Package io_prometheus_client is a generated protocol buffer package.
-
-It is generated from these files:
- metrics.proto
-
-It has these top-level messages:
- LabelPair
- Gauge
- Counter
- Quantile
- Summary
- Untyped
- Histogram
- Bucket
- Metric
- MetricFamily
-*/
-package io_prometheus_client
+
+package io_prometheus_client // import "github.com/prometheus/client_model/go"
import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
import math "math"
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
+var _ = fmt.Errorf
var _ = math.Inf
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
type MetricType int32
const (
@@ -70,16 +59,41 @@ func (x *MetricType) UnmarshalJSON(data []byte) error {
*x = MetricType(value)
return nil
}
+func (MetricType) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{0}
+}
type LabelPair struct {
- Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
- Value *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+ Value *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *LabelPair) Reset() { *m = LabelPair{} }
func (m *LabelPair) String() string { return proto.CompactTextString(m) }
func (*LabelPair) ProtoMessage() {}
+func (*LabelPair) Descriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{0}
+}
+func (m *LabelPair) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LabelPair.Unmarshal(m, b)
+}
+func (m *LabelPair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LabelPair.Marshal(b, m, deterministic)
+}
+func (dst *LabelPair) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LabelPair.Merge(dst, src)
+}
+func (m *LabelPair) XXX_Size() int {
+ return xxx_messageInfo_LabelPair.Size(m)
+}
+func (m *LabelPair) XXX_DiscardUnknown() {
+ xxx_messageInfo_LabelPair.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LabelPair proto.InternalMessageInfo
func (m *LabelPair) GetName() string {
if m != nil && m.Name != nil {
@@ -96,13 +110,35 @@ func (m *LabelPair) GetValue() string {
}
type Gauge struct {
- Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *Gauge) Reset() { *m = Gauge{} }
func (m *Gauge) String() string { return proto.CompactTextString(m) }
func (*Gauge) ProtoMessage() {}
+func (*Gauge) Descriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{1}
+}
+func (m *Gauge) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Gauge.Unmarshal(m, b)
+}
+func (m *Gauge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Gauge.Marshal(b, m, deterministic)
+}
+func (dst *Gauge) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Gauge.Merge(dst, src)
+}
+func (m *Gauge) XXX_Size() int {
+ return xxx_messageInfo_Gauge.Size(m)
+}
+func (m *Gauge) XXX_DiscardUnknown() {
+ xxx_messageInfo_Gauge.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Gauge proto.InternalMessageInfo
func (m *Gauge) GetValue() float64 {
if m != nil && m.Value != nil {
@@ -112,13 +148,35 @@ func (m *Gauge) GetValue() float64 {
}
type Counter struct {
- Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *Counter) Reset() { *m = Counter{} }
func (m *Counter) String() string { return proto.CompactTextString(m) }
func (*Counter) ProtoMessage() {}
+func (*Counter) Descriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{2}
+}
+func (m *Counter) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Counter.Unmarshal(m, b)
+}
+func (m *Counter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Counter.Marshal(b, m, deterministic)
+}
+func (dst *Counter) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Counter.Merge(dst, src)
+}
+func (m *Counter) XXX_Size() int {
+ return xxx_messageInfo_Counter.Size(m)
+}
+func (m *Counter) XXX_DiscardUnknown() {
+ xxx_messageInfo_Counter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Counter proto.InternalMessageInfo
func (m *Counter) GetValue() float64 {
if m != nil && m.Value != nil {
@@ -128,14 +186,36 @@ func (m *Counter) GetValue() float64 {
}
type Quantile struct {
- Quantile *float64 `protobuf:"fixed64,1,opt,name=quantile" json:"quantile,omitempty"`
- Value *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Quantile *float64 `protobuf:"fixed64,1,opt,name=quantile" json:"quantile,omitempty"`
+ Value *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *Quantile) Reset() { *m = Quantile{} }
func (m *Quantile) String() string { return proto.CompactTextString(m) }
func (*Quantile) ProtoMessage() {}
+func (*Quantile) Descriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{3}
+}
+func (m *Quantile) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Quantile.Unmarshal(m, b)
+}
+func (m *Quantile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Quantile.Marshal(b, m, deterministic)
+}
+func (dst *Quantile) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Quantile.Merge(dst, src)
+}
+func (m *Quantile) XXX_Size() int {
+ return xxx_messageInfo_Quantile.Size(m)
+}
+func (m *Quantile) XXX_DiscardUnknown() {
+ xxx_messageInfo_Quantile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Quantile proto.InternalMessageInfo
func (m *Quantile) GetQuantile() float64 {
if m != nil && m.Quantile != nil {
@@ -152,15 +232,37 @@ func (m *Quantile) GetValue() float64 {
}
type Summary struct {
- SampleCount *uint64 `protobuf:"varint,1,opt,name=sample_count" json:"sample_count,omitempty"`
- SampleSum *float64 `protobuf:"fixed64,2,opt,name=sample_sum" json:"sample_sum,omitempty"`
- Quantile []*Quantile `protobuf:"bytes,3,rep,name=quantile" json:"quantile,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ SampleCount *uint64 `protobuf:"varint,1,opt,name=sample_count,json=sampleCount" json:"sample_count,omitempty"`
+ SampleSum *float64 `protobuf:"fixed64,2,opt,name=sample_sum,json=sampleSum" json:"sample_sum,omitempty"`
+ Quantile []*Quantile `protobuf:"bytes,3,rep,name=quantile" json:"quantile,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *Summary) Reset() { *m = Summary{} }
func (m *Summary) String() string { return proto.CompactTextString(m) }
func (*Summary) ProtoMessage() {}
+func (*Summary) Descriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{4}
+}
+func (m *Summary) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Summary.Unmarshal(m, b)
+}
+func (m *Summary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Summary.Marshal(b, m, deterministic)
+}
+func (dst *Summary) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Summary.Merge(dst, src)
+}
+func (m *Summary) XXX_Size() int {
+ return xxx_messageInfo_Summary.Size(m)
+}
+func (m *Summary) XXX_DiscardUnknown() {
+ xxx_messageInfo_Summary.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Summary proto.InternalMessageInfo
func (m *Summary) GetSampleCount() uint64 {
if m != nil && m.SampleCount != nil {
@@ -184,13 +286,35 @@ func (m *Summary) GetQuantile() []*Quantile {
}
type Untyped struct {
- Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *Untyped) Reset() { *m = Untyped{} }
func (m *Untyped) String() string { return proto.CompactTextString(m) }
func (*Untyped) ProtoMessage() {}
+func (*Untyped) Descriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{5}
+}
+func (m *Untyped) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Untyped.Unmarshal(m, b)
+}
+func (m *Untyped) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Untyped.Marshal(b, m, deterministic)
+}
+func (dst *Untyped) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Untyped.Merge(dst, src)
+}
+func (m *Untyped) XXX_Size() int {
+ return xxx_messageInfo_Untyped.Size(m)
+}
+func (m *Untyped) XXX_DiscardUnknown() {
+ xxx_messageInfo_Untyped.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Untyped proto.InternalMessageInfo
func (m *Untyped) GetValue() float64 {
if m != nil && m.Value != nil {
@@ -200,15 +324,37 @@ func (m *Untyped) GetValue() float64 {
}
type Histogram struct {
- SampleCount *uint64 `protobuf:"varint,1,opt,name=sample_count" json:"sample_count,omitempty"`
- SampleSum *float64 `protobuf:"fixed64,2,opt,name=sample_sum" json:"sample_sum,omitempty"`
- Bucket []*Bucket `protobuf:"bytes,3,rep,name=bucket" json:"bucket,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ SampleCount *uint64 `protobuf:"varint,1,opt,name=sample_count,json=sampleCount" json:"sample_count,omitempty"`
+ SampleSum *float64 `protobuf:"fixed64,2,opt,name=sample_sum,json=sampleSum" json:"sample_sum,omitempty"`
+ Bucket []*Bucket `protobuf:"bytes,3,rep,name=bucket" json:"bucket,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *Histogram) Reset() { *m = Histogram{} }
func (m *Histogram) String() string { return proto.CompactTextString(m) }
func (*Histogram) ProtoMessage() {}
+func (*Histogram) Descriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{6}
+}
+func (m *Histogram) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Histogram.Unmarshal(m, b)
+}
+func (m *Histogram) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Histogram.Marshal(b, m, deterministic)
+}
+func (dst *Histogram) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Histogram.Merge(dst, src)
+}
+func (m *Histogram) XXX_Size() int {
+ return xxx_messageInfo_Histogram.Size(m)
+}
+func (m *Histogram) XXX_DiscardUnknown() {
+ xxx_messageInfo_Histogram.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Histogram proto.InternalMessageInfo
func (m *Histogram) GetSampleCount() uint64 {
if m != nil && m.SampleCount != nil {
@@ -232,14 +378,36 @@ func (m *Histogram) GetBucket() []*Bucket {
}
type Bucket struct {
- CumulativeCount *uint64 `protobuf:"varint,1,opt,name=cumulative_count" json:"cumulative_count,omitempty"`
- UpperBound *float64 `protobuf:"fixed64,2,opt,name=upper_bound" json:"upper_bound,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ CumulativeCount *uint64 `protobuf:"varint,1,opt,name=cumulative_count,json=cumulativeCount" json:"cumulative_count,omitempty"`
+ UpperBound *float64 `protobuf:"fixed64,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *Bucket) Reset() { *m = Bucket{} }
func (m *Bucket) String() string { return proto.CompactTextString(m) }
func (*Bucket) ProtoMessage() {}
+func (*Bucket) Descriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{7}
+}
+func (m *Bucket) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Bucket.Unmarshal(m, b)
+}
+func (m *Bucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Bucket.Marshal(b, m, deterministic)
+}
+func (dst *Bucket) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Bucket.Merge(dst, src)
+}
+func (m *Bucket) XXX_Size() int {
+ return xxx_messageInfo_Bucket.Size(m)
+}
+func (m *Bucket) XXX_DiscardUnknown() {
+ xxx_messageInfo_Bucket.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Bucket proto.InternalMessageInfo
func (m *Bucket) GetCumulativeCount() uint64 {
if m != nil && m.CumulativeCount != nil {
@@ -256,19 +424,41 @@ func (m *Bucket) GetUpperBound() float64 {
}
type Metric struct {
- Label []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"`
- Gauge *Gauge `protobuf:"bytes,2,opt,name=gauge" json:"gauge,omitempty"`
- Counter *Counter `protobuf:"bytes,3,opt,name=counter" json:"counter,omitempty"`
- Summary *Summary `protobuf:"bytes,4,opt,name=summary" json:"summary,omitempty"`
- Untyped *Untyped `protobuf:"bytes,5,opt,name=untyped" json:"untyped,omitempty"`
- Histogram *Histogram `protobuf:"bytes,7,opt,name=histogram" json:"histogram,omitempty"`
- TimestampMs *int64 `protobuf:"varint,6,opt,name=timestamp_ms" json:"timestamp_ms,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Label []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"`
+ Gauge *Gauge `protobuf:"bytes,2,opt,name=gauge" json:"gauge,omitempty"`
+ Counter *Counter `protobuf:"bytes,3,opt,name=counter" json:"counter,omitempty"`
+ Summary *Summary `protobuf:"bytes,4,opt,name=summary" json:"summary,omitempty"`
+ Untyped *Untyped `protobuf:"bytes,5,opt,name=untyped" json:"untyped,omitempty"`
+ Histogram *Histogram `protobuf:"bytes,7,opt,name=histogram" json:"histogram,omitempty"`
+ TimestampMs *int64 `protobuf:"varint,6,opt,name=timestamp_ms,json=timestampMs" json:"timestamp_ms,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *Metric) Reset() { *m = Metric{} }
func (m *Metric) String() string { return proto.CompactTextString(m) }
func (*Metric) ProtoMessage() {}
+func (*Metric) Descriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{8}
+}
+func (m *Metric) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Metric.Unmarshal(m, b)
+}
+func (m *Metric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Metric.Marshal(b, m, deterministic)
+}
+func (dst *Metric) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Metric.Merge(dst, src)
+}
+func (m *Metric) XXX_Size() int {
+ return xxx_messageInfo_Metric.Size(m)
+}
+func (m *Metric) XXX_DiscardUnknown() {
+ xxx_messageInfo_Metric.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Metric proto.InternalMessageInfo
func (m *Metric) GetLabel() []*LabelPair {
if m != nil {
@@ -320,16 +510,38 @@ func (m *Metric) GetTimestampMs() int64 {
}
type MetricFamily struct {
- Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
- Help *string `protobuf:"bytes,2,opt,name=help" json:"help,omitempty"`
- Type *MetricType `protobuf:"varint,3,opt,name=type,enum=io.prometheus.client.MetricType" json:"type,omitempty"`
- Metric []*Metric `protobuf:"bytes,4,rep,name=metric" json:"metric,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+ Help *string `protobuf:"bytes,2,opt,name=help" json:"help,omitempty"`
+ Type *MetricType `protobuf:"varint,3,opt,name=type,enum=io.prometheus.client.MetricType" json:"type,omitempty"`
+ Metric []*Metric `protobuf:"bytes,4,rep,name=metric" json:"metric,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *MetricFamily) Reset() { *m = MetricFamily{} }
func (m *MetricFamily) String() string { return proto.CompactTextString(m) }
func (*MetricFamily) ProtoMessage() {}
+func (*MetricFamily) Descriptor() ([]byte, []int) {
+ return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{9}
+}
+func (m *MetricFamily) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_MetricFamily.Unmarshal(m, b)
+}
+func (m *MetricFamily) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_MetricFamily.Marshal(b, m, deterministic)
+}
+func (dst *MetricFamily) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MetricFamily.Merge(dst, src)
+}
+func (m *MetricFamily) XXX_Size() int {
+ return xxx_messageInfo_MetricFamily.Size(m)
+}
+func (m *MetricFamily) XXX_DiscardUnknown() {
+ xxx_messageInfo_MetricFamily.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MetricFamily proto.InternalMessageInfo
func (m *MetricFamily) GetName() string {
if m != nil && m.Name != nil {
@@ -360,5 +572,58 @@ func (m *MetricFamily) GetMetric() []*Metric {
}
func init() {
+ proto.RegisterType((*LabelPair)(nil), "io.prometheus.client.LabelPair")
+ proto.RegisterType((*Gauge)(nil), "io.prometheus.client.Gauge")
+ proto.RegisterType((*Counter)(nil), "io.prometheus.client.Counter")
+ proto.RegisterType((*Quantile)(nil), "io.prometheus.client.Quantile")
+ proto.RegisterType((*Summary)(nil), "io.prometheus.client.Summary")
+ proto.RegisterType((*Untyped)(nil), "io.prometheus.client.Untyped")
+ proto.RegisterType((*Histogram)(nil), "io.prometheus.client.Histogram")
+ proto.RegisterType((*Bucket)(nil), "io.prometheus.client.Bucket")
+ proto.RegisterType((*Metric)(nil), "io.prometheus.client.Metric")
+ proto.RegisterType((*MetricFamily)(nil), "io.prometheus.client.MetricFamily")
proto.RegisterEnum("io.prometheus.client.MetricType", MetricType_name, MetricType_value)
}
+
+func init() { proto.RegisterFile("metrics.proto", fileDescriptor_metrics_c97c9a2b9560cb8f) }
+
+var fileDescriptor_metrics_c97c9a2b9560cb8f = []byte{
+ // 591 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4f, 0x4f, 0xdb, 0x4e,
+ 0x14, 0xfc, 0x99, 0xd8, 0x09, 0x7e, 0x86, 0x5f, 0xad, 0x15, 0x07, 0xab, 0x2d, 0x25, 0xcd, 0x89,
+ 0xf6, 0x10, 0x54, 0x04, 0xaa, 0x44, 0xdb, 0x03, 0x50, 0x1a, 0x2a, 0xd5, 0x40, 0x37, 0xc9, 0x81,
+ 0x5e, 0xac, 0x8d, 0x59, 0x25, 0x56, 0xbd, 0xb6, 0x6b, 0xef, 0x22, 0xe5, 0xdc, 0x43, 0xbf, 0x47,
+ 0xbf, 0x68, 0xab, 0xfd, 0xe3, 0x18, 0x24, 0xc3, 0xa9, 0xb7, 0xb7, 0xf3, 0x66, 0xde, 0x8e, 0x77,
+ 0xc7, 0x0b, 0x9b, 0x8c, 0xf2, 0x32, 0x89, 0xab, 0x61, 0x51, 0xe6, 0x3c, 0x47, 0x5b, 0x49, 0x2e,
+ 0x2b, 0x46, 0xf9, 0x82, 0x8a, 0x6a, 0x18, 0xa7, 0x09, 0xcd, 0xf8, 0xe0, 0x10, 0xdc, 0x2f, 0x64,
+ 0x46, 0xd3, 0x2b, 0x92, 0x94, 0x08, 0x81, 0x9d, 0x11, 0x46, 0x03, 0xab, 0x6f, 0xed, 0xba, 0x58,
+ 0xd5, 0x68, 0x0b, 0x9c, 0x5b, 0x92, 0x0a, 0x1a, 0xac, 0x29, 0x50, 0x2f, 0x06, 0xdb, 0xe0, 0x8c,
+ 0x88, 0x98, 0xdf, 0x69, 0x4b, 0x8d, 0x55, 0xb7, 0x77, 0xa0, 0x77, 0x9a, 0x8b, 0x8c, 0xd3, 0xf2,
+ 0x01, 0xc2, 0x7b, 0x58, 0xff, 0x2a, 0x48, 0xc6, 0x93, 0x94, 0xa2, 0xa7, 0xb0, 0xfe, 0xc3, 0xd4,
+ 0x86, 0xb4, 0x5a, 0xdf, 0xdf, 0x7d, 0xa5, 0xfe, 0x65, 0x41, 0x6f, 0x2c, 0x18, 0x23, 0xe5, 0x12,
+ 0xbd, 0x84, 0x8d, 0x8a, 0xb0, 0x22, 0xa5, 0x51, 0x2c, 0x77, 0x54, 0x13, 0x6c, 0xec, 0x69, 0x4c,
+ 0x99, 0x40, 0xdb, 0x00, 0x86, 0x52, 0x09, 0x66, 0x26, 0xb9, 0x1a, 0x19, 0x0b, 0x86, 0x8e, 0xee,
+ 0xec, 0xdf, 0xe9, 0x77, 0x76, 0xbd, 0xfd, 0x17, 0xc3, 0xb6, 0xb3, 0x1a, 0xd6, 0x8e, 0x1b, 0x7f,
+ 0xf2, 0x43, 0xa7, 0x19, 0x5f, 0x16, 0xf4, 0xe6, 0x81, 0x0f, 0xfd, 0x69, 0x81, 0x7b, 0x9e, 0x54,
+ 0x3c, 0x9f, 0x97, 0x84, 0xfd, 0x03, 0xb3, 0x07, 0xd0, 0x9d, 0x89, 0xf8, 0x3b, 0xe5, 0xc6, 0xea,
+ 0xf3, 0x76, 0xab, 0x27, 0x8a, 0x83, 0x0d, 0x77, 0x30, 0x81, 0xae, 0x46, 0xd0, 0x2b, 0xf0, 0x63,
+ 0xc1, 0x44, 0x4a, 0x78, 0x72, 0x7b, 0xdf, 0xc5, 0x93, 0x06, 0xd7, 0x4e, 0x76, 0xc0, 0x13, 0x45,
+ 0x41, 0xcb, 0x68, 0x96, 0x8b, 0xec, 0xc6, 0x58, 0x01, 0x05, 0x9d, 0x48, 0x64, 0xf0, 0x67, 0x0d,
+ 0xba, 0xa1, 0xca, 0x18, 0x3a, 0x04, 0x27, 0x95, 0x31, 0x0a, 0x2c, 0xe5, 0x6a, 0xa7, 0xdd, 0xd5,
+ 0x2a, 0x69, 0x58, 0xb3, 0xd1, 0x1b, 0x70, 0xe6, 0x32, 0x46, 0x6a, 0xb8, 0xb7, 0xff, 0xac, 0x5d,
+ 0xa6, 0x92, 0x86, 0x35, 0x13, 0xbd, 0x85, 0x5e, 0xac, 0xa3, 0x15, 0x74, 0x94, 0x68, 0xbb, 0x5d,
+ 0x64, 0xf2, 0x87, 0x6b, 0xb6, 0x14, 0x56, 0x3a, 0x33, 0x81, 0xfd, 0x98, 0xd0, 0x04, 0x0b, 0xd7,
+ 0x6c, 0x29, 0x14, 0xfa, 0x8e, 0x03, 0xe7, 0x31, 0xa1, 0x09, 0x02, 0xae, 0xd9, 0xe8, 0x03, 0xb8,
+ 0x8b, 0xfa, 0xea, 0x83, 0x9e, 0x92, 0x3e, 0x70, 0x30, 0xab, 0x84, 0xe0, 0x46, 0x21, 0xc3, 0xc2,
+ 0x13, 0x46, 0x2b, 0x4e, 0x58, 0x11, 0xb1, 0x2a, 0xe8, 0xf6, 0xad, 0xdd, 0x0e, 0xf6, 0x56, 0x58,
+ 0x58, 0x0d, 0x7e, 0x5b, 0xb0, 0xa1, 0x6f, 0xe0, 0x13, 0x61, 0x49, 0xba, 0x6c, 0xfd, 0x83, 0x11,
+ 0xd8, 0x0b, 0x9a, 0x16, 0xe6, 0x07, 0x56, 0x35, 0x3a, 0x00, 0x5b, 0x7a, 0x54, 0x47, 0xf8, 0xff,
+ 0x7e, 0xbf, 0xdd, 0x95, 0x9e, 0x3c, 0x59, 0x16, 0x14, 0x2b, 0xb6, 0x0c, 0x9f, 0x7e, 0x53, 0x02,
+ 0xfb, 0xb1, 0xf0, 0x69, 0x1d, 0x36, 0xdc, 0xd7, 0x21, 0x40, 0x33, 0x09, 0x79, 0xd0, 0x3b, 0xbd,
+ 0x9c, 0x5e, 0x4c, 0xce, 0xb0, 0xff, 0x1f, 0x72, 0xc1, 0x19, 0x1d, 0x4f, 0x47, 0x67, 0xbe, 0x25,
+ 0xf1, 0xf1, 0x34, 0x0c, 0x8f, 0xf1, 0xb5, 0xbf, 0x26, 0x17, 0xd3, 0x8b, 0xc9, 0xf5, 0xd5, 0xd9,
+ 0x47, 0xbf, 0x83, 0x36, 0xc1, 0x3d, 0xff, 0x3c, 0x9e, 0x5c, 0x8e, 0xf0, 0x71, 0xe8, 0xdb, 0x27,
+ 0x18, 0x5a, 0x5f, 0xb2, 0x6f, 0x47, 0xf3, 0x84, 0x2f, 0xc4, 0x6c, 0x18, 0xe7, 0x6c, 0xaf, 0xe9,
+ 0xee, 0xe9, 0x6e, 0xc4, 0xf2, 0x1b, 0x9a, 0xee, 0xcd, 0xf3, 0x77, 0x49, 0x1e, 0x35, 0xdd, 0x48,
+ 0x77, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x45, 0x21, 0x7f, 0x64, 0x2b, 0x05, 0x00, 0x00,
+}
diff --git a/vendor/github.com/prometheus/common/expfmt/text_parse.go b/vendor/github.com/prometheus/common/expfmt/text_parse.go
index b86290a..ec3d86b 100644
--- a/vendor/github.com/prometheus/common/expfmt/text_parse.go
+++ b/vendor/github.com/prometheus/common/expfmt/text_parse.go
@@ -359,7 +359,7 @@ func (p *TextParser) startLabelValue() stateFn {
}
return p.readingValue
default:
- p.parseError(fmt.Sprintf("unexpected end of label value %q", p.currentLabelPair.Value))
+ p.parseError(fmt.Sprintf("unexpected end of label value %q", p.currentLabelPair.GetValue()))
return nil
}
}
diff --git a/vendor/github.com/prometheus/procfs/mountstats.go b/vendor/github.com/prometheus/procfs/mountstats.go
index e95ddbc..7a8a1e0 100644
--- a/vendor/github.com/prometheus/procfs/mountstats.go
+++ b/vendor/github.com/prometheus/procfs/mountstats.go
@@ -39,8 +39,11 @@ const (
statVersion10 = "1.0"
statVersion11 = "1.1"
- fieldTransport10Len = 10
- fieldTransport11Len = 13
+ fieldTransport10TCPLen = 10
+ fieldTransport10UDPLen = 7
+
+ fieldTransport11TCPLen = 13
+ fieldTransport11UDPLen = 10
)
// A Mount is a device mount parsed from /proc/[pid]/mountstats.
@@ -186,6 +189,8 @@ type NFSOperationStats struct {
// A NFSTransportStats contains statistics for the NFS mount RPC requests and
// responses.
type NFSTransportStats struct {
+ // The transport protocol used for the NFS mount.
+ Protocol string
// The local port used for the NFS mount.
Port uint64
// Number of times the client has had to establish a connection from scratch
@@ -360,7 +365,7 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e
return nil, fmt.Errorf("not enough information for NFS transport stats: %v", ss)
}
- tstats, err := parseNFSTransportStats(ss[2:], statVersion)
+ tstats, err := parseNFSTransportStats(ss[1:], statVersion)
if err != nil {
return nil, err
}
@@ -522,13 +527,33 @@ func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) {
// parseNFSTransportStats parses a NFSTransportStats line using an input set of
// integer fields matched to a specific stats version.
func parseNFSTransportStats(ss []string, statVersion string) (*NFSTransportStats, error) {
+ // Extract the protocol field. It is the only string value in the line
+ protocol := ss[0]
+ ss = ss[1:]
+
switch statVersion {
case statVersion10:
- if len(ss) != fieldTransport10Len {
+ var expectedLength int
+ if protocol == "tcp" {
+ expectedLength = fieldTransport10TCPLen
+ } else if protocol == "udp" {
+ expectedLength = fieldTransport10UDPLen
+ } else {
+ return nil, fmt.Errorf("invalid NFS protocol \"%s\" in stats 1.0 statement: %v", protocol, ss)
+ }
+ if len(ss) != expectedLength {
return nil, fmt.Errorf("invalid NFS transport stats 1.0 statement: %v", ss)
}
case statVersion11:
- if len(ss) != fieldTransport11Len {
+ var expectedLength int
+ if protocol == "tcp" {
+ expectedLength = fieldTransport11TCPLen
+ } else if protocol == "udp" {
+ expectedLength = fieldTransport11UDPLen
+ } else {
+ return nil, fmt.Errorf("invalid NFS protocol \"%s\" in stats 1.1 statement: %v", protocol, ss)
+ }
+ if len(ss) != expectedLength {
return nil, fmt.Errorf("invalid NFS transport stats 1.1 statement: %v", ss)
}
default:
@@ -536,12 +561,13 @@ func parseNFSTransportStats(ss []string, statVersion string) (*NFSTransportStats
}
// Allocate enough for v1.1 stats since zero value for v1.1 stats will be okay
- // in a v1.0 response.
+ // in a v1.0 response. Since the stat length is bigger for TCP stats, we use
+ // the TCP length here.
//
// Note: slice length must be set to length of v1.1 stats to avoid a panic when
// only v1.0 stats are present.
// See: https://github.com/prometheus/node_exporter/issues/571.
- ns := make([]uint64, fieldTransport11Len)
+ ns := make([]uint64, fieldTransport11TCPLen)
for i, s := range ss {
n, err := strconv.ParseUint(s, 10, 64)
if err != nil {
@@ -551,7 +577,18 @@ func parseNFSTransportStats(ss []string, statVersion string) (*NFSTransportStats
ns[i] = n
}
+ // The fields differ depending on the transport protocol (TCP or UDP)
+ // From https://utcc.utoronto.ca/%7Ecks/space/blog/linux/NFSMountstatsXprt
+ //
+ // For the udp RPC transport there is no connection count, connect idle time,
+ // or idle time (fields #3, #4, and #5); all other fields are the same. So
+ // we set them to 0 here.
+ if protocol == "udp" {
+ ns = append(ns[:2], append(make([]uint64, 3), ns[2:]...)...)
+ }
+
return &NFSTransportStats{
+ Protocol: protocol,
Port: ns[0],
Bind: ns[1],
Connect: ns[2],
diff --git a/vendor/github.com/prometheus/procfs/xfrm.go b/vendor/github.com/prometheus/procfs/xfrm.go
index ffe9df5..8f1508f 100644
--- a/vendor/github.com/prometheus/procfs/xfrm.go
+++ b/vendor/github.com/prometheus/procfs/xfrm.go
@@ -113,7 +113,7 @@ func (fs FS) NewXfrmStat() (XfrmStat, error) {
if len(fields) != 2 {
return XfrmStat{}, fmt.Errorf(
- "couldnt parse %s line %s", file.Name(), s.Text())
+ "couldn't parse %s line %s", file.Name(), s.Text())
}
name := fields[0]
diff --git a/vendor/github.com/spf13/jwalterweatherman/README.md b/vendor/github.com/spf13/jwalterweatherman/README.md
index d8cfd27..932a23f 100644
--- a/vendor/github.com/spf13/jwalterweatherman/README.md
+++ b/vendor/github.com/spf13/jwalterweatherman/README.md
@@ -18,7 +18,7 @@ provides a few advantages over using the standard log library alone.
I really wanted a very straightforward library that could seamlessly do
the following things.
-1. Replace all the println, printf, etc statements thought my code with
+1. Replace all the println, printf, etc statements thoughout my code with
something more useful
2. Allow the user to easily control what levels are printed to stdout
3. Allow the user to easily control what levels are logged
diff --git a/vendor/github.com/spf13/pflag/bytes.go b/vendor/github.com/spf13/pflag/bytes.go
index 12c58db..67d5304 100644
--- a/vendor/github.com/spf13/pflag/bytes.go
+++ b/vendor/github.com/spf13/pflag/bytes.go
@@ -1,6 +1,7 @@
package pflag
import (
+ "encoding/base64"
"encoding/hex"
"fmt"
"strings"
@@ -9,10 +10,12 @@ import (
// BytesHex adapts []byte for use as a flag. Value of flag is HEX encoded
type bytesHexValue []byte
+// String implements pflag.Value.String.
func (bytesHex bytesHexValue) String() string {
return fmt.Sprintf("%X", []byte(bytesHex))
}
+// Set implements pflag.Value.Set.
func (bytesHex *bytesHexValue) Set(value string) error {
bin, err := hex.DecodeString(strings.TrimSpace(value))
@@ -25,6 +28,7 @@ func (bytesHex *bytesHexValue) Set(value string) error {
return nil
}
+// Type implements pflag.Value.Type.
func (*bytesHexValue) Type() string {
return "bytesHex"
}
@@ -103,3 +107,103 @@ func BytesHex(name string, value []byte, usage string) *[]byte {
func BytesHexP(name, shorthand string, value []byte, usage string) *[]byte {
return CommandLine.BytesHexP(name, shorthand, value, usage)
}
+
+// BytesBase64 adapts []byte for use as a flag. Value of flag is Base64 encoded
+type bytesBase64Value []byte
+
+// String implements pflag.Value.String.
+func (bytesBase64 bytesBase64Value) String() string {
+ return base64.StdEncoding.EncodeToString([]byte(bytesBase64))
+}
+
+// Set implements pflag.Value.Set.
+func (bytesBase64 *bytesBase64Value) Set(value string) error {
+ bin, err := base64.StdEncoding.DecodeString(strings.TrimSpace(value))
+
+ if err != nil {
+ return err
+ }
+
+ *bytesBase64 = bin
+
+ return nil
+}
+
+// Type implements pflag.Value.Type.
+func (*bytesBase64Value) Type() string {
+ return "bytesBase64"
+}
+
+func newBytesBase64Value(val []byte, p *[]byte) *bytesBase64Value {
+ *p = val
+ return (*bytesBase64Value)(p)
+}
+
+func bytesBase64ValueConv(sval string) (interface{}, error) {
+
+ bin, err := base64.StdEncoding.DecodeString(sval)
+ if err == nil {
+ return bin, nil
+ }
+
+ return nil, fmt.Errorf("invalid string being converted to Bytes: %s %s", sval, err)
+}
+
+// GetBytesBase64 return the []byte value of a flag with the given name
+func (f *FlagSet) GetBytesBase64(name string) ([]byte, error) {
+ val, err := f.getFlagType(name, "bytesBase64", bytesBase64ValueConv)
+
+ if err != nil {
+ return []byte{}, err
+ }
+
+ return val.([]byte), nil
+}
+
+// BytesBase64Var defines an []byte flag with specified name, default value, and usage string.
+// The argument p points to an []byte variable in which to store the value of the flag.
+func (f *FlagSet) BytesBase64Var(p *[]byte, name string, value []byte, usage string) {
+ f.VarP(newBytesBase64Value(value, p), name, "", usage)
+}
+
+// BytesBase64VarP is like BytesBase64Var, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, usage string) {
+ f.VarP(newBytesBase64Value(value, p), name, shorthand, usage)
+}
+
+// BytesBase64Var defines an []byte flag with specified name, default value, and usage string.
+// The argument p points to an []byte variable in which to store the value of the flag.
+func BytesBase64Var(p *[]byte, name string, value []byte, usage string) {
+ CommandLine.VarP(newBytesBase64Value(value, p), name, "", usage)
+}
+
+// BytesBase64VarP is like BytesBase64Var, but accepts a shorthand letter that can be used after a single dash.
+func BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, usage string) {
+ CommandLine.VarP(newBytesBase64Value(value, p), name, shorthand, usage)
+}
+
+// BytesBase64 defines an []byte flag with specified name, default value, and usage string.
+// The return value is the address of an []byte variable that stores the value of the flag.
+func (f *FlagSet) BytesBase64(name string, value []byte, usage string) *[]byte {
+ p := new([]byte)
+ f.BytesBase64VarP(p, name, "", value, usage)
+ return p
+}
+
+// BytesBase64P is like BytesBase64, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) BytesBase64P(name, shorthand string, value []byte, usage string) *[]byte {
+ p := new([]byte)
+ f.BytesBase64VarP(p, name, shorthand, value, usage)
+ return p
+}
+
+// BytesBase64 defines an []byte flag with specified name, default value, and usage string.
+// The return value is the address of an []byte variable that stores the value of the flag.
+func BytesBase64(name string, value []byte, usage string) *[]byte {
+ return CommandLine.BytesBase64P(name, "", value, usage)
+}
+
+// BytesBase64P is like BytesBase64, but accepts a shorthand letter that can be used after a single dash.
+func BytesBase64P(name, shorthand string, value []byte, usage string) *[]byte {
+ return CommandLine.BytesBase64P(name, shorthand, value, usage)
+}
diff --git a/vendor/github.com/spf13/pflag/string_to_int.go b/vendor/github.com/spf13/pflag/string_to_int.go
new file mode 100644
index 0000000..5ceda39
--- /dev/null
+++ b/vendor/github.com/spf13/pflag/string_to_int.go
@@ -0,0 +1,149 @@
+package pflag
+
+import (
+ "bytes"
+ "fmt"
+ "strconv"
+ "strings"
+)
+
+// -- stringToInt Value
+type stringToIntValue struct {
+ value *map[string]int
+ changed bool
+}
+
+func newStringToIntValue(val map[string]int, p *map[string]int) *stringToIntValue {
+ ssv := new(stringToIntValue)
+ ssv.value = p
+ *ssv.value = val
+ return ssv
+}
+
+// Format: a=1,b=2
+func (s *stringToIntValue) Set(val string) error {
+ ss := strings.Split(val, ",")
+ out := make(map[string]int, len(ss))
+ for _, pair := range ss {
+ kv := strings.SplitN(pair, "=", 2)
+ if len(kv) != 2 {
+ return fmt.Errorf("%s must be formatted as key=value", pair)
+ }
+ var err error
+ out[kv[0]], err = strconv.Atoi(kv[1])
+ if err != nil {
+ return err
+ }
+ }
+ if !s.changed {
+ *s.value = out
+ } else {
+ for k, v := range out {
+ (*s.value)[k] = v
+ }
+ }
+ s.changed = true
+ return nil
+}
+
+func (s *stringToIntValue) Type() string {
+ return "stringToInt"
+}
+
+func (s *stringToIntValue) String() string {
+ var buf bytes.Buffer
+ i := 0
+ for k, v := range *s.value {
+ if i > 0 {
+ buf.WriteRune(',')
+ }
+ buf.WriteString(k)
+ buf.WriteRune('=')
+ buf.WriteString(strconv.Itoa(v))
+ i++
+ }
+ return "[" + buf.String() + "]"
+}
+
+func stringToIntConv(val string) (interface{}, error) {
+ val = strings.Trim(val, "[]")
+ // An empty string would cause an empty map
+ if len(val) == 0 {
+ return map[string]int{}, nil
+ }
+ ss := strings.Split(val, ",")
+ out := make(map[string]int, len(ss))
+ for _, pair := range ss {
+ kv := strings.SplitN(pair, "=", 2)
+ if len(kv) != 2 {
+ return nil, fmt.Errorf("%s must be formatted as key=value", pair)
+ }
+ var err error
+ out[kv[0]], err = strconv.Atoi(kv[1])
+ if err != nil {
+ return nil, err
+ }
+ }
+ return out, nil
+}
+
+// GetStringToInt return the map[string]int value of a flag with the given name
+func (f *FlagSet) GetStringToInt(name string) (map[string]int, error) {
+ val, err := f.getFlagType(name, "stringToInt", stringToIntConv)
+ if err != nil {
+ return map[string]int{}, err
+ }
+ return val.(map[string]int), nil
+}
+
+// StringToIntVar defines a string flag with specified name, default value, and usage string.
+// The argument p points to a map[string]int variable in which to store the values of the multiple flags.
+// The value of each argument will not try to be separated by comma
+func (f *FlagSet) StringToIntVar(p *map[string]int, name string, value map[string]int, usage string) {
+ f.VarP(newStringToIntValue(value, p), name, "", usage)
+}
+
+// StringToIntVarP is like StringToIntVar, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) StringToIntVarP(p *map[string]int, name, shorthand string, value map[string]int, usage string) {
+ f.VarP(newStringToIntValue(value, p), name, shorthand, usage)
+}
+
+// StringToIntVar defines a string flag with specified name, default value, and usage string.
+// The argument p points to a map[string]int variable in which to store the value of the flag.
+// The value of each argument will not try to be separated by comma
+func StringToIntVar(p *map[string]int, name string, value map[string]int, usage string) {
+ CommandLine.VarP(newStringToIntValue(value, p), name, "", usage)
+}
+
+// StringToIntVarP is like StringToIntVar, but accepts a shorthand letter that can be used after a single dash.
+func StringToIntVarP(p *map[string]int, name, shorthand string, value map[string]int, usage string) {
+ CommandLine.VarP(newStringToIntValue(value, p), name, shorthand, usage)
+}
+
+// StringToInt defines a string flag with specified name, default value, and usage string.
+// The return value is the address of a map[string]int variable that stores the value of the flag.
+// The value of each argument will not try to be separated by comma
+func (f *FlagSet) StringToInt(name string, value map[string]int, usage string) *map[string]int {
+ p := map[string]int{}
+ f.StringToIntVarP(&p, name, "", value, usage)
+ return &p
+}
+
+// StringToIntP is like StringToInt, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) StringToIntP(name, shorthand string, value map[string]int, usage string) *map[string]int {
+ p := map[string]int{}
+ f.StringToIntVarP(&p, name, shorthand, value, usage)
+ return &p
+}
+
+// StringToInt defines a string flag with specified name, default value, and usage string.
+// The return value is the address of a map[string]int variable that stores the value of the flag.
+// The value of each argument will not try to be separated by comma
+func StringToInt(name string, value map[string]int, usage string) *map[string]int {
+ return CommandLine.StringToIntP(name, "", value, usage)
+}
+
+// StringToIntP is like StringToInt, but accepts a shorthand letter that can be used after a single dash.
+func StringToIntP(name, shorthand string, value map[string]int, usage string) *map[string]int {
+ return CommandLine.StringToIntP(name, shorthand, value, usage)
+}
diff --git a/vendor/github.com/spf13/pflag/string_to_string.go b/vendor/github.com/spf13/pflag/string_to_string.go
new file mode 100644
index 0000000..890a01a
--- /dev/null
+++ b/vendor/github.com/spf13/pflag/string_to_string.go
@@ -0,0 +1,160 @@
+package pflag
+
+import (
+ "bytes"
+ "encoding/csv"
+ "fmt"
+ "strings"
+)
+
+// -- stringToString Value
+type stringToStringValue struct {
+ value *map[string]string
+ changed bool
+}
+
+func newStringToStringValue(val map[string]string, p *map[string]string) *stringToStringValue {
+ ssv := new(stringToStringValue)
+ ssv.value = p
+ *ssv.value = val
+ return ssv
+}
+
+// Format: a=1,b=2
+func (s *stringToStringValue) Set(val string) error {
+ var ss []string
+ n := strings.Count(val, "=")
+ switch n {
+ case 0:
+ return fmt.Errorf("%s must be formatted as key=value", val)
+ case 1:
+ ss = append(ss, strings.Trim(val, `"`))
+ default:
+ r := csv.NewReader(strings.NewReader(val))
+ var err error
+ ss, err = r.Read()
+ if err != nil {
+ return err
+ }
+ }
+
+ out := make(map[string]string, len(ss))
+ for _, pair := range ss {
+ kv := strings.SplitN(pair, "=", 2)
+ if len(kv) != 2 {
+ return fmt.Errorf("%s must be formatted as key=value", pair)
+ }
+ out[kv[0]] = kv[1]
+ }
+ if !s.changed {
+ *s.value = out
+ } else {
+ for k, v := range out {
+ (*s.value)[k] = v
+ }
+ }
+ s.changed = true
+ return nil
+}
+
+func (s *stringToStringValue) Type() string {
+ return "stringToString"
+}
+
+func (s *stringToStringValue) String() string {
+ records := make([]string, 0, len(*s.value)>>1)
+ for k, v := range *s.value {
+ records = append(records, k+"="+v)
+ }
+
+ var buf bytes.Buffer
+ w := csv.NewWriter(&buf)
+ if err := w.Write(records); err != nil {
+ panic(err)
+ }
+ w.Flush()
+ return "[" + strings.TrimSpace(buf.String()) + "]"
+}
+
+func stringToStringConv(val string) (interface{}, error) {
+ val = strings.Trim(val, "[]")
+ // An empty string would cause an empty map
+ if len(val) == 0 {
+ return map[string]string{}, nil
+ }
+ r := csv.NewReader(strings.NewReader(val))
+ ss, err := r.Read()
+ if err != nil {
+ return nil, err
+ }
+ out := make(map[string]string, len(ss))
+ for _, pair := range ss {
+ kv := strings.SplitN(pair, "=", 2)
+ if len(kv) != 2 {
+ return nil, fmt.Errorf("%s must be formatted as key=value", pair)
+ }
+ out[kv[0]] = kv[1]
+ }
+ return out, nil
+}
+
+// GetStringToString return the map[string]string value of a flag with the given name
+func (f *FlagSet) GetStringToString(name string) (map[string]string, error) {
+ val, err := f.getFlagType(name, "stringToString", stringToStringConv)
+ if err != nil {
+ return map[string]string{}, err
+ }
+ return val.(map[string]string), nil
+}
+
+// StringToStringVar defines a string flag with specified name, default value, and usage string.
+// The argument p points to a map[string]string variable in which to store the values of the multiple flags.
+// The value of each argument will not try to be separated by comma
+func (f *FlagSet) StringToStringVar(p *map[string]string, name string, value map[string]string, usage string) {
+ f.VarP(newStringToStringValue(value, p), name, "", usage)
+}
+
+// StringToStringVarP is like StringToStringVar, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) StringToStringVarP(p *map[string]string, name, shorthand string, value map[string]string, usage string) {
+ f.VarP(newStringToStringValue(value, p), name, shorthand, usage)
+}
+
+// StringToStringVar defines a string flag with specified name, default value, and usage string.
+// The argument p points to a map[string]string variable in which to store the value of the flag.
+// The value of each argument will not try to be separated by comma
+func StringToStringVar(p *map[string]string, name string, value map[string]string, usage string) {
+ CommandLine.VarP(newStringToStringValue(value, p), name, "", usage)
+}
+
+// StringToStringVarP is like StringToStringVar, but accepts a shorthand letter that can be used after a single dash.
+func StringToStringVarP(p *map[string]string, name, shorthand string, value map[string]string, usage string) {
+ CommandLine.VarP(newStringToStringValue(value, p), name, shorthand, usage)
+}
+
+// StringToString defines a string flag with specified name, default value, and usage string.
+// The return value is the address of a map[string]string variable that stores the value of the flag.
+// The value of each argument will not try to be separated by comma
+func (f *FlagSet) StringToString(name string, value map[string]string, usage string) *map[string]string {
+ p := map[string]string{}
+ f.StringToStringVarP(&p, name, "", value, usage)
+ return &p
+}
+
+// StringToStringP is like StringToString, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) StringToStringP(name, shorthand string, value map[string]string, usage string) *map[string]string {
+ p := map[string]string{}
+ f.StringToStringVarP(&p, name, shorthand, value, usage)
+ return &p
+}
+
+// StringToString defines a string flag with specified name, default value, and usage string.
+// The return value is the address of a map[string]string variable that stores the value of the flag.
+// The value of each argument will not try to be separated by comma
+func StringToString(name string, value map[string]string, usage string) *map[string]string {
+ return CommandLine.StringToStringP(name, "", value, usage)
+}
+
+// StringToStringP is like StringToString, but accepts a shorthand letter that can be used after a single dash.
+func StringToStringP(name, shorthand string, value map[string]string, usage string) *map[string]string {
+ return CommandLine.StringToStringP(name, shorthand, value, usage)
+}
diff --git a/vendor/github.com/spf13/viper/README.md b/vendor/github.com/spf13/viper/README.md
index 64bf474..d752822 100644
--- a/vendor/github.com/spf13/viper/README.md
+++ b/vendor/github.com/spf13/viper/README.md
@@ -191,7 +191,7 @@ _When working with ENV variables, it’s important to recognize that Viper
treats ENV variables as case sensitive._
Viper provides a mechanism to try to ensure that ENV variables are unique. By
-using `SetEnvPrefix`, you can tell Viper to use add a prefix while reading from
+using `SetEnvPrefix`, you can tell Viper to use a prefix while reading from
the environment variables. Both `BindEnv` and `AutomaticEnv` will use this
prefix.
@@ -437,6 +437,7 @@ The following functions and methods exist:
* `GetTime(key string) : time.Time`
* `GetDuration(key string) : time.Duration`
* `IsSet(key string) : bool`
+ * `AllSettings() : map[string]interface{}`
One important thing to recognize is that each Get function will return a zero
value if it’s not found. To check if a given key exists, the `IsSet()` method
@@ -590,6 +591,27 @@ if err != nil {
}
```
+### Marshalling to string
+
+You may need to marhsal all the settings held in viper into a string rather than write them to a file.
+You can use your favorite format's marshaller with the config returned by `AllSettings()`.
+
+```go
+import (
+ yaml "gopkg.in/yaml.v2"
+ // ...
+)
+
+func yamlStringSettings() string {
+ c := viper.AllSettings()
+ bs, err := yaml.Marshal(c)
+ if err != nil {
+ t.Fatalf("unable to marshal config to YAML: %v", err)
+ }
+ return string(bs)
+}
+```
+
## Viper or Vipers?
Viper comes ready to use out of the box. There is no configuration or
diff --git a/vendor/github.com/spf13/viper/viper.go b/vendor/github.com/spf13/viper/viper.go
index 907a102..f657b20 100644
--- a/vendor/github.com/spf13/viper/viper.go
+++ b/vendor/github.com/spf13/viper/viper.go
@@ -113,6 +113,23 @@ func (fnfe ConfigFileNotFoundError) Error() string {
return fmt.Sprintf("Config File %q Not Found in %q", fnfe.name, fnfe.locations)
}
+// A DecoderConfigOption can be passed to viper.Unmarshal to configure
+// mapstructure.DecoderConfig options
+type DecoderConfigOption func(*mapstructure.DecoderConfig)
+
+// DecodeHook returns a DecoderConfigOption which overrides the default
+// DecoderConfig.DecodeHook value, the default is:
+//
+// mapstructure.ComposeDecodeHookFunc(
+// mapstructure.StringToTimeDurationHookFunc(),
+// mapstructure.StringToSliceHookFunc(","),
+// )
+func DecodeHook(hook mapstructure.DecodeHookFunc) DecoderConfigOption {
+ return func(c *mapstructure.DecoderConfig) {
+ c.DecodeHook = hook
+ }
+}
+
// Viper is a prioritized configuration registry. It
// maintains a set of configuration sources, fetches
// values to populate those, and provides them according
@@ -745,9 +762,11 @@ func (v *Viper) GetSizeInBytes(key string) uint {
}
// UnmarshalKey takes a single key and unmarshals it into a Struct.
-func UnmarshalKey(key string, rawVal interface{}) error { return v.UnmarshalKey(key, rawVal) }
-func (v *Viper) UnmarshalKey(key string, rawVal interface{}) error {
- err := decode(v.Get(key), defaultDecoderConfig(rawVal))
+func UnmarshalKey(key string, rawVal interface{}, opts ...DecoderConfigOption) error {
+ return v.UnmarshalKey(key, rawVal, opts...)
+}
+func (v *Viper) UnmarshalKey(key string, rawVal interface{}, opts ...DecoderConfigOption) error {
+ err := decode(v.Get(key), defaultDecoderConfig(rawVal, opts...))
if err != nil {
return err
@@ -760,9 +779,11 @@ func (v *Viper) UnmarshalKey(key string, rawVal interface{}) error {
// Unmarshal unmarshals the config into a Struct. Make sure that the tags
// on the fields of the structure are properly set.
-func Unmarshal(rawVal interface{}) error { return v.Unmarshal(rawVal) }
-func (v *Viper) Unmarshal(rawVal interface{}) error {
- err := decode(v.AllSettings(), defaultDecoderConfig(rawVal))
+func Unmarshal(rawVal interface{}, opts ...DecoderConfigOption) error {
+ return v.Unmarshal(rawVal, opts...)
+}
+func (v *Viper) Unmarshal(rawVal interface{}, opts ...DecoderConfigOption) error {
+ err := decode(v.AllSettings(), defaultDecoderConfig(rawVal, opts...))
if err != nil {
return err
@@ -775,8 +796,8 @@ func (v *Viper) Unmarshal(rawVal interface{}) error {
// defaultDecoderConfig returns default mapsstructure.DecoderConfig with suppot
// of time.Duration values & string slices
-func defaultDecoderConfig(output interface{}) *mapstructure.DecoderConfig {
- return &mapstructure.DecoderConfig{
+func defaultDecoderConfig(output interface{}, opts ...DecoderConfigOption) *mapstructure.DecoderConfig {
+ c := &mapstructure.DecoderConfig{
Metadata: nil,
Result: output,
WeaklyTypedInput: true,
@@ -785,6 +806,10 @@ func defaultDecoderConfig(output interface{}) *mapstructure.DecoderConfig {
mapstructure.StringToSliceHookFunc(","),
),
}
+ for _, opt := range opts {
+ opt(c)
+ }
+ return c
}
// A wrapper around mapstructure.Decode that mimics the WeakDecode functionality
diff --git a/vendor/github.com/xanzy/go-gitlab/README.md b/vendor/github.com/xanzy/go-gitlab/README.md
index dc79316..da74994 100644
--- a/vendor/github.com/xanzy/go-gitlab/README.md
+++ b/vendor/github.com/xanzy/go-gitlab/README.md
@@ -23,8 +23,8 @@ to add new and/or missing endpoints. Currently the following services are suppor
- [x] Award Emojis
- [x] Branches
- [x] Broadcast Messages
-- [ ] Project-level Variables
-- [ ] Group-level Variables
+- [x] Project-level Variables
+- [x] Group-level Variables
- [x] Commits
- [ ] Custom Attributes
- [x] Deployments
@@ -42,8 +42,9 @@ to add new and/or missing endpoints. Currently the following services are suppor
- [x] Group Members
- [x] Issues
- [x] Issue Boards
+- [x] Group Issue Boards
- [x] Jobs
-- [ ] Keys
+- [x] Keys
- [x] Labels
- [ ] License
- [x] Merge Requests
diff --git a/vendor/github.com/xanzy/go-gitlab/award_emojis.go b/vendor/github.com/xanzy/go-gitlab/award_emojis.go
index b12a662..d335609 100644
--- a/vendor/github.com/xanzy/go-gitlab/award_emojis.go
+++ b/vendor/github.com/xanzy/go-gitlab/award_emojis.go
@@ -56,18 +56,18 @@ const (
awardSnippets = "snippets"
)
-// ListEmojiAwardsOptions represents the available options for listing emoji
+// ListAwardEmojiOptions represents the available options for listing emoji
// for each resources
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html
-type ListEmojiAwardsOptions ListOptions
+type ListAwardEmojiOptions ListOptions
// ListMergeRequestAwardEmoji gets a list of all award emoji on the merge request.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#list-an-awardable-39-s-award-emoji
-func (s *AwardEmojiService) ListMergeRequestAwardEmoji(pid interface{}, mergeRequestIID int, opt *ListEmojiAwardsOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
+func (s *AwardEmojiService) ListMergeRequestAwardEmoji(pid interface{}, mergeRequestIID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
return s.listAwardEmoji(pid, awardMergeRequest, mergeRequestIID, opt, options...)
}
@@ -75,7 +75,7 @@ func (s *AwardEmojiService) ListMergeRequestAwardEmoji(pid interface{}, mergeReq
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#list-an-awardable-39-s-award-emoji
-func (s *AwardEmojiService) ListIssueAwardEmoji(pid interface{}, issueIID int, opt *ListEmojiAwardsOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
+func (s *AwardEmojiService) ListIssueAwardEmoji(pid interface{}, issueIID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
return s.listAwardEmoji(pid, awardIssue, issueIID, opt, options...)
}
@@ -83,11 +83,11 @@ func (s *AwardEmojiService) ListIssueAwardEmoji(pid interface{}, issueIID int, o
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#list-an-awardable-39-s-award-emoji
-func (s *AwardEmojiService) ListSnippetAwardEmoji(pid interface{}, snippetID int, opt *ListEmojiAwardsOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
+func (s *AwardEmojiService) ListSnippetAwardEmoji(pid interface{}, snippetID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
return s.listAwardEmoji(pid, awardSnippets, snippetID, opt, options...)
}
-func (s *AwardEmojiService) listAwardEmoji(pid interface{}, resource string, resourceID int, opt *ListEmojiAwardsOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
+func (s *AwardEmojiService) listAwardEmoji(pid interface{}, resource string, resourceID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, nil, err
@@ -162,43 +162,51 @@ func (s *AwardEmojiService) getAwardEmoji(pid interface{}, resource string, reso
return a, resp, err
}
+// CreateAwardEmojiOptions represents the available options for awarding emoji
+// for a resource
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji
+type CreateAwardEmojiOptions struct {
+ Name string `json:"name"`
+}
+
// CreateMergeRequestAwardEmoji get an award emoji from merge request.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji
-func (s *AwardEmojiService) CreateMergeRequestAwardEmoji(pid interface{}, mergeRequestIID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
- return s.createAwardEmoji(pid, awardMergeRequest, mergeRequestIID, awardID, options...)
+func (s *AwardEmojiService) CreateMergeRequestAwardEmoji(pid interface{}, mergeRequestIID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
+ return s.createAwardEmoji(pid, awardMergeRequest, mergeRequestIID, opt, options...)
}
// CreateIssueAwardEmoji get an award emoji from issue.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji
-func (s *AwardEmojiService) CreateIssueAwardEmoji(pid interface{}, issueIID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
- return s.createAwardEmoji(pid, awardIssue, issueIID, awardID, options...)
+func (s *AwardEmojiService) CreateIssueAwardEmoji(pid interface{}, issueIID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
+ return s.createAwardEmoji(pid, awardIssue, issueIID, opt, options...)
}
// CreateSnippetAwardEmoji get an award emoji from snippet.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji
-func (s *AwardEmojiService) CreateSnippetAwardEmoji(pid interface{}, snippetID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
- return s.createAwardEmoji(pid, awardSnippets, snippetID, awardID, options...)
+func (s *AwardEmojiService) CreateSnippetAwardEmoji(pid interface{}, snippetID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
+ return s.createAwardEmoji(pid, awardSnippets, snippetID, opt, options...)
}
-func (s *AwardEmojiService) createAwardEmoji(pid interface{}, resource string, resourceID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
+func (s *AwardEmojiService) createAwardEmoji(pid interface{}, resource string, resourceID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, nil, err
}
- u := fmt.Sprintf("projects/%s/%s/%d/award_emoji/%d",
+ u := fmt.Sprintf("projects/%s/%s/%d/award_emoji",
url.QueryEscape(project),
resource,
resourceID,
- awardID,
)
- req, err := s.client.NewRequest("POST", u, nil, options)
+ req, err := s.client.NewRequest("POST", u, opt, options)
if err != nil {
return nil, nil, err
}
@@ -260,7 +268,7 @@ func (s *AwardEmojiService) deleteAwardEmoji(pid interface{}, resource string, r
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
-func (s *AwardEmojiService) ListIssuesAwardEmojiOnNote(pid interface{}, issueID, noteID int, opt *ListEmojiAwardsOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
+func (s *AwardEmojiService) ListIssuesAwardEmojiOnNote(pid interface{}, issueID, noteID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
return s.listAwardEmojiOnNote(pid, awardIssue, issueID, noteID, opt, options...)
}
@@ -269,7 +277,7 @@ func (s *AwardEmojiService) ListIssuesAwardEmojiOnNote(pid interface{}, issueID,
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
-func (s *AwardEmojiService) ListMergeRequestAwardEmojiOnNote(pid interface{}, mergeRequestIID, noteID int, opt *ListEmojiAwardsOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
+func (s *AwardEmojiService) ListMergeRequestAwardEmojiOnNote(pid interface{}, mergeRequestIID, noteID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
return s.listAwardEmojiOnNote(pid, awardMergeRequest, mergeRequestIID, noteID, opt, options...)
}
@@ -278,11 +286,11 @@ func (s *AwardEmojiService) ListMergeRequestAwardEmojiOnNote(pid interface{}, me
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
-func (s *AwardEmojiService) ListSnippetAwardEmojiOnNote(pid interface{}, snippetIID, noteID int, opt *ListEmojiAwardsOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
+func (s *AwardEmojiService) ListSnippetAwardEmojiOnNote(pid interface{}, snippetIID, noteID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
return s.listAwardEmojiOnNote(pid, awardSnippets, snippetIID, noteID, opt, options...)
}
-func (s *AwardEmojiService) listAwardEmojiOnNote(pid interface{}, resources string, ressourceID, noteID int, opt *ListEmojiAwardsOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
+func (s *AwardEmojiService) listAwardEmojiOnNote(pid interface{}, resources string, ressourceID, noteID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, nil, err
@@ -361,8 +369,8 @@ func (s *AwardEmojiService) getSingleNoteAwardEmoji(pid interface{}, ressource s
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
-func (s *AwardEmojiService) CreateIssuesAwardEmojiOnNote(pid interface{}, issueID, noteID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
- return s.createAwardEmojiOnNote(pid, awardIssue, issueID, noteID, options...)
+func (s *AwardEmojiService) CreateIssuesAwardEmojiOnNote(pid interface{}, issueID, noteID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
+ return s.createAwardEmojiOnNote(pid, awardIssue, issueID, noteID, opt, options...)
}
// CreateMergeRequestAwardEmojiOnNote gets an award emoji on a note from a
@@ -370,23 +378,23 @@ func (s *AwardEmojiService) CreateIssuesAwardEmojiOnNote(pid interface{}, issueI
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
-func (s *AwardEmojiService) CreateMergeRequestAwardEmojiOnNote(pid interface{}, mergeRequestIID, noteID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
- return s.createAwardEmojiOnNote(pid, awardMergeRequest, mergeRequestIID, noteID, options...)
+func (s *AwardEmojiService) CreateMergeRequestAwardEmojiOnNote(pid interface{}, mergeRequestIID, noteID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
+ return s.createAwardEmojiOnNote(pid, awardMergeRequest, mergeRequestIID, noteID, opt, options...)
}
// CreateSnippetAwardEmojiOnNote gets an award emoji on a note from a snippet.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
-func (s *AwardEmojiService) CreateSnippetAwardEmojiOnNote(pid interface{}, snippetIID, noteID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
- return s.createAwardEmojiOnNote(pid, awardSnippets, snippetIID, noteID, options...)
+func (s *AwardEmojiService) CreateSnippetAwardEmojiOnNote(pid interface{}, snippetIID, noteID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
+ return s.createAwardEmojiOnNote(pid, awardSnippets, snippetIID, noteID, opt, options...)
}
// CreateAwardEmojiOnNote award emoji on a note.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji-on-a-note
-func (s *AwardEmojiService) createAwardEmojiOnNote(pid interface{}, resource string, resourceID, noteID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
+func (s *AwardEmojiService) createAwardEmojiOnNote(pid interface{}, resource string, resourceID, noteID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, nil, err
diff --git a/vendor/github.com/xanzy/go-gitlab/commits.go b/vendor/github.com/xanzy/go-gitlab/commits.go
index 5b5dc2a..1bbcc40 100644
--- a/vendor/github.com/xanzy/go-gitlab/commits.go
+++ b/vendor/github.com/xanzy/go-gitlab/commits.go
@@ -68,11 +68,12 @@ func (c Commit) String() string {
// GitLab API docs: https://docs.gitlab.com/ce/api/commits.html#list-repository-commits
type ListCommitsOptions struct {
ListOptions
- RefName *string `url:"ref_name,omitempty" json:"ref_name,omitempty"`
- Since *time.Time `url:"since,omitempty" json:"since,omitempty"`
- Until *time.Time `url:"until,omitempty" json:"until,omitempty"`
- Path *string `url:"path,omitempty" json:"path,omitempty"`
- All *bool `url:"all,omitempty" json:"all,omitempty"`
+ RefName *string `url:"ref_name,omitempty" json:"ref_name,omitempty"`
+ Since *time.Time `url:"since,omitempty" json:"since,omitempty"`
+ Until *time.Time `url:"until,omitempty" json:"until,omitempty"`
+ Path *string `url:"path,omitempty" json:"path,omitempty"`
+ All *bool `url:"all,omitempty" json:"all,omitempty"`
+ WithStats *bool `url:"with_stats,omitempty" json:"with_stats,omitempty"`
}
// ListCommits gets a list of repository commits in a project.
@@ -121,6 +122,49 @@ type CommitAction struct {
Encoding string `url:"encoding,omitempty" json:"encoding,omitempty"`
}
+// CommitRef represents the reference of branches/tags in a commit.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/commits.html#get-references-a-commit-is-pushed-to
+type CommitRef struct {
+ Type string `json:"type"`
+ Name string `json:"name"`
+}
+
+// GetCommitRefsOptions represents the available GetCommitRefs() options.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/commits.html#get-references-a-commit-is-pushed-to
+type GetCommitRefsOptions struct {
+ ListOptions
+ Type *string `url:"type,omitempty" json:"type,omitempty"`
+}
+
+// GetCommitRefs gets all references (from branches or tags) a commit is pushed to
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/commits.html#get-references-a-commit-is-pushed-to
+func (s *CommitsService) GetCommitRefs(pid interface{}, sha string, opt *GetCommitRefsOptions, options ...OptionFunc) ([]CommitRef, *Response, error) {
+ project, err := parseID(pid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("projects/%s/repository/commits/%s/refs", url.QueryEscape(project), sha)
+
+ req, err := s.client.NewRequest("GET", u, opt, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var cs []CommitRef
+ resp, err := s.client.Do(req, &cs)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return cs, resp, err
+}
+
// GetCommit gets a specific commit identified by the commit hash or name of a
// branch or tag.
//
@@ -415,6 +459,32 @@ func (s *CommitsService) SetCommitStatus(pid interface{}, sha string, opt *SetCo
return cs, resp, err
}
+// GetMergeRequestsByCommit gets merge request associated with a commit.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/commits.html#list-merge-requests-associated-with-a-commit
+func (s *CommitsService) GetMergeRequestsByCommit(pid interface{}, sha string, options ...OptionFunc) ([]*MergeRequest, *Response, error) {
+ project, err := parseID(pid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("projects/%s/repository/commits/%s/merge_requests",
+ url.QueryEscape(project), url.QueryEscape(sha))
+
+ req, err := s.client.NewRequest("GET", u, nil, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var mrs []*MergeRequest
+ resp, err := s.client.Do(req, &mrs)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return mrs, resp, err
+}
+
// CherryPickCommitOptions represents the available options for cherry-picking a commit.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/commits.html#cherry-pick-a-commit
diff --git a/vendor/github.com/xanzy/go-gitlab/deployments.go b/vendor/github.com/xanzy/go-gitlab/deployments.go
index a648605..e43d1c4 100644
--- a/vendor/github.com/xanzy/go-gitlab/deployments.go
+++ b/vendor/github.com/xanzy/go-gitlab/deployments.go
@@ -68,8 +68,8 @@ type Deployment struct {
// https://docs.gitlab.com/ce/api/deployments.html#list-project-deployments
type ListProjectDeploymentsOptions struct {
ListOptions
- OrderBy *OrderByValue `url:"order_by,omitempty" json:"order_by,omitempty"`
- Sort *string `url:"sort,omitempty" json:"sort,omitempty"`
+ OrderBy *string `url:"order_by,omitempty" json:"order_by,omitempty"`
+ Sort *string `url:"sort,omitempty" json:"sort,omitempty"`
}
// ListProjectDeployments gets a list of deployments in a project.
diff --git a/vendor/github.com/xanzy/go-gitlab/events.go b/vendor/github.com/xanzy/go-gitlab/events.go
index 4740e4a..ee6fbad 100644
--- a/vendor/github.com/xanzy/go-gitlab/events.go
+++ b/vendor/github.com/xanzy/go-gitlab/events.go
@@ -122,15 +122,15 @@ func (s *EventsService) ListCurrentUserContributionEvents(opt *ListContributionE
return cs, resp, err
}
-// ListProjectContributionEvents gets a list currently authenticated user's events
+// ListProjectVisibleEvents gets a list of visible events for a particular project
//
-// GitLab API docs: https://docs.gitlab.com/ce/api/events.html#list-a-project-39-s-visible-events
-func (s *EventsService) ListProjectContributionEvents(pid interface{}, opt *ListContributionEventsOptions, options ...OptionFunc) ([]*ContributionEvent, *Response, error) {
+// GitLab API docs: https://docs.gitlab.com/ee/api/events.html#list-a-project-s-visible-events
+func (s *EventsService) ListProjectVisibleEvents(pid interface{}, opt *ListContributionEventsOptions, options ...OptionFunc) ([]*ContributionEvent, *Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, nil, err
}
- u := fmt.Sprintf("%s/events", url.QueryEscape(project))
+ u := fmt.Sprintf("projects/%s/events", url.QueryEscape(project))
req, err := s.client.NewRequest("GET", u, opt, options)
if err != nil {
diff --git a/vendor/github.com/xanzy/go-gitlab/gitlab.go b/vendor/github.com/xanzy/go-gitlab/gitlab.go
index 6019d87..2ff31be 100644
--- a/vendor/github.com/xanzy/go-gitlab/gitlab.go
+++ b/vendor/github.com/xanzy/go-gitlab/gitlab.go
@@ -186,19 +186,6 @@ var notificationLevelTypes = map[string]NotificationLevelValue{
"custom": CustomNotificationLevel,
}
-// OrderByValue represent in which order to sort the item
-type OrderByValue string
-
-// These constants represent all valid order by values.
-const (
- OrderByCreatedAt OrderByValue = "created_at"
- OrderByID OrderByValue = "id"
- OrderByIID OrderByValue = "iid"
- OrderByRef OrderByValue = "ref"
- OrderByStatus OrderByValue = "status"
- OrderByUserID OrderByValue = "user_id"
-)
-
// VisibilityValue represents a visibility level within GitLab.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/
@@ -298,11 +285,14 @@ type Client struct {
Features *FeaturesService
GitIgnoreTemplates *GitIgnoreTemplatesService
Groups *GroupsService
+ GroupIssueBoards *GroupIssueBoardsService
GroupMembers *GroupMembersService
GroupMilestones *GroupMilestonesService
+ GroupVariables *GroupVariablesService
Issues *IssuesService
IssueLinks *IssueLinksService
Jobs *JobsService
+ Keys *KeysService
Boards *IssueBoardsService
Labels *LabelsService
MergeRequests *MergeRequestsService
@@ -318,6 +308,7 @@ type Client struct {
Projects *ProjectsService
ProjectMembers *ProjectMembersService
ProjectSnippets *ProjectSnippetsService
+ ProjectVariables *ProjectVariablesService
ProtectedBranches *ProtectedBranchesService
Repositories *RepositoriesService
RepositoryFiles *RepositoryFilesService
@@ -428,11 +419,14 @@ func newClient(httpClient *http.Client) *Client {
c.Features = &FeaturesService{client: c}
c.GitIgnoreTemplates = &GitIgnoreTemplatesService{client: c}
c.Groups = &GroupsService{client: c}
+ c.GroupIssueBoards = &GroupIssueBoardsService{client: c}
c.GroupMembers = &GroupMembersService{client: c}
c.GroupMilestones = &GroupMilestonesService{client: c}
+ c.GroupVariables = &GroupVariablesService{client: c}
c.Issues = &IssuesService{client: c, timeStats: timeStats}
c.IssueLinks = &IssueLinksService{client: c}
c.Jobs = &JobsService{client: c}
+ c.Keys = &KeysService{client: c}
c.Boards = &IssueBoardsService{client: c}
c.Labels = &LabelsService{client: c}
c.MergeRequests = &MergeRequestsService{client: c, timeStats: timeStats}
@@ -448,6 +442,7 @@ func newClient(httpClient *http.Client) *Client {
c.Projects = &ProjectsService{client: c}
c.ProjectMembers = &ProjectMembersService{client: c}
c.ProjectSnippets = &ProjectSnippetsService{client: c}
+ c.ProjectVariables = &ProjectVariablesService{client: c}
c.ProtectedBranches = &ProtectedBranchesService{client: c}
c.Repositories = &RepositoriesService{client: c}
c.RepositoryFiles = &RepositoryFilesService{client: c}
@@ -832,14 +827,6 @@ func NotificationLevel(v NotificationLevelValue) *NotificationLevelValue {
return p
}
-// OrderBy is a helper routine that allocates a new OrderByValue
-// to store v and returns a pointer to it.
-func OrderBy(v OrderByValue) *OrderByValue {
- p := new(OrderByValue)
- *p = v
- return p
-}
-
// Visibility is a helper routine that allocates a new VisibilityValue
// to store v and returns a pointer to it.
func Visibility(v VisibilityValue) *VisibilityValue {
@@ -855,3 +842,24 @@ func MergeMethod(v MergeMethodValue) *MergeMethodValue {
*p = v
return p
}
+
+// BoolValue is a boolean value with advanced json unmarshaling features.
+type BoolValue bool
+
+// UnmarshalJSON allows 1 and 0 to be considered as boolean values
+// Needed for https://gitlab.com/gitlab-org/gitlab-ce/issues/50122
+func (t *BoolValue) UnmarshalJSON(b []byte) error {
+ switch string(b) {
+ case `"1"`:
+ *t = true
+ return nil
+ case `"0"`:
+ *t = false
+ return nil
+ default:
+ var v bool
+ err := json.Unmarshal(b, &v)
+ *t = BoolValue(v)
+ return err
+ }
+}
diff --git a/vendor/github.com/xanzy/go-gitlab/group_boards.go b/vendor/github.com/xanzy/go-gitlab/group_boards.go
new file mode 100644
index 0000000..764df14
--- /dev/null
+++ b/vendor/github.com/xanzy/go-gitlab/group_boards.go
@@ -0,0 +1,262 @@
+//
+// Copyright 2018, Patrick Webster
+//
+// 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 gitlab
+
+import (
+ "fmt"
+ "net/url"
+)
+
+// GroupIssueBoardsService handles communication with the group issue board
+// related methods of the GitLab API.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html
+type GroupIssueBoardsService struct {
+ client *Client
+}
+
+// GroupIssueBoard represents a GitLab group issue board.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html
+type GroupIssueBoard struct {
+ ID int `json:"id"`
+ Name string `json:"name"`
+ Group *Group `json:"group"`
+ Milestone *Milestone `json:"milestone"`
+ Lists []*BoardList `json:"lists"`
+}
+
+func (b GroupIssueBoard) String() string {
+ return Stringify(b)
+}
+
+// ListGroupIssueBoardsOptions represents the available
+// ListGroupIssueBoards() options.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html#group-board
+type ListGroupIssueBoardsOptions ListOptions
+
+// ListGroupIssueBoards gets a list of all issue boards in a group.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html#group-board
+func (s *GroupIssueBoardsService) ListGroupIssueBoards(gid interface{}, opt *ListGroupIssueBoardsOptions, options ...OptionFunc) ([]*GroupIssueBoard, *Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("groups/%s/boards", url.QueryEscape(group))
+
+ req, err := s.client.NewRequest("GET", u, opt, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var gs []*GroupIssueBoard
+ resp, err := s.client.Do(req, &gs)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return gs, resp, err
+}
+
+// GetGroupIssueBoard gets a single issue board of a group.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html#single-board
+func (s *GroupIssueBoardsService) GetGroupIssueBoard(gid interface{}, board int, options ...OptionFunc) (*GroupIssueBoard, *Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("groups/%s/boards/%d", url.QueryEscape(group), board)
+
+ req, err := s.client.NewRequest("GET", u, nil, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ gib := new(GroupIssueBoard)
+ resp, err := s.client.Do(req, gib)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return gib, resp, err
+}
+
+// ListGroupIssueBoardListsOptions represents the available
+// ListGroupIssueBoardLists() options.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html#list-board-lists
+type ListGroupIssueBoardListsOptions ListOptions
+
+// ListGroupIssueBoardLists gets a list of the issue board's lists. Does not include
+// backlog and closed lists.
+//
+// GitLab API docs: https://docs.gitlab.com/ce/api/group_boards.html#list-board-lists
+func (s *GroupIssueBoardsService) ListGroupIssueBoardLists(gid interface{}, board int, opt *ListGroupIssueBoardListsOptions, options ...OptionFunc) ([]*BoardList, *Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("groups/%s/boards/%d/lists", url.QueryEscape(group), board)
+
+ req, err := s.client.NewRequest("GET", u, opt, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var gbl []*BoardList
+ resp, err := s.client.Do(req, &gbl)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return gbl, resp, err
+}
+
+// GetGroupIssueBoardList gets a single issue board list.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html#single-board-list
+func (s *GroupIssueBoardsService) GetGroupIssueBoardList(gid interface{}, board, list int, options ...OptionFunc) (*BoardList, *Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("groups/%s/boards/%d/lists/%d",
+ url.QueryEscape(group),
+ board,
+ list,
+ )
+
+ req, err := s.client.NewRequest("GET", u, nil, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ gbl := new(BoardList)
+ resp, err := s.client.Do(req, gbl)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return gbl, resp, err
+}
+
+// CreateGroupIssueBoardListOptions represents the available
+// CreateGroupIssueBoardList() options.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html#new-board-list
+type CreateGroupIssueBoardListOptions struct {
+ LabelID *int `url:"label_id" json:"label_id"`
+}
+
+// CreateGroupIssueBoardList creates a new issue board list.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html#new-board-list
+func (s *GroupIssueBoardsService) CreateGroupIssueBoardList(gid interface{}, board int, opt *CreateGroupIssueBoardListOptions, options ...OptionFunc) (*BoardList, *Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("groups/%s/boards/%d/lists", url.QueryEscape(group), board)
+
+ req, err := s.client.NewRequest("POST", u, opt, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ gbl := new(BoardList)
+ resp, err := s.client.Do(req, gbl)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return gbl, resp, err
+}
+
+// UpdateGroupIssueBoardListOptions represents the available
+// UpdateGroupIssueBoardList() options.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html#edit-board-list
+type UpdateGroupIssueBoardListOptions struct {
+ Position *int `url:"position" json:"position"`
+}
+
+// UpdateIssueBoardList updates the position of an existing
+// group issue board list.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html#edit-board-list
+func (s *GroupIssueBoardsService) UpdateIssueBoardList(gid interface{}, board, list int, opt *UpdateGroupIssueBoardListOptions, options ...OptionFunc) ([]*BoardList, *Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("groups/%s/boards/%d/lists/%d",
+ url.QueryEscape(group),
+ board,
+ list,
+ )
+
+ req, err := s.client.NewRequest("PUT", u, opt, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var gbl []*BoardList
+ resp, err := s.client.Do(req, gbl)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return gbl, resp, err
+}
+
+// DeleteGroupIssueBoardList soft deletes a group issue board list.
+// Only for admins and group owners.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/group_boards.html#delete-a-board-list
+func (s *GroupIssueBoardsService) DeleteGroupIssueBoardList(gid interface{}, board, list int, options ...OptionFunc) (*Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, err
+ }
+ u := fmt.Sprintf("groups/%s/boards/%d/lists/%d",
+ url.QueryEscape(group),
+ board,
+ list,
+ )
+
+ req, err := s.client.NewRequest("DELETE", u, nil, options)
+ if err != nil {
+ return nil, err
+ }
+
+ return s.client.Do(req, nil)
+}
diff --git a/vendor/github.com/xanzy/go-gitlab/group_variables.go b/vendor/github.com/xanzy/go-gitlab/group_variables.go
new file mode 100644
index 0000000..cc28e4f
--- /dev/null
+++ b/vendor/github.com/xanzy/go-gitlab/group_variables.go
@@ -0,0 +1,171 @@
+//
+// Copyright 2018, Patrick Webster
+//
+// 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 gitlab
+
+import (
+ "fmt"
+ "net/url"
+)
+
+// GroupVariablesService handles communication with the
+// group variables related methods of the GitLab API.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/group_level_variables.html
+type GroupVariablesService struct {
+ client *Client
+}
+
+// GroupVariable represents a GitLab group Variable.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/group_level_variables.html
+type GroupVariable struct {
+ Key string `json:"key"`
+ Value string `json:"value"`
+ Protected bool `json:"protected"`
+}
+
+func (v GroupVariable) String() string {
+ return Stringify(v)
+}
+
+// ListVariables gets a list of all variables for a group.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/group_level_variables.html#list-group-variables
+func (s *GroupVariablesService) ListVariables(gid interface{}, options ...OptionFunc) ([]*GroupVariable, *Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("groups/%s/variables", url.QueryEscape(group))
+
+ req, err := s.client.NewRequest("GET", u, nil, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var vs []*GroupVariable
+ resp, err := s.client.Do(req, &vs)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return vs, resp, err
+}
+
+// GetVariable gets a variable.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/group_level_variables.html#show-variable-details
+func (s *GroupVariablesService) GetVariable(gid interface{}, key string, options ...OptionFunc) (*GroupVariable, *Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("groups/%s/variables/%s", url.QueryEscape(group), url.QueryEscape(key))
+
+ req, err := s.client.NewRequest("GET", u, nil, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ v := new(GroupVariable)
+ resp, err := s.client.Do(req, v)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return v, resp, err
+}
+
+// CreateVariable creates a new group variable.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/group_level_variables.html#create-variable
+func (s *GroupVariablesService) CreateVariable(gid interface{}, opt *CreateVariableOptions, options ...OptionFunc) (*GroupVariable, *Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("groups/%s/variables", url.QueryEscape(group))
+
+ req, err := s.client.NewRequest("POST", u, opt, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ v := new(GroupVariable)
+ resp, err := s.client.Do(req, v)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return v, resp, err
+}
+
+// UpdateVariable updates the position of an existing
+// group issue board list.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/group_level_variables.html#update-variable
+func (s *GroupVariablesService) UpdateVariable(gid interface{}, key string, opt *UpdateVariableOptions, options ...OptionFunc) (*GroupVariable, *Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("groups/%s/variables/%s",
+ url.QueryEscape(group),
+ url.QueryEscape(key),
+ )
+
+ req, err := s.client.NewRequest("PUT", u, opt, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ v := new(GroupVariable)
+ resp, err := s.client.Do(req, v)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return v, resp, err
+}
+
+// RemoveVariable removes a group's variable.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/group_level_variables.html#remove-variable
+func (s *GroupVariablesService) RemoveVariable(gid interface{}, key string, options ...OptionFunc) (*Response, error) {
+ group, err := parseID(gid)
+ if err != nil {
+ return nil, err
+ }
+ u := fmt.Sprintf("groups/%s/variables/%s",
+ url.QueryEscape(group),
+ url.QueryEscape(key),
+ )
+
+ req, err := s.client.NewRequest("DELETE", u, nil, options)
+ if err != nil {
+ return nil, err
+ }
+
+ return s.client.Do(req, nil)
+}
diff --git a/vendor/github.com/xanzy/go-gitlab/issues.go b/vendor/github.com/xanzy/go-gitlab/issues.go
index 411146a..481721d 100644
--- a/vendor/github.com/xanzy/go-gitlab/issues.go
+++ b/vendor/github.com/xanzy/go-gitlab/issues.go
@@ -310,7 +310,7 @@ type UpdateIssueOptions struct {
Title *string `url:"title,omitempty" json:"title,omitempty"`
Description *string `url:"description,omitempty" json:"description,omitempty"`
Confidential *bool `url:"confidential,omitempty" json:"confidential,omitempty"`
- AssigneeID *int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
+ AssigneeIDs []int `url:"assignee_ids,omitempty" json:"assignee_ids,omitempty"`
MilestoneID *int `url:"milestone_id,omitempty" json:"milestone_id,omitempty"`
Labels Labels `url:"labels,comma,omitempty" json:"labels,omitempty"`
StateEvent *string `url:"state_event,omitempty" json:"state_event,omitempty"`
diff --git a/vendor/github.com/xanzy/go-gitlab/keys.go b/vendor/github.com/xanzy/go-gitlab/keys.go
new file mode 100644
index 0000000..dab9b25
--- /dev/null
+++ b/vendor/github.com/xanzy/go-gitlab/keys.go
@@ -0,0 +1,70 @@
+//
+// Copyright 2018, Patrick Webster
+//
+// 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 gitlab
+
+import (
+ "fmt"
+ "net/url"
+ "time"
+)
+
+// KeysService handles communication with the
+// keys related methods of the GitLab API.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/keys.html
+type KeysService struct {
+ client *Client
+}
+
+// Key represents a GitLab user's SSH key.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/keys.html
+type Key struct {
+ ID int `json:"id"`
+ Title string `json:"title"`
+ Key string `json:"key"`
+ CreatedAt *time.Time `json:"created_at"`
+ User User `json:"user"`
+}
+
+// GetKeyWithUser gets a single key by id along with the associated
+// user information.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/keys.html#get-ssh-key-with-user-by-id-of-an-ssh-key
+func (s *KeysService) GetKeyWithUser(kid interface{}, options ...OptionFunc) (*Key, *Response, error) {
+ key, err := parseID(kid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("keys/%s", url.QueryEscape(key))
+
+ req, err := s.client.NewRequest("GET", u, nil, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ k := new(Key)
+ resp, err := s.client.Do(req, k)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return k, resp, err
+}
diff --git a/vendor/github.com/xanzy/go-gitlab/merge_requests.go b/vendor/github.com/xanzy/go-gitlab/merge_requests.go
index daddd62..da1794c 100644
--- a/vendor/github.com/xanzy/go-gitlab/merge_requests.go
+++ b/vendor/github.com/xanzy/go-gitlab/merge_requests.go
@@ -403,12 +403,17 @@ func (s *MergeRequestsService) GetIssuesClosedOnMerge(pid interface{}, mergeRequ
// GitLab API docs:
// https://docs.gitlab.com/ce/api/merge_requests.html#create-mr
type CreateMergeRequestOptions struct {
- Title *string `url:"title,omitempty" json:"title,omitempty"`
- Description *string `url:"description,omitempty" json:"description,omitempty"`
- SourceBranch *string `url:"source_branch,omitempty" json:"source_branch,omitempty"`
- TargetBranch *string `url:"target_branch,omitempty" json:"target_branch,omitempty"`
- AssigneeID *int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
- TargetProjectID *int `url:"target_project_id,omitempty" json:"target_project_id,omitempty"`
+ Title *string `url:"title,omitempty" json:"title,omitempty"`
+ Description *string `url:"description,omitempty" json:"description,omitempty"`
+ SourceBranch *string `url:"source_branch,omitempty" json:"source_branch,omitempty"`
+ TargetBranch *string `url:"target_branch,omitempty" json:"target_branch,omitempty"`
+ Labels Labels `url:"labels,comma,omitempty" json:"labels,omitempty"`
+ AssigneeID *int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
+ TargetProjectID *int `url:"target_project_id,omitempty" json:"target_project_id,omitempty"`
+ MilestoneID *int `url:"milestone_id,omitempty" json:"milestone_id,omitempty"`
+ RemoveSourceBranch *bool `url:"remove_source_branch,omitempty" json:"remove_source_branch,omitempty"`
+ Squash *bool `url:"squash,omitempty" json:"squash,omitempty"`
+ AllowCollaboration *bool `url:"allow_collaboration,omitempty" json:"allow_collaboration,omitempty"`
}
// CreateMergeRequest creates a new merge request.
diff --git a/vendor/github.com/xanzy/go-gitlab/pipelines.go b/vendor/github.com/xanzy/go-gitlab/pipelines.go
index 0c736dd..952d0d2 100644
--- a/vendor/github.com/xanzy/go-gitlab/pipelines.go
+++ b/vendor/github.com/xanzy/go-gitlab/pipelines.go
@@ -87,7 +87,7 @@ type ListProjectPipelinesOptions struct {
YamlErrors *bool `url:"yaml_errors,omitempty" json:"yaml_errors,omitempty"`
Name *string `url:"name,omitempty" json:"name,omitempty"`
Username *string `url:"username,omitempty" json:"username,omitempty"`
- OrderBy *OrderByValue `url:"order_by,omitempty" json:"order_by,omitempty"`
+ OrderBy *string `url:"order_by,omitempty" json:"order_by,omitempty"`
Sort *string `url:"sort,omitempty" json:"sort,omitempty"`
}
diff --git a/vendor/github.com/xanzy/go-gitlab/project_variables.go b/vendor/github.com/xanzy/go-gitlab/project_variables.go
new file mode 100644
index 0000000..5b9f763
--- /dev/null
+++ b/vendor/github.com/xanzy/go-gitlab/project_variables.go
@@ -0,0 +1,196 @@
+//
+// Copyright 2018, Patrick Webster
+//
+// 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 gitlab
+
+import (
+ "fmt"
+ "net/url"
+)
+
+// ProjectVariablesService handles communication with the
+// project variables related methods of the GitLab API.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/project_level_variables.html
+type ProjectVariablesService struct {
+ client *Client
+}
+
+// ProjectVariable represents a GitLab Project Variable.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/project_level_variables.html
+type ProjectVariable struct {
+ Key string `json:"key"`
+ Value string `json:"value"`
+ Protected bool `json:"protected"`
+ EnvironmentScope string `json:"environment_scope"`
+}
+
+func (v ProjectVariable) String() string {
+ return Stringify(v)
+}
+
+// ListVariables gets a list of all variables in a project.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/project_level_variables.html#list-project-variables
+func (s *ProjectVariablesService) ListVariables(pid interface{}, options ...OptionFunc) ([]*ProjectVariable, *Response, error) {
+ project, err := parseID(pid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("projects/%s/variables", url.QueryEscape(project))
+
+ req, err := s.client.NewRequest("GET", u, nil, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var vs []*ProjectVariable
+ resp, err := s.client.Do(req, &vs)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return vs, resp, err
+}
+
+// GetVariable gets a variable.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/project_level_variables.html#show-variable-details
+func (s *ProjectVariablesService) GetVariable(pid interface{}, key string, options ...OptionFunc) (*ProjectVariable, *Response, error) {
+ project, err := parseID(pid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("projects/%s/variables/%s", url.QueryEscape(project), url.QueryEscape(key))
+
+ req, err := s.client.NewRequest("GET", u, nil, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ v := new(ProjectVariable)
+ resp, err := s.client.Do(req, v)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return v, resp, err
+}
+
+// CreateVariableOptions represents the available
+// CreateVariable() options.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/project_level_variables.html#create-variable
+type CreateVariableOptions struct {
+ Key *string `url:"key,omitempty" json:"key,omitempty"`
+ Value *string `url:"value,omitempty" json:"value,omitempty"`
+ Protected *bool `url:"protected,omitempty" json:"protected,omitempty"`
+ EnvironmentScope *string `url:"environment_scope,omitempty" json:"environment_scope,omitempty"`
+}
+
+// CreateVariable creates a new project variable.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/project_level_variables.html#create-variable
+func (s *ProjectVariablesService) CreateVariable(pid interface{}, opt *CreateVariableOptions, options ...OptionFunc) (*ProjectVariable, *Response, error) {
+ project, err := parseID(pid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("projects/%s/variables", url.QueryEscape(project))
+
+ req, err := s.client.NewRequest("POST", u, opt, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ v := new(ProjectVariable)
+ resp, err := s.client.Do(req, v)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return v, resp, err
+}
+
+// UpdateVariableOptions represents the available
+// UpdateVariable() options.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/project_level_variables.html#update-variable
+type UpdateVariableOptions struct {
+ Key *string `url:"key,omitempty" json:"key,omitempty"`
+ Value *string `url:"value,omitempty" json:"value,omitempty"`
+ Protected *bool `url:"protected,omitempty" json:"protected,omitempty"`
+ EnvironmentScope *string `url:"environment_scope,omitempty" json:"environment_scope,omitempty"`
+}
+
+// UpdateVariable updates the position of an existing
+// group issue board list.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/project_level_variables.html#update-variable
+func (s *ProjectVariablesService) UpdateVariable(pid interface{}, key string, opt *UpdateVariableOptions, options ...OptionFunc) (*ProjectVariable, *Response, error) {
+ project, err := parseID(pid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("projects/%s/variables/%s",
+ url.QueryEscape(project),
+ url.QueryEscape(key),
+ )
+
+ req, err := s.client.NewRequest("PUT", u, opt, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ v := new(ProjectVariable)
+ resp, err := s.client.Do(req, v)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return v, resp, err
+}
+
+// RemoveVariable removes a project's variable.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ee/api/project_level_variables.html#remove-variable
+func (s *ProjectVariablesService) RemoveVariable(pid interface{}, key string, options ...OptionFunc) (*Response, error) {
+ project, err := parseID(pid)
+ if err != nil {
+ return nil, err
+ }
+ u := fmt.Sprintf("projects/%s/variables/%s",
+ url.QueryEscape(project),
+ url.QueryEscape(key),
+ )
+
+ req, err := s.client.NewRequest("DELETE", u, nil, options)
+ if err != nil {
+ return nil, err
+ }
+
+ return s.client.Do(req, nil)
+}
diff --git a/vendor/github.com/xanzy/go-gitlab/repositories.go b/vendor/github.com/xanzy/go-gitlab/repositories.go
index 7d10997..01d767a 100644
--- a/vendor/github.com/xanzy/go-gitlab/repositories.go
+++ b/vendor/github.com/xanzy/go-gitlab/repositories.go
@@ -185,8 +185,9 @@ func (c Compare) String() string {
// GitLab API docs:
// https://docs.gitlab.com/ce/api/repositories.html#compare-branches-tags-or-commits
type CompareOptions struct {
- From *string `url:"from,omitempty" json:"from,omitempty"`
- To *string `url:"to,omitempty" json:"to,omitempty"`
+ From *string `url:"from,omitempty" json:"from,omitempty"`
+ To *string `url:"to,omitempty" json:"to,omitempty"`
+ Straight *bool `url:"straight,omitempty" json:"straight,omitempty"`
}
// Compare compares branches, tags or commits.
diff --git a/vendor/github.com/xanzy/go-gitlab/services.go b/vendor/github.com/xanzy/go-gitlab/services.go
index e93ae60..890e5a3 100644
--- a/vendor/github.com/xanzy/go-gitlab/services.go
+++ b/vendor/github.com/xanzy/go-gitlab/services.go
@@ -45,8 +45,10 @@ type Service struct {
MergeRequestsEvents bool `json:"merge_requests_events"`
TagPushEvents bool `json:"tag_push_events"`
NoteEvents bool `json:"note_events"`
+ ConfidentialNoteEvents bool `json:"confidential_note_events"`
PipelineEvents bool `json:"pipeline_events"`
JobEvents bool `json:"job_events"`
+ WikiPageEvents bool `json:"wiki_page_events"`
}
// SetGitLabCIServiceOptions represents the available SetGitLabCIService()
@@ -252,7 +254,28 @@ type SlackService struct {
// GitLab API docs:
// https://docs.gitlab.com/ce/api/services.html#slack
type SlackServiceProperties struct {
- NotifyOnlyBrokenPipelines bool `json:"notify_only_broken_pipelines"`
+ // Note: NotifyOnlyBrokenPipelines and NotifyOnlyDefaultBranch are not
+ // just "bool" because in some cases gitlab returns
+ // "notify_only_broken_pipelines": true, and in other cases
+ // "notify_only_broken_pipelines": "1". The same is for
+ // "notify_only_default_branch" field.
+ // We need to handle this, until the bug will be fixed.
+ // Ref: https://gitlab.com/gitlab-org/gitlab-ce/issues/50122
+
+ NotifyOnlyBrokenPipelines BoolValue `url:"notify_only_broken_pipelines,omitempty" json:"notify_only_broken_pipelines,omitempty"`
+ NotifyOnlyDefaultBranch BoolValue `url:"notify_only_default_branch,omitempty" json:"notify_only_default_branch,omitempty"`
+ WebHook string `url:"webhook,omitempty" json:"webhook,omitempty"`
+ Username string `url:"username,omitempty" json:"username,omitempty"`
+ Channel string `url:"channel,omitempty" json:"channel,omitempty"`
+ PushChannel string `url:"push_channel,omitempty" json:"push_channel,omitempty"`
+ IssueChannel string `url:"issue_channel,omitempty" json:"issue_channel,omitempty"`
+ ConfidentialIssueChannel string `url:"confidential_issue_channel,omitempty" json:"confidential_issue_channel,omitempty"`
+ MergeRequestChannel string `url:"merge_request_channel,omitempty" json:"merge_request_channel,omitempty"`
+ NoteChannel string `url:"note_channel,omitempty" json:"note_channel,omitempty"`
+ ConfidentialNoteChannel string `url:"confidential_note_channel,omitempty" json:"confidential_note_channel,omitempty"`
+ TagPushChannel string `url:"tag_push_channel,omitempty" json:"tag_push_channel,omitempty"`
+ PipelineChannel string `url:"pipeline_channel,omitempty" json:"pipeline_channel,omitempty"`
+ WikiPageChannel string `url:"wiki_page_channel,omitempty" json:"wiki_page_channel,omitempty"`
}
// GetSlackService gets Slack service settings for a project.
@@ -286,9 +309,32 @@ func (s *ServicesService) GetSlackService(pid interface{}, options ...OptionFunc
// GitLab API docs:
// https://docs.gitlab.com/ce/api/services.html#edit-slack-service
type SetSlackServiceOptions struct {
- WebHook *string `url:"webhook,omitempty" json:"webhook,omitempty" `
- Username *string `url:"username,omitempty" json:"username,omitempty" `
- Channel *string `url:"channel,omitempty" json:"channel,omitempty"`
+ WebHook *string `url:"webhook,omitempty" json:"webhook,omitempty"`
+ Username *string `url:"username,omitempty" json:"username,omitempty"`
+ Channel *string `url:"channel,omitempty" json:"channel,omitempty"`
+ NotifyOnlyBrokenPipelines *bool `url:"notify_only_broken_pipelines,omitempty" json:"notify_only_broken_pipelines,omitempty"`
+ NotifyOnlyDefaultBranch *bool `url:"notify_only_default_branch,omitempty" json:"notify_only_default_branch,omitempty"`
+ PushEvents *bool `url:"push_events,omitempty" json:"push_events,omitempty"`
+ PushChannel *string `url:"push_channel,omitempty" json:"push_channel,omitempty"`
+ IssuesEvents *bool `url:"issues_events,omitempty" json:"issues_events,omitempty"`
+ IssueChannel *string `url:"issue_channel,omitempty" json:"issue_channel,omitempty"`
+ ConfidentialIssuesEvents *bool `url:"confidential_issues_events,omitempty" json:"confidential_issues_events,omitempty"`
+ ConfidentialIssueChannel *string `url:"confidential_issue_channel,omitempty" json:"confidential_issue_channel,omitempty"`
+ MergeRequestsEvents *bool `url:"merge_requests_events,omitempty" json:"merge_requests_events,omitempty"`
+ MergeRequestChannel *string `url:"merge_request_channel,omitempty" json:"merge_request_channel,omitempty"`
+ TagPushEvents *bool `url:"tag_push_events,omitempty" json:"tag_push_events,omitempty"`
+ TagPushChannel *string `url:"tag_push_channel,omitempty" json:"tag_push_channel,omitempty"`
+ NoteEvents *bool `url:"note_events,omitempty" json:"note_events,omitempty"`
+ NoteChannel *string `url:"note_channel,omitempty" json:"note_channel,omitempty"`
+ ConfidentialNoteEvents *bool `url:"confidential_note_events" json:"confidential_note_events"`
+ // TODO: Currently, GitLab ignores this option (not implemented yet?), so
+ // there is no way to set it. Uncomment when this is fixed.
+ // See: https://gitlab.com/gitlab-org/gitlab-ce/issues/49730
+ //ConfidentialNoteChannel *string `json:"confidential_note_channel,omitempty"`
+ PipelineEvents *bool `url:"pipeline_events,omitempty" json:"pipeline_events,omitempty"`
+ PipelineChannel *string `url:"pipeline_channel,omitempty" json:"pipeline_channel,omitempty"`
+ WikiPageChannel *string `url:"wiki_page_channel,omitempty" json:"wiki_page_channel,omitempty"`
+ WikiPageEvents *bool `url:"wiki_page_events" json:"wiki_page_events"`
}
// SetSlackService sets Slack service for a project
@@ -513,3 +559,91 @@ func (s *ServicesService) DeleteJenkinsCIService(pid interface{}, options ...Opt
return s.client.Do(req, nil)
}
+
+// MicrosoftTeamsService represents Microsoft Teams service settings.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/services.html#microsoft-teams
+type MicrosoftTeamsService struct {
+ Service
+ Properties *MicrosoftTeamsServiceProperties `json:"properties"`
+}
+
+// MicrosoftTeamsServiceProperties represents Microsoft Teams specific properties.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/services.html#microsoft-teams
+type MicrosoftTeamsServiceProperties struct {
+ WebHook string `json:"webhook"`
+}
+
+// GetMicrosoftTeamsService gets MicrosoftTeams service settings for a project.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/services.html#get-microsoft-teams-service-settings
+func (s *ServicesService) GetMicrosoftTeamsService(pid interface{}, options ...OptionFunc) (*MicrosoftTeamsService, *Response, error) {
+ project, err := parseID(pid)
+ if err != nil {
+ return nil, nil, err
+ }
+ u := fmt.Sprintf("projects/%s/services/microsoft-teams", url.QueryEscape(project))
+
+ req, err := s.client.NewRequest("GET", u, nil, options)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ svc := new(MicrosoftTeamsService)
+ resp, err := s.client.Do(req, svc)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return svc, resp, err
+}
+
+// SetMicrosoftTeamsServiceOptions represents the available SetMicrosoftTeamsService()
+// options.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/services.html#create-edit-microsoft-teams-service
+type SetMicrosoftTeamsServiceOptions struct {
+ WebHook *string `url:"webhook,omitempty" json:"webhook,omitempty"`
+}
+
+// SetMicrosoftTeamsService sets Microsoft Teams service for a project
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/services.html#create-edit-microsoft-teams-service
+func (s *ServicesService) SetMicrosoftTeamsService(pid interface{}, opt *SetMicrosoftTeamsServiceOptions, options ...OptionFunc) (*Response, error) {
+ project, err := parseID(pid)
+ if err != nil {
+ return nil, err
+ }
+ u := fmt.Sprintf("projects/%s/services/microsoft-teams", url.QueryEscape(project))
+
+ req, err := s.client.NewRequest("PUT", u, opt, options)
+ if err != nil {
+ return nil, err
+ }
+ return s.client.Do(req, nil)
+}
+
+// DeleteMicrosoftTeamsService deletes Microsoft Teams service for project.
+//
+// GitLab API docs:
+// https://docs.gitlab.com/ce/api/services.html#delete-microsoft-teams-service
+func (s *ServicesService) DeleteMicrosoftTeamsService(pid interface{}, options ...OptionFunc) (*Response, error) {
+ project, err := parseID(pid)
+ if err != nil {
+ return nil, err
+ }
+ u := fmt.Sprintf("projects/%s/services/microsoft-teams", url.QueryEscape(project))
+
+ req, err := s.client.NewRequest("DELETE", u, nil, options)
+ if err != nil {
+ return nil, err
+ }
+
+ return s.client.Do(req, nil)
+}
diff --git a/vendor/github.com/xanzy/go-gitlab/tags.go b/vendor/github.com/xanzy/go-gitlab/tags.go
index b726410..4e8a713 100644
--- a/vendor/github.com/xanzy/go-gitlab/tags.go
+++ b/vendor/github.com/xanzy/go-gitlab/tags.go
@@ -55,7 +55,11 @@ func (t Tag) String() string {
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/tags.html#list-project-repository-tags
-type ListTagsOptions ListOptions
+type ListTagsOptions struct {
+ ListOptions
+ OrderBy *string `url:"order_by,omitempty" json:"order_by,omitempty"`
+ Sort *string `url:"sort,omitempty" json:"sort,omitempty"`
+}
// ListTags gets a list of tags from a project, sorted by name in reverse
// alphabetical order.
@@ -93,7 +97,7 @@ func (s *TagsService) GetTag(pid interface{}, tag string, options ...OptionFunc)
if err != nil {
return nil, nil, err
}
- u := fmt.Sprintf("projects/%s/repository/tags/%s", url.QueryEscape(project), tag)
+ u := fmt.Sprintf("projects/%s/repository/tags/%s", url.QueryEscape(project), url.QueryEscape(tag))
req, err := s.client.NewRequest("GET", u, nil, options)
if err != nil {
@@ -154,7 +158,7 @@ func (s *TagsService) DeleteTag(pid interface{}, tag string, options ...OptionFu
if err != nil {
return nil, err
}
- u := fmt.Sprintf("projects/%s/repository/tags/%s", url.QueryEscape(project), tag)
+ u := fmt.Sprintf("projects/%s/repository/tags/%s", url.QueryEscape(project), url.QueryEscape(tag))
req, err := s.client.NewRequest("DELETE", u, nil, options)
if err != nil {
@@ -182,7 +186,7 @@ func (s *TagsService) CreateRelease(pid interface{}, tag string, opt *CreateRele
if err != nil {
return nil, nil, err
}
- u := fmt.Sprintf("projects/%s/repository/tags/%s/release", url.QueryEscape(project), tag)
+ u := fmt.Sprintf("projects/%s/repository/tags/%s/release", url.QueryEscape(project), url.QueryEscape(tag))
req, err := s.client.NewRequest("POST", u, opt, options)
if err != nil {
@@ -215,7 +219,7 @@ func (s *TagsService) UpdateRelease(pid interface{}, tag string, opt *UpdateRele
if err != nil {
return nil, nil, err
}
- u := fmt.Sprintf("projects/%s/repository/tags/%s/release", url.QueryEscape(project), tag)
+ u := fmt.Sprintf("projects/%s/repository/tags/%s/release", url.QueryEscape(project), url.QueryEscape(tag))
req, err := s.client.NewRequest("PUT", u, opt, options)
if err != nil {
diff --git a/vendor/go.opencensus.io/CONTRIBUTING.md b/vendor/go.opencensus.io/CONTRIBUTING.md
index 6ec97c9..3f3aed3 100644
--- a/vendor/go.opencensus.io/CONTRIBUTING.md
+++ b/vendor/go.opencensus.io/CONTRIBUTING.md
@@ -21,4 +21,36 @@ All submissions, including submissions by project members, require review. We
use GitHub pull requests for this purpose. Consult [GitHub Help] for more
information on using pull requests.
-[GitHub Help]: https://help.github.com/articles/about-pull-requests/ \ No newline at end of file
+[GitHub Help]: https://help.github.com/articles/about-pull-requests/
+
+## Instructions
+
+Fork the repo, checkout the upstream repo to your GOPATH by:
+
+```
+$ go get -d go.opencensus.io
+```
+
+Add your fork as an origin:
+
+```
+cd $(go env GOPATH)/src/go.opencensus.io
+git remote add fork git@github.com:YOUR_GITHUB_USERNAME/opencensus-go.git
+```
+
+Run tests:
+
+```
+$ go test ./...
+```
+
+Checkout a new branch, make modifications and push the branch to your fork:
+
+```
+$ git checkout -b feature
+# edit files
+$ git commit
+$ git push fork feature
+```
+
+Open a pull request against the main opencensus-go repo.
diff --git a/vendor/go.opencensus.io/Gopkg.lock b/vendor/go.opencensus.io/Gopkg.lock
index 026f013..3be12ac 100644
--- a/vendor/go.opencensus.io/Gopkg.lock
+++ b/vendor/go.opencensus.io/Gopkg.lock
@@ -2,57 +2,46 @@
[[projects]]
- name = "cloud.google.com/go"
- packages = [
- "compute/metadata",
- "internal/version",
- "monitoring/apiv3",
- "trace/apiv2"
- ]
- revision = "0fd7230b2a7505833d5f69b75cbd6c9582401479"
- version = "v0.23.0"
-
-[[projects]]
branch = "master"
+ digest = "1:eee9386329f4fcdf8d6c0def0c9771b634bdd5ba460d888aa98c17d59b37a76c"
name = "git.apache.org/thrift.git"
packages = ["lib/go/thrift"]
- revision = "88591e32e710a0524327153c8b629d5b461e35e0"
+ pruneopts = "UT"
+ revision = "6e67faa92827ece022380b211c2caaadd6145bf5"
source = "github.com/apache/thrift"
[[projects]]
branch = "master"
+ digest = "1:d6afaeed1502aa28e80a4ed0981d570ad91b2579193404256ce672ed0a609e0d"
name = "github.com/beorn7/perks"
packages = ["quantile"]
+ pruneopts = "UT"
revision = "3a771d992973f24aa725d07868b467d1ddfceafb"
[[projects]]
+ digest = "1:4c0989ca0bcd10799064318923b9bc2db6b4d6338dd75f3f2d86c3511aaaf5cf"
name = "github.com/golang/protobuf"
packages = [
"proto",
- "protoc-gen-go/descriptor",
"ptypes",
"ptypes/any",
"ptypes/duration",
- "ptypes/empty",
"ptypes/timestamp",
- "ptypes/wrappers"
]
- revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265"
- version = "v1.1.0"
-
-[[projects]]
- name = "github.com/googleapis/gax-go"
- packages = ["."]
- revision = "317e0006254c44a0ac427cc52a0e083ff0b9622f"
- version = "v2.0.0"
+ pruneopts = "UT"
+ revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5"
+ version = "v1.2.0"
[[projects]]
+ digest = "1:ff5ebae34cfbf047d505ee150de27e60570e8c394b3b8fdbb720ff6ac71985fc"
name = "github.com/matttproud/golang_protobuf_extensions"
packages = ["pbutil"]
- revision = "3247c84500bff8d9fb6d579d800f20b3e091582c"
- version = "v1.0.0"
+ pruneopts = "UT"
+ revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c"
+ version = "v1.0.1"
[[projects]]
+ digest = "1:824c8f3aa4c5f23928fa84ebbd5ed2e9443b3f0cb958a40c1f2fbed5cf5e64b1"
name = "github.com/openzipkin/zipkin-go"
packages = [
".",
@@ -60,81 +49,90 @@
"model",
"propagation",
"reporter",
- "reporter/http"
+ "reporter/http",
]
- revision = "f197ec29e729f226d23370ea60f0e49b8f44ccf4"
- version = "v0.1.0"
+ pruneopts = "UT"
+ revision = "d455a5674050831c1e187644faa4046d653433c2"
+ version = "v0.1.1"
[[projects]]
+ digest = "1:d14a5f4bfecf017cb780bdde1b6483e5deb87e12c332544d2c430eda58734bcb"
name = "github.com/prometheus/client_golang"
packages = [
"prometheus",
- "prometheus/promhttp"
+ "prometheus/promhttp",
]
+ pruneopts = "UT"
revision = "c5b7fccd204277076155f10851dad72b76a49317"
version = "v0.8.0"
[[projects]]
branch = "master"
+ digest = "1:2d5cd61daa5565187e1d96bae64dbbc6080dacf741448e9629c64fd93203b0d4"
name = "github.com/prometheus/client_model"
packages = ["go"]
- revision = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c"
+ pruneopts = "UT"
+ revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f"
[[projects]]
branch = "master"
+ digest = "1:63b68062b8968092eb86bedc4e68894bd096ea6b24920faca8b9dcf451f54bb5"
name = "github.com/prometheus/common"
packages = [
"expfmt",
"internal/bitbucket.org/ww/goautoneg",
- "model"
+ "model",
]
- revision = "7600349dcfe1abd18d72d3a1770870d9800a7801"
+ pruneopts = "UT"
+ revision = "c7de2306084e37d54b8be01f3541a8464345e9a5"
[[projects]]
branch = "master"
+ digest = "1:8c49953a1414305f2ff5465147ee576dd705487c35b15918fcd4efdc0cb7a290"
name = "github.com/prometheus/procfs"
packages = [
".",
"internal/util",
"nfs",
- "xfs"
+ "xfs",
]
- revision = "8b1c2da0d56deffdbb9e48d4414b4e674bd8083e"
+ pruneopts = "UT"
+ revision = "05ee40e3a273f7245e8777337fc7b46e533a9a92"
[[projects]]
branch = "master"
+ digest = "1:deafe4ab271911fec7de5b693d7faae3f38796d9eb8622e2b9e7df42bb3dfea9"
name = "golang.org/x/net"
packages = [
"context",
- "context/ctxhttp",
"http/httpguts",
"http2",
"http2/hpack",
"idna",
"internal/timeseries",
- "trace"
+ "trace",
]
- revision = "9ef9f5bb98a1fdc41f8cf6c250a4404b4085e389"
-
-[[projects]]
- branch = "master"
- name = "golang.org/x/oauth2"
- packages = [
- ".",
- "google",
- "internal",
- "jws",
- "jwt"
- ]
- revision = "dd5f5d8e78ce062a4aa881dff95a94f2a0fd405a"
+ pruneopts = "UT"
+ revision = "922f4815f713f213882e8ef45e0d315b164d705c"
[[projects]]
branch = "master"
+ digest = "1:e0140c0c868c6e0f01c0380865194592c011fe521d6e12d78bfd33e756fe018a"
name = "golang.org/x/sync"
packages = ["semaphore"]
+ pruneopts = "UT"
revision = "1d60e4601c6fd243af51cc01ddf169918a5407ca"
[[projects]]
+ branch = "master"
+ digest = "1:a3f00ac457c955fe86a41e1495e8f4c54cb5399d609374c5cc26aa7d72e542c8"
+ name = "golang.org/x/sys"
+ packages = ["unix"]
+ pruneopts = "UT"
+ revision = "3b58ed4ad3395d483fc92d5d14123ce2c3581fec"
+
+[[projects]]
+ digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18"
name = "golang.org/x/text"
packages = [
"collate",
@@ -150,79 +148,48 @@
"unicode/bidi",
"unicode/cldr",
"unicode/norm",
- "unicode/rangetable"
+ "unicode/rangetable",
]
+ pruneopts = "UT"
revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0"
version = "v0.3.0"
[[projects]]
branch = "master"
+ digest = "1:c0c17c94fe8bc1ab34e7f586a4a8b788c5e1f4f9f750ff23395b8b2f5a523530"
name = "google.golang.org/api"
- packages = [
- "googleapi/transport",
- "internal",
- "iterator",
- "option",
- "support/bundler",
- "transport",
- "transport/grpc",
- "transport/http"
- ]
- revision = "4f7dd2b006a4ffd9fd683c1c734d2fe91ca0ea1c"
-
-[[projects]]
- name = "google.golang.org/appengine"
- packages = [
- ".",
- "internal",
- "internal/app_identity",
- "internal/base",
- "internal/datastore",
- "internal/log",
- "internal/modules",
- "internal/remote_api",
- "internal/socket",
- "internal/urlfetch",
- "socket",
- "urlfetch"
- ]
- revision = "150dc57a1b433e64154302bdc40b6bb8aefa313a"
- version = "v1.0.0"
+ packages = ["support/bundler"]
+ pruneopts = "UT"
+ revision = "e21acd801f91da814261b938941d193bb036441a"
[[projects]]
branch = "master"
+ digest = "1:077c1c599507b3b3e9156d17d36e1e61928ee9b53a5b420f10f28ebd4a0b275c"
name = "google.golang.org/genproto"
- packages = [
- "googleapis/api/annotations",
- "googleapis/api/distribution",
- "googleapis/api/label",
- "googleapis/api/metric",
- "googleapis/api/monitoredres",
- "googleapis/devtools/cloudtrace/v2",
- "googleapis/monitoring/v3",
- "googleapis/rpc/code",
- "googleapis/rpc/status",
- "protobuf/field_mask"
- ]
- revision = "11a468237815f3a3ddf9f7c6e8b6b3b382a24d15"
+ packages = ["googleapis/rpc/status"]
+ pruneopts = "UT"
+ revision = "c66870c02cf823ceb633bcd05be3c7cda29976f4"
[[projects]]
+ digest = "1:3dd7996ce6bf52dec6a2f69fa43e7c4cefea1d4dfa3c8ab7a5f8a9f7434e239d"
name = "google.golang.org/grpc"
packages = [
".",
"balancer",
"balancer/base",
"balancer/roundrobin",
- "channelz",
"codes",
"connectivity",
"credentials",
- "credentials/oauth",
"encoding",
"encoding/proto",
- "grpclb/grpc_lb_v1/messages",
"grpclog",
"internal",
+ "internal/backoff",
+ "internal/channelz",
+ "internal/envconfig",
+ "internal/grpcrand",
+ "internal/transport",
"keepalive",
"metadata",
"naming",
@@ -233,14 +200,32 @@
"stats",
"status",
"tap",
- "transport"
]
- revision = "41344da2231b913fa3d983840a57a6b1b7b631a1"
- version = "v1.12.0"
+ pruneopts = "UT"
+ revision = "32fb0ac620c32ba40a4626ddf94d90d12cce3455"
+ version = "v1.14.0"
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
- inputs-digest = "3fd3b357ae771c152cbc6b6d7b731c00c91c871cf2dbccb2f155ecc84ec80c4f"
+ input-imports = [
+ "git.apache.org/thrift.git/lib/go/thrift",
+ "github.com/golang/protobuf/proto",
+ "github.com/openzipkin/zipkin-go",
+ "github.com/openzipkin/zipkin-go/model",
+ "github.com/openzipkin/zipkin-go/reporter",
+ "github.com/openzipkin/zipkin-go/reporter/http",
+ "github.com/prometheus/client_golang/prometheus",
+ "github.com/prometheus/client_golang/prometheus/promhttp",
+ "golang.org/x/net/context",
+ "golang.org/x/net/http2",
+ "google.golang.org/api/support/bundler",
+ "google.golang.org/grpc",
+ "google.golang.org/grpc/codes",
+ "google.golang.org/grpc/grpclog",
+ "google.golang.org/grpc/metadata",
+ "google.golang.org/grpc/stats",
+ "google.golang.org/grpc/status",
+ ]
solver-name = "gps-cdcl"
solver-version = 1
diff --git a/vendor/go.opencensus.io/Gopkg.toml b/vendor/go.opencensus.io/Gopkg.toml
index c3f8292..a9f3cd6 100644
--- a/vendor/go.opencensus.io/Gopkg.toml
+++ b/vendor/go.opencensus.io/Gopkg.toml
@@ -3,10 +3,6 @@
# able to find a satisfying dependency graph.
[[constraint]]
- name = "cloud.google.com/go"
- version = ">=0.21.0"
-
-[[constraint]]
branch = "master"
name = "git.apache.org/thrift.git"
source = "github.com/apache/thrift"
@@ -29,17 +25,9 @@
[[constraint]]
branch = "master"
- name = "golang.org/x/oauth2"
-
-[[constraint]]
- branch = "master"
name = "google.golang.org/api"
[[constraint]]
- branch = "master"
- name = "google.golang.org/genproto"
-
-[[constraint]]
name = "google.golang.org/grpc"
version = "1.11.3"
diff --git a/vendor/go.opencensus.io/README.md b/vendor/go.opencensus.io/README.md
index 1a4a58b..bc50ee4 100644
--- a/vendor/go.opencensus.io/README.md
+++ b/vendor/go.opencensus.io/README.md
@@ -22,17 +22,40 @@ The use of vendoring or a dependency management tool is recommended.
OpenCensus Go libraries require Go 1.8 or later.
+## Getting Started
+
+The easiest way to get started using OpenCensus in your application is to use an existing
+integration with your RPC framework:
+
+* [net/http](https://godoc.org/go.opencensus.io/plugin/ochttp)
+* [gRPC](https://godoc.org/go.opencensus.io/plugin/ocgrpc)
+* [database/sql](https://godoc.org/github.com/basvanbeek/ocsql)
+* [Go kit](https://godoc.org/github.com/go-kit/kit/tracing/opencensus)
+* [Groupcache](https://godoc.org/github.com/orijtech/groupcache)
+* [Caddy webserver](https://godoc.org/github.com/orijtech/caddy)
+* [MongoDB](https://godoc.org/github.com/orijtech/mongo-go-driver)
+* [Redis gomodule/redigo](https://godoc.org/github.com/orijtech/redigo)
+* [Redis goredis/redis](https://godoc.org/github.com/orijtech/redis)
+* [Memcache](https://godoc.org/github.com/orijtech/gomemcache)
+
+If you're a framework not listed here, you could either implement your own middleware for your
+framework or use [custom stats](#stats) and [spans](#spans) directly in your application.
+
## Exporters
-OpenCensus can export instrumentation data to various backends.
-Currently, OpenCensus supports:
+OpenCensus can export instrumentation data to various backends.
+OpenCensus has exporter implementations for the following, users
+can implement their own exporters by implementing the exporter interfaces
+([stats](https://godoc.org/go.opencensus.io/stats/view#Exporter),
+[trace](https://godoc.org/go.opencensus.io/trace#Exporter)):
* [Prometheus][exporter-prom] for stats
* [OpenZipkin][exporter-zipkin] for traces
-* Stackdriver [Monitoring][exporter-stackdriver] and [Trace][exporter-stackdriver]
+* [Stackdriver][exporter-stackdriver] Monitoring for stats and Trace for traces
* [Jaeger][exporter-jaeger] for traces
* [AWS X-Ray][exporter-xray] for traces
* [Datadog][exporter-datadog] for stats and traces
+
## Overview
![OpenCensus Overview](https://i.imgur.com/cf4ElHE.jpg)
@@ -42,13 +65,6 @@ multiple services until there is a response. OpenCensus allows
you to instrument your services and collect diagnostics data all
through your services end-to-end.
-Start with instrumenting HTTP and gRPC clients and servers,
-then add additional custom instrumentation if needed.
-
-* [HTTP guide](https://github.com/census-instrumentation/opencensus-go/tree/master/examples/http)
-* [gRPC guide](https://github.com/census-instrumentation/opencensus-go/tree/master/examples/grpc)
-
-
## Tags
Tags represent propagated key-value pairs. They are propagated using `context.Context`
@@ -115,26 +131,79 @@ Here we create a view with the DistributionAggregation over our measure.
[embedmd]:# (internal/readme/stats.go view)
```go
if err := view.Register(&view.View{
- Name: "my.org/video_size_distribution",
+ Name: "example.com/video_size_distribution",
Description: "distribution of processed video size over time",
Measure: videoSize,
Aggregation: view.Distribution(0, 1<<32, 2<<32, 3<<32),
}); err != nil {
- log.Fatalf("Failed to subscribe to view: %v", err)
+ log.Fatalf("Failed to register view: %v", err)
}
```
-Subscribe begins collecting data for the view. Subscribed views' data will be
+Register begins collecting data for the view. Registered views' data will be
exported via the registered exporters.
## Traces
+A distributed trace tracks the progression of a single user request as
+it is handled by the services and processes that make up an application.
+Each step is called a span in the trace. Spans include metadata about the step,
+including especially the time spent in the step, called the span’s latency.
+
+Below you see a trace and several spans underneath it.
+
+![Traces and spans](https://i.imgur.com/7hZwRVj.png)
+
+### Spans
+
+Span is the unit step in a trace. Each span has a name, latency, status and
+additional metadata.
+
+Below we are starting a span for a cache read and ending it
+when we are done:
+
[embedmd]:# (internal/readme/trace.go startend)
```go
-ctx, span := trace.StartSpan(ctx, "your choice of name")
+ctx, span := trace.StartSpan(ctx, "cache.Get")
defer span.End()
+
+// Do work to get from cache.
+```
+
+### Propagation
+
+Spans can have parents or can be root spans if they don't have any parents.
+The current span is propagated in-process and across the network to allow associating
+new child spans with the parent.
+
+In the same process, context.Context is used to propagate spans.
+trace.StartSpan creates a new span as a root if the current context
+doesn't contain a span. Or, it creates a child of the span that is
+already in current context. The returned context can be used to keep
+propagating the newly created span in the current context.
+
+[embedmd]:# (internal/readme/trace.go startend)
+```go
+ctx, span := trace.StartSpan(ctx, "cache.Get")
+defer span.End()
+
+// Do work to get from cache.
```
+Across the network, OpenCensus provides different propagation
+methods for different protocols.
+
+* gRPC integrations uses the OpenCensus' [binary propagation format](https://godoc.org/go.opencensus.io/trace/propagation).
+* HTTP integrations uses Zipkin's [B3](https://github.com/openzipkin/b3-propagation)
+ by default but can be configured to use a custom propagation method by setting another
+ [propagation.HTTPFormat](https://godoc.org/go.opencensus.io/trace/propagation#HTTPFormat).
+
+## Execution Tracer
+
+With Go 1.11, OpenCensus Go will support integration with the Go execution tracer.
+See [Debugging Latency in Go](https://medium.com/observability/debugging-latency-in-go-1-11-9f97a7910d68)
+for an example of their mutual use.
+
## Profiles
OpenCensus tags can be applied as profiler labels
@@ -166,7 +235,7 @@ Before version 1.0.0, the following deprecation policy will be observed:
No backwards-incompatible changes will be made except for the removal of symbols that have
been marked as *Deprecated* for at least one minor release (e.g. 0.9.0 to 0.10.0). A release
-removing the *Deprecated* functionality will be made no sooner than 28 days after the first
+removing the *Deprecated* functionality will be made no sooner than 28 days after the first
release in which the functionality was marked *Deprecated*.
[travis-image]: https://travis-ci.org/census-instrumentation/opencensus-go.svg?branch=master
diff --git a/vendor/go.opencensus.io/go.mod b/vendor/go.opencensus.io/go.mod
new file mode 100644
index 0000000..7a1ccc6
--- /dev/null
+++ b/vendor/go.opencensus.io/go.mod
@@ -0,0 +1,20 @@
+module go.opencensus.io
+
+require (
+ git.apache.org/thrift.git v0.0.0-20180807212849-6e67faa92827
+ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973
+ github.com/golang/protobuf v1.2.0
+ github.com/matttproud/golang_protobuf_extensions v1.0.1
+ github.com/openzipkin/zipkin-go v0.1.1
+ github.com/prometheus/client_golang v0.8.0
+ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910
+ github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e
+ github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273
+ golang.org/x/net v0.0.0-20180821023952-922f4815f713
+ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f
+ golang.org/x/sys v0.0.0-20180821140842-3b58ed4ad339
+ golang.org/x/text v0.3.0
+ google.golang.org/api v0.0.0-20180818000503-e21acd801f91
+ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8
+ google.golang.org/grpc v1.14.0
+)
diff --git a/vendor/go.opencensus.io/opencensus.go b/vendor/go.opencensus.io/opencensus.go
index eb8e721..3b4e0c6 100644
--- a/vendor/go.opencensus.io/opencensus.go
+++ b/vendor/go.opencensus.io/opencensus.go
@@ -17,5 +17,5 @@ package opencensus // import "go.opencensus.io"
// Version is the current release version of OpenCensus in use.
func Version() string {
- return "0.14.0"
+ return "0.16.0"
}
diff --git a/vendor/go.opencensus.io/plugin/ochttp/client.go b/vendor/go.opencensus.io/plugin/ochttp/client.go
index 37f42b3..68faf24 100644
--- a/vendor/go.opencensus.io/plugin/ochttp/client.go
+++ b/vendor/go.opencensus.io/plugin/ochttp/client.go
@@ -16,14 +16,18 @@ package ochttp
import (
"net/http"
+ "net/http/httptrace"
"go.opencensus.io/trace"
"go.opencensus.io/trace/propagation"
)
// Transport is an http.RoundTripper that instruments all outgoing requests with
-// stats and tracing. The zero value is intended to be a useful default, but for
-// now it's recommended that you explicitly set Propagation.
+// OpenCensus stats and tracing.
+//
+// The zero value is intended to be a useful default, but for
+// now it's recommended that you explicitly set Propagation, since the default
+// for this may change.
type Transport struct {
// Base may be set to wrap another http.RoundTripper that does the actual
// requests. By default http.DefaultTransport is used.
@@ -43,17 +47,34 @@ type Transport struct {
// for spans started by this transport.
StartOptions trace.StartOptions
+ // NameFromRequest holds the function to use for generating the span name
+ // from the information found in the outgoing HTTP Request. By default the
+ // name equals the URL Path.
+ FormatSpanName func(*http.Request) string
+
+ // NewClientTrace may be set to a function allowing the current *trace.Span
+ // to be annotated with HTTP request event information emitted by the
+ // httptrace package.
+ NewClientTrace func(*http.Request, *trace.Span) *httptrace.ClientTrace
+
// TODO: Implement tag propagation for HTTP.
}
// RoundTrip implements http.RoundTripper, delegating to Base and recording stats and traces for the request.
func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
rt := t.base()
+ if isHealthEndpoint(req.URL.Path) {
+ return rt.RoundTrip(req)
+ }
// TODO: remove excessive nesting of http.RoundTrippers here.
format := t.Propagation
if format == nil {
format = defaultFormat
}
+ spanNameFormatter := t.FormatSpanName
+ if spanNameFormatter == nil {
+ spanNameFormatter = spanNameFromURL
+ }
rt = &traceTransport{
base: rt,
format: format,
@@ -61,6 +82,8 @@ func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
Sampler: t.StartOptions.Sampler,
SpanKind: trace.SpanKindClient,
},
+ formatSpanName: spanNameFormatter,
+ newClientTrace: t.NewClientTrace,
}
rt = statsTransport{base: rt}
return rt.RoundTrip(req)
diff --git a/vendor/go.opencensus.io/plugin/ochttp/server.go b/vendor/go.opencensus.io/plugin/ochttp/server.go
index 4b3c855..72aa8c2 100644
--- a/vendor/go.opencensus.io/plugin/ochttp/server.go
+++ b/vendor/go.opencensus.io/plugin/ochttp/server.go
@@ -15,10 +15,8 @@
package ochttp
import (
- "bufio"
"context"
- "errors"
- "net"
+ "io"
"net/http"
"strconv"
"sync"
@@ -30,16 +28,19 @@ import (
"go.opencensus.io/trace/propagation"
)
-// Handler is a http.Handler that is aware of the incoming request's span.
+// Handler is an http.Handler wrapper to instrument your HTTP server with
+// OpenCensus. It supports both stats and tracing.
//
+// Tracing
+//
+// This handler is aware of the incoming request's span, reading it from request
+// headers as configured using the Propagation field.
// The extracted span can be accessed from the incoming request's
// context.
//
// span := trace.FromContext(r.Context())
//
// The server span will be automatically ended at the end of ServeHTTP.
-//
-// Incoming propagation mechanism is determined by the given HTTP propagators.
type Handler struct {
// Propagation defines how traces are propagated. If unspecified,
// B3 propagation will be used.
@@ -60,6 +61,11 @@ type Handler struct {
// be added as a linked trace instead of being added as a parent of the
// current trace.
IsPublicEndpoint bool
+
+ // FormatSpanName holds the function to use for generating the span name
+ // from the information found in the incoming HTTP Request. By default the
+ // name equals the URL Path.
+ FormatSpanName func(*http.Request) string
}
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
@@ -76,7 +82,15 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
func (h *Handler) startTrace(w http.ResponseWriter, r *http.Request) (*http.Request, func()) {
- name := spanNameFromURL(r.URL)
+ if isHealthEndpoint(r.URL.Path) {
+ return r, func() {}
+ }
+ var name string
+ if h.FormatSpanName == nil {
+ name = spanNameFromURL(r)
+ } else {
+ name = h.FormatSpanName(r)
+ }
ctx := r.Context()
var span *trace.Span
sc, ok := h.extractSpanContext(r)
@@ -126,7 +140,7 @@ func (h *Handler) startStats(w http.ResponseWriter, r *http.Request) (http.Respo
track.reqSize = r.ContentLength
}
stats.Record(ctx, ServerRequestCount.M(1))
- return track, track.end
+ return track.wrappedResponseWriter(), track.end
}
type trackingResponseWriter struct {
@@ -140,39 +154,9 @@ type trackingResponseWriter struct {
writer http.ResponseWriter
}
-// Compile time assertions for widely used net/http interfaces
-var _ http.CloseNotifier = (*trackingResponseWriter)(nil)
-var _ http.Flusher = (*trackingResponseWriter)(nil)
-var _ http.Hijacker = (*trackingResponseWriter)(nil)
-var _ http.Pusher = (*trackingResponseWriter)(nil)
+// Compile time assertion for ResponseWriter interface
var _ http.ResponseWriter = (*trackingResponseWriter)(nil)
-var errHijackerUnimplemented = errors.New("ResponseWriter does not implement http.Hijacker")
-
-func (t *trackingResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
- hj, ok := t.writer.(http.Hijacker)
- if !ok {
- return nil, nil, errHijackerUnimplemented
- }
- return hj.Hijack()
-}
-
-func (t *trackingResponseWriter) CloseNotify() <-chan bool {
- cn, ok := t.writer.(http.CloseNotifier)
- if !ok {
- return nil
- }
- return cn.CloseNotify()
-}
-
-func (t *trackingResponseWriter) Push(target string, opts *http.PushOptions) error {
- pusher, ok := t.writer.(http.Pusher)
- if !ok {
- return http.ErrNotSupported
- }
- return pusher.Push(target, opts)
-}
-
func (t *trackingResponseWriter) end() {
t.endOnce.Do(func() {
if t.statusCode == 0 {
@@ -210,8 +194,231 @@ func (t *trackingResponseWriter) WriteHeader(statusCode int) {
t.statusLine = http.StatusText(t.statusCode)
}
-func (t *trackingResponseWriter) Flush() {
- if flusher, ok := t.writer.(http.Flusher); ok {
- flusher.Flush()
+// wrappedResponseWriter returns a wrapped version of the original
+// ResponseWriter and only implements the same combination of additional
+// interfaces as the original.
+// This implementation is based on https://github.com/felixge/httpsnoop.
+func (t *trackingResponseWriter) wrappedResponseWriter() http.ResponseWriter {
+ var (
+ hj, i0 = t.writer.(http.Hijacker)
+ cn, i1 = t.writer.(http.CloseNotifier)
+ pu, i2 = t.writer.(http.Pusher)
+ fl, i3 = t.writer.(http.Flusher)
+ rf, i4 = t.writer.(io.ReaderFrom)
+ )
+
+ switch {
+ case !i0 && !i1 && !i2 && !i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ }{t}
+ case !i0 && !i1 && !i2 && !i3 && i4:
+ return struct {
+ http.ResponseWriter
+ io.ReaderFrom
+ }{t, rf}
+ case !i0 && !i1 && !i2 && i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Flusher
+ }{t, fl}
+ case !i0 && !i1 && !i2 && i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Flusher
+ io.ReaderFrom
+ }{t, fl, rf}
+ case !i0 && !i1 && i2 && !i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Pusher
+ }{t, pu}
+ case !i0 && !i1 && i2 && !i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Pusher
+ io.ReaderFrom
+ }{t, pu, rf}
+ case !i0 && !i1 && i2 && i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Pusher
+ http.Flusher
+ }{t, pu, fl}
+ case !i0 && !i1 && i2 && i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Pusher
+ http.Flusher
+ io.ReaderFrom
+ }{t, pu, fl, rf}
+ case !i0 && i1 && !i2 && !i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.CloseNotifier
+ }{t, cn}
+ case !i0 && i1 && !i2 && !i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.CloseNotifier
+ io.ReaderFrom
+ }{t, cn, rf}
+ case !i0 && i1 && !i2 && i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.CloseNotifier
+ http.Flusher
+ }{t, cn, fl}
+ case !i0 && i1 && !i2 && i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.CloseNotifier
+ http.Flusher
+ io.ReaderFrom
+ }{t, cn, fl, rf}
+ case !i0 && i1 && i2 && !i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.CloseNotifier
+ http.Pusher
+ }{t, cn, pu}
+ case !i0 && i1 && i2 && !i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.CloseNotifier
+ http.Pusher
+ io.ReaderFrom
+ }{t, cn, pu, rf}
+ case !i0 && i1 && i2 && i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.CloseNotifier
+ http.Pusher
+ http.Flusher
+ }{t, cn, pu, fl}
+ case !i0 && i1 && i2 && i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.CloseNotifier
+ http.Pusher
+ http.Flusher
+ io.ReaderFrom
+ }{t, cn, pu, fl, rf}
+ case i0 && !i1 && !i2 && !i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ }{t, hj}
+ case i0 && !i1 && !i2 && !i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ io.ReaderFrom
+ }{t, hj, rf}
+ case i0 && !i1 && !i2 && i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.Flusher
+ }{t, hj, fl}
+ case i0 && !i1 && !i2 && i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.Flusher
+ io.ReaderFrom
+ }{t, hj, fl, rf}
+ case i0 && !i1 && i2 && !i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.Pusher
+ }{t, hj, pu}
+ case i0 && !i1 && i2 && !i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.Pusher
+ io.ReaderFrom
+ }{t, hj, pu, rf}
+ case i0 && !i1 && i2 && i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.Pusher
+ http.Flusher
+ }{t, hj, pu, fl}
+ case i0 && !i1 && i2 && i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.Pusher
+ http.Flusher
+ io.ReaderFrom
+ }{t, hj, pu, fl, rf}
+ case i0 && i1 && !i2 && !i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.CloseNotifier
+ }{t, hj, cn}
+ case i0 && i1 && !i2 && !i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.CloseNotifier
+ io.ReaderFrom
+ }{t, hj, cn, rf}
+ case i0 && i1 && !i2 && i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.CloseNotifier
+ http.Flusher
+ }{t, hj, cn, fl}
+ case i0 && i1 && !i2 && i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.CloseNotifier
+ http.Flusher
+ io.ReaderFrom
+ }{t, hj, cn, fl, rf}
+ case i0 && i1 && i2 && !i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.CloseNotifier
+ http.Pusher
+ }{t, hj, cn, pu}
+ case i0 && i1 && i2 && !i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.CloseNotifier
+ http.Pusher
+ io.ReaderFrom
+ }{t, hj, cn, pu, rf}
+ case i0 && i1 && i2 && i3 && !i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.CloseNotifier
+ http.Pusher
+ http.Flusher
+ }{t, hj, cn, pu, fl}
+ case i0 && i1 && i2 && i3 && i4:
+ return struct {
+ http.ResponseWriter
+ http.Hijacker
+ http.CloseNotifier
+ http.Pusher
+ http.Flusher
+ io.ReaderFrom
+ }{t, hj, cn, pu, fl, rf}
+ default:
+ return struct {
+ http.ResponseWriter
+ }{t}
}
}
diff --git a/vendor/go.opencensus.io/plugin/ochttp/span_annotator.go b/vendor/go.opencensus.io/plugin/ochttp/span_annotator.go
new file mode 100644
index 0000000..1282287
--- /dev/null
+++ b/vendor/go.opencensus.io/plugin/ochttp/span_annotator.go
@@ -0,0 +1,160 @@
+// Copyright 2018, OpenCensus Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package ochttp
+
+import (
+ "crypto/tls"
+ "net/http"
+ "net/http/httptrace"
+ "strings"
+
+ "go.opencensus.io/trace"
+)
+
+type spanAnnotator struct {
+ sp *trace.Span
+}
+
+// NewSpanAnnotator returns a httptrace.ClientTrace which annotates all emitted
+// httptrace events on the provided Span.
+func NewSpanAnnotator(_ *http.Request, s *trace.Span) *httptrace.ClientTrace {
+ sa := spanAnnotator{sp: s}
+
+ return &httptrace.ClientTrace{
+ GetConn: sa.getConn,
+ GotConn: sa.gotConn,
+ PutIdleConn: sa.putIdleConn,
+ GotFirstResponseByte: sa.gotFirstResponseByte,
+ Got100Continue: sa.got100Continue,
+ DNSStart: sa.dnsStart,
+ DNSDone: sa.dnsDone,
+ ConnectStart: sa.connectStart,
+ ConnectDone: sa.connectDone,
+ TLSHandshakeStart: sa.tlsHandshakeStart,
+ TLSHandshakeDone: sa.tlsHandshakeDone,
+ WroteHeaders: sa.wroteHeaders,
+ Wait100Continue: sa.wait100Continue,
+ WroteRequest: sa.wroteRequest,
+ }
+}
+
+func (s spanAnnotator) getConn(hostPort string) {
+ attrs := []trace.Attribute{
+ trace.StringAttribute("httptrace.get_connection.host_port", hostPort),
+ }
+ s.sp.Annotate(attrs, "GetConn")
+}
+
+func (s spanAnnotator) gotConn(info httptrace.GotConnInfo) {
+ attrs := []trace.Attribute{
+ trace.BoolAttribute("httptrace.got_connection.reused", info.Reused),
+ trace.BoolAttribute("httptrace.got_connection.was_idle", info.WasIdle),
+ }
+ if info.WasIdle {
+ attrs = append(attrs,
+ trace.StringAttribute("httptrace.got_connection.idle_time", info.IdleTime.String()))
+ }
+ s.sp.Annotate(attrs, "GotConn")
+}
+
+// PutIdleConn implements a httptrace.ClientTrace hook
+func (s spanAnnotator) putIdleConn(err error) {
+ var attrs []trace.Attribute
+ if err != nil {
+ attrs = append(attrs,
+ trace.StringAttribute("httptrace.put_idle_connection.error", err.Error()))
+ }
+ s.sp.Annotate(attrs, "PutIdleConn")
+}
+
+func (s spanAnnotator) gotFirstResponseByte() {
+ s.sp.Annotate(nil, "GotFirstResponseByte")
+}
+
+func (s spanAnnotator) got100Continue() {
+ s.sp.Annotate(nil, "Got100Continue")
+}
+
+func (s spanAnnotator) dnsStart(info httptrace.DNSStartInfo) {
+ attrs := []trace.Attribute{
+ trace.StringAttribute("httptrace.dns_start.host", info.Host),
+ }
+ s.sp.Annotate(attrs, "DNSStart")
+}
+
+func (s spanAnnotator) dnsDone(info httptrace.DNSDoneInfo) {
+ var addrs []string
+ for _, addr := range info.Addrs {
+ addrs = append(addrs, addr.String())
+ }
+ attrs := []trace.Attribute{
+ trace.StringAttribute("httptrace.dns_done.addrs", strings.Join(addrs, " , ")),
+ }
+ if info.Err != nil {
+ attrs = append(attrs,
+ trace.StringAttribute("httptrace.dns_done.error", info.Err.Error()))
+ }
+ s.sp.Annotate(attrs, "DNSDone")
+}
+
+func (s spanAnnotator) connectStart(network, addr string) {
+ attrs := []trace.Attribute{
+ trace.StringAttribute("httptrace.connect_start.network", network),
+ trace.StringAttribute("httptrace.connect_start.addr", addr),
+ }
+ s.sp.Annotate(attrs, "ConnectStart")
+}
+
+func (s spanAnnotator) connectDone(network, addr string, err error) {
+ attrs := []trace.Attribute{
+ trace.StringAttribute("httptrace.connect_done.network", network),
+ trace.StringAttribute("httptrace.connect_done.addr", addr),
+ }
+ if err != nil {
+ attrs = append(attrs,
+ trace.StringAttribute("httptrace.connect_done.error", err.Error()))
+ }
+ s.sp.Annotate(attrs, "ConnectDone")
+}
+
+func (s spanAnnotator) tlsHandshakeStart() {
+ s.sp.Annotate(nil, "TLSHandshakeStart")
+}
+
+func (s spanAnnotator) tlsHandshakeDone(_ tls.ConnectionState, err error) {
+ var attrs []trace.Attribute
+ if err != nil {
+ attrs = append(attrs,
+ trace.StringAttribute("httptrace.tls_handshake_done.error", err.Error()))
+ }
+ s.sp.Annotate(attrs, "TLSHandshakeDone")
+}
+
+func (s spanAnnotator) wroteHeaders() {
+ s.sp.Annotate(nil, "WroteHeaders")
+}
+
+func (s spanAnnotator) wait100Continue() {
+ s.sp.Annotate(nil, "Wait100Continue")
+}
+
+func (s spanAnnotator) wroteRequest(info httptrace.WroteRequestInfo) {
+ var attrs []trace.Attribute
+ if info.Err != nil {
+ attrs = append(attrs,
+ trace.StringAttribute("httptrace.wrote_request.error", info.Err.Error()))
+ }
+ s.sp.Annotate(attrs, "WroteRequest")
+}
diff --git a/vendor/go.opencensus.io/plugin/ochttp/stats.go b/vendor/go.opencensus.io/plugin/ochttp/stats.go
index 2bd11f6..19a8825 100644
--- a/vendor/go.opencensus.io/plugin/ochttp/stats.go
+++ b/vendor/go.opencensus.io/plugin/ochttp/stats.go
@@ -41,6 +41,10 @@ var (
// ClientRequestCount or ServerRequestCount, since it is recorded before the status is known.
var (
// Host is the value of the HTTP Host header.
+ //
+ // The value of this tag can be controlled by the HTTP client, so you need
+ // to watch out for potentially generating high-cardinality labels in your
+ // metrics backend if you use this tag in views.
Host, _ = tag.NewKey("http.host")
// StatusCode is the numeric HTTP response status code,
@@ -48,6 +52,10 @@ var (
StatusCode, _ = tag.NewKey("http.status")
// Path is the URL path (not including query string) in the request.
+ //
+ // The value of this tag can be controlled by the HTTP client, so you need
+ // to watch out for potentially generating high-cardinality labels in your
+ // metrics backend if you use this tag in views.
Path, _ = tag.NewKey("http.path")
// Method is the HTTP method of the request, capitalized (GET, POST, etc.).
@@ -61,7 +69,7 @@ var (
)
// Package ochttp provides some convenience views.
-// You need to subscribe to the views for data to actually be collected.
+// You need to register the views for data to actually be collected.
var (
ClientRequestCountView = &view.View{
Name: "opencensus.io/http/client/request_count",
diff --git a/vendor/go.opencensus.io/plugin/ochttp/trace.go b/vendor/go.opencensus.io/plugin/ochttp/trace.go
index 79bbfd1..980b639 100644
--- a/vendor/go.opencensus.io/plugin/ochttp/trace.go
+++ b/vendor/go.opencensus.io/plugin/ochttp/trace.go
@@ -17,7 +17,7 @@ package ochttp
import (
"io"
"net/http"
- "net/url"
+ "net/http/httptrace"
"go.opencensus.io/plugin/ochttp/propagation/b3"
"go.opencensus.io/trace"
@@ -39,9 +39,11 @@ const (
)
type traceTransport struct {
- base http.RoundTripper
- startOptions trace.StartOptions
- format propagation.HTTPFormat
+ base http.RoundTripper
+ startOptions trace.StartOptions
+ format propagation.HTTPFormat
+ formatSpanName func(*http.Request) string
+ newClientTrace func(*http.Request, *trace.Span) *httptrace.ClientTrace
}
// TODO(jbd): Add message events for request and response size.
@@ -50,14 +52,19 @@ type traceTransport struct {
// The created span can follow a parent span, if a parent is presented in
// the request's context.
func (t *traceTransport) RoundTrip(req *http.Request) (*http.Response, error) {
- name := spanNameFromURL(req.URL)
+ name := t.formatSpanName(req)
// TODO(jbd): Discuss whether we want to prefix
// outgoing requests with Sent.
- _, span := trace.StartSpan(req.Context(), name,
+ ctx, span := trace.StartSpan(req.Context(), name,
trace.WithSampler(t.startOptions.Sampler),
trace.WithSpanKind(trace.SpanKindClient))
- req = req.WithContext(trace.WithSpan(req.Context(), span))
+ if t.newClientTrace != nil {
+ req = req.WithContext(httptrace.WithClientTrace(ctx, t.newClientTrace(req, span)))
+ } else {
+ req = req.WithContext(ctx)
+ }
+
if t.format != nil {
t.format.SpanContextToRequest(span.SpanContext(), req)
}
@@ -127,8 +134,8 @@ func (t *traceTransport) CancelRequest(req *http.Request) {
}
}
-func spanNameFromURL(u *url.URL) string {
- return u.Path
+func spanNameFromURL(req *http.Request) string {
+ return req.URL.Path
}
func requestAttrs(r *http.Request) []trace.Attribute {
@@ -146,7 +153,7 @@ func responseAttrs(resp *http.Response) []trace.Attribute {
}
}
-// TraceStatus converts the HTTP status code to a trace.Status that
+// TraceStatus is a utility to convert the HTTP status code to a trace.Status that
// represents the outcome as closely as possible.
func TraceStatus(httpStatusCode int, statusLine string) trace.Status {
var code int32
@@ -197,3 +204,15 @@ var codeToStr = map[int32]string{
trace.StatusCodeDataLoss: `"DATA_LOSS"`,
trace.StatusCodeUnauthenticated: `"UNAUTHENTICATED"`,
}
+
+func isHealthEndpoint(path string) bool {
+ // Health checking is pretty frequent and
+ // traces collected for health endpoints
+ // can be extremely noisy and expensive.
+ // Disable canonical health checking endpoints
+ // like /healthz and /_ah/health for now.
+ if path == "/healthz" || path == "/_ah/health" {
+ return true
+ }
+ return false
+}
diff --git a/vendor/go.opencensus.io/stats/measure.go b/vendor/go.opencensus.io/stats/measure.go
index aa555c2..7b4b49c 100644
--- a/vendor/go.opencensus.io/stats/measure.go
+++ b/vendor/go.opencensus.io/stats/measure.go
@@ -20,19 +20,31 @@ import (
"sync/atomic"
)
-// Measure represents a type of metric to be tracked and recorded.
-// For example, latency, request Mb/s, and response Mb/s are measures
+// Measure represents a single numeric value to be tracked and recorded.
+// For example, latency, request bytes, and response bytes could be measures
// to collect from a server.
//
-// Each measure needs to be registered before being used.
-// Measure constructors such as Int64 and
-// Float64 automatically registers the measure
-// by the given name.
-// Each registered measure needs to be unique by name.
-// Measures also have a description and a unit.
+// Measures by themselves have no outside effects. In order to be exported,
+// the measure needs to be used in a View. If no Views are defined over a
+// measure, there is very little cost in recording it.
type Measure interface {
+ // Name returns the name of this measure.
+ //
+ // Measure names are globally unique (among all libraries linked into your program).
+ // We recommend prefixing the measure name with a domain name relevant to your
+ // project or application.
+ //
+ // Measure names are never sent over the wire or exported to backends.
+ // They are only used to create Views.
Name() string
+
+ // Description returns the human-readable description of this measure.
Description() string
+
+ // Unit returns the units for the values this measure takes on.
+ //
+ // Units are encoded according to the case-sensitive abbreviations from the
+ // Unified Code for Units of Measure: http://unitsofmeasure.org/ucum.html
Unit() string
}
diff --git a/vendor/go.opencensus.io/stats/measure_float64.go b/vendor/go.opencensus.io/stats/measure_float64.go
index 8de6b52..da4b5a8 100644
--- a/vendor/go.opencensus.io/stats/measure_float64.go
+++ b/vendor/go.opencensus.io/stats/measure_float64.go
@@ -15,7 +15,7 @@
package stats
-// Float64Measure is a measure of type float64.
+// Float64Measure is a measure for float64 values.
type Float64Measure struct {
md *measureDescriptor
}
@@ -44,8 +44,10 @@ func (m *Float64Measure) M(v float64) Measurement {
return Measurement{m: m, v: v}
}
-// Float64 creates a new measure of type Float64Measure.
-// It never returns an error.
+// Float64 creates a new measure for float64 values.
+//
+// See the documentation for interface Measure for more guidance on the
+// parameters of this function.
func Float64(name, description, unit string) *Float64Measure {
mi := registerMeasureHandle(name, description, unit)
return &Float64Measure{mi}
diff --git a/vendor/go.opencensus.io/stats/measure_int64.go b/vendor/go.opencensus.io/stats/measure_int64.go
index b6fd25f..5fedaad 100644
--- a/vendor/go.opencensus.io/stats/measure_int64.go
+++ b/vendor/go.opencensus.io/stats/measure_int64.go
@@ -15,7 +15,7 @@
package stats
-// Int64Measure is a measure of type int64.
+// Int64Measure is a measure for int64 values.
type Int64Measure struct {
md *measureDescriptor
}
@@ -44,8 +44,10 @@ func (m *Int64Measure) M(v int64) Measurement {
return Measurement{m: m, v: float64(v)}
}
-// Int64 creates a new measure of type Int64Measure.
-// It never returns an error.
+// Int64 creates a new measure for int64 values.
+//
+// See the documentation for interface Measure for more guidance on the
+// parameters of this function.
func Int64(name, description, unit string) *Int64Measure {
mi := registerMeasureHandle(name, description, unit)
return &Int64Measure{mi}
diff --git a/vendor/go.opencensus.io/stats/view/collector.go b/vendor/go.opencensus.io/stats/view/collector.go
index 863a5b6..250395d 100644
--- a/vendor/go.opencensus.io/stats/view/collector.go
+++ b/vendor/go.opencensus.io/stats/view/collector.go
@@ -40,11 +40,12 @@ func (c *collector) addSample(s string, v float64) {
aggregator.addSample(v)
}
+// collectRows returns a snapshot of the collected Row values.
func (c *collector) collectedRows(keys []tag.Key) []*Row {
- var rows []*Row
+ rows := make([]*Row, 0, len(c.signatures))
for sig, aggregator := range c.signatures {
tags := decodeTags([]byte(sig), keys)
- row := &Row{tags, aggregator}
+ row := &Row{Tags: tags, Data: aggregator.clone()}
rows = append(rows, row)
}
return rows
diff --git a/vendor/go.opencensus.io/stats/view/export.go b/vendor/go.opencensus.io/stats/view/export.go
index ffd0d1a..7cb5971 100644
--- a/vendor/go.opencensus.io/stats/view/export.go
+++ b/vendor/go.opencensus.io/stats/view/export.go
@@ -27,6 +27,9 @@ var (
// Exporter takes a significant amount of time to
// process a Data, that work should be done on another goroutine.
//
+// It is safe to assume that ExportView will not be called concurrently from
+// multiple goroutines.
+//
// The Data should not be modified.
type Exporter interface {
ExportView(viewData *Data)
diff --git a/vendor/go.opencensus.io/stats/view/view.go b/vendor/go.opencensus.io/stats/view/view.go
index 87bf5d4..22323e2 100644
--- a/vendor/go.opencensus.io/stats/view/view.go
+++ b/vendor/go.opencensus.io/stats/view/view.go
@@ -29,7 +29,7 @@ import (
)
// View allows users to aggregate the recorded stats.Measurements.
-// Views need to be passed to the Subscribe function to be before data will be
+// Views need to be passed to the Register function to be before data will be
// collected and sent to Exporters.
type View struct {
Name string // Name of View. Must be unique. If unset, will default to the name of the Measure.
@@ -71,10 +71,10 @@ func (v *View) same(other *View) bool {
// defaults for Name and Description and sorting the TagKeys
func (v *View) canonicalize() error {
if v.Measure == nil {
- return fmt.Errorf("cannot subscribe view %q: measure not set", v.Name)
+ return fmt.Errorf("cannot register view %q: measure not set", v.Name)
}
if v.Aggregation == nil {
- return fmt.Errorf("cannot subscribe view %q: aggregation not set", v.Name)
+ return fmt.Errorf("cannot register view %q: aggregation not set", v.Name)
}
if v.Name == "" {
v.Name = v.Measure.Name()
diff --git a/vendor/go.opencensus.io/stats/view/worker.go b/vendor/go.opencensus.io/stats/view/worker.go
index ba9d7fc..fef7bf5 100644
--- a/vendor/go.opencensus.io/stats/view/worker.go
+++ b/vendor/go.opencensus.io/stats/view/worker.go
@@ -49,8 +49,8 @@ var defaultWorker *worker
var defaultReportingDuration = 10 * time.Second
-// Find returns a subscribed view associated with this name.
-// If no subscribed view is found, nil is returned.
+// Find returns a registered view associated with this name.
+// If no registered view is found, nil is returned.
func Find(name string) (v *View) {
req := &getViewByNameReq{
name: name,
@@ -62,7 +62,7 @@ func Find(name string) (v *View) {
}
// Register begins collecting data for the given views.
-// Once a view is subscribed, it reports data to the registered exporters.
+// Once a view is registered, it reports data to the registered exporters.
func Register(views ...*View) error {
for _, v := range views {
if err := v.canonicalize(); err != nil {
@@ -181,7 +181,7 @@ func (w *worker) tryRegisterView(v *View) (*viewInternal, error) {
}
if x, ok := w.views[vi.view.Name]; ok {
if !x.view.same(vi.view) {
- return nil, fmt.Errorf("cannot subscribe view %q; a different view with the same name is already subscribed", v.Name)
+ return nil, fmt.Errorf("cannot register view %q; a different view with the same name is already registered", v.Name)
}
// the view is already registered so there is nothing to do and the
@@ -194,40 +194,30 @@ func (w *worker) tryRegisterView(v *View) (*viewInternal, error) {
return vi, nil
}
-func (w *worker) reportUsage(now time.Time) {
- for _, v := range w.views {
- if !v.isSubscribed() {
- continue
- }
- rows := v.collectedRows()
- _, ok := w.startTimes[v]
- if !ok {
- w.startTimes[v] = now
- }
- // Make sure collector is never going
- // to mutate the exported data.
- rows = deepCopyRowData(rows)
- viewData := &Data{
- View: v.view,
- Start: w.startTimes[v],
- End: time.Now(),
- Rows: rows,
- }
- exportersMu.Lock()
- for e := range exporters {
- e.ExportView(viewData)
- }
- exportersMu.Unlock()
+func (w *worker) reportView(v *viewInternal, now time.Time) {
+ if !v.isSubscribed() {
+ return
}
+ rows := v.collectedRows()
+ _, ok := w.startTimes[v]
+ if !ok {
+ w.startTimes[v] = now
+ }
+ viewData := &Data{
+ View: v.view,
+ Start: w.startTimes[v],
+ End: time.Now(),
+ Rows: rows,
+ }
+ exportersMu.Lock()
+ for e := range exporters {
+ e.ExportView(viewData)
+ }
+ exportersMu.Unlock()
}
-func deepCopyRowData(rows []*Row) []*Row {
- newRows := make([]*Row, 0, len(rows))
- for _, r := range rows {
- newRows = append(newRows, &Row{
- Data: r.Data.clone(),
- Tags: r.Tags,
- })
+func (w *worker) reportUsage(now time.Time) {
+ for _, v := range w.views {
+ w.reportView(v, now)
}
- return newRows
}
diff --git a/vendor/go.opencensus.io/stats/view/worker_commands.go b/vendor/go.opencensus.io/stats/view/worker_commands.go
index ef79ec3..06c3c54 100644
--- a/vendor/go.opencensus.io/stats/view/worker_commands.go
+++ b/vendor/go.opencensus.io/stats/view/worker_commands.go
@@ -73,7 +73,7 @@ func (cmd *registerViewReq) handleCommand(w *worker) {
}
}
-// unregisterFromViewReq is the command to unsubscribe to a view. Has no
+// unregisterFromViewReq is the command to unregister to a view. Has no
// impact on the data collection for client that are pulling data from the
// library.
type unregisterFromViewReq struct {
@@ -88,6 +88,9 @@ func (cmd *unregisterFromViewReq) handleCommand(w *worker) {
continue
}
+ // Report pending data for this view before removing it.
+ w.reportView(vi, time.Now())
+
vi.unsubscribe()
if !vi.isSubscribed() {
// this was the last subscription and view is not collecting anymore.
@@ -143,7 +146,7 @@ type recordReq struct {
func (cmd *recordReq) handleCommand(w *worker) {
for _, m := range cmd.ms {
- if (m == stats.Measurement{}) { // not subscribed
+ if (m == stats.Measurement{}) { // not registered
continue
}
ref := w.getMeasureRef(m.Measure().Name())
@@ -154,7 +157,7 @@ func (cmd *recordReq) handleCommand(w *worker) {
}
// setReportingPeriodReq is the command to modify the duration between
-// reporting the collected data to the subscribed clients.
+// reporting the collected data to the registered clients.
type setReportingPeriodReq struct {
d time.Duration
c chan bool
diff --git a/vendor/go.opencensus.io/tag/map_codec.go b/vendor/go.opencensus.io/tag/map_codec.go
index 33be1f0..3e99895 100644
--- a/vendor/go.opencensus.io/tag/map_codec.go
+++ b/vendor/go.opencensus.io/tag/map_codec.go
@@ -177,45 +177,58 @@ func Encode(m *Map) []byte {
// Decode decodes the given []byte into a tag map.
func Decode(bytes []byte) (*Map, error) {
ts := newMap()
+ err := DecodeEach(bytes, ts.upsert)
+ if err != nil {
+ // no partial failures
+ return nil, err
+ }
+ return ts, nil
+}
+// DecodeEach decodes the given serialized tag map, calling handler for each
+// tag key and value decoded.
+func DecodeEach(bytes []byte, fn func(key Key, val string)) error {
eg := &encoderGRPC{
buf: bytes,
}
if len(eg.buf) == 0 {
- return ts, nil
+ return nil
}
version := eg.readByte()
if version > tagsVersionID {
- return nil, fmt.Errorf("cannot decode: unsupported version: %q; supports only up to: %q", version, tagsVersionID)
+ return fmt.Errorf("cannot decode: unsupported version: %q; supports only up to: %q", version, tagsVersionID)
}
for !eg.readEnded() {
typ := keyType(eg.readByte())
if typ != keyTypeString {
- return nil, fmt.Errorf("cannot decode: invalid key type: %q", typ)
+ return fmt.Errorf("cannot decode: invalid key type: %q", typ)
}
k, err := eg.readBytesWithVarintLen()
if err != nil {
- return nil, err
+ return err
}
v, err := eg.readBytesWithVarintLen()
if err != nil {
- return nil, err
+ return err
}
key, err := NewKey(string(k))
if err != nil {
- return nil, err // no partial failures
+ return err
}
val := string(v)
if !checkValue(val) {
- return nil, errInvalidValue // no partial failures
+ return errInvalidValue
+ }
+ fn(key, val)
+ if err != nil {
+ return err
}
- ts.upsert(key, val)
}
- return ts, nil
+ return nil
}
diff --git a/vendor/go.opencensus.io/trace/config.go b/vendor/go.opencensus.io/trace/config.go
index d5473a7..e464671 100644
--- a/vendor/go.opencensus.io/trace/config.go
+++ b/vendor/go.opencensus.io/trace/config.go
@@ -14,7 +14,10 @@
package trace
-import "go.opencensus.io/trace/internal"
+import (
+ "go.opencensus.io/trace/internal"
+ "sync"
+)
// Config represents the global tracing configuration.
type Config struct {
@@ -25,10 +28,14 @@ type Config struct {
IDGenerator internal.IDGenerator
}
+var configWriteMu sync.Mutex
+
// ApplyConfig applies changes to the global tracing configuration.
//
// Fields not provided in the given config are going to be preserved.
func ApplyConfig(cfg Config) {
+ configWriteMu.Lock()
+ defer configWriteMu.Unlock()
c := *config.Load().(*Config)
if cfg.DefaultSampler != nil {
c.DefaultSampler = cfg.DefaultSampler
diff --git a/vendor/go.opencensus.io/trace/doc.go b/vendor/go.opencensus.io/trace/doc.go
index a2b54e5..db00044 100644
--- a/vendor/go.opencensus.io/trace/doc.go
+++ b/vendor/go.opencensus.io/trace/doc.go
@@ -42,7 +42,7 @@ It is common to want to capture all the activity of a function call in a span. F
this to work, the function must take a context.Context as a parameter. Add these two
lines to the top of the function:
- ctx, span := trace.StartSpan(ctx, "my.org/Run")
+ ctx, span := trace.StartSpan(ctx, "example.com/Run")
defer span.End()
StartSpan will create a new top-level span if the context
diff --git a/vendor/go.opencensus.io/trace/export.go b/vendor/go.opencensus.io/trace/export.go
index c522550..77a8c73 100644
--- a/vendor/go.opencensus.io/trace/export.go
+++ b/vendor/go.opencensus.io/trace/export.go
@@ -16,6 +16,7 @@ package trace
import (
"sync"
+ "sync/atomic"
"time"
)
@@ -30,9 +31,11 @@ type Exporter interface {
ExportSpan(s *SpanData)
}
+type exportersMap map[Exporter]struct{}
+
var (
- exportersMu sync.Mutex
- exporters map[Exporter]struct{}
+ exporterMu sync.Mutex
+ exporters atomic.Value
)
// RegisterExporter adds to the list of Exporters that will receive sampled
@@ -40,20 +43,31 @@ var (
//
// Binaries can register exporters, libraries shouldn't register exporters.
func RegisterExporter(e Exporter) {
- exportersMu.Lock()
- if exporters == nil {
- exporters = make(map[Exporter]struct{})
+ exporterMu.Lock()
+ new := make(exportersMap)
+ if old, ok := exporters.Load().(exportersMap); ok {
+ for k, v := range old {
+ new[k] = v
+ }
}
- exporters[e] = struct{}{}
- exportersMu.Unlock()
+ new[e] = struct{}{}
+ exporters.Store(new)
+ exporterMu.Unlock()
}
// UnregisterExporter removes from the list of Exporters the Exporter that was
// registered with the given name.
func UnregisterExporter(e Exporter) {
- exportersMu.Lock()
- delete(exporters, e)
- exportersMu.Unlock()
+ exporterMu.Lock()
+ new := make(exportersMap)
+ if old, ok := exporters.Load().(exportersMap); ok {
+ for k, v := range old {
+ new[k] = v
+ }
+ }
+ delete(new, e)
+ exporters.Store(new)
+ exporterMu.Unlock()
}
// SpanData contains all the information collected by a Span.
diff --git a/vendor/go.opencensus.io/trace/trace.go b/vendor/go.opencensus.io/trace/trace.go
index 19c6930..887e90b 100644
--- a/vendor/go.opencensus.io/trace/trace.go
+++ b/vendor/go.opencensus.io/trace/trace.go
@@ -98,13 +98,6 @@ func FromContext(ctx context.Context) *Span {
return s
}
-// WithSpan returns a new context with the given Span attached.
-//
-// Deprecated: Use NewContext.
-func WithSpan(parent context.Context, s *Span) context.Context {
- return NewContext(parent, s)
-}
-
// NewContext returns a new context with the given Span attached.
func NewContext(parent context.Context, s *Span) context.Context {
return context.WithValue(parent, contextKey{}, s)
@@ -154,6 +147,9 @@ func WithSampler(sampler Sampler) StartOption {
// StartSpan starts a new child span of the current span in the context. If
// there is no span in the context, creates a new trace and span.
+//
+// Returned context contains the newly created span. You can use it to
+// propagate the returned span in process.
func StartSpan(ctx context.Context, name string, o ...StartOption) (context.Context, *Span) {
var opts StartOptions
var parent SpanContext
@@ -174,6 +170,9 @@ func StartSpan(ctx context.Context, name string, o ...StartOption) (context.Cont
//
// If the incoming context contains a parent, it ignores. StartSpanWithRemoteParent is
// preferred for cases where the parent is propagated via an incoming request.
+//
+// Returned context contains the newly created span. You can use it to
+// propagate the returned span in process.
func StartSpanWithRemoteParent(ctx context.Context, name string, parent SpanContext, o ...StartOption) (context.Context, *Span) {
var opts StartOptions
for _, op := range o {
@@ -185,26 +184,6 @@ func StartSpanWithRemoteParent(ctx context.Context, name string, parent SpanCont
return NewContext(ctx, span), span
}
-// NewSpan returns a new span.
-//
-// If parent is not nil, created span will be a child of the parent.
-//
-// Deprecated: Use StartSpan.
-func NewSpan(name string, parent *Span, o StartOptions) *Span {
- var parentSpanContext SpanContext
- if parent != nil {
- parentSpanContext = parent.SpanContext()
- }
- return startSpanInternal(name, parent != nil, parentSpanContext, false, o)
-}
-
-// NewSpanWithRemoteParent returns a new span with the given parent SpanContext.
-//
-// Deprecated: Use StartSpanWithRemoteParent.
-func NewSpanWithRemoteParent(name string, parent SpanContext, o StartOptions) *Span {
- return startSpanInternal(name, true, parent, true, o)
-}
-
func startSpanInternal(name string, hasParent bool, parent SpanContext, remoteParent bool, o StartOptions) *Span {
span := &Span{}
span.spanContext = parent
@@ -269,19 +248,19 @@ func (s *Span) End() {
if s.executionTracerTaskEnd != nil {
s.executionTracerTaskEnd()
}
- // TODO: optimize to avoid this call if sd won't be used.
- sd := s.makeSpanData()
- sd.EndTime = internal.MonotonicEndTime(sd.StartTime)
- if s.spanStore != nil {
- s.spanStore.finished(s, sd)
- }
- if s.spanContext.IsSampled() {
- // TODO: consider holding exportersMu for less time.
- exportersMu.Lock()
- for e := range exporters {
- e.ExportSpan(sd)
+ exp, _ := exporters.Load().(exportersMap)
+ mustExport := s.spanContext.IsSampled() && len(exp) > 0
+ if s.spanStore != nil || mustExport {
+ sd := s.makeSpanData()
+ sd.EndTime = internal.MonotonicEndTime(sd.StartTime)
+ if s.spanStore != nil {
+ s.spanStore.finished(s, sd)
+ }
+ if mustExport {
+ for e := range exp {
+ e.ExportSpan(sd)
+ }
}
- exportersMu.Unlock()
}
})
}
@@ -310,6 +289,16 @@ func (s *Span) SpanContext() SpanContext {
return s.spanContext
}
+// SetName sets the name of the span, if it is recording events.
+func (s *Span) SetName(name string) {
+ if !s.IsRecordingEvents() {
+ return
+ }
+ s.mu.Lock()
+ s.data.Name = name
+ s.mu.Unlock()
+}
+
// SetStatus sets the status of the span, if it is recording events.
func (s *Span) SetStatus(status Status) {
if !s.IsRecordingEvents() {
@@ -481,22 +470,28 @@ func init() {
type defaultIDGenerator struct {
sync.Mutex
- traceIDRand *rand.Rand
+
+ // Please keep these as the first fields
+ // so that these 8 byte fields will be aligned on addresses
+ // divisible by 8, on both 32-bit and 64-bit machines when
+ // performing atomic increments and accesses.
+ // See:
+ // * https://github.com/census-instrumentation/opencensus-go/issues/587
+ // * https://github.com/census-instrumentation/opencensus-go/issues/865
+ // * https://golang.org/pkg/sync/atomic/#pkg-note-BUG
+ nextSpanID uint64
+ spanIDInc uint64
+
traceIDAdd [2]uint64
- nextSpanID uint64
- spanIDInc uint64
+ traceIDRand *rand.Rand
}
// NewSpanID returns a non-zero span ID from a randomly-chosen sequence.
-// mu should be held while this function is called.
func (gen *defaultIDGenerator) NewSpanID() [8]byte {
- gen.Lock()
- id := gen.nextSpanID
- gen.nextSpanID += gen.spanIDInc
- if gen.nextSpanID == 0 {
- gen.nextSpanID += gen.spanIDInc
+ var id uint64
+ for id == 0 {
+ id = atomic.AddUint64(&gen.nextSpanID, gen.spanIDInc)
}
- gen.Unlock()
var sid [8]byte
binary.LittleEndian.PutUint64(sid[:], id)
return sid
diff --git a/vendor/golang.org/x/crypto/internal/chacha20/chacha_generic.go b/vendor/golang.org/x/crypto/internal/chacha20/chacha_generic.go
index 523751f..6570847 100644
--- a/vendor/golang.org/x/crypto/internal/chacha20/chacha_generic.go
+++ b/vendor/golang.org/x/crypto/internal/chacha20/chacha_generic.go
@@ -32,6 +32,30 @@ func New(key [8]uint32, nonce [3]uint32) *Cipher {
return &Cipher{key: key, nonce: nonce}
}
+// ChaCha20 constants spelling "expand 32-byte k"
+const (
+ j0 uint32 = 0x61707865
+ j1 uint32 = 0x3320646e
+ j2 uint32 = 0x79622d32
+ j3 uint32 = 0x6b206574
+)
+
+func quarterRound(a, b, c, d uint32) (uint32, uint32, uint32, uint32) {
+ a += b
+ d ^= a
+ d = (d << 16) | (d >> 16)
+ c += d
+ b ^= c
+ b = (b << 12) | (b >> 20)
+ a += b
+ d ^= a
+ d = (d << 8) | (d >> 24)
+ c += d
+ b ^= c
+ b = (b << 7) | (b >> 25)
+ return a, b, c, d
+}
+
// XORKeyStream XORs each byte in the given slice with a byte from the
// cipher's key stream. Dst and src must overlap entirely or not at all.
//
@@ -73,6 +97,9 @@ func (s *Cipher) XORKeyStream(dst, src []byte) {
return
}
if haveAsm {
+ if uint64(len(src))+uint64(s.counter)*64 > (1<<38)-64 {
+ panic("chacha20: counter overflow")
+ }
s.xorKeyStreamAsm(dst, src)
return
}
@@ -85,59 +112,34 @@ func (s *Cipher) XORKeyStream(dst, src []byte) {
copy(s.buf[len(s.buf)-64:], src[fin:])
}
- // qr calculates a quarter round
- qr := func(a, b, c, d uint32) (uint32, uint32, uint32, uint32) {
- a += b
- d ^= a
- d = (d << 16) | (d >> 16)
- c += d
- b ^= c
- b = (b << 12) | (b >> 20)
- a += b
- d ^= a
- d = (d << 8) | (d >> 24)
- c += d
- b ^= c
- b = (b << 7) | (b >> 25)
- return a, b, c, d
- }
-
- // ChaCha20 constants
- const (
- j0 = 0x61707865
- j1 = 0x3320646e
- j2 = 0x79622d32
- j3 = 0x6b206574
- )
-
// pre-calculate most of the first round
- s1, s5, s9, s13 := qr(j1, s.key[1], s.key[5], s.nonce[0])
- s2, s6, s10, s14 := qr(j2, s.key[2], s.key[6], s.nonce[1])
- s3, s7, s11, s15 := qr(j3, s.key[3], s.key[7], s.nonce[2])
+ s1, s5, s9, s13 := quarterRound(j1, s.key[1], s.key[5], s.nonce[0])
+ s2, s6, s10, s14 := quarterRound(j2, s.key[2], s.key[6], s.nonce[1])
+ s3, s7, s11, s15 := quarterRound(j3, s.key[3], s.key[7], s.nonce[2])
n := len(src)
src, dst = src[:n:n], dst[:n:n] // BCE hint
for i := 0; i < n; i += 64 {
// calculate the remainder of the first round
- s0, s4, s8, s12 := qr(j0, s.key[0], s.key[4], s.counter)
+ s0, s4, s8, s12 := quarterRound(j0, s.key[0], s.key[4], s.counter)
// execute the second round
- x0, x5, x10, x15 := qr(s0, s5, s10, s15)
- x1, x6, x11, x12 := qr(s1, s6, s11, s12)
- x2, x7, x8, x13 := qr(s2, s7, s8, s13)
- x3, x4, x9, x14 := qr(s3, s4, s9, s14)
+ x0, x5, x10, x15 := quarterRound(s0, s5, s10, s15)
+ x1, x6, x11, x12 := quarterRound(s1, s6, s11, s12)
+ x2, x7, x8, x13 := quarterRound(s2, s7, s8, s13)
+ x3, x4, x9, x14 := quarterRound(s3, s4, s9, s14)
// execute the remaining 18 rounds
for i := 0; i < 9; i++ {
- x0, x4, x8, x12 = qr(x0, x4, x8, x12)
- x1, x5, x9, x13 = qr(x1, x5, x9, x13)
- x2, x6, x10, x14 = qr(x2, x6, x10, x14)
- x3, x7, x11, x15 = qr(x3, x7, x11, x15)
-
- x0, x5, x10, x15 = qr(x0, x5, x10, x15)
- x1, x6, x11, x12 = qr(x1, x6, x11, x12)
- x2, x7, x8, x13 = qr(x2, x7, x8, x13)
- x3, x4, x9, x14 = qr(x3, x4, x9, x14)
+ x0, x4, x8, x12 = quarterRound(x0, x4, x8, x12)
+ x1, x5, x9, x13 = quarterRound(x1, x5, x9, x13)
+ x2, x6, x10, x14 = quarterRound(x2, x6, x10, x14)
+ x3, x7, x11, x15 = quarterRound(x3, x7, x11, x15)
+
+ x0, x5, x10, x15 = quarterRound(x0, x5, x10, x15)
+ x1, x6, x11, x12 = quarterRound(x1, x6, x11, x12)
+ x2, x7, x8, x13 = quarterRound(x2, x7, x8, x13)
+ x3, x4, x9, x14 = quarterRound(x3, x4, x9, x14)
}
x0 += j0
@@ -234,3 +236,29 @@ func XORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) {
}
s.XORKeyStream(out, in)
}
+
+// HChaCha20 uses the ChaCha20 core to generate a derived key from a key and a
+// nonce. It should only be used as part of the XChaCha20 construction.
+func HChaCha20(key *[8]uint32, nonce *[4]uint32) [8]uint32 {
+ x0, x1, x2, x3 := j0, j1, j2, j3
+ x4, x5, x6, x7 := key[0], key[1], key[2], key[3]
+ x8, x9, x10, x11 := key[4], key[5], key[6], key[7]
+ x12, x13, x14, x15 := nonce[0], nonce[1], nonce[2], nonce[3]
+
+ for i := 0; i < 10; i++ {
+ x0, x4, x8, x12 = quarterRound(x0, x4, x8, x12)
+ x1, x5, x9, x13 = quarterRound(x1, x5, x9, x13)
+ x2, x6, x10, x14 = quarterRound(x2, x6, x10, x14)
+ x3, x7, x11, x15 = quarterRound(x3, x7, x11, x15)
+
+ x0, x5, x10, x15 = quarterRound(x0, x5, x10, x15)
+ x1, x6, x11, x12 = quarterRound(x1, x6, x11, x12)
+ x2, x7, x8, x13 = quarterRound(x2, x7, x8, x13)
+ x3, x4, x9, x14 = quarterRound(x3, x4, x9, x14)
+ }
+
+ var out [8]uint32
+ out[0], out[1], out[2], out[3] = x0, x1, x2, x3
+ out[4], out[5], out[6], out[7] = x12, x13, x14, x15
+ return out
+}
diff --git a/vendor/golang.org/x/crypto/internal/chacha20/asm_s390x.s b/vendor/golang.org/x/crypto/internal/chacha20/chacha_s390x.s
index 98427c5..98427c5 100644
--- a/vendor/golang.org/x/crypto/internal/chacha20/asm_s390x.s
+++ b/vendor/golang.org/x/crypto/internal/chacha20/chacha_s390x.s
diff --git a/vendor/golang.org/x/crypto/internal/subtle/aliasing_appengine.go b/vendor/golang.org/x/crypto/internal/subtle/aliasing_appengine.go
deleted file mode 100644
index 0cc4a8a..0000000
--- a/vendor/golang.org/x/crypto/internal/subtle/aliasing_appengine.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// 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 file.
-
-// +build appengine
-
-// Package subtle implements functions that are often useful in cryptographic
-// code but require careful thought to use correctly.
-package subtle // import "golang.org/x/crypto/internal/subtle"
-
-// This is the Google App Engine standard variant based on reflect
-// because the unsafe package and cgo are disallowed.
-
-import "reflect"
-
-// AnyOverlap reports whether x and y share memory at any (not necessarily
-// corresponding) index. The memory beyond the slice length is ignored.
-func AnyOverlap(x, y []byte) bool {
- return len(x) > 0 && len(y) > 0 &&
- reflect.ValueOf(&x[0]).Pointer() <= reflect.ValueOf(&y[len(y)-1]).Pointer() &&
- reflect.ValueOf(&y[0]).Pointer() <= reflect.ValueOf(&x[len(x)-1]).Pointer()
-}
-
-// InexactOverlap reports whether x and y share memory at any non-corresponding
-// index. The memory beyond the slice length is ignored. Note that x and y can
-// have different lengths and still not have any inexact overlap.
-//
-// InexactOverlap can be used to implement the requirements of the crypto/cipher
-// AEAD, Block, BlockMode and Stream interfaces.
-func InexactOverlap(x, y []byte) bool {
- if len(x) == 0 || len(y) == 0 || &x[0] == &y[0] {
- return false
- }
- return AnyOverlap(x, y)
-}
diff --git a/vendor/golang.org/x/crypto/ssh/keys.go b/vendor/golang.org/x/crypto/ssh/keys.go
index 73697de..34d9582 100644
--- a/vendor/golang.org/x/crypto/ssh/keys.go
+++ b/vendor/golang.org/x/crypto/ssh/keys.go
@@ -803,7 +803,7 @@ func encryptedBlock(block *pem.Block) bool {
}
// ParseRawPrivateKey returns a private key from a PEM encoded private key. It
-// supports RSA (PKCS#1), DSA (OpenSSL), and ECDSA private keys.
+// supports RSA (PKCS#1), PKCS#8, DSA (OpenSSL), and ECDSA private keys.
func ParseRawPrivateKey(pemBytes []byte) (interface{}, error) {
block, _ := pem.Decode(pemBytes)
if block == nil {
@@ -817,6 +817,9 @@ func ParseRawPrivateKey(pemBytes []byte) (interface{}, error) {
switch block.Type {
case "RSA PRIVATE KEY":
return x509.ParsePKCS1PrivateKey(block.Bytes)
+ // RFC5208 - https://tools.ietf.org/html/rfc5208
+ case "PRIVATE KEY":
+ return x509.ParsePKCS8PrivateKey(block.Bytes)
case "EC PRIVATE KEY":
return x509.ParseECPrivateKey(block.Bytes)
case "DSA PRIVATE KEY":
diff --git a/vendor/golang.org/x/net/http2/client_conn_pool.go b/vendor/golang.org/x/net/http2/client_conn_pool.go
index bdf5652..f4d9b5e 100644
--- a/vendor/golang.org/x/net/http2/client_conn_pool.go
+++ b/vendor/golang.org/x/net/http2/client_conn_pool.go
@@ -52,9 +52,31 @@ const (
noDialOnMiss = false
)
+// shouldTraceGetConn reports whether getClientConn should call any
+// ClientTrace.GetConn hook associated with the http.Request.
+//
+// This complexity is needed to avoid double calls of the GetConn hook
+// during the back-and-forth between net/http and x/net/http2 (when the
+// net/http.Transport is upgraded to also speak http2), as well as support
+// the case where x/net/http2 is being used directly.
+func (p *clientConnPool) shouldTraceGetConn(st clientConnIdleState) bool {
+ // If our Transport wasn't made via ConfigureTransport, always
+ // trace the GetConn hook if provided, because that means the
+ // http2 package is being used directly and it's the one
+ // dialing, as opposed to net/http.
+ if _, ok := p.t.ConnPool.(noDialClientConnPool); !ok {
+ return true
+ }
+ // Otherwise, only use the GetConn hook if this connection has
+ // been used previously for other requests. For fresh
+ // connections, the net/http package does the dialing.
+ return !st.freshConn
+}
+
func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMiss bool) (*ClientConn, error) {
if isConnectionCloseRequest(req) && dialOnMiss {
// It gets its own connection.
+ traceGetConn(req, addr)
const singleUse = true
cc, err := p.t.dialClientConn(addr, singleUse)
if err != nil {
@@ -64,7 +86,10 @@ func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMis
}
p.mu.Lock()
for _, cc := range p.conns[addr] {
- if cc.CanTakeNewRequest() {
+ if st := cc.idleState(); st.canTakeNewRequest {
+ if p.shouldTraceGetConn(st) {
+ traceGetConn(req, addr)
+ }
p.mu.Unlock()
return cc, nil
}
@@ -73,6 +98,7 @@ func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMis
p.mu.Unlock()
return nil, ErrNoCachedConn
}
+ traceGetConn(req, addr)
call := p.getStartDialLocked(addr)
p.mu.Unlock()
<-call.done
diff --git a/vendor/golang.org/x/net/http2/configure_transport.go b/vendor/golang.org/x/net/http2/configure_transport.go
index 088d6e2..6356b32 100644
--- a/vendor/golang.org/x/net/http2/configure_transport.go
+++ b/vendor/golang.org/x/net/http2/configure_transport.go
@@ -57,7 +57,7 @@ func configureTransport(t1 *http.Transport) (*Transport, error) {
// registerHTTPSProtocol calls Transport.RegisterProtocol but
// converting panics into errors.
-func registerHTTPSProtocol(t *http.Transport, rt http.RoundTripper) (err error) {
+func registerHTTPSProtocol(t *http.Transport, rt noDialH2RoundTripper) (err error) {
defer func() {
if e := recover(); e != nil {
err = fmt.Errorf("%v", e)
@@ -69,10 +69,12 @@ func registerHTTPSProtocol(t *http.Transport, rt http.RoundTripper) (err error)
// noDialH2RoundTripper is a RoundTripper which only tries to complete the request
// if there's already has a cached connection to the host.
-type noDialH2RoundTripper struct{ t *Transport }
+// (The field is exported so it can be accessed via reflect from net/http; tested
+// by TestNoDialH2RoundTripperType)
+type noDialH2RoundTripper struct{ *Transport }
func (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
- res, err := rt.t.RoundTrip(req)
+ res, err := rt.Transport.RoundTrip(req)
if isNoCachedConnError(err) {
return nil, http.ErrSkipAltProtocol
}
diff --git a/vendor/golang.org/x/net/http2/flow.go b/vendor/golang.org/x/net/http2/flow.go
index 957de25..cea601f 100644
--- a/vendor/golang.org/x/net/http2/flow.go
+++ b/vendor/golang.org/x/net/http2/flow.go
@@ -41,10 +41,10 @@ func (f *flow) take(n int32) {
// add adds n bytes (positive or negative) to the flow control window.
// It returns false if the sum would exceed 2^31-1.
func (f *flow) add(n int32) bool {
- remain := (1<<31 - 1) - f.n
- if n > remain {
- return false
+ sum := f.n + n
+ if (sum > n) == (f.n > 0) {
+ f.n = sum
+ return true
}
- f.n += n
- return true
+ return false
}
diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go
index e325007..c85e31f 100644
--- a/vendor/golang.org/x/net/http2/frame.go
+++ b/vendor/golang.org/x/net/http2/frame.go
@@ -733,32 +733,67 @@ func (f *SettingsFrame) IsAck() bool {
return f.FrameHeader.Flags.Has(FlagSettingsAck)
}
-func (f *SettingsFrame) Value(s SettingID) (v uint32, ok bool) {
+func (f *SettingsFrame) Value(id SettingID) (v uint32, ok bool) {
f.checkValid()
- buf := f.p
- for len(buf) > 0 {
- settingID := SettingID(binary.BigEndian.Uint16(buf[:2]))
- if settingID == s {
- return binary.BigEndian.Uint32(buf[2:6]), true
+ for i := 0; i < f.NumSettings(); i++ {
+ if s := f.Setting(i); s.ID == id {
+ return s.Val, true
}
- buf = buf[6:]
}
return 0, false
}
+// Setting returns the setting from the frame at the given 0-based index.
+// The index must be >= 0 and less than f.NumSettings().
+func (f *SettingsFrame) Setting(i int) Setting {
+ buf := f.p
+ return Setting{
+ ID: SettingID(binary.BigEndian.Uint16(buf[i*6 : i*6+2])),
+ Val: binary.BigEndian.Uint32(buf[i*6+2 : i*6+6]),
+ }
+}
+
+func (f *SettingsFrame) NumSettings() int { return len(f.p) / 6 }
+
+// HasDuplicates reports whether f contains any duplicate setting IDs.
+func (f *SettingsFrame) HasDuplicates() bool {
+ num := f.NumSettings()
+ if num == 0 {
+ return false
+ }
+ // If it's small enough (the common case), just do the n^2
+ // thing and avoid a map allocation.
+ if num < 10 {
+ for i := 0; i < num; i++ {
+ idi := f.Setting(i).ID
+ for j := i + 1; j < num; j++ {
+ idj := f.Setting(j).ID
+ if idi == idj {
+ return true
+ }
+ }
+ }
+ return false
+ }
+ seen := map[SettingID]bool{}
+ for i := 0; i < num; i++ {
+ id := f.Setting(i).ID
+ if seen[id] {
+ return true
+ }
+ seen[id] = true
+ }
+ return false
+}
+
// ForeachSetting runs fn for each setting.
// It stops and returns the first error.
func (f *SettingsFrame) ForeachSetting(fn func(Setting) error) error {
f.checkValid()
- buf := f.p
- for len(buf) > 0 {
- if err := fn(Setting{
- SettingID(binary.BigEndian.Uint16(buf[:2])),
- binary.BigEndian.Uint32(buf[2:6]),
- }); err != nil {
+ for i := 0; i < f.NumSettings(); i++ {
+ if err := fn(f.Setting(i)); err != nil {
return err
}
- buf = buf[6:]
}
return nil
}
diff --git a/vendor/golang.org/x/net/http2/go111.go b/vendor/golang.org/x/net/http2/go111.go
new file mode 100644
index 0000000..9749dc0
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/go111.go
@@ -0,0 +1,26 @@
+// 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 file.
+
+// +build go1.11
+
+package http2
+
+import "net/textproto"
+
+func traceHasWroteHeaderField(trace *clientTrace) bool {
+ return trace != nil && trace.WroteHeaderField != nil
+}
+
+func traceWroteHeaderField(trace *clientTrace, k, v string) {
+ if trace != nil && trace.WroteHeaderField != nil {
+ trace.WroteHeaderField(k, []string{v})
+ }
+}
+
+func traceGot1xxResponseFunc(trace *clientTrace) func(int, textproto.MIMEHeader) error {
+ if trace != nil {
+ return trace.Got1xxResponse
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/net/http2/go17.go b/vendor/golang.org/x/net/http2/go17.go
index 47b7fae..d957b7b 100644
--- a/vendor/golang.org/x/net/http2/go17.go
+++ b/vendor/golang.org/x/net/http2/go17.go
@@ -18,6 +18,8 @@ type contextContext interface {
context.Context
}
+var errCanceled = context.Canceled
+
func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx contextContext, cancel func()) {
ctx, cancel = context.WithCancel(context.Background())
ctx = context.WithValue(ctx, http.LocalAddrContextKey, c.LocalAddr())
@@ -48,6 +50,14 @@ func (t *Transport) idleConnTimeout() time.Duration {
func setResponseUncompressed(res *http.Response) { res.Uncompressed = true }
+func traceGetConn(req *http.Request, hostPort string) {
+ trace := httptrace.ContextClientTrace(req.Context())
+ if trace == nil || trace.GetConn == nil {
+ return
+ }
+ trace.GetConn(hostPort)
+}
+
func traceGotConn(req *http.Request, cc *ClientConn) {
trace := httptrace.ContextClientTrace(req.Context())
if trace == nil || trace.GotConn == nil {
@@ -104,3 +114,8 @@ func requestTrace(req *http.Request) *clientTrace {
func (cc *ClientConn) Ping(ctx context.Context) error {
return cc.ping(ctx)
}
+
+// Shutdown gracefully closes the client connection, waiting for running streams to complete.
+func (cc *ClientConn) Shutdown(ctx context.Context) error {
+ return cc.shutdown(ctx)
+}
diff --git a/vendor/golang.org/x/net/http2/headermap.go b/vendor/golang.org/x/net/http2/headermap.go
index c2805f6..c3ff3fa 100644
--- a/vendor/golang.org/x/net/http2/headermap.go
+++ b/vendor/golang.org/x/net/http2/headermap.go
@@ -7,15 +7,21 @@ package http2
import (
"net/http"
"strings"
+ "sync"
)
var (
- commonLowerHeader = map[string]string{} // Go-Canonical-Case -> lower-case
- commonCanonHeader = map[string]string{} // lower-case -> Go-Canonical-Case
+ commonBuildOnce sync.Once
+ commonLowerHeader map[string]string // Go-Canonical-Case -> lower-case
+ commonCanonHeader map[string]string // lower-case -> Go-Canonical-Case
)
-func init() {
- for _, v := range []string{
+func buildCommonHeaderMapsOnce() {
+ commonBuildOnce.Do(buildCommonHeaderMaps)
+}
+
+func buildCommonHeaderMaps() {
+ common := []string{
"accept",
"accept-charset",
"accept-encoding",
@@ -63,7 +69,10 @@ func init() {
"vary",
"via",
"www-authenticate",
- } {
+ }
+ commonLowerHeader = make(map[string]string, len(common))
+ commonCanonHeader = make(map[string]string, len(common))
+ for _, v := range common {
chk := http.CanonicalHeaderKey(v)
commonLowerHeader[chk] = v
commonCanonHeader[v] = chk
@@ -71,6 +80,7 @@ func init() {
}
func lowerHeader(v string) string {
+ buildCommonHeaderMapsOnce()
if s, ok := commonLowerHeader[v]; ok {
return s
}
diff --git a/vendor/golang.org/x/net/http2/hpack/huffman.go b/vendor/golang.org/x/net/http2/hpack/huffman.go
index 8850e39..b412a96 100644
--- a/vendor/golang.org/x/net/http2/hpack/huffman.go
+++ b/vendor/golang.org/x/net/http2/hpack/huffman.go
@@ -47,6 +47,7 @@ var ErrInvalidHuffman = errors.New("hpack: invalid Huffman-encoded data")
// If maxLen is greater than 0, attempts to write more to buf than
// maxLen bytes will return ErrStringLength.
func huffmanDecode(buf *bytes.Buffer, maxLen int, v []byte) error {
+ rootHuffmanNode := getRootHuffmanNode()
n := rootHuffmanNode
// cur is the bit buffer that has not been fed into n.
// cbits is the number of low order bits in cur that are valid.
@@ -106,7 +107,7 @@ func huffmanDecode(buf *bytes.Buffer, maxLen int, v []byte) error {
type node struct {
// children is non-nil for internal nodes
- children []*node
+ children *[256]*node
// The following are only valid if children is nil:
codeLen uint8 // number of bits that led to the output of sym
@@ -114,22 +115,31 @@ type node struct {
}
func newInternalNode() *node {
- return &node{children: make([]*node, 256)}
+ return &node{children: new([256]*node)}
}
-var rootHuffmanNode = newInternalNode()
+var (
+ buildRootOnce sync.Once
+ lazyRootHuffmanNode *node
+)
+
+func getRootHuffmanNode() *node {
+ buildRootOnce.Do(buildRootHuffmanNode)
+ return lazyRootHuffmanNode
+}
-func init() {
+func buildRootHuffmanNode() {
if len(huffmanCodes) != 256 {
panic("unexpected size")
}
+ lazyRootHuffmanNode = newInternalNode()
for i, code := range huffmanCodes {
addDecoderNode(byte(i), code, huffmanCodeLen[i])
}
}
func addDecoderNode(sym byte, code uint32, codeLen uint8) {
- cur := rootHuffmanNode
+ cur := lazyRootHuffmanNode
for codeLen > 8 {
codeLen -= 8
i := uint8(code >> codeLen)
diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go
index c824282..bdaba1d 100644
--- a/vendor/golang.org/x/net/http2/http2.go
+++ b/vendor/golang.org/x/net/http2/http2.go
@@ -201,19 +201,12 @@ func validWireHeaderFieldName(v string) bool {
return true
}
-var httpCodeStringCommon = map[int]string{} // n -> strconv.Itoa(n)
-
-func init() {
- for i := 100; i <= 999; i++ {
- if v := http.StatusText(i); v != "" {
- httpCodeStringCommon[i] = strconv.Itoa(i)
- }
- }
-}
-
func httpCodeString(code int) string {
- if s, ok := httpCodeStringCommon[code]; ok {
- return s
+ switch code {
+ case 200:
+ return "200"
+ case 404:
+ return "404"
}
return strconv.Itoa(code)
}
diff --git a/vendor/golang.org/x/net/http2/not_go111.go b/vendor/golang.org/x/net/http2/not_go111.go
new file mode 100644
index 0000000..0df34e6
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/not_go111.go
@@ -0,0 +1,17 @@
+// 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 file.
+
+// +build !go1.11
+
+package http2
+
+import "net/textproto"
+
+func traceHasWroteHeaderField(trace *clientTrace) bool { return false }
+
+func traceWroteHeaderField(trace *clientTrace, k, v string) {}
+
+func traceGot1xxResponseFunc(trace *clientTrace) func(int, textproto.MIMEHeader) error {
+ return nil
+}
diff --git a/vendor/golang.org/x/net/http2/not_go17.go b/vendor/golang.org/x/net/http2/not_go17.go
index 140434a..7ffb250 100644
--- a/vendor/golang.org/x/net/http2/not_go17.go
+++ b/vendor/golang.org/x/net/http2/not_go17.go
@@ -8,6 +8,7 @@ package http2
import (
"crypto/tls"
+ "errors"
"net"
"net/http"
"time"
@@ -18,6 +19,8 @@ type contextContext interface {
Err() error
}
+var errCanceled = errors.New("canceled")
+
type fakeContext struct{}
func (fakeContext) Done() <-chan struct{} { return nil }
@@ -34,6 +37,7 @@ func setResponseUncompressed(res *http.Response) {
type clientTrace struct{}
func requestTrace(*http.Request) *clientTrace { return nil }
+func traceGetConn(*http.Request, string) {}
func traceGotConn(*http.Request, *ClientConn) {}
func traceFirstResponseByte(*clientTrace) {}
func traceWroteHeaders(*clientTrace) {}
@@ -84,4 +88,8 @@ func (cc *ClientConn) Ping(ctx contextContext) error {
return cc.ping(ctx)
}
+func (cc *ClientConn) Shutdown(ctx contextContext) error {
+ return cc.shutdown(ctx)
+}
+
func (t *Transport) idleConnTimeout() time.Duration { return 0 }
diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go
index 769c0fe..56859d1 100644
--- a/vendor/golang.org/x/net/http2/server.go
+++ b/vendor/golang.org/x/net/http2/server.go
@@ -663,6 +663,7 @@ func (sc *serverConn) condlogf(err error, format string, args ...interface{}) {
func (sc *serverConn) canonicalHeader(v string) string {
sc.serveG.check()
+ buildCommonHeaderMapsOnce()
cv, ok := commonCanonHeader[v]
if ok {
return cv
@@ -1487,6 +1488,12 @@ func (sc *serverConn) processSettings(f *SettingsFrame) error {
}
return nil
}
+ if f.NumSettings() > 100 || f.HasDuplicates() {
+ // This isn't actually in the spec, but hang up on
+ // suspiciously large settings frames or those with
+ // duplicate entries.
+ return ConnectionError(ErrCodeProtocol)
+ }
if err := f.ForeachSetting(sc.processSetting); err != nil {
return err
}
@@ -1575,6 +1582,12 @@ func (sc *serverConn) processData(f *DataFrame) error {
// type PROTOCOL_ERROR."
return ConnectionError(ErrCodeProtocol)
}
+ // RFC 7540, sec 6.1: If a DATA frame is received whose stream is not in
+ // "open" or "half-closed (local)" state, the recipient MUST respond with a
+ // stream error (Section 5.4.2) of type STREAM_CLOSED.
+ if state == stateClosed {
+ return streamError(id, ErrCodeStreamClosed)
+ }
if st == nil || state != stateOpen || st.gotTrailerHeader || st.resetQueued {
// This includes sending a RST_STREAM if the stream is
// in stateHalfClosedLocal (which currently means that
@@ -1721,6 +1734,13 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
// processing this frame.
return nil
}
+ // RFC 7540, sec 5.1: If an endpoint receives additional frames, other than
+ // WINDOW_UPDATE, PRIORITY, or RST_STREAM, for a stream that is in
+ // this state, it MUST respond with a stream error (Section 5.4.2) of
+ // type STREAM_CLOSED.
+ if st.state == stateHalfClosedRemote {
+ return streamError(id, ErrCodeStreamClosed)
+ }
return st.processTrailerHeaders(f)
}
@@ -2327,15 +2347,7 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
}
_, hasContentType := rws.snapHeader["Content-Type"]
if !hasContentType && bodyAllowedForStatus(rws.status) && len(p) > 0 {
- if cto := rws.snapHeader.Get("X-Content-Type-Options"); strings.EqualFold("nosniff", cto) {
- // nosniff is an explicit directive not to guess a content-type.
- // Content-sniffing is no less susceptible to polyglot attacks via
- // hosted content when done on the server.
- ctype = "application/octet-stream"
- rws.conn.logf("http2: WriteHeader called with X-Content-Type-Options:nosniff but no Content-Type")
- } else {
- ctype = http.DetectContentType(p)
- }
+ ctype = http.DetectContentType(p)
}
var date string
if _, ok := rws.snapHeader["Date"]; !ok {
@@ -2347,6 +2359,19 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
foreachHeaderElement(v, rws.declareTrailer)
}
+ // "Connection" headers aren't allowed in HTTP/2 (RFC 7540, 8.1.2.2),
+ // but respect "Connection" == "close" to mean sending a GOAWAY and tearing
+ // down the TCP connection when idle, like we do for HTTP/1.
+ // TODO: remove more Connection-specific header fields here, in addition
+ // to "Connection".
+ if _, ok := rws.snapHeader["Connection"]; ok {
+ v := rws.snapHeader.Get("Connection")
+ delete(rws.snapHeader, "Connection")
+ if v == "close" {
+ rws.conn.startGracefulShutdown()
+ }
+ }
+
endStream := (rws.handlerDone && !rws.hasTrailers() && len(p) == 0) || isHeadResp
err = rws.conn.writeHeaders(rws.stream, &writeResHeaders{
streamID: rws.stream.id,
diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go
index d23a226..9d1f2fa 100644
--- a/vendor/golang.org/x/net/http2/transport.go
+++ b/vendor/golang.org/x/net/http2/transport.go
@@ -21,6 +21,7 @@ import (
mathrand "math/rand"
"net"
"net/http"
+ "net/textproto"
"sort"
"strconv"
"strings"
@@ -159,6 +160,7 @@ type ClientConn struct {
cond *sync.Cond // hold mu; broadcast on flow/closed changes
flow flow // our conn-level flow control quota (cs.flow is per stream)
inflow flow // peer's conn-level flow control
+ closing bool
closed bool
wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back
goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received
@@ -211,9 +213,10 @@ type clientStream struct {
done chan struct{} // closed when stream remove from cc.streams map; close calls guarded by cc.mu
// owned by clientConnReadLoop:
- firstByte bool // got the first response byte
- pastHeaders bool // got first MetaHeadersFrame (actual headers)
- pastTrailers bool // got optional second MetaHeadersFrame (trailers)
+ firstByte bool // got the first response byte
+ pastHeaders bool // got first MetaHeadersFrame (actual headers)
+ pastTrailers bool // got optional second MetaHeadersFrame (trailers)
+ num1xx uint8 // number of 1xx responses seen
trailer http.Header // accumulated trailers
resTrailer *http.Header // client's Response.Trailer
@@ -237,6 +240,17 @@ func awaitRequestCancel(req *http.Request, done <-chan struct{}) error {
}
}
+var got1xxFuncForTests func(int, textproto.MIMEHeader) error
+
+// get1xxTraceFunc returns the value of request's httptrace.ClientTrace.Got1xxResponse func,
+// if any. It returns nil if not set or if the Go version is too old.
+func (cs *clientStream) get1xxTraceFunc() func(int, textproto.MIMEHeader) error {
+ if fn := got1xxFuncForTests; fn != nil {
+ return fn
+ }
+ return traceGot1xxResponseFunc(cs.trace)
+}
+
// awaitRequestCancel waits for the user to cancel a request, its context to
// expire, or for the request to be done (any way it might be removed from the
// cc.streams map: peer reset, successful completion, TCP connection breakage,
@@ -423,27 +437,36 @@ func shouldRetryRequest(req *http.Request, err error, afterBodyWrite bool) (*htt
if !canRetryError(err) {
return nil, err
}
- if !afterBodyWrite {
- return req, nil
- }
// If the Body is nil (or http.NoBody), it's safe to reuse
// this request and its Body.
if req.Body == nil || reqBodyIsNoBody(req.Body) {
return req, nil
}
- // Otherwise we depend on the Request having its GetBody
- // func defined.
+
+ // If the request body can be reset back to its original
+ // state via the optional req.GetBody, do that.
getBody := reqGetBody(req) // Go 1.8: getBody = req.GetBody
- if getBody == nil {
- return nil, fmt.Errorf("http2: Transport: cannot retry err [%v] after Request.Body was written; define Request.GetBody to avoid this error", err)
+ if getBody != nil {
+ // TODO: consider a req.Body.Close here? or audit that all caller paths do?
+ body, err := getBody()
+ if err != nil {
+ return nil, err
+ }
+ newReq := *req
+ newReq.Body = body
+ return &newReq, nil
}
- body, err := getBody()
- if err != nil {
- return nil, err
+
+ // The Request.Body can't reset back to the beginning, but we
+ // don't seem to have started to read from it yet, so reuse
+ // the request directly. The "afterBodyWrite" means the
+ // bodyWrite process has started, which becomes true before
+ // the first Read.
+ if !afterBodyWrite {
+ return req, nil
}
- newReq := *req
- newReq.Body = body
- return &newReq, nil
+
+ return nil, fmt.Errorf("http2: Transport: cannot retry err [%v] after Request.Body was written; define Request.GetBody to avoid this error", err)
}
func canRetryError(err error) bool {
@@ -630,12 +653,32 @@ func (cc *ClientConn) CanTakeNewRequest() bool {
return cc.canTakeNewRequestLocked()
}
-func (cc *ClientConn) canTakeNewRequestLocked() bool {
+// clientConnIdleState describes the suitability of a client
+// connection to initiate a new RoundTrip request.
+type clientConnIdleState struct {
+ canTakeNewRequest bool
+ freshConn bool // whether it's unused by any previous request
+}
+
+func (cc *ClientConn) idleState() clientConnIdleState {
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ return cc.idleStateLocked()
+}
+
+func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) {
if cc.singleUse && cc.nextStreamID > 1 {
- return false
+ return
}
- return cc.goAway == nil && !cc.closed &&
+ st.canTakeNewRequest = cc.goAway == nil && !cc.closed && !cc.closing &&
int64(cc.nextStreamID)+int64(cc.pendingRequests) < math.MaxInt32
+ st.freshConn = cc.nextStreamID == 1 && st.canTakeNewRequest
+ return
+}
+
+func (cc *ClientConn) canTakeNewRequestLocked() bool {
+ st := cc.idleStateLocked()
+ return st.canTakeNewRequest
}
// onIdleTimeout is called from a time.AfterFunc goroutine. It will
@@ -665,6 +708,88 @@ func (cc *ClientConn) closeIfIdle() {
cc.tconn.Close()
}
+var shutdownEnterWaitStateHook = func() {}
+
+// Shutdown gracefully close the client connection, waiting for running streams to complete.
+// Public implementation is in go17.go and not_go17.go
+func (cc *ClientConn) shutdown(ctx contextContext) error {
+ if err := cc.sendGoAway(); err != nil {
+ return err
+ }
+ // Wait for all in-flight streams to complete or connection to close
+ done := make(chan error, 1)
+ cancelled := false // guarded by cc.mu
+ go func() {
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ for {
+ if len(cc.streams) == 0 || cc.closed {
+ cc.closed = true
+ done <- cc.tconn.Close()
+ break
+ }
+ if cancelled {
+ break
+ }
+ cc.cond.Wait()
+ }
+ }()
+ shutdownEnterWaitStateHook()
+ select {
+ case err := <-done:
+ return err
+ case <-ctx.Done():
+ cc.mu.Lock()
+ // Free the goroutine above
+ cancelled = true
+ cc.cond.Broadcast()
+ cc.mu.Unlock()
+ return ctx.Err()
+ }
+}
+
+func (cc *ClientConn) sendGoAway() error {
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ cc.wmu.Lock()
+ defer cc.wmu.Unlock()
+ if cc.closing {
+ // GOAWAY sent already
+ return nil
+ }
+ // Send a graceful shutdown frame to server
+ maxStreamID := cc.nextStreamID
+ if err := cc.fr.WriteGoAway(maxStreamID, ErrCodeNo, nil); err != nil {
+ return err
+ }
+ if err := cc.bw.Flush(); err != nil {
+ return err
+ }
+ // Prevent new requests
+ cc.closing = true
+ return nil
+}
+
+// Close closes the client connection immediately.
+//
+// In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.
+func (cc *ClientConn) Close() error {
+ cc.mu.Lock()
+ defer cc.cond.Broadcast()
+ defer cc.mu.Unlock()
+ err := errors.New("http2: client connection force closed via ClientConn.Close")
+ for id, cs := range cc.streams {
+ select {
+ case cs.resc <- resAndError{err: err}:
+ default:
+ }
+ cs.bufPipe.CloseWithError(err)
+ delete(cc.streams, id)
+ }
+ cc.closed = true
+ return cc.tconn.Close()
+}
+
const maxAllocFrameSize = 512 << 10
// frameBuffer returns a scratch buffer suitable for writing DATA frames.
@@ -747,7 +872,7 @@ func checkConnHeaders(req *http.Request) error {
if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") {
return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv)
}
- if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "close" && vv[0] != "keep-alive") {
+ if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !strings.EqualFold(vv[0], "close") && !strings.EqualFold(vv[0], "keep-alive")) {
return fmt.Errorf("http2: invalid Connection request header: %q", vv)
}
return nil
@@ -1291,9 +1416,16 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail
return nil, errRequestHeaderListSize
}
+ trace := requestTrace(req)
+ traceHeaders := traceHasWroteHeaderField(trace)
+
// Header list size is ok. Write the headers.
enumerateHeaders(func(name, value string) {
- cc.writeHeader(strings.ToLower(name), value)
+ name = strings.ToLower(name)
+ cc.writeHeader(name, value)
+ if traceHeaders {
+ traceWroteHeaderField(trace, name, value)
+ }
})
return cc.hbuf.Bytes(), nil
@@ -1615,8 +1747,7 @@ func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error {
// is the detail.
//
// As a special case, handleResponse may return (nil, nil) to skip the
-// frame (currently only used for 100 expect continue). This special
-// case is going away after Issue 13851 is fixed.
+// frame (currently only used for 1xx responses).
func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFrame) (*http.Response, error) {
if f.Truncated {
return nil, errResponseHeaderListSize
@@ -1631,15 +1762,6 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
return nil, errors.New("malformed response from server: malformed non-numeric status pseudo header")
}
- if statusCode == 100 {
- traceGot100Continue(cs.trace)
- if cs.on100 != nil {
- cs.on100() // forces any write delay timer to fire
- }
- cs.pastHeaders = false // do it all again
- return nil, nil
- }
-
header := make(http.Header)
res := &http.Response{
Proto: "HTTP/2.0",
@@ -1664,6 +1786,27 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
}
}
+ if statusCode >= 100 && statusCode <= 199 {
+ cs.num1xx++
+ const max1xxResponses = 5 // arbitrary bound on number of informational responses, same as net/http
+ if cs.num1xx > max1xxResponses {
+ return nil, errors.New("http2: too many 1xx informational responses")
+ }
+ if fn := cs.get1xxTraceFunc(); fn != nil {
+ if err := fn(statusCode, textproto.MIMEHeader(header)); err != nil {
+ return nil, err
+ }
+ }
+ if statusCode == 100 {
+ traceGot100Continue(cs.trace)
+ if cs.on100 != nil {
+ cs.on100() // forces any write delay timer to fire
+ }
+ }
+ cs.pastHeaders = false // do it all again
+ return nil, nil
+ }
+
streamEnded := f.StreamEnded()
isHead := cs.req.Method == "HEAD"
if !streamEnded || isHead {
diff --git a/vendor/golang.org/x/oauth2/internal/client_appengine.go b/vendor/golang.org/x/oauth2/internal/client_appengine.go
deleted file mode 100644
index 7434871..0000000
--- a/vendor/golang.org/x/oauth2/internal/client_appengine.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// 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 file.
-
-// +build appengine
-
-package internal
-
-import "google.golang.org/appengine/urlfetch"
-
-func init() {
- appengineClientHook = urlfetch.Client
-}
diff --git a/vendor/golang.org/x/oauth2/internal/token.go b/vendor/golang.org/x/oauth2/internal/token.go
index 999e668..5c5451a 100644
--- a/vendor/golang.org/x/oauth2/internal/token.go
+++ b/vendor/golang.org/x/oauth2/internal/token.go
@@ -103,6 +103,7 @@ var brokenAuthHeaderProviders = []string{
"https://api.twitch.tv/",
"https://id.twitch.tv/",
"https://app.box.com/",
+ "https://api.box.com/",
"https://connect.stripe.com/",
"https://login.mailchimp.com/",
"https://login.microsoftonline.com/",
@@ -130,6 +131,7 @@ var brokenAuthHeaderProviders = []string{
"https://multisport.todaysplan.com.au/rest/oauth/access_token",
"https://whats.todaysplan.com.au/rest/oauth/access_token",
"https://stackoverflow.com/oauth/access_token",
+ "https://account.health.nokia.com",
}
// brokenAuthHeaderDomains lists broken providers that issue dynamic endpoints.
diff --git a/vendor/golang.org/x/sys/unix/aliases.go b/vendor/golang.org/x/sys/unix/aliases.go
new file mode 100644
index 0000000..d87a681
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/aliases.go
@@ -0,0 +1,14 @@
+// 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 file.
+
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build go1.9
+
+package unix
+
+import "syscall"
+
+type Signal = syscall.Signal
+type Errno = syscall.Errno
+type SysProcAttr = syscall.SysProcAttr
diff --git a/vendor/golang.org/x/sys/unix/fcntl.go b/vendor/golang.org/x/sys/unix/fcntl.go
index 0c58c7e..9379ba9 100644
--- a/vendor/golang.org/x/sys/unix/fcntl.go
+++ b/vendor/golang.org/x/sys/unix/fcntl.go
@@ -14,7 +14,11 @@ var fcntl64Syscall uintptr = SYS_FCNTL
// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
- valptr, _, err := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(arg))
+ valptr, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(arg))
+ var err error
+ if errno != 0 {
+ err = errno
+ }
return int(valptr), err
}
diff --git a/vendor/golang.org/x/sys/unix/ioctl.go b/vendor/golang.org/x/sys/unix/ioctl.go
new file mode 100644
index 0000000..8c9aaeb
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/ioctl.go
@@ -0,0 +1,30 @@
+// 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 file.
+
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+
+package unix
+
+import "runtime"
+
+// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.
+//
+// To change fd's window size, the req argument should be TIOCSWINSZ.
+func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+ // TODO: if we get the chance, remove the req parameter and
+ // hardcode TIOCSWINSZ.
+ err := ioctlSetWinsize(fd, req, value)
+ runtime.KeepAlive(value)
+ return err
+}
+
+// IoctlSetTermios performs an ioctl on fd with a *Termios.
+//
+// The req value will usually be TCSETA or TIOCSETA.
+func IoctlSetTermios(fd int, req uint, value *Termios) error {
+ // TODO: if we get the chance, remove the req parameter.
+ err := ioctlSetTermios(fd, req, value)
+ runtime.KeepAlive(value)
+ return err
+}
diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh
index 4a2c5dc..1243437 100755
--- a/vendor/golang.org/x/sys/unix/mkerrors.sh
+++ b/vendor/golang.org/x/sys/unix/mkerrors.sh
@@ -65,6 +65,7 @@ includes_DragonFly='
#include <sys/event.h>
#include <sys/socket.h>
#include <sys/sockio.h>
+#include <sys/stat.h>
#include <sys/sysctl.h>
#include <sys/mman.h>
#include <sys/wait.h>
@@ -86,6 +87,7 @@ includes_FreeBSD='
#include <sys/event.h>
#include <sys/socket.h>
#include <sys/sockio.h>
+#include <sys/stat.h>
#include <sys/sysctl.h>
#include <sys/mman.h>
#include <sys/mount.h>
@@ -175,6 +177,7 @@ struct ltchars {
#include <linux/magic.h>
#include <linux/netfilter/nfnetlink.h>
#include <linux/netlink.h>
+#include <linux/net_namespace.h>
#include <linux/perf_event.h>
#include <linux/random.h>
#include <linux/reboot.h>
@@ -190,7 +193,6 @@ struct ltchars {
#include <linux/vm_sockets.h>
#include <linux/taskstats.h>
#include <linux/genetlink.h>
-#include <linux/stat.h>
#include <linux/watchdog.h>
#include <linux/hdreg.h>
#include <linux/rtc.h>
@@ -229,6 +231,7 @@ includes_NetBSD='
#include <sys/types.h>
#include <sys/param.h>
#include <sys/event.h>
+#include <sys/extattr.h>
#include <sys/mman.h>
#include <sys/socket.h>
#include <sys/sockio.h>
@@ -257,9 +260,11 @@ includes_OpenBSD='
#include <sys/mman.h>
#include <sys/socket.h>
#include <sys/sockio.h>
+#include <sys/stat.h>
#include <sys/sysctl.h>
#include <sys/termios.h>
#include <sys/ttycom.h>
+#include <sys/unistd.h>
#include <sys/wait.h>
#include <net/bpf.h>
#include <net/if.h>
@@ -291,6 +296,7 @@ includes_SunOS='
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/sockio.h>
+#include <sys/stat.h>
#include <sys/mman.h>
#include <sys/wait.h>
#include <sys/ioctl.h>
@@ -405,7 +411,7 @@ ccflags="$@"
$2 ~ /^LINUX_REBOOT_CMD_/ ||
$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||
$2 !~ "NLA_TYPE_MASK" &&
- $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ ||
+ $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ ||
$2 ~ /^SIOC/ ||
$2 ~ /^TIOC/ ||
$2 ~ /^TCGET/ ||
@@ -432,13 +438,14 @@ ccflags="$@"
$2 ~ /^SECCOMP_MODE_/ ||
$2 ~ /^SPLICE_/ ||
$2 !~ /^AUDIT_RECORD_MAGIC/ &&
- $2 ~ /^[A-Z0-9_]+_MAGIC2?$/ ||
+ $2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ ||
$2 ~ /^(VM|VMADDR)_/ ||
$2 ~ /^IOCTL_VM_SOCKETS_/ ||
$2 ~ /^(TASKSTATS|TS)_/ ||
$2 ~ /^CGROUPSTATS_/ ||
$2 ~ /^GENL_/ ||
$2 ~ /^STATX_/ ||
+ $2 ~ /^RENAME/ ||
$2 ~ /^UTIME_/ ||
$2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ ||
$2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ ||
diff --git a/vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl b/vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl
index a0a22bf..198993d 100755
--- a/vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl
+++ b/vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl
@@ -27,7 +27,7 @@ const (
EOF
while(<>){
- if(/^([0-9]+)\s+\S+\s+STD\s+({ \S+\s+(\w+).*)$/){
+ if(/^([0-9]+)\s+\S+\s+(?:NO)?STD\s+({ \S+\s+(\w+).*)$/){
my $num = $1;
my $proto = $2;
my $name = "SYS_$3";
diff --git a/vendor/golang.org/x/sys/unix/openbsd_pledge.go b/vendor/golang.org/x/sys/unix/openbsd_pledge.go
index 9b1e86a..11388e5 100644
--- a/vendor/golang.org/x/sys/unix/openbsd_pledge.go
+++ b/vendor/golang.org/x/sys/unix/openbsd_pledge.go
@@ -8,6 +8,9 @@
package unix
import (
+ "errors"
+ "fmt"
+ "strconv"
"syscall"
"unsafe"
)
@@ -16,23 +19,77 @@ const (
_SYS_PLEDGE = 108
)
-// Pledge implements the pledge syscall. For more information see pledge(2).
-func Pledge(promises string, paths []string) error {
- promisesPtr, err := syscall.BytePtrFromString(promises)
+// Pledge implements the pledge syscall.
+//
+// The pledge syscall does not accept execpromises on OpenBSD releases
+// before 6.3.
+//
+// execpromises must be empty when Pledge is called on OpenBSD
+// releases predating 6.3, otherwise an error will be returned.
+//
+// For more information see pledge(2).
+func Pledge(promises, execpromises string) error {
+ maj, min, err := majmin()
if err != nil {
return err
}
- promisesUnsafe, pathsUnsafe := unsafe.Pointer(promisesPtr), unsafe.Pointer(nil)
- if paths != nil {
- var pathsPtr []*byte
- if pathsPtr, err = syscall.SlicePtrFromStrings(paths); err != nil {
+
+ // If OpenBSD <= 5.9, pledge is not available.
+ if (maj == 5 && min != 9) || maj < 5 {
+ return fmt.Errorf("pledge syscall is not available on OpenBSD %d.%d", maj, min)
+ }
+
+ // If OpenBSD <= 6.2 and execpromises is not empty
+ // return an error - execpromises is not available before 6.3
+ if (maj < 6 || (maj == 6 && min <= 2)) && execpromises != "" {
+ return fmt.Errorf("cannot use execpromises on OpenBSD %d.%d", maj, min)
+ }
+
+ pptr, err := syscall.BytePtrFromString(promises)
+ if err != nil {
+ return err
+ }
+
+ // This variable will hold either a nil unsafe.Pointer or
+ // an unsafe.Pointer to a string (execpromises).
+ var expr unsafe.Pointer
+
+ // If we're running on OpenBSD > 6.2, pass execpromises to the syscall.
+ if maj > 6 || (maj == 6 && min > 2) {
+ exptr, err := syscall.BytePtrFromString(execpromises)
+ if err != nil {
return err
}
- pathsUnsafe = unsafe.Pointer(&pathsPtr[0])
+ expr = unsafe.Pointer(exptr)
}
- _, _, e := syscall.Syscall(_SYS_PLEDGE, uintptr(promisesUnsafe), uintptr(pathsUnsafe), 0)
+
+ _, _, e := syscall.Syscall(_SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)
if e != 0 {
return e
}
+
return nil
}
+
+// majmin returns major and minor version number for an OpenBSD system.
+func majmin() (major int, minor int, err error) {
+ var v Utsname
+ err = Uname(&v)
+ if err != nil {
+ return
+ }
+
+ major, err = strconv.Atoi(string(v.Release[0]))
+ if err != nil {
+ err = errors.New("cannot parse major version number returned by uname")
+ return
+ }
+
+ minor, err = strconv.Atoi(string(v.Release[2]))
+ if err != nil {
+ err = errors.New("cannot parse minor version number returned by uname")
+ return
+ }
+
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go
index 53fb851..33c8b5f 100644
--- a/vendor/golang.org/x/sys/unix/syscall_bsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go
@@ -206,7 +206,7 @@ func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil
}
-func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_LINK:
pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))
@@ -286,7 +286,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
Close(nfd)
return 0, nil, ECONNABORTED
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -306,7 +306,7 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
rsa.Addr.Family = AF_UNIX
rsa.Addr.Len = SizeofSockaddrUnix
}
- return anyToSockaddr(&rsa)
+ return anyToSockaddr(fd, &rsa)
}
//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
@@ -356,7 +356,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
recvflags = int(msg.Flags)
// source address is only specified if the socket is unconnected
if rsa.Addr.Family != AF_UNSPEC {
- from, err = anyToSockaddr(&rsa)
+ from, err = anyToSockaddr(fd, &rsa)
}
return
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go
index 79e9476..1aabc56 100644
--- a/vendor/golang.org/x/sys/unix/syscall_darwin.go
+++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go
@@ -199,7 +199,13 @@ func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
return getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW)
}
-//sys setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error)
+//sys fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)
+
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ return fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0)
+}
+
+//sys setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error)
func Setxattr(path string, attr string, data []byte, flags int) (err error) {
// The parameters for the OS X implementation vary slightly compared to the
@@ -235,7 +241,13 @@ func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
return setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW)
}
-//sys removexattr(path string, attr string, options int) (err error)
+//sys fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error)
+
+func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
+ return fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0)
+}
+
+//sys removexattr(path string, attr string, options int) (err error)
func Removexattr(path string, attr string) (err error) {
// We wrap around and explicitly zero out the options provided to the OS X
@@ -248,6 +260,12 @@ func Lremovexattr(link string, attr string) (err error) {
return removexattr(link, attr, XATTR_NOFOLLOW)
}
+//sys fremovexattr(fd int, attr string, options int) (err error)
+
+func Fremovexattr(fd int, attr string) (err error) {
+ return fremovexattr(fd, attr, 0)
+}
+
//sys listxattr(path string, dest *byte, size int, options int) (sz int, err error)
func Listxattr(path string, dest []byte) (sz int, err error) {
@@ -258,6 +276,12 @@ func Llistxattr(link string, dest []byte) (sz int, err error) {
return listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW)
}
+//sys flistxattr(fd int, dest *byte, size int, options int) (sz int, err error)
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ return flistxattr(fd, xattrPointer(dest), len(dest), 0)
+}
+
func setattrlistTimes(path string, times []Timespec, flags int) error {
_p0, err := BytePtrFromString(path)
if err != nil {
@@ -313,11 +337,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -529,10 +553,6 @@ func Uname(uname *Utsname) error {
// Watchevent
// Waitevent
// Modwatch
-// Fgetxattr
-// Fsetxattr
-// Fremovexattr
-// Flistxattr
// Fsctl
// Initgroups
// Posix_spawn
diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
index b5072de..79d125b 100644
--- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
+++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
@@ -87,7 +87,7 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
if len > SizeofSockaddrAny {
panic("RawSockaddrAny too small")
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -143,11 +143,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go
index ba9df4a..77a634c 100644
--- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go
@@ -13,7 +13,6 @@
package unix
import (
- "strings"
"unsafe"
)
@@ -58,14 +57,21 @@ func nametomib(name string) (mib []_C_int, err error) {
return buf[0 : n/siz], nil
}
-//sysnb pipe() (r int, w int, err error)
-
func Pipe(p []int) (err error) {
+ return Pipe2(p, 0)
+}
+
+//sysnb pipe2(p *[2]_C_int, flags int) (err error)
+
+func Pipe2(p []int, flags int) error {
if len(p) != 2 {
return EINVAL
}
- p[0], p[1], err = pipe()
- return
+ var pp [2]_C_int
+ err := pipe2(&pp, flags)
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ return err
}
func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
@@ -89,7 +95,7 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
if len > SizeofSockaddrAny {
panic("RawSockaddrAny too small")
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -134,225 +140,6 @@ func setattrlistTimes(path string, times []Timespec, flags int) error {
return ENOSYS
}
-// Derive extattr namespace and attribute name
-
-func xattrnamespace(fullattr string) (ns int, attr string, err error) {
- s := strings.IndexByte(fullattr, '.')
- if s == -1 {
- return -1, "", ENOATTR
- }
-
- namespace := fullattr[0:s]
- attr = fullattr[s+1:]
-
- switch namespace {
- case "user":
- return EXTATTR_NAMESPACE_USER, attr, nil
- case "system":
- return EXTATTR_NAMESPACE_SYSTEM, attr, nil
- default:
- return -1, "", ENOATTR
- }
-}
-
-func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
- if len(dest) > idx {
- return unsafe.Pointer(&dest[idx])
- } else {
- return unsafe.Pointer(_zero)
- }
-}
-
-// FreeBSD implements its own syscalls to handle extended attributes
-
-func Getxattr(file string, attr string, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsize := len(dest)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return -1, err
- }
-
- return ExtattrGetFile(file, nsid, a, uintptr(d), destsize)
-}
-
-func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsize := len(dest)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return -1, err
- }
-
- return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)
-}
-
-func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsize := len(dest)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return -1, err
- }
-
- return ExtattrGetLink(link, nsid, a, uintptr(d), destsize)
-}
-
-// flags are unused on FreeBSD
-
-func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
- d := unsafe.Pointer(&data[0])
- datasiz := len(data)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)
- return
-}
-
-func Setxattr(file string, attr string, data []byte, flags int) (err error) {
- d := unsafe.Pointer(&data[0])
- datasiz := len(data)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)
- return
-}
-
-func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
- d := unsafe.Pointer(&data[0])
- datasiz := len(data)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)
- return
-}
-
-func Removexattr(file string, attr string) (err error) {
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- err = ExtattrDeleteFile(file, nsid, a)
- return
-}
-
-func Fremovexattr(fd int, attr string) (err error) {
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- err = ExtattrDeleteFd(fd, nsid, a)
- return
-}
-
-func Lremovexattr(link string, attr string) (err error) {
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- err = ExtattrDeleteLink(link, nsid, a)
- return
-}
-
-func Listxattr(file string, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsiz := len(dest)
-
- // FreeBSD won't allow you to list xattrs from multiple namespaces
- s := 0
- for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
- stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
-
- /* Errors accessing system attrs are ignored so that
- * we can implement the Linux-like behavior of omitting errors that
- * we don't have read permissions on
- *
- * Linux will still error if we ask for user attributes on a file that
- * we don't have read permissions on, so don't ignore those errors
- */
- if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
- continue
- } else if e != nil {
- return s, e
- }
-
- s += stmp
- destsiz -= s
- if destsiz < 0 {
- destsiz = 0
- }
- d = initxattrdest(dest, s)
- }
-
- return s, nil
-}
-
-func Flistxattr(fd int, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsiz := len(dest)
-
- s := 0
- for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
- stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
- if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
- continue
- } else if e != nil {
- return s, e
- }
-
- s += stmp
- destsiz -= s
- if destsiz < 0 {
- destsiz = 0
- }
- d = initxattrdest(dest, s)
- }
-
- return s, nil
-}
-
-func Llistxattr(link string, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsiz := len(dest)
-
- s := 0
- for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
- stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
- if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
- continue
- } else if e != nil {
- return s, e
- }
-
- s += stmp
- destsiz -= s
- if destsiz < 0 {
- destsiz = 0
- }
- d = initxattrdest(dest, s)
- }
-
- return s, nil
-}
-
//sys ioctl(fd int, req uint, arg uintptr) (err error)
// ioctl itself should not be exposed directly, but additional get/set
@@ -364,11 +151,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -602,14 +389,6 @@ func Uname(uname *Utsname) error {
// Watchevent
// Waitevent
// Modwatch
-// Getxattr
-// Fgetxattr
-// Setxattr
-// Fsetxattr
-// Removexattr
-// Fremovexattr
-// Listxattr
-// Flistxattr
// Fsctl
// Initgroups
// Posix_spawn
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go
index 9908030..eb63354 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go
@@ -61,11 +61,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -489,6 +489,47 @@ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil
}
+// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets
+// using the RFCOMM protocol.
+//
+// Server example:
+//
+// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
+// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{
+// Channel: 1,
+// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00
+// })
+// _ = Listen(fd, 1)
+// nfd, sa, _ := Accept(fd)
+// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd)
+// Read(nfd, buf)
+//
+// Client example:
+//
+// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
+// _ = Connect(fd, &SockaddrRFCOMM{
+// Channel: 1,
+// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11
+// })
+// Write(fd, []byte(`hello`))
+type SockaddrRFCOMM struct {
+ // Addr represents a bluetooth address, byte ordering is little-endian.
+ Addr [6]uint8
+
+ // Channel is a designated bluetooth channel, only 1-30 are available for use.
+ // Since Linux 2.6.7 and further zero value is the first available channel.
+ Channel uint8
+
+ raw RawSockaddrRFCOMM
+}
+
+func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) {
+ sa.raw.Family = AF_BLUETOOTH
+ sa.raw.Channel = sa.Channel
+ sa.raw.Bdaddr = sa.Addr
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil
+}
+
// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets.
// The RxID and TxID fields are used for transport protocol addressing in
// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with
@@ -651,7 +692,7 @@ func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
}
-func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_NETLINK:
pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))
@@ -728,6 +769,30 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
Port: pp.Port,
}
return sa, nil
+ case AF_BLUETOOTH:
+ proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)
+ if err != nil {
+ return nil, err
+ }
+ // only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections
+ switch proto {
+ case BTPROTO_L2CAP:
+ pp := (*RawSockaddrL2)(unsafe.Pointer(rsa))
+ sa := &SockaddrL2{
+ PSM: pp.Psm,
+ CID: pp.Cid,
+ Addr: pp.Bdaddr,
+ AddrType: pp.Bdaddr_type,
+ }
+ return sa, nil
+ case BTPROTO_RFCOMM:
+ pp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa))
+ sa := &SockaddrRFCOMM{
+ Channel: pp.Channel,
+ Addr: pp.Bdaddr,
+ }
+ return sa, nil
+ }
}
return nil, EAFNOSUPPORT
}
@@ -739,7 +804,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
if err != nil {
return
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -757,7 +822,7 @@ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
if len > SizeofSockaddrAny {
panic("RawSockaddrAny too small")
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -771,7 +836,7 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
if err = getsockname(fd, &rsa, &len); err != nil {
return
}
- return anyToSockaddr(&rsa)
+ return anyToSockaddr(fd, &rsa)
}
func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
@@ -960,7 +1025,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
recvflags = int(msg.Flags)
// source address is only specified if the socket is unconnected
if rsa.Addr.Family != AF_UNSPEC {
- from, err = anyToSockaddr(&rsa)
+ from, err = anyToSockaddr(fd, &rsa)
}
return
}
@@ -1223,7 +1288,11 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri
//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys fcntl(fd int, cmd int, arg int) (val int, err error)
//sys Fdatasync(fd int) (err error)
+//sys Fgetxattr(fd int, attr string, dest []byte) (sz int, err error)
+//sys Flistxattr(fd int, dest []byte) (sz int, err error)
//sys Flock(fd int, how int) (err error)
+//sys Fremovexattr(fd int, attr string) (err error)
+//sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error)
//sys Fsync(fd int) (err error)
//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64
//sysnb Getpgid(pid int) (pgid int, err error)
@@ -1262,6 +1331,7 @@ func Getpgrp() (pid int) {
//sys read(fd int, p []byte) (n int, err error)
//sys Removexattr(path string, attr string) (err error)
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
+//sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error)
//sys RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error)
//sys Setdomainname(p []byte) (err error)
//sys Sethostname(p []byte) (err error)
@@ -1350,10 +1420,70 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
if flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 {
return EINVAL
- } else if flags&(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 {
- return EOPNOTSUPP
}
- return faccessat(dirfd, path, mode)
+
+ // The Linux kernel faccessat system call does not take any flags.
+ // The glibc faccessat implements the flags itself; see
+ // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD
+ // Because people naturally expect syscall.Faccessat to act
+ // like C faccessat, we do the same.
+
+ if flags == 0 {
+ return faccessat(dirfd, path, mode)
+ }
+
+ var st Stat_t
+ if err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil {
+ return err
+ }
+
+ mode &= 7
+ if mode == 0 {
+ return nil
+ }
+
+ var uid int
+ if flags&AT_EACCESS != 0 {
+ uid = Geteuid()
+ } else {
+ uid = Getuid()
+ }
+
+ if uid == 0 {
+ if mode&1 == 0 {
+ // Root can read and write any file.
+ return nil
+ }
+ if st.Mode&0111 != 0 {
+ // Root can execute any file that anybody can execute.
+ return nil
+ }
+ return EACCES
+ }
+
+ var fmode uint32
+ if uint32(uid) == st.Uid {
+ fmode = (st.Mode >> 6) & 7
+ } else {
+ var gid int
+ if flags&AT_EACCESS != 0 {
+ gid = Getegid()
+ } else {
+ gid = Getgid()
+ }
+
+ if uint32(gid) == st.Gid {
+ fmode = (st.Mode >> 3) & 7
+ } else {
+ fmode = st.Mode & 7
+ }
+ }
+
+ if fmode&mode == mode {
+ return nil
+ }
+
+ return EACCES
}
/*
@@ -1375,11 +1505,7 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
// EpollPwait
// EpollWaitOld
// Execve
-// Fgetxattr
-// Flistxattr
// Fork
-// Fremovexattr
-// Fsetxattr
// Futex
// GetKernelSyms
// GetMempolicy
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
index 0e05924..99e0e99 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
@@ -124,14 +124,13 @@ func Pipe2(p []int, flags int) (err error) {
return
}
+//sysnb pipe() (p1 int, p2 int, err error)
+
func Pipe(p []int) (err error) {
if len(p) != 2 {
return EINVAL
}
- var pp [2]_C_int
- err = pipe2(&pp, 0)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
+ p[0], p[1], err = pipe()
return
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go
index 369a2be..6f8ebde 100644
--- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go
@@ -145,11 +145,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -233,6 +233,18 @@ func Uname(uname *Utsname) error {
//sys Dup(fd int) (nfd int, err error)
//sys Dup2(from int, to int) (err error)
//sys Exit(code int)
+//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)
+//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)
+//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)
+//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE
//sys Fchdir(fd int) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go
index 9fc9c06..07e6669 100644
--- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go
@@ -113,11 +113,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go
index 4d7efbc..53b8078 100644
--- a/vendor/golang.org/x/sys/unix/syscall_solaris.go
+++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go
@@ -112,7 +112,7 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
if err = getsockname(fd, &rsa, &len); err != nil {
return
}
- return anyToSockaddr(&rsa)
+ return anyToSockaddr(fd, &rsa)
}
// GetsockoptString returns the string value of the socket option opt for the
@@ -314,7 +314,11 @@ func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
- valptr, _, err := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)
+ valptr, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)
+ var err error
+ if errno != 0 {
+ err = errno
+ }
return int(valptr), err
}
@@ -356,7 +360,7 @@ func Futimes(fd int, tv []Timeval) error {
return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}
-func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_UNIX:
pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
@@ -407,7 +411,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
if nfd == -1 {
return
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -444,7 +448,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
oobn = int(msg.Accrightslen)
// source address is only specified if the socket is unconnected
if rsa.Addr.Family != AF_UNSPEC {
- from, err = anyToSockaddr(&rsa)
+ from, err = anyToSockaddr(fd, &rsa)
}
return
}
@@ -536,11 +540,11 @@ func IoctlSetInt(fd int, req uint, value int) (err error) {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) (err error) {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) (err error) {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) (err error) {
+func ioctlSetTermios(fd int, req uint, value *Termios) (err error) {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go
index b835bad..95b2180 100644
--- a/vendor/golang.org/x/sys/unix/syscall_unix.go
+++ b/vendor/golang.org/x/sys/unix/syscall_unix.go
@@ -219,7 +219,7 @@ func Getpeername(fd int) (sa Sockaddr, err error) {
if err = getpeername(fd, &rsa, &len); err != nil {
return
}
- return anyToSockaddr(&rsa)
+ return anyToSockaddr(fd, &rsa)
}
func GetsockoptByte(fd, level, opt int) (value byte, err error) {
@@ -291,7 +291,7 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
return
}
if rsa.Addr.Family != AF_UNSPEC {
- from, err = anyToSockaddr(&rsa)
+ from, err = anyToSockaddr(fd, &rsa)
}
return
}
diff --git a/vendor/golang.org/x/sys/unix/xattr_bsd.go b/vendor/golang.org/x/sys/unix/xattr_bsd.go
new file mode 100644
index 0000000..9304993
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/xattr_bsd.go
@@ -0,0 +1,231 @@
+// 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 file.
+
+// +build freebsd netbsd
+
+package unix
+
+import (
+ "strings"
+ "unsafe"
+)
+
+// Derive extattr namespace and attribute name
+
+func xattrnamespace(fullattr string) (ns int, attr string, err error) {
+ s := strings.IndexByte(fullattr, '.')
+ if s == -1 {
+ return -1, "", ENOATTR
+ }
+
+ namespace := fullattr[0:s]
+ attr = fullattr[s+1:]
+
+ switch namespace {
+ case "user":
+ return EXTATTR_NAMESPACE_USER, attr, nil
+ case "system":
+ return EXTATTR_NAMESPACE_SYSTEM, attr, nil
+ default:
+ return -1, "", ENOATTR
+ }
+}
+
+func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
+ if len(dest) > idx {
+ return unsafe.Pointer(&dest[idx])
+ } else {
+ return unsafe.Pointer(_zero)
+ }
+}
+
+// FreeBSD and NetBSD implement their own syscalls to handle extended attributes
+
+func Getxattr(file string, attr string, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsize := len(dest)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return -1, err
+ }
+
+ return ExtattrGetFile(file, nsid, a, uintptr(d), destsize)
+}
+
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsize := len(dest)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return -1, err
+ }
+
+ return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)
+}
+
+func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsize := len(dest)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return -1, err
+ }
+
+ return ExtattrGetLink(link, nsid, a, uintptr(d), destsize)
+}
+
+// flags are unused on FreeBSD
+
+func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
+ d := unsafe.Pointer(&data[0])
+ datasiz := len(data)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)
+ return
+}
+
+func Setxattr(file string, attr string, data []byte, flags int) (err error) {
+ d := unsafe.Pointer(&data[0])
+ datasiz := len(data)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)
+ return
+}
+
+func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
+ d := unsafe.Pointer(&data[0])
+ datasiz := len(data)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)
+ return
+}
+
+func Removexattr(file string, attr string) (err error) {
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ err = ExtattrDeleteFile(file, nsid, a)
+ return
+}
+
+func Fremovexattr(fd int, attr string) (err error) {
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ err = ExtattrDeleteFd(fd, nsid, a)
+ return
+}
+
+func Lremovexattr(link string, attr string) (err error) {
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ err = ExtattrDeleteLink(link, nsid, a)
+ return
+}
+
+func Listxattr(file string, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsiz := len(dest)
+
+ // FreeBSD won't allow you to list xattrs from multiple namespaces
+ s := 0
+ for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
+ stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
+
+ /* Errors accessing system attrs are ignored so that
+ * we can implement the Linux-like behavior of omitting errors that
+ * we don't have read permissions on
+ *
+ * Linux will still error if we ask for user attributes on a file that
+ * we don't have read permissions on, so don't ignore those errors
+ */
+ if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
+ continue
+ } else if e != nil {
+ return s, e
+ }
+
+ s += stmp
+ destsiz -= s
+ if destsiz < 0 {
+ destsiz = 0
+ }
+ d = initxattrdest(dest, s)
+ }
+
+ return s, nil
+}
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsiz := len(dest)
+
+ s := 0
+ for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
+ stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
+ if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
+ continue
+ } else if e != nil {
+ return s, e
+ }
+
+ s += stmp
+ destsiz -= s
+ if destsiz < 0 {
+ destsiz = 0
+ }
+ d = initxattrdest(dest, s)
+ }
+
+ return s, nil
+}
+
+func Llistxattr(link string, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsiz := len(dest)
+
+ s := 0
+ for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
+ stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
+ if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
+ continue
+ } else if e != nil {
+ return s, e
+ }
+
+ s += stmp
+ destsiz -= s
+ if destsiz < 0 {
+ destsiz = 0
+ }
+ d = initxattrdest(dest, s)
+ }
+
+ return s, nil
+}
diff --git a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
index 46a082b..1de6998 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
@@ -3,7 +3,7 @@
// +build amd64,dragonfly
-// Created by cgo -godefs - DO NOT EDIT
+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go
package unix
@@ -1168,6 +1168,36 @@ const (
SO_TIMESTAMP = 0x400
SO_TYPE = 0x1008
SO_USELOOPBACK = 0x40
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDB = 0x9000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TCIFLUSH = 0x1
TCIOFF = 0x3
TCIOFLUSH = 0x3
diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
index 2947dc0..d2bbaab 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
@@ -1345,6 +1345,35 @@ const (
SO_USELOOPBACK = 0x40
SO_USER_COOKIE = 0x1015
SO_VENDOR = 0x80000000
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TAB0 = 0x0
TAB3 = 0x4
TABDLY = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
index c600d01..4f8db78 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
@@ -1346,6 +1346,35 @@ const (
SO_USELOOPBACK = 0x40
SO_USER_COOKIE = 0x1015
SO_VENDOR = 0x80000000
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TAB0 = 0x0
TAB3 = 0x4
TABDLY = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
index e8240d2..53e5de6 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
@@ -1354,6 +1354,35 @@ const (
SO_USELOOPBACK = 0x40
SO_USER_COOKIE = 0x1015
SO_VENDOR = 0x80000000
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TAB0 = 0x0
TAB3 = 0x4
TABDLY = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
index 2f0091b..34c9590 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
@@ -499,6 +499,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
@@ -636,7 +638,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -763,6 +765,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -956,6 +959,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -966,7 +970,9 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
@@ -1076,6 +1082,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1427,6 +1435,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1469,7 +1480,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1605,17 +1616,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1938,6 +1954,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
index a80c7ae..22d9527 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
@@ -499,6 +499,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
@@ -636,7 +638,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -763,6 +765,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -956,6 +959,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -966,7 +970,9 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
@@ -1076,6 +1082,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1428,6 +1436,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1470,7 +1481,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1606,17 +1617,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1939,6 +1955,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
index 49a9b01..0deac0b 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
@@ -498,6 +498,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
@@ -635,7 +637,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +764,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -954,6 +957,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -964,7 +968,9 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
@@ -1074,6 +1080,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1434,6 +1442,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1476,7 +1487,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1612,17 +1623,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1945,6 +1961,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
index 8d70233..3c39176 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
@@ -501,6 +501,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
@@ -638,7 +640,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -765,6 +767,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -957,6 +960,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -967,7 +971,9 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
@@ -1077,6 +1083,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1418,6 +1426,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1460,7 +1471,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1596,17 +1607,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1930,6 +1946,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
index 410ab56..c17a0d0 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
@@ -498,6 +498,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +637,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +764,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -954,6 +957,7 @@ const (
MAP_EXECUTABLE = 0x4000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x1000
MAP_HUGETLB = 0x80000
MAP_HUGE_MASK = 0x3f
@@ -965,6 +969,7 @@ const (
MAP_PRIVATE = 0x2
MAP_RENAME = 0x800
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x40000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
@@ -1075,6 +1080,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1428,6 +1435,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x6
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1470,7 +1480,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1606,17 +1616,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1939,6 +1954,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
index dac4d90..7dd9c86 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
@@ -498,6 +498,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +637,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +764,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -954,6 +957,7 @@ const (
MAP_EXECUTABLE = 0x4000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x1000
MAP_HUGETLB = 0x80000
MAP_HUGE_MASK = 0x3f
@@ -965,6 +969,7 @@ const (
MAP_PRIVATE = 0x2
MAP_RENAME = 0x800
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x40000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
@@ -1075,6 +1080,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1428,6 +1435,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x6
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1470,7 +1480,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1606,17 +1616,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1939,6 +1954,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
index 1d2f0e6..1563da1 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
@@ -498,6 +498,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +637,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +764,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -954,6 +957,7 @@ const (
MAP_EXECUTABLE = 0x4000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x1000
MAP_HUGETLB = 0x80000
MAP_HUGE_MASK = 0x3f
@@ -965,6 +969,7 @@ const (
MAP_PRIVATE = 0x2
MAP_RENAME = 0x800
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x40000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
@@ -1075,6 +1080,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1428,6 +1435,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x6
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1470,7 +1480,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1606,17 +1616,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1939,6 +1954,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
index 33b9940..15ece79 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
@@ -498,6 +498,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +637,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +764,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -954,6 +957,7 @@ const (
MAP_EXECUTABLE = 0x4000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x1000
MAP_HUGETLB = 0x80000
MAP_HUGE_MASK = 0x3f
@@ -965,6 +969,7 @@ const (
MAP_PRIVATE = 0x2
MAP_RENAME = 0x800
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x40000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
@@ -1075,6 +1080,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1428,6 +1435,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x6
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1470,7 +1480,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1606,17 +1616,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1939,6 +1954,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
index c78d669..890ae83 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
@@ -498,6 +498,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +637,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +764,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -954,6 +957,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -964,6 +968,7 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
MAP_TYPE = 0xf
MCL_CURRENT = 0x2000
@@ -1074,6 +1079,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1484,6 +1491,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1526,7 +1536,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1662,17 +1672,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1993,6 +2008,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
index 6349375..d5b7535 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
@@ -498,6 +498,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +637,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +764,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -954,6 +957,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -964,6 +968,7 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
MAP_TYPE = 0xf
MCL_CURRENT = 0x2000
@@ -1074,6 +1079,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1484,6 +1491,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1526,7 +1536,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1662,17 +1672,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1993,6 +2008,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
index 3814df8..6054d05 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
@@ -498,6 +498,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
@@ -635,7 +637,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0x9
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +764,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -954,6 +957,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -964,7 +968,9 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
@@ -1074,6 +1080,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1488,6 +1496,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1530,7 +1541,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1666,17 +1677,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1999,6 +2015,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
index cd93ce0..19316b1 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
@@ -550,6 +550,10 @@ const (
EV_ONESHOT = 0x10
EV_SYSFLAGS = 0xf000
EXTA = 0x4b00
+ EXTATTR_CMD_START = 0x1
+ EXTATTR_CMD_STOP = 0x2
+ EXTATTR_NAMESPACE_SYSTEM = 0x2
+ EXTATTR_NAMESPACE_USER = 0x1
EXTB = 0x9600
EXTPROC = 0x800
FD_CLOEXEC = 0x1
diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
index 071701c..f2cf500 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
@@ -540,6 +540,10 @@ const (
EV_ONESHOT = 0x10
EV_SYSFLAGS = 0xf000
EXTA = 0x4b00
+ EXTATTR_CMD_START = 0x1
+ EXTATTR_CMD_STOP = 0x2
+ EXTATTR_NAMESPACE_SYSTEM = 0x2
+ EXTATTR_NAMESPACE_USER = 0x1
EXTB = 0x9600
EXTPROC = 0x800
FD_CLOEXEC = 0x1
diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
index 5fe56ae..858e299 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
@@ -532,6 +532,10 @@ const (
EV_ONESHOT = 0x10
EV_SYSFLAGS = 0xf000
EXTA = 0x4b00
+ EXTATTR_CMD_START = 0x1
+ EXTATTR_CMD_STOP = 0x2
+ EXTATTR_NAMESPACE_SYSTEM = 0x2
+ EXTATTR_NAMESPACE_USER = 0x1
EXTB = 0x9600
EXTPROC = 0x800
FD_CLOEXEC = 0x1
diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
index 0a1c3e7..7d92f2c 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
@@ -1218,6 +1218,34 @@ const (
SO_TIMESTAMP = 0x800
SO_TYPE = 0x1008
SO_USELOOPBACK = 0x40
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TCIFLUSH = 0x1
TCIOFLUSH = 0x3
TCOFLUSH = 0x2
diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
index acfc664..b0a7eba 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
@@ -472,6 +472,7 @@ const (
F_GETLK = 0x7
F_GETOWN = 0x5
F_ISATTY = 0xb
+ F_OK = 0x0
F_RDLCK = 0x1
F_SETFD = 0x2
F_SETFL = 0x4
@@ -1296,6 +1297,34 @@ const (
SO_TYPE = 0x1008
SO_USELOOPBACK = 0x40
SO_ZEROIZE = 0x2000
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TCIFLUSH = 0x1
TCIOFF = 0x3
TCIOFLUSH = 0x3
diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
index 93e37c4..50c1d9f 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
@@ -1221,6 +1221,34 @@ const (
SO_TIMESTAMP = 0x800
SO_TYPE = 0x1008
SO_USELOOPBACK = 0x40
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TCIFLUSH = 0x1
TCIOFLUSH = 0x3
TCOFLUSH = 0x2
diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
index be42830..22569db 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
@@ -996,6 +996,39 @@ const (
SO_USELOOPBACK = 0x40
SO_VRRP = 0x1017
SO_WROFF = 0x2
+ S_ENFMT = 0x400
+ S_IAMB = 0x1ff
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFDOOR = 0xd000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFNAM = 0x5000
+ S_IFPORT = 0xe000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_INSEM = 0x1
+ S_INSHD = 0x2
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TAB0 = 0x0
TAB1 = 0x800
TAB2 = 0x1000
@@ -1102,6 +1135,8 @@ const (
TIOCSTOP = 0x746f
TIOCSWINSZ = 0x5467
TOSTOP = 0x100
+ UTIME_NOW = -0x1
+ UTIME_OMIT = -0x2
VCEOF = 0x8
VCEOL = 0x9
VDISCARD = 0xd
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
index ac02d4d..9ce06df 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
@@ -420,6 +420,22 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -440,6 +456,21 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func removexattr(path string, attr string, options int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -460,6 +491,21 @@ func removexattr(path string, attr string, options int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -476,6 +522,17 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func kill(pid int, signum int, posix int) (err error) {
_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
index 1dd3cfa..de99270 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
@@ -420,6 +420,22 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -440,6 +456,21 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func removexattr(path string, attr string, options int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -460,6 +491,21 @@ func removexattr(path string, attr string, options int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -476,6 +522,17 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func kill(pid int, signum int, posix int) (err error) {
_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
index cab46e7..81c4f09 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
@@ -420,6 +420,22 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -440,6 +456,21 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func removexattr(path string, attr string, options int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -460,6 +491,21 @@ func removexattr(path string, attr string, options int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -476,6 +522,17 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func kill(pid int, signum int, posix int) (err error) {
_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
index 13478dd..338c32d 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
@@ -420,6 +420,22 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -440,6 +456,21 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func removexattr(path string, attr string, options int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -460,6 +491,21 @@ func removexattr(path string, attr string, options int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -476,6 +522,17 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func kill(pid int, signum int, posix int) (err error) {
_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
index a86434a..ad77882 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
@@ -377,10 +377,8 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (r int, w int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- r = int(r0)
- w = int(r1)
+func pipe2(p *[2]_C_int, flags int) (err error) {
+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
index 040e2f7..d3ba6c4 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
@@ -377,10 +377,8 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (r int, w int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- r = int(r0)
- w = int(r1)
+func pipe2(p *[2]_C_int, flags int) (err error) {
+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
index cddc5e8..9dfd77b 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
@@ -377,10 +377,8 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (r int, w int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- r = int(r0)
- w = int(r1)
+func pipe2(p *[2]_C_int, flags int) (err error) {
+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
index 237e960..8e8d427 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
index 9b40f58..2f60780 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
index d93cc2f..d29a11c 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
index 5f7d021..d03eb29 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
index e761705..dea0932 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -2137,6 +2232,18 @@ func pipe2(p *[2]_C_int, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func pipe() (p1 int, p2 int, err error) {
+ r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ p1 = int(r0)
+ p2 = int(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
xaddr = uintptr(r0)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
index 382e072..31bbcff 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
index da33eb1..e025a33 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
index f6e4518..57d7d93 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -2137,6 +2232,18 @@ func pipe2(p *[2]_C_int, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func pipe() (p1 int, p2 int, err error) {
+ r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ p1 = int(r0)
+ p2 = int(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
xaddr = uintptr(r0)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
index 0ae2aa8..2f7110d 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -1474,8 +1569,13 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
+func faccessat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1484,9 +1584,8 @@ func Dup2(oldfd int, newfd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
+func Dup2(oldfd int, newfd int) (err error) {
+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1495,13 +1594,9 @@ func EpollCreate(size int) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func faccessat(dirfd int, path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+func EpollCreate(size int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
+ fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
index fa16c16..bb3bd59 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -1474,8 +1569,13 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
+func faccessat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1484,9 +1584,8 @@ func Dup2(oldfd int, newfd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
+func Dup2(oldfd int, newfd int) (err error) {
+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1495,13 +1594,9 @@ func EpollCreate(size int) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func faccessat(dirfd int, path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+func EpollCreate(size int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
+ fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
index 38f903c..c637da9 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
@@ -574,6 +574,45 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +623,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -1063,6 +1138,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
index b329893..f1874d5 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
@@ -571,6 +571,220 @@ func Exit(code int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
index 5096ef0..eb80283 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
@@ -571,6 +571,220 @@ func Exit(code int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
index b7141c6..7b36499 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
@@ -571,6 +571,220 @@ func Exit(code int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go
index b64a812..1ab8780 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go
@@ -7,347 +7,397 @@ package unix
const (
// SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
- SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
- SYS_FORK = 2 // { int fork(void); }
- SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
- SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
- SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
- SYS_CLOSE = 6 // { int close(int fd); }
- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
- SYS_LINK = 9 // { int link(char *path, char *link); }
- SYS_UNLINK = 10 // { int unlink(char *path); }
- SYS_CHDIR = 12 // { int chdir(char *path); }
- SYS_FCHDIR = 13 // { int fchdir(int fd); }
- SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
- SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
- SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
- SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
- SYS_GETPID = 20 // { pid_t getpid(void); }
- SYS_MOUNT = 21 // { int mount(char *type, char *path, \
- SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
- SYS_SETUID = 23 // { int setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t getuid(void); }
- SYS_GETEUID = 25 // { uid_t geteuid(void); }
- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
- SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
- SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
- SYS_ACCEPT = 30 // { int accept(int s, \
- SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
- SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
- SYS_ACCESS = 33 // { int access(char *path, int amode); }
- SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
- SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
- SYS_SYNC = 36 // { int sync(void); }
- SYS_KILL = 37 // { int kill(int pid, int signum); }
- SYS_GETPPID = 39 // { pid_t getppid(void); }
- SYS_DUP = 41 // { int dup(u_int fd); }
- SYS_PIPE = 42 // { int pipe(void); }
- SYS_GETEGID = 43 // { gid_t getegid(void); }
- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
- SYS_GETGID = 47 // { gid_t getgid(void); }
- SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
- SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
- SYS_ACCT = 51 // { int acct(char *path); }
- SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
- SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
- SYS_REBOOT = 55 // { int reboot(int opt); }
- SYS_REVOKE = 56 // { int revoke(char *path); }
- SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
- SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
- SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
- SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
- SYS_CHROOT = 61 // { int chroot(char *path); }
- SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
- SYS_VFORK = 66 // { int vfork(void); }
- SYS_SBRK = 69 // { int sbrk(int incr); }
- SYS_SSTK = 70 // { int sstk(int incr); }
- SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
- SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
- SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
- SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
- SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
- SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
- SYS_GETPGRP = 81 // { int getpgrp(void); }
- SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
- SYS_SWAPON = 85 // { int swapon(char *name); }
- SYS_GETITIMER = 86 // { int getitimer(u_int which, \
- SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
- SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
- SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
- SYS_FSYNC = 95 // { int fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
- SYS_SOCKET = 97 // { int socket(int domain, int type, \
- SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
- SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
- SYS_BIND = 104 // { int bind(int s, caddr_t name, \
- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
- SYS_LISTEN = 106 // { int listen(int s, int backlog); }
- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
- SYS_GETRUSAGE = 117 // { int getrusage(int who, \
- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
- SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
- SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
- SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
- SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
- SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
- SYS_RENAME = 128 // { int rename(char *from, char *to); }
- SYS_FLOCK = 131 // { int flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
- SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
- SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
- SYS_RMDIR = 137 // { int rmdir(char *path); }
- SYS_UTIMES = 138 // { int utimes(char *path, \
- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
- SYS_SETSID = 147 // { int setsid(void); }
- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
- SYS_LGETFH = 160 // { int lgetfh(char *fname, \
- SYS_GETFH = 161 // { int getfh(char *fname, \
- SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
- SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
- SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
- SYS_SETFIB = 175 // { int setfib(int fibnum); }
- SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
- SYS_SETGID = 181 // { int setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
- SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
- SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
- SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
- SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
- SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
- SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
- SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
- SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
- SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
- SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
- SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
- SYS_UNDELETE = 205 // { int undelete(char *path); }
- SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
- SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
- SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
- SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
- SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
- SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
- SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
- SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
- SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
- SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
- SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
- SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
- SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
- SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
- SYS_RFORK = 251 // { int rfork(int flags); }
- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
- SYS_ISSETUGID = 253 // { int issetugid(void); }
- SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
- SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
- SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
- SYS_LUTIMES = 276 // { int lutimes(char *path, \
- SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
- SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
- SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
- SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
- SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
- SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
- SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
- SYS_MODNEXT = 300 // { int modnext(int modid); }
- SYS_MODSTAT = 301 // { int modstat(int modid, \
- SYS_MODFNEXT = 302 // { int modfnext(int modid); }
- SYS_MODFIND = 303 // { int modfind(const char *name); }
- SYS_KLDLOAD = 304 // { int kldload(const char *file); }
- SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
- SYS_KLDFIND = 306 // { int kldfind(const char *file); }
- SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
- SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
- SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
- SYS_GETSID = 310 // { int getsid(pid_t pid); }
- SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
- SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
- SYS_YIELD = 321 // { int yield(void); }
- SYS_MLOCKALL = 324 // { int mlockall(int how); }
- SYS_MUNLOCKALL = 325 // { int munlockall(void); }
- SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
- SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
- SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
- SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
- SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
- SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
- SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
- SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
- SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
- SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
- SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
- SYS_JAIL = 338 // { int jail(struct jail *jail); }
- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
- SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
- SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
- SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
- SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
- SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
- SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
- SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
- SYS_KQUEUE = 362 // { int kqueue(void); }
- SYS_KEVENT = 363 // { int kevent(int fd, \
- SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
- SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
- SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
- SYS___SETUGID = 374 // { int __setugid(int flag); }
- SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
- SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
- SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
- SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
- SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
- SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
- SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
- SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
- SYS_KENV = 390 // { int kenv(int what, const char *name, \
- SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
- SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
- SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
- SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
- SYS_STATFS = 396 // { int statfs(char *path, \
- SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
- SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
- SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
- SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
- SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
- SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
- SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
- SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
- SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
- SYS_SIGACTION = 416 // { int sigaction(int sig, \
- SYS_SIGRETURN = 417 // { int sigreturn( \
- SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
- SYS_SETCONTEXT = 422 // { int setcontext( \
- SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
- SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
- SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
- SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
- SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
- SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
- SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
- SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
- SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
- SYS_THR_SELF = 432 // { int thr_self(long *id); }
- SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
- SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
- SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
- SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
- SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
- SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
- SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
- SYS_THR_SUSPEND = 442 // { int thr_suspend( \
- SYS_THR_WAKE = 443 // { int thr_wake(long id); }
- SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
- SYS_AUDIT = 445 // { int audit(const void *record, \
- SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
- SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
- SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
- SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
- SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
- SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
- SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
- SYS_AUDITCTL = 453 // { int auditctl(char *path); }
- SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
- SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
- SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
- SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
- SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
- SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
- SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
- SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
- SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
- SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
- SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
- SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
- SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
- SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
- SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
- SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
- SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
- SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
- SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
- SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
- SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
- SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
- SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
- SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
- SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
- SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
- SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
- SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
- SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
- SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
- SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
- SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
- SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
- SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
- SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
- SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
- SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
- SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
- SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
- SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
- SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
- SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
- SYS_CAP_ENTER = 516 // { int cap_enter(void); }
- SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
- SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
- SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
- SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
- SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
- SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
- SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
- SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
- SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
- SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
- SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
- SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
- SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
- SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
- SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
- SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
- SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
- SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
- SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
- SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
- SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
- SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
- SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
- SYS_ACCEPT4 = 541 // { int accept4(int s, \
- SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
- SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
- SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
- SYS_FUTIMENS = 546 // { int futimens(int fd, \
- SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
+ SYS_FORK = 2 // { int fork(void); }
+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
+ SYS_CLOSE = 6 // { int close(int fd); }
+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
+ SYS_LINK = 9 // { int link(char *path, char *link); }
+ SYS_UNLINK = 10 // { int unlink(char *path); }
+ SYS_CHDIR = 12 // { int chdir(char *path); }
+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
+ SYS_GETPID = 20 // { pid_t getpid(void); }
+ SYS_MOUNT = 21 // { int mount(char *type, char *path, \
+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
+ SYS_GETUID = 24 // { uid_t getuid(void); }
+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
+ SYS_ACCEPT = 30 // { int accept(int s, \
+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
+ SYS_SYNC = 36 // { int sync(void); }
+ SYS_KILL = 37 // { int kill(int pid, int signum); }
+ SYS_GETPPID = 39 // { pid_t getppid(void); }
+ SYS_DUP = 41 // { int dup(u_int fd); }
+ SYS_PIPE = 42 // { int pipe(void); }
+ SYS_GETEGID = 43 // { gid_t getegid(void); }
+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
+ SYS_GETGID = 47 // { gid_t getgid(void); }
+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
+ SYS_ACCT = 51 // { int acct(char *path); }
+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
+ SYS_REBOOT = 55 // { int reboot(int opt); }
+ SYS_REVOKE = 56 // { int revoke(char *path); }
+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
+ SYS_CHROOT = 61 // { int chroot(char *path); }
+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
+ SYS_VFORK = 66 // { int vfork(void); }
+ SYS_SBRK = 69 // { int sbrk(int incr); }
+ SYS_SSTK = 70 // { int sstk(int incr); }
+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
+ SYS_GETPGRP = 81 // { int getpgrp(void); }
+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
+ SYS_SWAPON = 85 // { int swapon(char *name); }
+ SYS_GETITIMER = 86 // { int getitimer(u_int which, \
+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
+ SYS_FSYNC = 95 // { int fsync(int fd); }
+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
+ SYS_SOCKET = 97 // { int socket(int domain, int type, \
+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
+ SYS_BIND = 104 // { int bind(int s, caddr_t name, \
+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
+ SYS_GETRUSAGE = 117 // { int getrusage(int who, \
+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
+ SYS_RMDIR = 137 // { int rmdir(char *path); }
+ SYS_UTIMES = 138 // { int utimes(char *path, \
+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
+ SYS_SETSID = 147 // { int setsid(void); }
+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
+ SYS_LGETFH = 160 // { int lgetfh(char *fname, \
+ SYS_GETFH = 161 // { int getfh(char *fname, \
+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, \
+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, \
+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, \
+ SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
+ SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
+ SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
+ SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
+ SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
+ SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
+ SYS_UNDELETE = 205 // { int undelete(char *path); }
+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, \
+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \
+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, \
+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, \
+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, \
+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, \
+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
+ SYS_RFORK = 251 // { int rfork(int flags); }
+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
+ SYS_ISSETUGID = 253 // { int issetugid(void); }
+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, \
+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
+ SYS_LUTIMES = 276 // { int lutimes(char *path, \
+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
+ SYS_MODNEXT = 300 // { int modnext(int modid); }
+ SYS_MODSTAT = 301 // { int modstat(int modid, \
+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
+ SYS_MODFIND = 303 // { int modfind(const char *name); }
+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
+ SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); }
+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( \
+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, \
+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
+ SYS_OAIO_READ = 318 // { int oaio_read(struct oaiocb *aiocbp); }
+ SYS_OAIO_WRITE = 319 // { int oaio_write(struct oaiocb *aiocbp); }
+ SYS_OLIO_LISTIO = 320 // { int olio_listio(int mode, \
+ SYS_YIELD = 321 // { int yield(void); }
+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
+ SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete( \
+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
+ SYS_KQUEUE = 362 // { int kqueue(void); }
+ SYS_KEVENT = 363 // { int kevent(int fd, \
+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
+ SYS___SETUGID = 374 // { int __setugid(int flag); }
+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
+ SYS_KENV = 390 // { int kenv(int what, const char *name, \
+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
+ SYS_STATFS = 396 // { int statfs(char *path, \
+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, \
+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, \
+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
+ SYS_SIGACTION = 416 // { int sigaction(int sig, \
+ SYS_SIGRETURN = 417 // { int sigreturn( \
+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
+ SYS_SETCONTEXT = 422 // { int setcontext( \
+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
+ SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
+ SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, \
+ SYS_THR_SUSPEND = 442 // { int thr_suspend( \
+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
+ SYS_AUDIT = 445 // { int audit(const void *record, \
+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, \
+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, \
+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, \
+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, \
+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, \
+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \
+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \
+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \
+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, \
+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, \
+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, \
+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
+ SYS_ACCEPT4 = 541 // { int accept4(int s, \
+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
+ SYS_FUTIMENS = 546 // { int futimens(int fd, \
+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go
index 81722ac..b66f900 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go
@@ -7,347 +7,397 @@ package unix
const (
// SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
- SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
- SYS_FORK = 2 // { int fork(void); }
- SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
- SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
- SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
- SYS_CLOSE = 6 // { int close(int fd); }
- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
- SYS_LINK = 9 // { int link(char *path, char *link); }
- SYS_UNLINK = 10 // { int unlink(char *path); }
- SYS_CHDIR = 12 // { int chdir(char *path); }
- SYS_FCHDIR = 13 // { int fchdir(int fd); }
- SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
- SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
- SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
- SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
- SYS_GETPID = 20 // { pid_t getpid(void); }
- SYS_MOUNT = 21 // { int mount(char *type, char *path, \
- SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
- SYS_SETUID = 23 // { int setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t getuid(void); }
- SYS_GETEUID = 25 // { uid_t geteuid(void); }
- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
- SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
- SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
- SYS_ACCEPT = 30 // { int accept(int s, \
- SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
- SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
- SYS_ACCESS = 33 // { int access(char *path, int amode); }
- SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
- SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
- SYS_SYNC = 36 // { int sync(void); }
- SYS_KILL = 37 // { int kill(int pid, int signum); }
- SYS_GETPPID = 39 // { pid_t getppid(void); }
- SYS_DUP = 41 // { int dup(u_int fd); }
- SYS_PIPE = 42 // { int pipe(void); }
- SYS_GETEGID = 43 // { gid_t getegid(void); }
- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
- SYS_GETGID = 47 // { gid_t getgid(void); }
- SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
- SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
- SYS_ACCT = 51 // { int acct(char *path); }
- SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
- SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
- SYS_REBOOT = 55 // { int reboot(int opt); }
- SYS_REVOKE = 56 // { int revoke(char *path); }
- SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
- SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
- SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
- SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
- SYS_CHROOT = 61 // { int chroot(char *path); }
- SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
- SYS_VFORK = 66 // { int vfork(void); }
- SYS_SBRK = 69 // { int sbrk(int incr); }
- SYS_SSTK = 70 // { int sstk(int incr); }
- SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
- SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
- SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
- SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
- SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
- SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
- SYS_GETPGRP = 81 // { int getpgrp(void); }
- SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
- SYS_SWAPON = 85 // { int swapon(char *name); }
- SYS_GETITIMER = 86 // { int getitimer(u_int which, \
- SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
- SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
- SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
- SYS_FSYNC = 95 // { int fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
- SYS_SOCKET = 97 // { int socket(int domain, int type, \
- SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
- SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
- SYS_BIND = 104 // { int bind(int s, caddr_t name, \
- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
- SYS_LISTEN = 106 // { int listen(int s, int backlog); }
- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
- SYS_GETRUSAGE = 117 // { int getrusage(int who, \
- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
- SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
- SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
- SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
- SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
- SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
- SYS_RENAME = 128 // { int rename(char *from, char *to); }
- SYS_FLOCK = 131 // { int flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
- SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
- SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
- SYS_RMDIR = 137 // { int rmdir(char *path); }
- SYS_UTIMES = 138 // { int utimes(char *path, \
- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
- SYS_SETSID = 147 // { int setsid(void); }
- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
- SYS_LGETFH = 160 // { int lgetfh(char *fname, \
- SYS_GETFH = 161 // { int getfh(char *fname, \
- SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
- SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
- SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
- SYS_SETFIB = 175 // { int setfib(int fibnum); }
- SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
- SYS_SETGID = 181 // { int setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
- SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
- SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
- SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
- SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
- SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
- SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
- SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
- SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
- SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
- SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
- SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
- SYS_UNDELETE = 205 // { int undelete(char *path); }
- SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
- SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
- SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
- SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
- SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
- SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
- SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
- SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
- SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
- SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
- SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
- SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
- SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
- SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
- SYS_RFORK = 251 // { int rfork(int flags); }
- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
- SYS_ISSETUGID = 253 // { int issetugid(void); }
- SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
- SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
- SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
- SYS_LUTIMES = 276 // { int lutimes(char *path, \
- SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
- SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
- SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
- SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
- SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
- SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
- SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
- SYS_MODNEXT = 300 // { int modnext(int modid); }
- SYS_MODSTAT = 301 // { int modstat(int modid, \
- SYS_MODFNEXT = 302 // { int modfnext(int modid); }
- SYS_MODFIND = 303 // { int modfind(const char *name); }
- SYS_KLDLOAD = 304 // { int kldload(const char *file); }
- SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
- SYS_KLDFIND = 306 // { int kldfind(const char *file); }
- SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
- SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
- SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
- SYS_GETSID = 310 // { int getsid(pid_t pid); }
- SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
- SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
- SYS_YIELD = 321 // { int yield(void); }
- SYS_MLOCKALL = 324 // { int mlockall(int how); }
- SYS_MUNLOCKALL = 325 // { int munlockall(void); }
- SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
- SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
- SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
- SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
- SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
- SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
- SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
- SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
- SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
- SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
- SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
- SYS_JAIL = 338 // { int jail(struct jail *jail); }
- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
- SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
- SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
- SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
- SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
- SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
- SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
- SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
- SYS_KQUEUE = 362 // { int kqueue(void); }
- SYS_KEVENT = 363 // { int kevent(int fd, \
- SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
- SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
- SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
- SYS___SETUGID = 374 // { int __setugid(int flag); }
- SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
- SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
- SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
- SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
- SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
- SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
- SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
- SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
- SYS_KENV = 390 // { int kenv(int what, const char *name, \
- SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
- SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
- SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
- SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
- SYS_STATFS = 396 // { int statfs(char *path, \
- SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
- SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
- SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
- SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
- SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
- SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
- SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
- SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
- SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
- SYS_SIGACTION = 416 // { int sigaction(int sig, \
- SYS_SIGRETURN = 417 // { int sigreturn( \
- SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
- SYS_SETCONTEXT = 422 // { int setcontext( \
- SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
- SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
- SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
- SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
- SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
- SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
- SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
- SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
- SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
- SYS_THR_SELF = 432 // { int thr_self(long *id); }
- SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
- SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
- SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
- SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
- SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
- SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
- SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
- SYS_THR_SUSPEND = 442 // { int thr_suspend( \
- SYS_THR_WAKE = 443 // { int thr_wake(long id); }
- SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
- SYS_AUDIT = 445 // { int audit(const void *record, \
- SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
- SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
- SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
- SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
- SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
- SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
- SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
- SYS_AUDITCTL = 453 // { int auditctl(char *path); }
- SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
- SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
- SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
- SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
- SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
- SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
- SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
- SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
- SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
- SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
- SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
- SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
- SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
- SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
- SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
- SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
- SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
- SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
- SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
- SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
- SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
- SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
- SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
- SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
- SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
- SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
- SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
- SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
- SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
- SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
- SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
- SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
- SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
- SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
- SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
- SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
- SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
- SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
- SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
- SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
- SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
- SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
- SYS_CAP_ENTER = 516 // { int cap_enter(void); }
- SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
- SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
- SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
- SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
- SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
- SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
- SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
- SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
- SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
- SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
- SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
- SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
- SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
- SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
- SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
- SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
- SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
- SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
- SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
- SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
- SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
- SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
- SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
- SYS_ACCEPT4 = 541 // { int accept4(int s, \
- SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
- SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
- SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
- SYS_FUTIMENS = 546 // { int futimens(int fd, \
- SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
+ SYS_FORK = 2 // { int fork(void); }
+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
+ SYS_CLOSE = 6 // { int close(int fd); }
+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
+ SYS_LINK = 9 // { int link(char *path, char *link); }
+ SYS_UNLINK = 10 // { int unlink(char *path); }
+ SYS_CHDIR = 12 // { int chdir(char *path); }
+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
+ SYS_GETPID = 20 // { pid_t getpid(void); }
+ SYS_MOUNT = 21 // { int mount(char *type, char *path, \
+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
+ SYS_GETUID = 24 // { uid_t getuid(void); }
+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
+ SYS_ACCEPT = 30 // { int accept(int s, \
+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
+ SYS_SYNC = 36 // { int sync(void); }
+ SYS_KILL = 37 // { int kill(int pid, int signum); }
+ SYS_GETPPID = 39 // { pid_t getppid(void); }
+ SYS_DUP = 41 // { int dup(u_int fd); }
+ SYS_PIPE = 42 // { int pipe(void); }
+ SYS_GETEGID = 43 // { gid_t getegid(void); }
+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
+ SYS_GETGID = 47 // { gid_t getgid(void); }
+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
+ SYS_ACCT = 51 // { int acct(char *path); }
+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
+ SYS_REBOOT = 55 // { int reboot(int opt); }
+ SYS_REVOKE = 56 // { int revoke(char *path); }
+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
+ SYS_CHROOT = 61 // { int chroot(char *path); }
+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
+ SYS_VFORK = 66 // { int vfork(void); }
+ SYS_SBRK = 69 // { int sbrk(int incr); }
+ SYS_SSTK = 70 // { int sstk(int incr); }
+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
+ SYS_GETPGRP = 81 // { int getpgrp(void); }
+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
+ SYS_SWAPON = 85 // { int swapon(char *name); }
+ SYS_GETITIMER = 86 // { int getitimer(u_int which, \
+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
+ SYS_FSYNC = 95 // { int fsync(int fd); }
+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
+ SYS_SOCKET = 97 // { int socket(int domain, int type, \
+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
+ SYS_BIND = 104 // { int bind(int s, caddr_t name, \
+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
+ SYS_GETRUSAGE = 117 // { int getrusage(int who, \
+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
+ SYS_RMDIR = 137 // { int rmdir(char *path); }
+ SYS_UTIMES = 138 // { int utimes(char *path, \
+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
+ SYS_SETSID = 147 // { int setsid(void); }
+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
+ SYS_LGETFH = 160 // { int lgetfh(char *fname, \
+ SYS_GETFH = 161 // { int getfh(char *fname, \
+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, \
+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, \
+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, \
+ SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
+ SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
+ SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
+ SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
+ SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
+ SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
+ SYS_UNDELETE = 205 // { int undelete(char *path); }
+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, \
+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \
+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, \
+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, \
+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, \
+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, \
+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
+ SYS_RFORK = 251 // { int rfork(int flags); }
+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
+ SYS_ISSETUGID = 253 // { int issetugid(void); }
+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, \
+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
+ SYS_LUTIMES = 276 // { int lutimes(char *path, \
+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
+ SYS_MODNEXT = 300 // { int modnext(int modid); }
+ SYS_MODSTAT = 301 // { int modstat(int modid, \
+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
+ SYS_MODFIND = 303 // { int modfind(const char *name); }
+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
+ SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); }
+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( \
+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, \
+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
+ SYS_OAIO_READ = 318 // { int oaio_read(struct oaiocb *aiocbp); }
+ SYS_OAIO_WRITE = 319 // { int oaio_write(struct oaiocb *aiocbp); }
+ SYS_OLIO_LISTIO = 320 // { int olio_listio(int mode, \
+ SYS_YIELD = 321 // { int yield(void); }
+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
+ SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete( \
+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
+ SYS_KQUEUE = 362 // { int kqueue(void); }
+ SYS_KEVENT = 363 // { int kevent(int fd, \
+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
+ SYS___SETUGID = 374 // { int __setugid(int flag); }
+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
+ SYS_KENV = 390 // { int kenv(int what, const char *name, \
+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
+ SYS_STATFS = 396 // { int statfs(char *path, \
+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, \
+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, \
+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
+ SYS_SIGACTION = 416 // { int sigaction(int sig, \
+ SYS_SIGRETURN = 417 // { int sigreturn( \
+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
+ SYS_SETCONTEXT = 422 // { int setcontext( \
+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
+ SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
+ SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, \
+ SYS_THR_SUSPEND = 442 // { int thr_suspend( \
+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
+ SYS_AUDIT = 445 // { int audit(const void *record, \
+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, \
+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, \
+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, \
+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, \
+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, \
+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \
+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \
+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \
+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, \
+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, \
+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, \
+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
+ SYS_ACCEPT4 = 541 // { int accept4(int s, \
+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
+ SYS_FUTIMENS = 546 // { int futimens(int fd, \
+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go
index 4488314..d61941b 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go
@@ -7,347 +7,397 @@ package unix
const (
// SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
- SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
- SYS_FORK = 2 // { int fork(void); }
- SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
- SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
- SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
- SYS_CLOSE = 6 // { int close(int fd); }
- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
- SYS_LINK = 9 // { int link(char *path, char *link); }
- SYS_UNLINK = 10 // { int unlink(char *path); }
- SYS_CHDIR = 12 // { int chdir(char *path); }
- SYS_FCHDIR = 13 // { int fchdir(int fd); }
- SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
- SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
- SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
- SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
- SYS_GETPID = 20 // { pid_t getpid(void); }
- SYS_MOUNT = 21 // { int mount(char *type, char *path, \
- SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
- SYS_SETUID = 23 // { int setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t getuid(void); }
- SYS_GETEUID = 25 // { uid_t geteuid(void); }
- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
- SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
- SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
- SYS_ACCEPT = 30 // { int accept(int s, \
- SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
- SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
- SYS_ACCESS = 33 // { int access(char *path, int amode); }
- SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
- SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
- SYS_SYNC = 36 // { int sync(void); }
- SYS_KILL = 37 // { int kill(int pid, int signum); }
- SYS_GETPPID = 39 // { pid_t getppid(void); }
- SYS_DUP = 41 // { int dup(u_int fd); }
- SYS_PIPE = 42 // { int pipe(void); }
- SYS_GETEGID = 43 // { gid_t getegid(void); }
- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
- SYS_GETGID = 47 // { gid_t getgid(void); }
- SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
- SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
- SYS_ACCT = 51 // { int acct(char *path); }
- SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
- SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
- SYS_REBOOT = 55 // { int reboot(int opt); }
- SYS_REVOKE = 56 // { int revoke(char *path); }
- SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
- SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
- SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
- SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
- SYS_CHROOT = 61 // { int chroot(char *path); }
- SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
- SYS_VFORK = 66 // { int vfork(void); }
- SYS_SBRK = 69 // { int sbrk(int incr); }
- SYS_SSTK = 70 // { int sstk(int incr); }
- SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
- SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
- SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
- SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
- SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
- SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
- SYS_GETPGRP = 81 // { int getpgrp(void); }
- SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
- SYS_SWAPON = 85 // { int swapon(char *name); }
- SYS_GETITIMER = 86 // { int getitimer(u_int which, \
- SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
- SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
- SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
- SYS_FSYNC = 95 // { int fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
- SYS_SOCKET = 97 // { int socket(int domain, int type, \
- SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
- SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
- SYS_BIND = 104 // { int bind(int s, caddr_t name, \
- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
- SYS_LISTEN = 106 // { int listen(int s, int backlog); }
- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
- SYS_GETRUSAGE = 117 // { int getrusage(int who, \
- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
- SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
- SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
- SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
- SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
- SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
- SYS_RENAME = 128 // { int rename(char *from, char *to); }
- SYS_FLOCK = 131 // { int flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
- SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
- SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
- SYS_RMDIR = 137 // { int rmdir(char *path); }
- SYS_UTIMES = 138 // { int utimes(char *path, \
- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
- SYS_SETSID = 147 // { int setsid(void); }
- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
- SYS_LGETFH = 160 // { int lgetfh(char *fname, \
- SYS_GETFH = 161 // { int getfh(char *fname, \
- SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
- SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
- SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
- SYS_SETFIB = 175 // { int setfib(int fibnum); }
- SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
- SYS_SETGID = 181 // { int setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
- SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
- SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
- SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
- SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
- SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
- SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
- SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
- SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
- SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
- SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
- SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
- SYS_UNDELETE = 205 // { int undelete(char *path); }
- SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
- SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
- SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
- SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
- SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
- SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
- SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
- SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
- SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
- SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
- SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
- SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
- SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
- SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
- SYS_RFORK = 251 // { int rfork(int flags); }
- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
- SYS_ISSETUGID = 253 // { int issetugid(void); }
- SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
- SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
- SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
- SYS_LUTIMES = 276 // { int lutimes(char *path, \
- SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
- SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
- SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
- SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
- SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
- SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
- SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
- SYS_MODNEXT = 300 // { int modnext(int modid); }
- SYS_MODSTAT = 301 // { int modstat(int modid, \
- SYS_MODFNEXT = 302 // { int modfnext(int modid); }
- SYS_MODFIND = 303 // { int modfind(const char *name); }
- SYS_KLDLOAD = 304 // { int kldload(const char *file); }
- SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
- SYS_KLDFIND = 306 // { int kldfind(const char *file); }
- SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
- SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
- SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
- SYS_GETSID = 310 // { int getsid(pid_t pid); }
- SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
- SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
- SYS_YIELD = 321 // { int yield(void); }
- SYS_MLOCKALL = 324 // { int mlockall(int how); }
- SYS_MUNLOCKALL = 325 // { int munlockall(void); }
- SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
- SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
- SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
- SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
- SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
- SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
- SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
- SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
- SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
- SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
- SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
- SYS_JAIL = 338 // { int jail(struct jail *jail); }
- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
- SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
- SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
- SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
- SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
- SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
- SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
- SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
- SYS_KQUEUE = 362 // { int kqueue(void); }
- SYS_KEVENT = 363 // { int kevent(int fd, \
- SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
- SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
- SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
- SYS___SETUGID = 374 // { int __setugid(int flag); }
- SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
- SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
- SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
- SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
- SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
- SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
- SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
- SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
- SYS_KENV = 390 // { int kenv(int what, const char *name, \
- SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
- SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
- SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
- SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
- SYS_STATFS = 396 // { int statfs(char *path, \
- SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
- SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
- SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
- SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
- SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
- SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
- SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
- SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
- SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
- SYS_SIGACTION = 416 // { int sigaction(int sig, \
- SYS_SIGRETURN = 417 // { int sigreturn( \
- SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
- SYS_SETCONTEXT = 422 // { int setcontext( \
- SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
- SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
- SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
- SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
- SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
- SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
- SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
- SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
- SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
- SYS_THR_SELF = 432 // { int thr_self(long *id); }
- SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
- SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
- SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
- SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
- SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
- SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
- SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
- SYS_THR_SUSPEND = 442 // { int thr_suspend( \
- SYS_THR_WAKE = 443 // { int thr_wake(long id); }
- SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
- SYS_AUDIT = 445 // { int audit(const void *record, \
- SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
- SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
- SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
- SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
- SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
- SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
- SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
- SYS_AUDITCTL = 453 // { int auditctl(char *path); }
- SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
- SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
- SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
- SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
- SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
- SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
- SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
- SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
- SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
- SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
- SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
- SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
- SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
- SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
- SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
- SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
- SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
- SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
- SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
- SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
- SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
- SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
- SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
- SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
- SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
- SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
- SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
- SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
- SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
- SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
- SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
- SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
- SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
- SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
- SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
- SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
- SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
- SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
- SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
- SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
- SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
- SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
- SYS_CAP_ENTER = 516 // { int cap_enter(void); }
- SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
- SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
- SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
- SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
- SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
- SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
- SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
- SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
- SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
- SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
- SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
- SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
- SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
- SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
- SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
- SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
- SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
- SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
- SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
- SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
- SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
- SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
- SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
- SYS_ACCEPT4 = 541 // { int accept4(int s, \
- SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
- SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
- SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
- SYS_FUTIMENS = 546 // { int futimens(int fd, \
- SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
+ SYS_FORK = 2 // { int fork(void); }
+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
+ SYS_CLOSE = 6 // { int close(int fd); }
+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
+ SYS_LINK = 9 // { int link(char *path, char *link); }
+ SYS_UNLINK = 10 // { int unlink(char *path); }
+ SYS_CHDIR = 12 // { int chdir(char *path); }
+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
+ SYS_GETPID = 20 // { pid_t getpid(void); }
+ SYS_MOUNT = 21 // { int mount(char *type, char *path, \
+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
+ SYS_GETUID = 24 // { uid_t getuid(void); }
+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
+ SYS_ACCEPT = 30 // { int accept(int s, \
+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
+ SYS_SYNC = 36 // { int sync(void); }
+ SYS_KILL = 37 // { int kill(int pid, int signum); }
+ SYS_GETPPID = 39 // { pid_t getppid(void); }
+ SYS_DUP = 41 // { int dup(u_int fd); }
+ SYS_PIPE = 42 // { int pipe(void); }
+ SYS_GETEGID = 43 // { gid_t getegid(void); }
+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
+ SYS_GETGID = 47 // { gid_t getgid(void); }
+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
+ SYS_ACCT = 51 // { int acct(char *path); }
+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
+ SYS_REBOOT = 55 // { int reboot(int opt); }
+ SYS_REVOKE = 56 // { int revoke(char *path); }
+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
+ SYS_CHROOT = 61 // { int chroot(char *path); }
+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
+ SYS_VFORK = 66 // { int vfork(void); }
+ SYS_SBRK = 69 // { int sbrk(int incr); }
+ SYS_SSTK = 70 // { int sstk(int incr); }
+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
+ SYS_GETPGRP = 81 // { int getpgrp(void); }
+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
+ SYS_SWAPON = 85 // { int swapon(char *name); }
+ SYS_GETITIMER = 86 // { int getitimer(u_int which, \
+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
+ SYS_FSYNC = 95 // { int fsync(int fd); }
+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
+ SYS_SOCKET = 97 // { int socket(int domain, int type, \
+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
+ SYS_BIND = 104 // { int bind(int s, caddr_t name, \
+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
+ SYS_GETRUSAGE = 117 // { int getrusage(int who, \
+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
+ SYS_RMDIR = 137 // { int rmdir(char *path); }
+ SYS_UTIMES = 138 // { int utimes(char *path, \
+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
+ SYS_SETSID = 147 // { int setsid(void); }
+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
+ SYS_LGETFH = 160 // { int lgetfh(char *fname, \
+ SYS_GETFH = 161 // { int getfh(char *fname, \
+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, \
+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, \
+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, \
+ SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
+ SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
+ SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
+ SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
+ SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
+ SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
+ SYS_UNDELETE = 205 // { int undelete(char *path); }
+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, \
+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \
+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, \
+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, \
+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, \
+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, \
+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
+ SYS_RFORK = 251 // { int rfork(int flags); }
+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
+ SYS_ISSETUGID = 253 // { int issetugid(void); }
+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, \
+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
+ SYS_LUTIMES = 276 // { int lutimes(char *path, \
+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
+ SYS_MODNEXT = 300 // { int modnext(int modid); }
+ SYS_MODSTAT = 301 // { int modstat(int modid, \
+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
+ SYS_MODFIND = 303 // { int modfind(const char *name); }
+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
+ SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); }
+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( \
+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, \
+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
+ SYS_OAIO_READ = 318 // { int oaio_read(struct oaiocb *aiocbp); }
+ SYS_OAIO_WRITE = 319 // { int oaio_write(struct oaiocb *aiocbp); }
+ SYS_OLIO_LISTIO = 320 // { int olio_listio(int mode, \
+ SYS_YIELD = 321 // { int yield(void); }
+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
+ SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete( \
+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
+ SYS_KQUEUE = 362 // { int kqueue(void); }
+ SYS_KEVENT = 363 // { int kevent(int fd, \
+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
+ SYS___SETUGID = 374 // { int __setugid(int flag); }
+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
+ SYS_KENV = 390 // { int kenv(int what, const char *name, \
+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
+ SYS_STATFS = 396 // { int statfs(char *path, \
+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, \
+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, \
+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
+ SYS_SIGACTION = 416 // { int sigaction(int sig, \
+ SYS_SIGRETURN = 417 // { int sigreturn( \
+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
+ SYS_SETCONTEXT = 422 // { int setcontext( \
+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
+ SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
+ SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, \
+ SYS_THR_SUSPEND = 442 // { int thr_suspend( \
+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
+ SYS_AUDIT = 445 // { int audit(const void *record, \
+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, \
+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, \
+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, \
+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, \
+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, \
+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \
+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \
+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \
+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, \
+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, \
+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, \
+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
+ SYS_ACCEPT4 = 541 // { int accept4(int s, \
+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
+ SYS_FUTIMENS = 546 // { int futimens(int fd, \
+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
index 95ab129..8f33ece 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
@@ -387,4 +387,6 @@ const (
SYS_PKEY_FREE = 382
SYS_STATX = 383
SYS_ARCH_PRCTL = 384
+ SYS_IO_PGETEVENTS = 385
+ SYS_RSEQ = 386
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
index c5dabf2..70c1a2c 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
@@ -339,4 +339,6 @@ const (
SYS_PKEY_ALLOC = 330
SYS_PKEY_FREE = 331
SYS_STATX = 332
+ SYS_IO_PGETEVENTS = 333
+ SYS_RSEQ = 334
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
index ab7fa5f..a1db143 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
@@ -359,4 +359,5 @@ const (
SYS_PKEY_ALLOC = 395
SYS_PKEY_FREE = 396
SYS_STATX = 397
+ SYS_RSEQ = 398
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
index b1c6b4b..2e4cee7 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
@@ -283,4 +283,5 @@ const (
SYS_PKEY_ALLOC = 289
SYS_PKEY_FREE = 290
SYS_STATX = 291
+ SYS_IO_PGETEVENTS = 292
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
index 2e9aa7a..1671449 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
@@ -372,4 +372,6 @@ const (
SYS_PKEY_ALLOC = 4364
SYS_PKEY_FREE = 4365
SYS_STATX = 4366
+ SYS_RSEQ = 4367
+ SYS_IO_PGETEVENTS = 4368
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
index 9282763..1270a1c 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
@@ -332,4 +332,6 @@ const (
SYS_PKEY_ALLOC = 5324
SYS_PKEY_FREE = 5325
SYS_STATX = 5326
+ SYS_RSEQ = 5327
+ SYS_IO_PGETEVENTS = 5328
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
index 45bd3fd..93980be 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
@@ -332,4 +332,6 @@ const (
SYS_PKEY_ALLOC = 5324
SYS_PKEY_FREE = 5325
SYS_STATX = 5326
+ SYS_RSEQ = 5327
+ SYS_IO_PGETEVENTS = 5328
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
index 62ccac4..0fc7726 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
@@ -372,4 +372,6 @@ const (
SYS_PKEY_ALLOC = 4364
SYS_PKEY_FREE = 4365
SYS_STATX = 4366
+ SYS_RSEQ = 4367
+ SYS_IO_PGETEVENTS = 4368
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
index 384d49b..a5c5f3d 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
@@ -370,4 +370,6 @@ const (
SYS_PKEY_ALLOC = 384
SYS_PKEY_FREE = 385
SYS_PKEY_MPROTECT = 386
+ SYS_RSEQ = 387
+ SYS_IO_PGETEVENTS = 388
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
index 9623248..5470ead 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
@@ -370,4 +370,6 @@ const (
SYS_PKEY_ALLOC = 384
SYS_PKEY_FREE = 385
SYS_PKEY_MPROTECT = 386
+ SYS_RSEQ = 387
+ SYS_IO_PGETEVENTS = 388
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
index c061d6f..de0245a 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
@@ -332,4 +332,6 @@ const (
SYS_STATX = 379
SYS_S390_STHYI = 380
SYS_KEXEC_FILE_LOAD = 381
+ SYS_IO_PGETEVENTS = 382
+ SYS_RSEQ = 383
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
index 10edff0..bc7fa57 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
@@ -116,6 +116,7 @@ const (
SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \
SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); }
SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, \
+ SYS_UNVEIL = 114 // { int sys_unveil(const char *path, \
SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \
SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
SYS_READV = 120 // { ssize_t sys_readv(int fd, \
diff --git a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
index 315a553..c01ae67 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
@@ -56,23 +56,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Ino uint64
Nlink uint32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
index 878a21a..8006c56 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
@@ -56,23 +56,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Dev uint32
Ino uint32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
index 8408af1..716774d 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
@@ -56,23 +56,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Dev uint32
Ino uint32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
index 4b2d9a4..92e07b0 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
@@ -58,23 +58,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Dev uint32
Ino uint32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
index e89bc6b..cb3729e 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
@@ -248,6 +248,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -401,6 +408,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -433,6 +441,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1844,3 +1853,32 @@ type RTCPLLInfo struct {
Negmult int32
Clock int32
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
index d95372b..0f3c0fb 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
@@ -250,6 +250,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -405,6 +412,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -437,6 +445,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1864,3 +1873,34 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ _ [4]byte
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
index 77875ba..bd534da 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
@@ -251,6 +251,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -404,6 +411,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -436,6 +444,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1833,3 +1842,33 @@ type RTCPLLInfo struct {
Negmult int32
Clock int32
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
index 5a9df69..3a72fd9 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
@@ -251,6 +251,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -406,6 +413,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -438,6 +446,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1843,3 +1852,34 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ _ [4]byte
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
index dcb239d..cd360b2 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
@@ -249,6 +249,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -402,6 +409,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -434,6 +442,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1838,3 +1847,33 @@ type RTCPLLInfo struct {
Negmult int32
Clock int32
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
index 9cf85f7..d35ec60 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
@@ -251,6 +251,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -406,6 +413,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -438,6 +446,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1845,3 +1854,34 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ _ [4]byte
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
index 6fd66e7..0f49930 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
@@ -251,6 +251,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -406,6 +413,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -438,6 +446,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1845,3 +1854,34 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ _ [4]byte
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
index faa5b3e..55f97c5 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
@@ -249,6 +249,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -402,6 +409,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -434,6 +442,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1838,3 +1847,33 @@ type RTCPLLInfo struct {
Negmult int32
Clock int32
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
index ad4c452..f1d4264 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
@@ -252,6 +252,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -407,6 +414,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -439,6 +447,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1853,3 +1862,34 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ _ [4]byte
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
index 1fdb2f2..90ab1f7 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
@@ -252,6 +252,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -407,6 +414,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -439,6 +447,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1853,3 +1862,34 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ _ [4]byte
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
index d32079d..898ac45 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
@@ -250,6 +250,13 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
_ [2]byte
@@ -405,6 +412,7 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
@@ -437,6 +445,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -1870,3 +1879,34 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ _ [4]byte
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
index d5a2d75..231f4e8 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
@@ -56,23 +56,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Mode uint32
Dev int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
index 5a9c818..bb2c448 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
@@ -56,23 +56,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Mode uint32
Dev int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
index e35b13b..941367c 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
@@ -56,23 +56,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Mode uint32
Dev int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
index 2248598..0543e1a 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
@@ -75,23 +75,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Dev uint64
Ino uint64
diff --git a/vendor/golang.org/x/text/unicode/bidi/bidi.go b/vendor/golang.org/x/text/unicode/bidi/bidi.go
index 3fc4a62..e8edc54 100644
--- a/vendor/golang.org/x/text/unicode/bidi/bidi.go
+++ b/vendor/golang.org/x/text/unicode/bidi/bidi.go
@@ -6,7 +6,7 @@
// Package bidi contains functionality for bidirectional text support.
//
-// See http://www.unicode.org/reports/tr9.
+// See https://www.unicode.org/reports/tr9.
//
// NOTE: UNDER CONSTRUCTION. This API may change in backwards incompatible ways
// and without notice.
diff --git a/vendor/golang.org/x/text/unicode/bidi/bracket.go b/vendor/golang.org/x/text/unicode/bidi/bracket.go
index 601e259..3fef316 100644
--- a/vendor/golang.org/x/text/unicode/bidi/bracket.go
+++ b/vendor/golang.org/x/text/unicode/bidi/bracket.go
@@ -12,7 +12,7 @@ import (
// This file contains a port of the reference implementation of the
// Bidi Parentheses Algorithm:
-// http://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/BidiPBAReference.java
+// https://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/BidiPBAReference.java
//
// The implementation in this file covers definitions BD14-BD16 and rule N0
// of UAX#9.
diff --git a/vendor/golang.org/x/text/unicode/bidi/core.go b/vendor/golang.org/x/text/unicode/bidi/core.go
index d4c1399..48d1440 100644
--- a/vendor/golang.org/x/text/unicode/bidi/core.go
+++ b/vendor/golang.org/x/text/unicode/bidi/core.go
@@ -7,7 +7,7 @@ package bidi
import "log"
// This implementation is a port based on the reference implementation found at:
-// http://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/
+// https://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/
//
// described in Unicode Bidirectional Algorithm (UAX #9).
//
diff --git a/vendor/golang.org/x/text/unicode/norm/composition.go b/vendor/golang.org/x/text/unicode/norm/composition.go
index bab4c5d..e2087bc 100644
--- a/vendor/golang.org/x/text/unicode/norm/composition.go
+++ b/vendor/golang.org/x/text/unicode/norm/composition.go
@@ -407,7 +407,7 @@ func decomposeHangul(buf []byte, r rune) int {
// decomposeHangul algorithmically decomposes a Hangul rune into
// its Jamo components.
-// See http://unicode.org/reports/tr15/#Hangul for details on decomposing Hangul.
+// See https://unicode.org/reports/tr15/#Hangul for details on decomposing Hangul.
func (rb *reorderBuffer) decomposeHangul(r rune) {
r -= hangulBase
x := r % jamoTCount
@@ -420,7 +420,7 @@ func (rb *reorderBuffer) decomposeHangul(r rune) {
}
// combineHangul algorithmically combines Jamo character components into Hangul.
-// See http://unicode.org/reports/tr15/#Hangul for details on combining Hangul.
+// See https://unicode.org/reports/tr15/#Hangul for details on combining Hangul.
func (rb *reorderBuffer) combineHangul(s, i, k int) {
b := rb.rune[:]
bn := rb.nrune
@@ -461,6 +461,10 @@ func (rb *reorderBuffer) combineHangul(s, i, k int) {
// It should only be used to recompose a single segment, as it will not
// handle alternations between Hangul and non-Hangul characters correctly.
func (rb *reorderBuffer) compose() {
+ // Lazily load the map used by the combine func below, but do
+ // it outside of the loop.
+ recompMapOnce.Do(buildRecompMap)
+
// UAX #15, section X5 , including Corrigendum #5
// "In any character sequence beginning with starter S, a character C is
// blocked from S if and only if there is some character B between S
diff --git a/vendor/golang.org/x/text/unicode/norm/forminfo.go b/vendor/golang.org/x/text/unicode/norm/forminfo.go
index e67e765..526c703 100644
--- a/vendor/golang.org/x/text/unicode/norm/forminfo.go
+++ b/vendor/golang.org/x/text/unicode/norm/forminfo.go
@@ -4,6 +4,8 @@
package norm
+import "encoding/binary"
+
// This file contains Form-specific logic and wrappers for data in tables.go.
// Rune info is stored in a separate trie per composing form. A composing form
@@ -178,6 +180,17 @@ func (p Properties) TrailCCC() uint8 {
return ccc[p.tccc]
}
+func buildRecompMap() {
+ recompMap = make(map[uint32]rune, len(recompMapPacked)/8)
+ var buf [8]byte
+ for i := 0; i < len(recompMapPacked); i += 8 {
+ copy(buf[:], recompMapPacked[i:i+8])
+ key := binary.BigEndian.Uint32(buf[:4])
+ val := binary.BigEndian.Uint32(buf[4:])
+ recompMap[key] = rune(val)
+ }
+}
+
// Recomposition
// We use 32-bit keys instead of 64-bit for the two codepoint keys.
// This clips off the bits of three entries, but we know this will not
@@ -186,8 +199,14 @@ func (p Properties) TrailCCC() uint8 {
// Note that the recomposition map for NFC and NFKC are identical.
// combine returns the combined rune or 0 if it doesn't exist.
+//
+// The caller is responsible for calling
+// recompMapOnce.Do(buildRecompMap) sometime before this is called.
func combine(a, b rune) rune {
key := uint32(uint16(a))<<16 + uint32(uint16(b))
+ if recompMap == nil {
+ panic("caller error") // see func comment
+ }
return recompMap[key]
}
diff --git a/vendor/golang.org/x/text/unicode/norm/normalize.go b/vendor/golang.org/x/text/unicode/norm/normalize.go
index e28ac64..95efcf2 100644
--- a/vendor/golang.org/x/text/unicode/norm/normalize.go
+++ b/vendor/golang.org/x/text/unicode/norm/normalize.go
@@ -29,8 +29,8 @@ import (
// proceed independently on both sides:
// f(x) == append(f(x[0:n]), f(x[n:])...)
//
-// References: http://unicode.org/reports/tr15/ and
-// http://unicode.org/notes/tn5/.
+// References: https://unicode.org/reports/tr15/ and
+// https://unicode.org/notes/tn5/.
type Form int
const (
diff --git a/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go
index 44dd397..c48a97b 100644
--- a/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go
+++ b/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go
@@ -4,6 +4,8 @@
package norm
+import "sync"
+
const (
// Version is the Unicode edition from which the tables are derived.
Version = "10.0.0"
@@ -6707,947 +6709,949 @@ var nfkcSparseValues = [869]valueRange{
}
// recompMap: 7520 bytes (entries only)
-var recompMap = map[uint32]rune{
- 0x00410300: 0x00C0,
- 0x00410301: 0x00C1,
- 0x00410302: 0x00C2,
- 0x00410303: 0x00C3,
- 0x00410308: 0x00C4,
- 0x0041030A: 0x00C5,
- 0x00430327: 0x00C7,
- 0x00450300: 0x00C8,
- 0x00450301: 0x00C9,
- 0x00450302: 0x00CA,
- 0x00450308: 0x00CB,
- 0x00490300: 0x00CC,
- 0x00490301: 0x00CD,
- 0x00490302: 0x00CE,
- 0x00490308: 0x00CF,
- 0x004E0303: 0x00D1,
- 0x004F0300: 0x00D2,
- 0x004F0301: 0x00D3,
- 0x004F0302: 0x00D4,
- 0x004F0303: 0x00D5,
- 0x004F0308: 0x00D6,
- 0x00550300: 0x00D9,
- 0x00550301: 0x00DA,
- 0x00550302: 0x00DB,
- 0x00550308: 0x00DC,
- 0x00590301: 0x00DD,
- 0x00610300: 0x00E0,
- 0x00610301: 0x00E1,
- 0x00610302: 0x00E2,
- 0x00610303: 0x00E3,
- 0x00610308: 0x00E4,
- 0x0061030A: 0x00E5,
- 0x00630327: 0x00E7,
- 0x00650300: 0x00E8,
- 0x00650301: 0x00E9,
- 0x00650302: 0x00EA,
- 0x00650308: 0x00EB,
- 0x00690300: 0x00EC,
- 0x00690301: 0x00ED,
- 0x00690302: 0x00EE,
- 0x00690308: 0x00EF,
- 0x006E0303: 0x00F1,
- 0x006F0300: 0x00F2,
- 0x006F0301: 0x00F3,
- 0x006F0302: 0x00F4,
- 0x006F0303: 0x00F5,
- 0x006F0308: 0x00F6,
- 0x00750300: 0x00F9,
- 0x00750301: 0x00FA,
- 0x00750302: 0x00FB,
- 0x00750308: 0x00FC,
- 0x00790301: 0x00FD,
- 0x00790308: 0x00FF,
- 0x00410304: 0x0100,
- 0x00610304: 0x0101,
- 0x00410306: 0x0102,
- 0x00610306: 0x0103,
- 0x00410328: 0x0104,
- 0x00610328: 0x0105,
- 0x00430301: 0x0106,
- 0x00630301: 0x0107,
- 0x00430302: 0x0108,
- 0x00630302: 0x0109,
- 0x00430307: 0x010A,
- 0x00630307: 0x010B,
- 0x0043030C: 0x010C,
- 0x0063030C: 0x010D,
- 0x0044030C: 0x010E,
- 0x0064030C: 0x010F,
- 0x00450304: 0x0112,
- 0x00650304: 0x0113,
- 0x00450306: 0x0114,
- 0x00650306: 0x0115,
- 0x00450307: 0x0116,
- 0x00650307: 0x0117,
- 0x00450328: 0x0118,
- 0x00650328: 0x0119,
- 0x0045030C: 0x011A,
- 0x0065030C: 0x011B,
- 0x00470302: 0x011C,
- 0x00670302: 0x011D,
- 0x00470306: 0x011E,
- 0x00670306: 0x011F,
- 0x00470307: 0x0120,
- 0x00670307: 0x0121,
- 0x00470327: 0x0122,
- 0x00670327: 0x0123,
- 0x00480302: 0x0124,
- 0x00680302: 0x0125,
- 0x00490303: 0x0128,
- 0x00690303: 0x0129,
- 0x00490304: 0x012A,
- 0x00690304: 0x012B,
- 0x00490306: 0x012C,
- 0x00690306: 0x012D,
- 0x00490328: 0x012E,
- 0x00690328: 0x012F,
- 0x00490307: 0x0130,
- 0x004A0302: 0x0134,
- 0x006A0302: 0x0135,
- 0x004B0327: 0x0136,
- 0x006B0327: 0x0137,
- 0x004C0301: 0x0139,
- 0x006C0301: 0x013A,
- 0x004C0327: 0x013B,
- 0x006C0327: 0x013C,
- 0x004C030C: 0x013D,
- 0x006C030C: 0x013E,
- 0x004E0301: 0x0143,
- 0x006E0301: 0x0144,
- 0x004E0327: 0x0145,
- 0x006E0327: 0x0146,
- 0x004E030C: 0x0147,
- 0x006E030C: 0x0148,
- 0x004F0304: 0x014C,
- 0x006F0304: 0x014D,
- 0x004F0306: 0x014E,
- 0x006F0306: 0x014F,
- 0x004F030B: 0x0150,
- 0x006F030B: 0x0151,
- 0x00520301: 0x0154,
- 0x00720301: 0x0155,
- 0x00520327: 0x0156,
- 0x00720327: 0x0157,
- 0x0052030C: 0x0158,
- 0x0072030C: 0x0159,
- 0x00530301: 0x015A,
- 0x00730301: 0x015B,
- 0x00530302: 0x015C,
- 0x00730302: 0x015D,
- 0x00530327: 0x015E,
- 0x00730327: 0x015F,
- 0x0053030C: 0x0160,
- 0x0073030C: 0x0161,
- 0x00540327: 0x0162,
- 0x00740327: 0x0163,
- 0x0054030C: 0x0164,
- 0x0074030C: 0x0165,
- 0x00550303: 0x0168,
- 0x00750303: 0x0169,
- 0x00550304: 0x016A,
- 0x00750304: 0x016B,
- 0x00550306: 0x016C,
- 0x00750306: 0x016D,
- 0x0055030A: 0x016E,
- 0x0075030A: 0x016F,
- 0x0055030B: 0x0170,
- 0x0075030B: 0x0171,
- 0x00550328: 0x0172,
- 0x00750328: 0x0173,
- 0x00570302: 0x0174,
- 0x00770302: 0x0175,
- 0x00590302: 0x0176,
- 0x00790302: 0x0177,
- 0x00590308: 0x0178,
- 0x005A0301: 0x0179,
- 0x007A0301: 0x017A,
- 0x005A0307: 0x017B,
- 0x007A0307: 0x017C,
- 0x005A030C: 0x017D,
- 0x007A030C: 0x017E,
- 0x004F031B: 0x01A0,
- 0x006F031B: 0x01A1,
- 0x0055031B: 0x01AF,
- 0x0075031B: 0x01B0,
- 0x0041030C: 0x01CD,
- 0x0061030C: 0x01CE,
- 0x0049030C: 0x01CF,
- 0x0069030C: 0x01D0,
- 0x004F030C: 0x01D1,
- 0x006F030C: 0x01D2,
- 0x0055030C: 0x01D3,
- 0x0075030C: 0x01D4,
- 0x00DC0304: 0x01D5,
- 0x00FC0304: 0x01D6,
- 0x00DC0301: 0x01D7,
- 0x00FC0301: 0x01D8,
- 0x00DC030C: 0x01D9,
- 0x00FC030C: 0x01DA,
- 0x00DC0300: 0x01DB,
- 0x00FC0300: 0x01DC,
- 0x00C40304: 0x01DE,
- 0x00E40304: 0x01DF,
- 0x02260304: 0x01E0,
- 0x02270304: 0x01E1,
- 0x00C60304: 0x01E2,
- 0x00E60304: 0x01E3,
- 0x0047030C: 0x01E6,
- 0x0067030C: 0x01E7,
- 0x004B030C: 0x01E8,
- 0x006B030C: 0x01E9,
- 0x004F0328: 0x01EA,
- 0x006F0328: 0x01EB,
- 0x01EA0304: 0x01EC,
- 0x01EB0304: 0x01ED,
- 0x01B7030C: 0x01EE,
- 0x0292030C: 0x01EF,
- 0x006A030C: 0x01F0,
- 0x00470301: 0x01F4,
- 0x00670301: 0x01F5,
- 0x004E0300: 0x01F8,
- 0x006E0300: 0x01F9,
- 0x00C50301: 0x01FA,
- 0x00E50301: 0x01FB,
- 0x00C60301: 0x01FC,
- 0x00E60301: 0x01FD,
- 0x00D80301: 0x01FE,
- 0x00F80301: 0x01FF,
- 0x0041030F: 0x0200,
- 0x0061030F: 0x0201,
- 0x00410311: 0x0202,
- 0x00610311: 0x0203,
- 0x0045030F: 0x0204,
- 0x0065030F: 0x0205,
- 0x00450311: 0x0206,
- 0x00650311: 0x0207,
- 0x0049030F: 0x0208,
- 0x0069030F: 0x0209,
- 0x00490311: 0x020A,
- 0x00690311: 0x020B,
- 0x004F030F: 0x020C,
- 0x006F030F: 0x020D,
- 0x004F0311: 0x020E,
- 0x006F0311: 0x020F,
- 0x0052030F: 0x0210,
- 0x0072030F: 0x0211,
- 0x00520311: 0x0212,
- 0x00720311: 0x0213,
- 0x0055030F: 0x0214,
- 0x0075030F: 0x0215,
- 0x00550311: 0x0216,
- 0x00750311: 0x0217,
- 0x00530326: 0x0218,
- 0x00730326: 0x0219,
- 0x00540326: 0x021A,
- 0x00740326: 0x021B,
- 0x0048030C: 0x021E,
- 0x0068030C: 0x021F,
- 0x00410307: 0x0226,
- 0x00610307: 0x0227,
- 0x00450327: 0x0228,
- 0x00650327: 0x0229,
- 0x00D60304: 0x022A,
- 0x00F60304: 0x022B,
- 0x00D50304: 0x022C,
- 0x00F50304: 0x022D,
- 0x004F0307: 0x022E,
- 0x006F0307: 0x022F,
- 0x022E0304: 0x0230,
- 0x022F0304: 0x0231,
- 0x00590304: 0x0232,
- 0x00790304: 0x0233,
- 0x00A80301: 0x0385,
- 0x03910301: 0x0386,
- 0x03950301: 0x0388,
- 0x03970301: 0x0389,
- 0x03990301: 0x038A,
- 0x039F0301: 0x038C,
- 0x03A50301: 0x038E,
- 0x03A90301: 0x038F,
- 0x03CA0301: 0x0390,
- 0x03990308: 0x03AA,
- 0x03A50308: 0x03AB,
- 0x03B10301: 0x03AC,
- 0x03B50301: 0x03AD,
- 0x03B70301: 0x03AE,
- 0x03B90301: 0x03AF,
- 0x03CB0301: 0x03B0,
- 0x03B90308: 0x03CA,
- 0x03C50308: 0x03CB,
- 0x03BF0301: 0x03CC,
- 0x03C50301: 0x03CD,
- 0x03C90301: 0x03CE,
- 0x03D20301: 0x03D3,
- 0x03D20308: 0x03D4,
- 0x04150300: 0x0400,
- 0x04150308: 0x0401,
- 0x04130301: 0x0403,
- 0x04060308: 0x0407,
- 0x041A0301: 0x040C,
- 0x04180300: 0x040D,
- 0x04230306: 0x040E,
- 0x04180306: 0x0419,
- 0x04380306: 0x0439,
- 0x04350300: 0x0450,
- 0x04350308: 0x0451,
- 0x04330301: 0x0453,
- 0x04560308: 0x0457,
- 0x043A0301: 0x045C,
- 0x04380300: 0x045D,
- 0x04430306: 0x045E,
- 0x0474030F: 0x0476,
- 0x0475030F: 0x0477,
- 0x04160306: 0x04C1,
- 0x04360306: 0x04C2,
- 0x04100306: 0x04D0,
- 0x04300306: 0x04D1,
- 0x04100308: 0x04D2,
- 0x04300308: 0x04D3,
- 0x04150306: 0x04D6,
- 0x04350306: 0x04D7,
- 0x04D80308: 0x04DA,
- 0x04D90308: 0x04DB,
- 0x04160308: 0x04DC,
- 0x04360308: 0x04DD,
- 0x04170308: 0x04DE,
- 0x04370308: 0x04DF,
- 0x04180304: 0x04E2,
- 0x04380304: 0x04E3,
- 0x04180308: 0x04E4,
- 0x04380308: 0x04E5,
- 0x041E0308: 0x04E6,
- 0x043E0308: 0x04E7,
- 0x04E80308: 0x04EA,
- 0x04E90308: 0x04EB,
- 0x042D0308: 0x04EC,
- 0x044D0308: 0x04ED,
- 0x04230304: 0x04EE,
- 0x04430304: 0x04EF,
- 0x04230308: 0x04F0,
- 0x04430308: 0x04F1,
- 0x0423030B: 0x04F2,
- 0x0443030B: 0x04F3,
- 0x04270308: 0x04F4,
- 0x04470308: 0x04F5,
- 0x042B0308: 0x04F8,
- 0x044B0308: 0x04F9,
- 0x06270653: 0x0622,
- 0x06270654: 0x0623,
- 0x06480654: 0x0624,
- 0x06270655: 0x0625,
- 0x064A0654: 0x0626,
- 0x06D50654: 0x06C0,
- 0x06C10654: 0x06C2,
- 0x06D20654: 0x06D3,
- 0x0928093C: 0x0929,
- 0x0930093C: 0x0931,
- 0x0933093C: 0x0934,
- 0x09C709BE: 0x09CB,
- 0x09C709D7: 0x09CC,
- 0x0B470B56: 0x0B48,
- 0x0B470B3E: 0x0B4B,
- 0x0B470B57: 0x0B4C,
- 0x0B920BD7: 0x0B94,
- 0x0BC60BBE: 0x0BCA,
- 0x0BC70BBE: 0x0BCB,
- 0x0BC60BD7: 0x0BCC,
- 0x0C460C56: 0x0C48,
- 0x0CBF0CD5: 0x0CC0,
- 0x0CC60CD5: 0x0CC7,
- 0x0CC60CD6: 0x0CC8,
- 0x0CC60CC2: 0x0CCA,
- 0x0CCA0CD5: 0x0CCB,
- 0x0D460D3E: 0x0D4A,
- 0x0D470D3E: 0x0D4B,
- 0x0D460D57: 0x0D4C,
- 0x0DD90DCA: 0x0DDA,
- 0x0DD90DCF: 0x0DDC,
- 0x0DDC0DCA: 0x0DDD,
- 0x0DD90DDF: 0x0DDE,
- 0x1025102E: 0x1026,
- 0x1B051B35: 0x1B06,
- 0x1B071B35: 0x1B08,
- 0x1B091B35: 0x1B0A,
- 0x1B0B1B35: 0x1B0C,
- 0x1B0D1B35: 0x1B0E,
- 0x1B111B35: 0x1B12,
- 0x1B3A1B35: 0x1B3B,
- 0x1B3C1B35: 0x1B3D,
- 0x1B3E1B35: 0x1B40,
- 0x1B3F1B35: 0x1B41,
- 0x1B421B35: 0x1B43,
- 0x00410325: 0x1E00,
- 0x00610325: 0x1E01,
- 0x00420307: 0x1E02,
- 0x00620307: 0x1E03,
- 0x00420323: 0x1E04,
- 0x00620323: 0x1E05,
- 0x00420331: 0x1E06,
- 0x00620331: 0x1E07,
- 0x00C70301: 0x1E08,
- 0x00E70301: 0x1E09,
- 0x00440307: 0x1E0A,
- 0x00640307: 0x1E0B,
- 0x00440323: 0x1E0C,
- 0x00640323: 0x1E0D,
- 0x00440331: 0x1E0E,
- 0x00640331: 0x1E0F,
- 0x00440327: 0x1E10,
- 0x00640327: 0x1E11,
- 0x0044032D: 0x1E12,
- 0x0064032D: 0x1E13,
- 0x01120300: 0x1E14,
- 0x01130300: 0x1E15,
- 0x01120301: 0x1E16,
- 0x01130301: 0x1E17,
- 0x0045032D: 0x1E18,
- 0x0065032D: 0x1E19,
- 0x00450330: 0x1E1A,
- 0x00650330: 0x1E1B,
- 0x02280306: 0x1E1C,
- 0x02290306: 0x1E1D,
- 0x00460307: 0x1E1E,
- 0x00660307: 0x1E1F,
- 0x00470304: 0x1E20,
- 0x00670304: 0x1E21,
- 0x00480307: 0x1E22,
- 0x00680307: 0x1E23,
- 0x00480323: 0x1E24,
- 0x00680323: 0x1E25,
- 0x00480308: 0x1E26,
- 0x00680308: 0x1E27,
- 0x00480327: 0x1E28,
- 0x00680327: 0x1E29,
- 0x0048032E: 0x1E2A,
- 0x0068032E: 0x1E2B,
- 0x00490330: 0x1E2C,
- 0x00690330: 0x1E2D,
- 0x00CF0301: 0x1E2E,
- 0x00EF0301: 0x1E2F,
- 0x004B0301: 0x1E30,
- 0x006B0301: 0x1E31,
- 0x004B0323: 0x1E32,
- 0x006B0323: 0x1E33,
- 0x004B0331: 0x1E34,
- 0x006B0331: 0x1E35,
- 0x004C0323: 0x1E36,
- 0x006C0323: 0x1E37,
- 0x1E360304: 0x1E38,
- 0x1E370304: 0x1E39,
- 0x004C0331: 0x1E3A,
- 0x006C0331: 0x1E3B,
- 0x004C032D: 0x1E3C,
- 0x006C032D: 0x1E3D,
- 0x004D0301: 0x1E3E,
- 0x006D0301: 0x1E3F,
- 0x004D0307: 0x1E40,
- 0x006D0307: 0x1E41,
- 0x004D0323: 0x1E42,
- 0x006D0323: 0x1E43,
- 0x004E0307: 0x1E44,
- 0x006E0307: 0x1E45,
- 0x004E0323: 0x1E46,
- 0x006E0323: 0x1E47,
- 0x004E0331: 0x1E48,
- 0x006E0331: 0x1E49,
- 0x004E032D: 0x1E4A,
- 0x006E032D: 0x1E4B,
- 0x00D50301: 0x1E4C,
- 0x00F50301: 0x1E4D,
- 0x00D50308: 0x1E4E,
- 0x00F50308: 0x1E4F,
- 0x014C0300: 0x1E50,
- 0x014D0300: 0x1E51,
- 0x014C0301: 0x1E52,
- 0x014D0301: 0x1E53,
- 0x00500301: 0x1E54,
- 0x00700301: 0x1E55,
- 0x00500307: 0x1E56,
- 0x00700307: 0x1E57,
- 0x00520307: 0x1E58,
- 0x00720307: 0x1E59,
- 0x00520323: 0x1E5A,
- 0x00720323: 0x1E5B,
- 0x1E5A0304: 0x1E5C,
- 0x1E5B0304: 0x1E5D,
- 0x00520331: 0x1E5E,
- 0x00720331: 0x1E5F,
- 0x00530307: 0x1E60,
- 0x00730307: 0x1E61,
- 0x00530323: 0x1E62,
- 0x00730323: 0x1E63,
- 0x015A0307: 0x1E64,
- 0x015B0307: 0x1E65,
- 0x01600307: 0x1E66,
- 0x01610307: 0x1E67,
- 0x1E620307: 0x1E68,
- 0x1E630307: 0x1E69,
- 0x00540307: 0x1E6A,
- 0x00740307: 0x1E6B,
- 0x00540323: 0x1E6C,
- 0x00740323: 0x1E6D,
- 0x00540331: 0x1E6E,
- 0x00740331: 0x1E6F,
- 0x0054032D: 0x1E70,
- 0x0074032D: 0x1E71,
- 0x00550324: 0x1E72,
- 0x00750324: 0x1E73,
- 0x00550330: 0x1E74,
- 0x00750330: 0x1E75,
- 0x0055032D: 0x1E76,
- 0x0075032D: 0x1E77,
- 0x01680301: 0x1E78,
- 0x01690301: 0x1E79,
- 0x016A0308: 0x1E7A,
- 0x016B0308: 0x1E7B,
- 0x00560303: 0x1E7C,
- 0x00760303: 0x1E7D,
- 0x00560323: 0x1E7E,
- 0x00760323: 0x1E7F,
- 0x00570300: 0x1E80,
- 0x00770300: 0x1E81,
- 0x00570301: 0x1E82,
- 0x00770301: 0x1E83,
- 0x00570308: 0x1E84,
- 0x00770308: 0x1E85,
- 0x00570307: 0x1E86,
- 0x00770307: 0x1E87,
- 0x00570323: 0x1E88,
- 0x00770323: 0x1E89,
- 0x00580307: 0x1E8A,
- 0x00780307: 0x1E8B,
- 0x00580308: 0x1E8C,
- 0x00780308: 0x1E8D,
- 0x00590307: 0x1E8E,
- 0x00790307: 0x1E8F,
- 0x005A0302: 0x1E90,
- 0x007A0302: 0x1E91,
- 0x005A0323: 0x1E92,
- 0x007A0323: 0x1E93,
- 0x005A0331: 0x1E94,
- 0x007A0331: 0x1E95,
- 0x00680331: 0x1E96,
- 0x00740308: 0x1E97,
- 0x0077030A: 0x1E98,
- 0x0079030A: 0x1E99,
- 0x017F0307: 0x1E9B,
- 0x00410323: 0x1EA0,
- 0x00610323: 0x1EA1,
- 0x00410309: 0x1EA2,
- 0x00610309: 0x1EA3,
- 0x00C20301: 0x1EA4,
- 0x00E20301: 0x1EA5,
- 0x00C20300: 0x1EA6,
- 0x00E20300: 0x1EA7,
- 0x00C20309: 0x1EA8,
- 0x00E20309: 0x1EA9,
- 0x00C20303: 0x1EAA,
- 0x00E20303: 0x1EAB,
- 0x1EA00302: 0x1EAC,
- 0x1EA10302: 0x1EAD,
- 0x01020301: 0x1EAE,
- 0x01030301: 0x1EAF,
- 0x01020300: 0x1EB0,
- 0x01030300: 0x1EB1,
- 0x01020309: 0x1EB2,
- 0x01030309: 0x1EB3,
- 0x01020303: 0x1EB4,
- 0x01030303: 0x1EB5,
- 0x1EA00306: 0x1EB6,
- 0x1EA10306: 0x1EB7,
- 0x00450323: 0x1EB8,
- 0x00650323: 0x1EB9,
- 0x00450309: 0x1EBA,
- 0x00650309: 0x1EBB,
- 0x00450303: 0x1EBC,
- 0x00650303: 0x1EBD,
- 0x00CA0301: 0x1EBE,
- 0x00EA0301: 0x1EBF,
- 0x00CA0300: 0x1EC0,
- 0x00EA0300: 0x1EC1,
- 0x00CA0309: 0x1EC2,
- 0x00EA0309: 0x1EC3,
- 0x00CA0303: 0x1EC4,
- 0x00EA0303: 0x1EC5,
- 0x1EB80302: 0x1EC6,
- 0x1EB90302: 0x1EC7,
- 0x00490309: 0x1EC8,
- 0x00690309: 0x1EC9,
- 0x00490323: 0x1ECA,
- 0x00690323: 0x1ECB,
- 0x004F0323: 0x1ECC,
- 0x006F0323: 0x1ECD,
- 0x004F0309: 0x1ECE,
- 0x006F0309: 0x1ECF,
- 0x00D40301: 0x1ED0,
- 0x00F40301: 0x1ED1,
- 0x00D40300: 0x1ED2,
- 0x00F40300: 0x1ED3,
- 0x00D40309: 0x1ED4,
- 0x00F40309: 0x1ED5,
- 0x00D40303: 0x1ED6,
- 0x00F40303: 0x1ED7,
- 0x1ECC0302: 0x1ED8,
- 0x1ECD0302: 0x1ED9,
- 0x01A00301: 0x1EDA,
- 0x01A10301: 0x1EDB,
- 0x01A00300: 0x1EDC,
- 0x01A10300: 0x1EDD,
- 0x01A00309: 0x1EDE,
- 0x01A10309: 0x1EDF,
- 0x01A00303: 0x1EE0,
- 0x01A10303: 0x1EE1,
- 0x01A00323: 0x1EE2,
- 0x01A10323: 0x1EE3,
- 0x00550323: 0x1EE4,
- 0x00750323: 0x1EE5,
- 0x00550309: 0x1EE6,
- 0x00750309: 0x1EE7,
- 0x01AF0301: 0x1EE8,
- 0x01B00301: 0x1EE9,
- 0x01AF0300: 0x1EEA,
- 0x01B00300: 0x1EEB,
- 0x01AF0309: 0x1EEC,
- 0x01B00309: 0x1EED,
- 0x01AF0303: 0x1EEE,
- 0x01B00303: 0x1EEF,
- 0x01AF0323: 0x1EF0,
- 0x01B00323: 0x1EF1,
- 0x00590300: 0x1EF2,
- 0x00790300: 0x1EF3,
- 0x00590323: 0x1EF4,
- 0x00790323: 0x1EF5,
- 0x00590309: 0x1EF6,
- 0x00790309: 0x1EF7,
- 0x00590303: 0x1EF8,
- 0x00790303: 0x1EF9,
- 0x03B10313: 0x1F00,
- 0x03B10314: 0x1F01,
- 0x1F000300: 0x1F02,
- 0x1F010300: 0x1F03,
- 0x1F000301: 0x1F04,
- 0x1F010301: 0x1F05,
- 0x1F000342: 0x1F06,
- 0x1F010342: 0x1F07,
- 0x03910313: 0x1F08,
- 0x03910314: 0x1F09,
- 0x1F080300: 0x1F0A,
- 0x1F090300: 0x1F0B,
- 0x1F080301: 0x1F0C,
- 0x1F090301: 0x1F0D,
- 0x1F080342: 0x1F0E,
- 0x1F090342: 0x1F0F,
- 0x03B50313: 0x1F10,
- 0x03B50314: 0x1F11,
- 0x1F100300: 0x1F12,
- 0x1F110300: 0x1F13,
- 0x1F100301: 0x1F14,
- 0x1F110301: 0x1F15,
- 0x03950313: 0x1F18,
- 0x03950314: 0x1F19,
- 0x1F180300: 0x1F1A,
- 0x1F190300: 0x1F1B,
- 0x1F180301: 0x1F1C,
- 0x1F190301: 0x1F1D,
- 0x03B70313: 0x1F20,
- 0x03B70314: 0x1F21,
- 0x1F200300: 0x1F22,
- 0x1F210300: 0x1F23,
- 0x1F200301: 0x1F24,
- 0x1F210301: 0x1F25,
- 0x1F200342: 0x1F26,
- 0x1F210342: 0x1F27,
- 0x03970313: 0x1F28,
- 0x03970314: 0x1F29,
- 0x1F280300: 0x1F2A,
- 0x1F290300: 0x1F2B,
- 0x1F280301: 0x1F2C,
- 0x1F290301: 0x1F2D,
- 0x1F280342: 0x1F2E,
- 0x1F290342: 0x1F2F,
- 0x03B90313: 0x1F30,
- 0x03B90314: 0x1F31,
- 0x1F300300: 0x1F32,
- 0x1F310300: 0x1F33,
- 0x1F300301: 0x1F34,
- 0x1F310301: 0x1F35,
- 0x1F300342: 0x1F36,
- 0x1F310342: 0x1F37,
- 0x03990313: 0x1F38,
- 0x03990314: 0x1F39,
- 0x1F380300: 0x1F3A,
- 0x1F390300: 0x1F3B,
- 0x1F380301: 0x1F3C,
- 0x1F390301: 0x1F3D,
- 0x1F380342: 0x1F3E,
- 0x1F390342: 0x1F3F,
- 0x03BF0313: 0x1F40,
- 0x03BF0314: 0x1F41,
- 0x1F400300: 0x1F42,
- 0x1F410300: 0x1F43,
- 0x1F400301: 0x1F44,
- 0x1F410301: 0x1F45,
- 0x039F0313: 0x1F48,
- 0x039F0314: 0x1F49,
- 0x1F480300: 0x1F4A,
- 0x1F490300: 0x1F4B,
- 0x1F480301: 0x1F4C,
- 0x1F490301: 0x1F4D,
- 0x03C50313: 0x1F50,
- 0x03C50314: 0x1F51,
- 0x1F500300: 0x1F52,
- 0x1F510300: 0x1F53,
- 0x1F500301: 0x1F54,
- 0x1F510301: 0x1F55,
- 0x1F500342: 0x1F56,
- 0x1F510342: 0x1F57,
- 0x03A50314: 0x1F59,
- 0x1F590300: 0x1F5B,
- 0x1F590301: 0x1F5D,
- 0x1F590342: 0x1F5F,
- 0x03C90313: 0x1F60,
- 0x03C90314: 0x1F61,
- 0x1F600300: 0x1F62,
- 0x1F610300: 0x1F63,
- 0x1F600301: 0x1F64,
- 0x1F610301: 0x1F65,
- 0x1F600342: 0x1F66,
- 0x1F610342: 0x1F67,
- 0x03A90313: 0x1F68,
- 0x03A90314: 0x1F69,
- 0x1F680300: 0x1F6A,
- 0x1F690300: 0x1F6B,
- 0x1F680301: 0x1F6C,
- 0x1F690301: 0x1F6D,
- 0x1F680342: 0x1F6E,
- 0x1F690342: 0x1F6F,
- 0x03B10300: 0x1F70,
- 0x03B50300: 0x1F72,
- 0x03B70300: 0x1F74,
- 0x03B90300: 0x1F76,
- 0x03BF0300: 0x1F78,
- 0x03C50300: 0x1F7A,
- 0x03C90300: 0x1F7C,
- 0x1F000345: 0x1F80,
- 0x1F010345: 0x1F81,
- 0x1F020345: 0x1F82,
- 0x1F030345: 0x1F83,
- 0x1F040345: 0x1F84,
- 0x1F050345: 0x1F85,
- 0x1F060345: 0x1F86,
- 0x1F070345: 0x1F87,
- 0x1F080345: 0x1F88,
- 0x1F090345: 0x1F89,
- 0x1F0A0345: 0x1F8A,
- 0x1F0B0345: 0x1F8B,
- 0x1F0C0345: 0x1F8C,
- 0x1F0D0345: 0x1F8D,
- 0x1F0E0345: 0x1F8E,
- 0x1F0F0345: 0x1F8F,
- 0x1F200345: 0x1F90,
- 0x1F210345: 0x1F91,
- 0x1F220345: 0x1F92,
- 0x1F230345: 0x1F93,
- 0x1F240345: 0x1F94,
- 0x1F250345: 0x1F95,
- 0x1F260345: 0x1F96,
- 0x1F270345: 0x1F97,
- 0x1F280345: 0x1F98,
- 0x1F290345: 0x1F99,
- 0x1F2A0345: 0x1F9A,
- 0x1F2B0345: 0x1F9B,
- 0x1F2C0345: 0x1F9C,
- 0x1F2D0345: 0x1F9D,
- 0x1F2E0345: 0x1F9E,
- 0x1F2F0345: 0x1F9F,
- 0x1F600345: 0x1FA0,
- 0x1F610345: 0x1FA1,
- 0x1F620345: 0x1FA2,
- 0x1F630345: 0x1FA3,
- 0x1F640345: 0x1FA4,
- 0x1F650345: 0x1FA5,
- 0x1F660345: 0x1FA6,
- 0x1F670345: 0x1FA7,
- 0x1F680345: 0x1FA8,
- 0x1F690345: 0x1FA9,
- 0x1F6A0345: 0x1FAA,
- 0x1F6B0345: 0x1FAB,
- 0x1F6C0345: 0x1FAC,
- 0x1F6D0345: 0x1FAD,
- 0x1F6E0345: 0x1FAE,
- 0x1F6F0345: 0x1FAF,
- 0x03B10306: 0x1FB0,
- 0x03B10304: 0x1FB1,
- 0x1F700345: 0x1FB2,
- 0x03B10345: 0x1FB3,
- 0x03AC0345: 0x1FB4,
- 0x03B10342: 0x1FB6,
- 0x1FB60345: 0x1FB7,
- 0x03910306: 0x1FB8,
- 0x03910304: 0x1FB9,
- 0x03910300: 0x1FBA,
- 0x03910345: 0x1FBC,
- 0x00A80342: 0x1FC1,
- 0x1F740345: 0x1FC2,
- 0x03B70345: 0x1FC3,
- 0x03AE0345: 0x1FC4,
- 0x03B70342: 0x1FC6,
- 0x1FC60345: 0x1FC7,
- 0x03950300: 0x1FC8,
- 0x03970300: 0x1FCA,
- 0x03970345: 0x1FCC,
- 0x1FBF0300: 0x1FCD,
- 0x1FBF0301: 0x1FCE,
- 0x1FBF0342: 0x1FCF,
- 0x03B90306: 0x1FD0,
- 0x03B90304: 0x1FD1,
- 0x03CA0300: 0x1FD2,
- 0x03B90342: 0x1FD6,
- 0x03CA0342: 0x1FD7,
- 0x03990306: 0x1FD8,
- 0x03990304: 0x1FD9,
- 0x03990300: 0x1FDA,
- 0x1FFE0300: 0x1FDD,
- 0x1FFE0301: 0x1FDE,
- 0x1FFE0342: 0x1FDF,
- 0x03C50306: 0x1FE0,
- 0x03C50304: 0x1FE1,
- 0x03CB0300: 0x1FE2,
- 0x03C10313: 0x1FE4,
- 0x03C10314: 0x1FE5,
- 0x03C50342: 0x1FE6,
- 0x03CB0342: 0x1FE7,
- 0x03A50306: 0x1FE8,
- 0x03A50304: 0x1FE9,
- 0x03A50300: 0x1FEA,
- 0x03A10314: 0x1FEC,
- 0x00A80300: 0x1FED,
- 0x1F7C0345: 0x1FF2,
- 0x03C90345: 0x1FF3,
- 0x03CE0345: 0x1FF4,
- 0x03C90342: 0x1FF6,
- 0x1FF60345: 0x1FF7,
- 0x039F0300: 0x1FF8,
- 0x03A90300: 0x1FFA,
- 0x03A90345: 0x1FFC,
- 0x21900338: 0x219A,
- 0x21920338: 0x219B,
- 0x21940338: 0x21AE,
- 0x21D00338: 0x21CD,
- 0x21D40338: 0x21CE,
- 0x21D20338: 0x21CF,
- 0x22030338: 0x2204,
- 0x22080338: 0x2209,
- 0x220B0338: 0x220C,
- 0x22230338: 0x2224,
- 0x22250338: 0x2226,
- 0x223C0338: 0x2241,
- 0x22430338: 0x2244,
- 0x22450338: 0x2247,
- 0x22480338: 0x2249,
- 0x003D0338: 0x2260,
- 0x22610338: 0x2262,
- 0x224D0338: 0x226D,
- 0x003C0338: 0x226E,
- 0x003E0338: 0x226F,
- 0x22640338: 0x2270,
- 0x22650338: 0x2271,
- 0x22720338: 0x2274,
- 0x22730338: 0x2275,
- 0x22760338: 0x2278,
- 0x22770338: 0x2279,
- 0x227A0338: 0x2280,
- 0x227B0338: 0x2281,
- 0x22820338: 0x2284,
- 0x22830338: 0x2285,
- 0x22860338: 0x2288,
- 0x22870338: 0x2289,
- 0x22A20338: 0x22AC,
- 0x22A80338: 0x22AD,
- 0x22A90338: 0x22AE,
- 0x22AB0338: 0x22AF,
- 0x227C0338: 0x22E0,
- 0x227D0338: 0x22E1,
- 0x22910338: 0x22E2,
- 0x22920338: 0x22E3,
- 0x22B20338: 0x22EA,
- 0x22B30338: 0x22EB,
- 0x22B40338: 0x22EC,
- 0x22B50338: 0x22ED,
- 0x304B3099: 0x304C,
- 0x304D3099: 0x304E,
- 0x304F3099: 0x3050,
- 0x30513099: 0x3052,
- 0x30533099: 0x3054,
- 0x30553099: 0x3056,
- 0x30573099: 0x3058,
- 0x30593099: 0x305A,
- 0x305B3099: 0x305C,
- 0x305D3099: 0x305E,
- 0x305F3099: 0x3060,
- 0x30613099: 0x3062,
- 0x30643099: 0x3065,
- 0x30663099: 0x3067,
- 0x30683099: 0x3069,
- 0x306F3099: 0x3070,
- 0x306F309A: 0x3071,
- 0x30723099: 0x3073,
- 0x3072309A: 0x3074,
- 0x30753099: 0x3076,
- 0x3075309A: 0x3077,
- 0x30783099: 0x3079,
- 0x3078309A: 0x307A,
- 0x307B3099: 0x307C,
- 0x307B309A: 0x307D,
- 0x30463099: 0x3094,
- 0x309D3099: 0x309E,
- 0x30AB3099: 0x30AC,
- 0x30AD3099: 0x30AE,
- 0x30AF3099: 0x30B0,
- 0x30B13099: 0x30B2,
- 0x30B33099: 0x30B4,
- 0x30B53099: 0x30B6,
- 0x30B73099: 0x30B8,
- 0x30B93099: 0x30BA,
- 0x30BB3099: 0x30BC,
- 0x30BD3099: 0x30BE,
- 0x30BF3099: 0x30C0,
- 0x30C13099: 0x30C2,
- 0x30C43099: 0x30C5,
- 0x30C63099: 0x30C7,
- 0x30C83099: 0x30C9,
- 0x30CF3099: 0x30D0,
- 0x30CF309A: 0x30D1,
- 0x30D23099: 0x30D3,
- 0x30D2309A: 0x30D4,
- 0x30D53099: 0x30D6,
- 0x30D5309A: 0x30D7,
- 0x30D83099: 0x30D9,
- 0x30D8309A: 0x30DA,
- 0x30DB3099: 0x30DC,
- 0x30DB309A: 0x30DD,
- 0x30A63099: 0x30F4,
- 0x30EF3099: 0x30F7,
- 0x30F03099: 0x30F8,
- 0x30F13099: 0x30F9,
- 0x30F23099: 0x30FA,
- 0x30FD3099: 0x30FE,
- 0x109910BA: 0x1109A,
- 0x109B10BA: 0x1109C,
- 0x10A510BA: 0x110AB,
- 0x11311127: 0x1112E,
- 0x11321127: 0x1112F,
- 0x1347133E: 0x1134B,
- 0x13471357: 0x1134C,
- 0x14B914BA: 0x114BB,
- 0x14B914B0: 0x114BC,
- 0x14B914BD: 0x114BE,
- 0x15B815AF: 0x115BA,
- 0x15B915AF: 0x115BB,
-}
+var recompMap map[uint32]rune
+var recompMapOnce sync.Once
-// Total size of tables: 53KB (54226 bytes)
+const recompMapPacked = "" +
+ "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0
+ "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1
+ "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2
+ "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3
+ "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4
+ "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5
+ "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7
+ "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8
+ "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9
+ "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA
+ "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB
+ "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC
+ "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD
+ "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE
+ "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF
+ "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1
+ "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2
+ "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3
+ "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4
+ "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5
+ "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6
+ "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9
+ "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA
+ "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB
+ "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC
+ "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD
+ "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0
+ "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1
+ "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2
+ "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3
+ "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4
+ "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5
+ "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7
+ "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8
+ "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9
+ "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA
+ "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB
+ "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC
+ "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED
+ "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE
+ "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF
+ "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1
+ "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2
+ "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3
+ "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4
+ "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5
+ "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6
+ "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9
+ "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA
+ "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB
+ "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC
+ "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD
+ "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF
+ "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100
+ "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101
+ "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102
+ "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103
+ "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104
+ "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105
+ "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106
+ "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107
+ "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108
+ "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109
+ "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A
+ "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B
+ "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C
+ "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D
+ "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E
+ "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F
+ "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112
+ "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113
+ "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114
+ "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115
+ "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116
+ "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117
+ "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118
+ "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119
+ "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A
+ "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B
+ "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C
+ "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D
+ "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E
+ "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F
+ "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120
+ "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121
+ "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122
+ "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123
+ "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124
+ "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125
+ "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128
+ "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129
+ "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A
+ "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B
+ "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C
+ "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D
+ "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E
+ "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F
+ "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130
+ "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134
+ "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135
+ "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136
+ "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137
+ "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139
+ "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A
+ "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B
+ "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C
+ "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D
+ "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E
+ "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143
+ "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144
+ "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145
+ "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146
+ "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147
+ "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148
+ "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C
+ "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D
+ "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E
+ "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F
+ "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150
+ "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151
+ "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154
+ "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155
+ "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156
+ "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157
+ "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158
+ "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159
+ "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A
+ "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B
+ "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C
+ "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D
+ "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E
+ "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F
+ "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160
+ "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161
+ "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162
+ "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163
+ "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164
+ "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165
+ "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168
+ "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169
+ "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A
+ "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B
+ "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C
+ "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D
+ "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E
+ "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F
+ "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170
+ "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171
+ "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172
+ "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173
+ "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174
+ "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175
+ "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176
+ "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177
+ "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178
+ "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179
+ "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A
+ "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B
+ "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C
+ "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D
+ "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E
+ "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0
+ "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1
+ "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF
+ "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0
+ "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD
+ "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE
+ "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF
+ "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0
+ "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1
+ "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2
+ "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3
+ "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4
+ "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5
+ "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6
+ "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7
+ "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8
+ "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9
+ "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA
+ "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB
+ "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC
+ "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE
+ "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF
+ "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0
+ "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1
+ "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2
+ "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3
+ "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6
+ "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7
+ "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8
+ "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9
+ "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA
+ "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB
+ "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC
+ "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED
+ "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE
+ "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF
+ "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0
+ "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4
+ "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5
+ "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8
+ "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9
+ "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA
+ "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB
+ "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC
+ "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD
+ "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE
+ "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF
+ "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200
+ "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201
+ "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202
+ "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203
+ "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204
+ "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205
+ "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206
+ "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207
+ "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208
+ "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209
+ "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A
+ "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B
+ "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C
+ "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D
+ "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E
+ "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F
+ "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210
+ "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211
+ "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212
+ "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213
+ "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214
+ "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215
+ "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216
+ "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217
+ "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218
+ "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219
+ "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A
+ "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B
+ "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E
+ "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F
+ "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226
+ "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227
+ "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228
+ "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229
+ "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A
+ "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B
+ "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C
+ "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D
+ "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E
+ "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F
+ "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230
+ "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231
+ "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232
+ "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233
+ "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385
+ "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386
+ "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388
+ "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389
+ "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A
+ "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C
+ "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E
+ "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F
+ "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390
+ "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA
+ "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB
+ "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC
+ "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD
+ "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE
+ "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF
+ "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0
+ "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA
+ "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB
+ "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC
+ "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD
+ "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE
+ "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3
+ "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4
+ "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400
+ "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401
+ "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403
+ "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407
+ "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C
+ "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D
+ "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E
+ "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419
+ "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439
+ "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450
+ "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451
+ "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453
+ "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457
+ "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C
+ "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D
+ "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E
+ "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476
+ "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477
+ "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1
+ "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2
+ "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0
+ "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1
+ "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2
+ "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3
+ "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6
+ "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7
+ "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA
+ "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB
+ "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC
+ "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD
+ "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE
+ "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF
+ "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2
+ "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3
+ "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4
+ "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5
+ "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6
+ "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7
+ "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA
+ "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB
+ "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC
+ "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED
+ "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE
+ "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF
+ "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0
+ "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1
+ "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2
+ "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3
+ "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4
+ "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5
+ "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8
+ "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9
+ "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622
+ "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623
+ "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624
+ "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625
+ "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626
+ "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0
+ "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2
+ "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3
+ "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929
+ "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931
+ "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934
+ "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB
+ "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC
+ "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48
+ "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B
+ "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C
+ "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94
+ "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA
+ "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB
+ "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC
+ "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48
+ "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0
+ "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7
+ "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8
+ "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA
+ "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB
+ "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A
+ "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B
+ "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C
+ "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA
+ "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC
+ "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD
+ "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE
+ "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026
+ "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06
+ "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08
+ "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A
+ "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C
+ "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E
+ "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12
+ "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B
+ "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D
+ "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40
+ "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41
+ "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43
+ "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00
+ "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01
+ "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02
+ "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03
+ "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04
+ "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05
+ "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06
+ "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07
+ "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08
+ "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09
+ "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A
+ "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B
+ "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C
+ "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D
+ "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E
+ "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F
+ "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10
+ "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11
+ "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12
+ "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13
+ "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14
+ "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15
+ "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16
+ "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17
+ "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18
+ "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19
+ "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A
+ "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B
+ "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C
+ "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D
+ "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E
+ "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F
+ "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20
+ "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21
+ "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22
+ "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23
+ "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24
+ "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25
+ "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26
+ "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27
+ "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28
+ "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29
+ "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A
+ "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B
+ "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C
+ "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D
+ "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E
+ "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F
+ "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30
+ "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31
+ "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32
+ "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33
+ "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34
+ "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35
+ "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36
+ "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37
+ "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38
+ "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39
+ "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A
+ "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B
+ "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C
+ "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D
+ "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E
+ "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F
+ "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40
+ "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41
+ "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42
+ "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43
+ "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44
+ "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45
+ "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46
+ "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47
+ "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48
+ "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49
+ "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A
+ "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B
+ "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C
+ "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D
+ "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E
+ "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F
+ "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50
+ "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51
+ "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52
+ "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53
+ "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54
+ "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55
+ "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56
+ "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57
+ "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58
+ "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59
+ "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A
+ "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B
+ "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C
+ "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D
+ "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E
+ "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F
+ "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60
+ "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61
+ "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62
+ "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63
+ "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64
+ "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65
+ "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66
+ "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67
+ "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68
+ "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69
+ "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A
+ "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B
+ "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C
+ "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D
+ "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E
+ "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F
+ "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70
+ "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71
+ "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72
+ "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73
+ "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74
+ "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75
+ "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76
+ "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77
+ "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78
+ "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79
+ "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A
+ "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B
+ "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
+ "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
+ "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
+ "\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F
+ "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
+ "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
+ "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
+ "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83
+ "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84
+ "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85
+ "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86
+ "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87
+ "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88
+ "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89
+ "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A
+ "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B
+ "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C
+ "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D
+ "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E
+ "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F
+ "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90
+ "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91
+ "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92
+ "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93
+ "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94
+ "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95
+ "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96
+ "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
+ "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
+ "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
+ "\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
+ "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
+ "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
+ "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
+ "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3
+ "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4
+ "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5
+ "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6
+ "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7
+ "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8
+ "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9
+ "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA
+ "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB
+ "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC
+ "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD
+ "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE
+ "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF
+ "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0
+ "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1
+ "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2
+ "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3
+ "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4
+ "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5
+ "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6
+ "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7
+ "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8
+ "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9
+ "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA
+ "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB
+ "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC
+ "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD
+ "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE
+ "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF
+ "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0
+ "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1
+ "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2
+ "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3
+ "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4
+ "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5
+ "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6
+ "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7
+ "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8
+ "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9
+ "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA
+ "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB
+ "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC
+ "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD
+ "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE
+ "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF
+ "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0
+ "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1
+ "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2
+ "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3
+ "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4
+ "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5
+ "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6
+ "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7
+ "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8
+ "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9
+ "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA
+ "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB
+ "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC
+ "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD
+ "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE
+ "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF
+ "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0
+ "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1
+ "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2
+ "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3
+ "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4
+ "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5
+ "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6
+ "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7
+ "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8
+ "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9
+ "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA
+ "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB
+ "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC
+ "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED
+ "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE
+ "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF
+ "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0
+ "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1
+ "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2
+ "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3
+ "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4
+ "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5
+ "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6
+ "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7
+ "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8
+ "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9
+ "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00
+ "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01
+ "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02
+ "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03
+ "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04
+ "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05
+ "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06
+ "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07
+ "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08
+ "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09
+ "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A
+ "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B
+ "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C
+ "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D
+ "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E
+ "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F
+ "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10
+ "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11
+ "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12
+ "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13
+ "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14
+ "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15
+ "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18
+ "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19
+ "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A
+ "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B
+ "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C
+ "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D
+ "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20
+ "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21
+ "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22
+ "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23
+ "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24
+ "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25
+ "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26
+ "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27
+ "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28
+ "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29
+ "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A
+ "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B
+ "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C
+ "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D
+ "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E
+ "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F
+ "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30
+ "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31
+ "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32
+ "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33
+ "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34
+ "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35
+ "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36
+ "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37
+ "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38
+ "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39
+ "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A
+ "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B
+ "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C
+ "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D
+ "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E
+ "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F
+ "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40
+ "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41
+ "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42
+ "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43
+ "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44
+ "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45
+ "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48
+ "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49
+ "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A
+ "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B
+ "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C
+ "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D
+ "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50
+ "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51
+ "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52
+ "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53
+ "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54
+ "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55
+ "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56
+ "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57
+ "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59
+ "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B
+ "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D
+ "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F
+ "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60
+ "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61
+ "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62
+ "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63
+ "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64
+ "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65
+ "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66
+ "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67
+ "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68
+ "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69
+ "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A
+ "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B
+ "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C
+ "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D
+ "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E
+ "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F
+ "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70
+ "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72
+ "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74
+ "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76
+ "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78
+ "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A
+ "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C
+ "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80
+ "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81
+ "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82
+ "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83
+ "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84
+ "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85
+ "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86
+ "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87
+ "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88
+ "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89
+ "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A
+ "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B
+ "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C
+ "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D
+ "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E
+ "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F
+ "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90
+ "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91
+ "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92
+ "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93
+ "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94
+ "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95
+ "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96
+ "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97
+ "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98
+ "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99
+ "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A
+ "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B
+ "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C
+ "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D
+ "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E
+ "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F
+ "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0
+ "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1
+ "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2
+ "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3
+ "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4
+ "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5
+ "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6
+ "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7
+ "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8
+ "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9
+ "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA
+ "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB
+ "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC
+ "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD
+ "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE
+ "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF
+ "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0
+ "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1
+ "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2
+ "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3
+ "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4
+ "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6
+ "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7
+ "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8
+ "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9
+ "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA
+ "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC
+ "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1
+ "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2
+ "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3
+ "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4
+ "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6
+ "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7
+ "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8
+ "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA
+ "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC
+ "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD
+ "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE
+ "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF
+ "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0
+ "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1
+ "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2
+ "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6
+ "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7
+ "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8
+ "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9
+ "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA
+ "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD
+ "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE
+ "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF
+ "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0
+ "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1
+ "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2
+ "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4
+ "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5
+ "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6
+ "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7
+ "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8
+ "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9
+ "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA
+ "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC
+ "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED
+ "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2
+ "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3
+ "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4
+ "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6
+ "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7
+ "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8
+ "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA
+ "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC
+ "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A
+ "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B
+ "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE
+ "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD
+ "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE
+ "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF
+ "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204
+ "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209
+ "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C
+ "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224
+ "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226
+ "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241
+ "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244
+ "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247
+ "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249
+ "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260
+ "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262
+ "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D
+ "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E
+ "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F
+ "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270
+ "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271
+ "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274
+ "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275
+ "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278
+ "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279
+ "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280
+ "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281
+ "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284
+ "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285
+ "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288
+ "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289
+ "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC
+ "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD
+ "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE
+ "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF
+ "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0
+ "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1
+ "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2
+ "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3
+ "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA
+ "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB
+ "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC
+ "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED
+ "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C
+ "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E
+ "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050
+ "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052
+ "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054
+ "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056
+ "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058
+ "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A
+ "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C
+ "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E
+ "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060
+ "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062
+ "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065
+ "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067
+ "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069
+ "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070
+ "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071
+ "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073
+ "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074
+ "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076
+ "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077
+ "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079
+ "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A
+ "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C
+ "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D
+ "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094
+ "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E
+ "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC
+ "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE
+ "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0
+ "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2
+ "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4
+ "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6
+ "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8
+ "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA
+ "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC
+ "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE
+ "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0
+ "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2
+ "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5
+ "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7
+ "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9
+ "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0
+ "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1
+ "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3
+ "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4
+ "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6
+ "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7
+ "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9
+ "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA
+ "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC
+ "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD
+ "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4
+ "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7
+ "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8
+ "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9
+ "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA
+ "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE
+ "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A
+ "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C
+ "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB
+ "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E
+ "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F
+ "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B
+ "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C
+ "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB
+ "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC
+ "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE
+ "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA
+ "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB
+ ""
+ // Total size of tables: 53KB (54226 bytes)
diff --git a/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go
index a01274a..9429069 100644
--- a/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go
+++ b/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go
@@ -4,6 +4,8 @@
package norm
+import "sync"
+
const (
// Version is the Unicode edition from which the tables are derived.
Version = "9.0.0"
@@ -6687,947 +6689,949 @@ var nfkcSparseValues = [875]valueRange{
}
// recompMap: 7520 bytes (entries only)
-var recompMap = map[uint32]rune{
- 0x00410300: 0x00C0,
- 0x00410301: 0x00C1,
- 0x00410302: 0x00C2,
- 0x00410303: 0x00C3,
- 0x00410308: 0x00C4,
- 0x0041030A: 0x00C5,
- 0x00430327: 0x00C7,
- 0x00450300: 0x00C8,
- 0x00450301: 0x00C9,
- 0x00450302: 0x00CA,
- 0x00450308: 0x00CB,
- 0x00490300: 0x00CC,
- 0x00490301: 0x00CD,
- 0x00490302: 0x00CE,
- 0x00490308: 0x00CF,
- 0x004E0303: 0x00D1,
- 0x004F0300: 0x00D2,
- 0x004F0301: 0x00D3,
- 0x004F0302: 0x00D4,
- 0x004F0303: 0x00D5,
- 0x004F0308: 0x00D6,
- 0x00550300: 0x00D9,
- 0x00550301: 0x00DA,
- 0x00550302: 0x00DB,
- 0x00550308: 0x00DC,
- 0x00590301: 0x00DD,
- 0x00610300: 0x00E0,
- 0x00610301: 0x00E1,
- 0x00610302: 0x00E2,
- 0x00610303: 0x00E3,
- 0x00610308: 0x00E4,
- 0x0061030A: 0x00E5,
- 0x00630327: 0x00E7,
- 0x00650300: 0x00E8,
- 0x00650301: 0x00E9,
- 0x00650302: 0x00EA,
- 0x00650308: 0x00EB,
- 0x00690300: 0x00EC,
- 0x00690301: 0x00ED,
- 0x00690302: 0x00EE,
- 0x00690308: 0x00EF,
- 0x006E0303: 0x00F1,
- 0x006F0300: 0x00F2,
- 0x006F0301: 0x00F3,
- 0x006F0302: 0x00F4,
- 0x006F0303: 0x00F5,
- 0x006F0308: 0x00F6,
- 0x00750300: 0x00F9,
- 0x00750301: 0x00FA,
- 0x00750302: 0x00FB,
- 0x00750308: 0x00FC,
- 0x00790301: 0x00FD,
- 0x00790308: 0x00FF,
- 0x00410304: 0x0100,
- 0x00610304: 0x0101,
- 0x00410306: 0x0102,
- 0x00610306: 0x0103,
- 0x00410328: 0x0104,
- 0x00610328: 0x0105,
- 0x00430301: 0x0106,
- 0x00630301: 0x0107,
- 0x00430302: 0x0108,
- 0x00630302: 0x0109,
- 0x00430307: 0x010A,
- 0x00630307: 0x010B,
- 0x0043030C: 0x010C,
- 0x0063030C: 0x010D,
- 0x0044030C: 0x010E,
- 0x0064030C: 0x010F,
- 0x00450304: 0x0112,
- 0x00650304: 0x0113,
- 0x00450306: 0x0114,
- 0x00650306: 0x0115,
- 0x00450307: 0x0116,
- 0x00650307: 0x0117,
- 0x00450328: 0x0118,
- 0x00650328: 0x0119,
- 0x0045030C: 0x011A,
- 0x0065030C: 0x011B,
- 0x00470302: 0x011C,
- 0x00670302: 0x011D,
- 0x00470306: 0x011E,
- 0x00670306: 0x011F,
- 0x00470307: 0x0120,
- 0x00670307: 0x0121,
- 0x00470327: 0x0122,
- 0x00670327: 0x0123,
- 0x00480302: 0x0124,
- 0x00680302: 0x0125,
- 0x00490303: 0x0128,
- 0x00690303: 0x0129,
- 0x00490304: 0x012A,
- 0x00690304: 0x012B,
- 0x00490306: 0x012C,
- 0x00690306: 0x012D,
- 0x00490328: 0x012E,
- 0x00690328: 0x012F,
- 0x00490307: 0x0130,
- 0x004A0302: 0x0134,
- 0x006A0302: 0x0135,
- 0x004B0327: 0x0136,
- 0x006B0327: 0x0137,
- 0x004C0301: 0x0139,
- 0x006C0301: 0x013A,
- 0x004C0327: 0x013B,
- 0x006C0327: 0x013C,
- 0x004C030C: 0x013D,
- 0x006C030C: 0x013E,
- 0x004E0301: 0x0143,
- 0x006E0301: 0x0144,
- 0x004E0327: 0x0145,
- 0x006E0327: 0x0146,
- 0x004E030C: 0x0147,
- 0x006E030C: 0x0148,
- 0x004F0304: 0x014C,
- 0x006F0304: 0x014D,
- 0x004F0306: 0x014E,
- 0x006F0306: 0x014F,
- 0x004F030B: 0x0150,
- 0x006F030B: 0x0151,
- 0x00520301: 0x0154,
- 0x00720301: 0x0155,
- 0x00520327: 0x0156,
- 0x00720327: 0x0157,
- 0x0052030C: 0x0158,
- 0x0072030C: 0x0159,
- 0x00530301: 0x015A,
- 0x00730301: 0x015B,
- 0x00530302: 0x015C,
- 0x00730302: 0x015D,
- 0x00530327: 0x015E,
- 0x00730327: 0x015F,
- 0x0053030C: 0x0160,
- 0x0073030C: 0x0161,
- 0x00540327: 0x0162,
- 0x00740327: 0x0163,
- 0x0054030C: 0x0164,
- 0x0074030C: 0x0165,
- 0x00550303: 0x0168,
- 0x00750303: 0x0169,
- 0x00550304: 0x016A,
- 0x00750304: 0x016B,
- 0x00550306: 0x016C,
- 0x00750306: 0x016D,
- 0x0055030A: 0x016E,
- 0x0075030A: 0x016F,
- 0x0055030B: 0x0170,
- 0x0075030B: 0x0171,
- 0x00550328: 0x0172,
- 0x00750328: 0x0173,
- 0x00570302: 0x0174,
- 0x00770302: 0x0175,
- 0x00590302: 0x0176,
- 0x00790302: 0x0177,
- 0x00590308: 0x0178,
- 0x005A0301: 0x0179,
- 0x007A0301: 0x017A,
- 0x005A0307: 0x017B,
- 0x007A0307: 0x017C,
- 0x005A030C: 0x017D,
- 0x007A030C: 0x017E,
- 0x004F031B: 0x01A0,
- 0x006F031B: 0x01A1,
- 0x0055031B: 0x01AF,
- 0x0075031B: 0x01B0,
- 0x0041030C: 0x01CD,
- 0x0061030C: 0x01CE,
- 0x0049030C: 0x01CF,
- 0x0069030C: 0x01D0,
- 0x004F030C: 0x01D1,
- 0x006F030C: 0x01D2,
- 0x0055030C: 0x01D3,
- 0x0075030C: 0x01D4,
- 0x00DC0304: 0x01D5,
- 0x00FC0304: 0x01D6,
- 0x00DC0301: 0x01D7,
- 0x00FC0301: 0x01D8,
- 0x00DC030C: 0x01D9,
- 0x00FC030C: 0x01DA,
- 0x00DC0300: 0x01DB,
- 0x00FC0300: 0x01DC,
- 0x00C40304: 0x01DE,
- 0x00E40304: 0x01DF,
- 0x02260304: 0x01E0,
- 0x02270304: 0x01E1,
- 0x00C60304: 0x01E2,
- 0x00E60304: 0x01E3,
- 0x0047030C: 0x01E6,
- 0x0067030C: 0x01E7,
- 0x004B030C: 0x01E8,
- 0x006B030C: 0x01E9,
- 0x004F0328: 0x01EA,
- 0x006F0328: 0x01EB,
- 0x01EA0304: 0x01EC,
- 0x01EB0304: 0x01ED,
- 0x01B7030C: 0x01EE,
- 0x0292030C: 0x01EF,
- 0x006A030C: 0x01F0,
- 0x00470301: 0x01F4,
- 0x00670301: 0x01F5,
- 0x004E0300: 0x01F8,
- 0x006E0300: 0x01F9,
- 0x00C50301: 0x01FA,
- 0x00E50301: 0x01FB,
- 0x00C60301: 0x01FC,
- 0x00E60301: 0x01FD,
- 0x00D80301: 0x01FE,
- 0x00F80301: 0x01FF,
- 0x0041030F: 0x0200,
- 0x0061030F: 0x0201,
- 0x00410311: 0x0202,
- 0x00610311: 0x0203,
- 0x0045030F: 0x0204,
- 0x0065030F: 0x0205,
- 0x00450311: 0x0206,
- 0x00650311: 0x0207,
- 0x0049030F: 0x0208,
- 0x0069030F: 0x0209,
- 0x00490311: 0x020A,
- 0x00690311: 0x020B,
- 0x004F030F: 0x020C,
- 0x006F030F: 0x020D,
- 0x004F0311: 0x020E,
- 0x006F0311: 0x020F,
- 0x0052030F: 0x0210,
- 0x0072030F: 0x0211,
- 0x00520311: 0x0212,
- 0x00720311: 0x0213,
- 0x0055030F: 0x0214,
- 0x0075030F: 0x0215,
- 0x00550311: 0x0216,
- 0x00750311: 0x0217,
- 0x00530326: 0x0218,
- 0x00730326: 0x0219,
- 0x00540326: 0x021A,
- 0x00740326: 0x021B,
- 0x0048030C: 0x021E,
- 0x0068030C: 0x021F,
- 0x00410307: 0x0226,
- 0x00610307: 0x0227,
- 0x00450327: 0x0228,
- 0x00650327: 0x0229,
- 0x00D60304: 0x022A,
- 0x00F60304: 0x022B,
- 0x00D50304: 0x022C,
- 0x00F50304: 0x022D,
- 0x004F0307: 0x022E,
- 0x006F0307: 0x022F,
- 0x022E0304: 0x0230,
- 0x022F0304: 0x0231,
- 0x00590304: 0x0232,
- 0x00790304: 0x0233,
- 0x00A80301: 0x0385,
- 0x03910301: 0x0386,
- 0x03950301: 0x0388,
- 0x03970301: 0x0389,
- 0x03990301: 0x038A,
- 0x039F0301: 0x038C,
- 0x03A50301: 0x038E,
- 0x03A90301: 0x038F,
- 0x03CA0301: 0x0390,
- 0x03990308: 0x03AA,
- 0x03A50308: 0x03AB,
- 0x03B10301: 0x03AC,
- 0x03B50301: 0x03AD,
- 0x03B70301: 0x03AE,
- 0x03B90301: 0x03AF,
- 0x03CB0301: 0x03B0,
- 0x03B90308: 0x03CA,
- 0x03C50308: 0x03CB,
- 0x03BF0301: 0x03CC,
- 0x03C50301: 0x03CD,
- 0x03C90301: 0x03CE,
- 0x03D20301: 0x03D3,
- 0x03D20308: 0x03D4,
- 0x04150300: 0x0400,
- 0x04150308: 0x0401,
- 0x04130301: 0x0403,
- 0x04060308: 0x0407,
- 0x041A0301: 0x040C,
- 0x04180300: 0x040D,
- 0x04230306: 0x040E,
- 0x04180306: 0x0419,
- 0x04380306: 0x0439,
- 0x04350300: 0x0450,
- 0x04350308: 0x0451,
- 0x04330301: 0x0453,
- 0x04560308: 0x0457,
- 0x043A0301: 0x045C,
- 0x04380300: 0x045D,
- 0x04430306: 0x045E,
- 0x0474030F: 0x0476,
- 0x0475030F: 0x0477,
- 0x04160306: 0x04C1,
- 0x04360306: 0x04C2,
- 0x04100306: 0x04D0,
- 0x04300306: 0x04D1,
- 0x04100308: 0x04D2,
- 0x04300308: 0x04D3,
- 0x04150306: 0x04D6,
- 0x04350306: 0x04D7,
- 0x04D80308: 0x04DA,
- 0x04D90308: 0x04DB,
- 0x04160308: 0x04DC,
- 0x04360308: 0x04DD,
- 0x04170308: 0x04DE,
- 0x04370308: 0x04DF,
- 0x04180304: 0x04E2,
- 0x04380304: 0x04E3,
- 0x04180308: 0x04E4,
- 0x04380308: 0x04E5,
- 0x041E0308: 0x04E6,
- 0x043E0308: 0x04E7,
- 0x04E80308: 0x04EA,
- 0x04E90308: 0x04EB,
- 0x042D0308: 0x04EC,
- 0x044D0308: 0x04ED,
- 0x04230304: 0x04EE,
- 0x04430304: 0x04EF,
- 0x04230308: 0x04F0,
- 0x04430308: 0x04F1,
- 0x0423030B: 0x04F2,
- 0x0443030B: 0x04F3,
- 0x04270308: 0x04F4,
- 0x04470308: 0x04F5,
- 0x042B0308: 0x04F8,
- 0x044B0308: 0x04F9,
- 0x06270653: 0x0622,
- 0x06270654: 0x0623,
- 0x06480654: 0x0624,
- 0x06270655: 0x0625,
- 0x064A0654: 0x0626,
- 0x06D50654: 0x06C0,
- 0x06C10654: 0x06C2,
- 0x06D20654: 0x06D3,
- 0x0928093C: 0x0929,
- 0x0930093C: 0x0931,
- 0x0933093C: 0x0934,
- 0x09C709BE: 0x09CB,
- 0x09C709D7: 0x09CC,
- 0x0B470B56: 0x0B48,
- 0x0B470B3E: 0x0B4B,
- 0x0B470B57: 0x0B4C,
- 0x0B920BD7: 0x0B94,
- 0x0BC60BBE: 0x0BCA,
- 0x0BC70BBE: 0x0BCB,
- 0x0BC60BD7: 0x0BCC,
- 0x0C460C56: 0x0C48,
- 0x0CBF0CD5: 0x0CC0,
- 0x0CC60CD5: 0x0CC7,
- 0x0CC60CD6: 0x0CC8,
- 0x0CC60CC2: 0x0CCA,
- 0x0CCA0CD5: 0x0CCB,
- 0x0D460D3E: 0x0D4A,
- 0x0D470D3E: 0x0D4B,
- 0x0D460D57: 0x0D4C,
- 0x0DD90DCA: 0x0DDA,
- 0x0DD90DCF: 0x0DDC,
- 0x0DDC0DCA: 0x0DDD,
- 0x0DD90DDF: 0x0DDE,
- 0x1025102E: 0x1026,
- 0x1B051B35: 0x1B06,
- 0x1B071B35: 0x1B08,
- 0x1B091B35: 0x1B0A,
- 0x1B0B1B35: 0x1B0C,
- 0x1B0D1B35: 0x1B0E,
- 0x1B111B35: 0x1B12,
- 0x1B3A1B35: 0x1B3B,
- 0x1B3C1B35: 0x1B3D,
- 0x1B3E1B35: 0x1B40,
- 0x1B3F1B35: 0x1B41,
- 0x1B421B35: 0x1B43,
- 0x00410325: 0x1E00,
- 0x00610325: 0x1E01,
- 0x00420307: 0x1E02,
- 0x00620307: 0x1E03,
- 0x00420323: 0x1E04,
- 0x00620323: 0x1E05,
- 0x00420331: 0x1E06,
- 0x00620331: 0x1E07,
- 0x00C70301: 0x1E08,
- 0x00E70301: 0x1E09,
- 0x00440307: 0x1E0A,
- 0x00640307: 0x1E0B,
- 0x00440323: 0x1E0C,
- 0x00640323: 0x1E0D,
- 0x00440331: 0x1E0E,
- 0x00640331: 0x1E0F,
- 0x00440327: 0x1E10,
- 0x00640327: 0x1E11,
- 0x0044032D: 0x1E12,
- 0x0064032D: 0x1E13,
- 0x01120300: 0x1E14,
- 0x01130300: 0x1E15,
- 0x01120301: 0x1E16,
- 0x01130301: 0x1E17,
- 0x0045032D: 0x1E18,
- 0x0065032D: 0x1E19,
- 0x00450330: 0x1E1A,
- 0x00650330: 0x1E1B,
- 0x02280306: 0x1E1C,
- 0x02290306: 0x1E1D,
- 0x00460307: 0x1E1E,
- 0x00660307: 0x1E1F,
- 0x00470304: 0x1E20,
- 0x00670304: 0x1E21,
- 0x00480307: 0x1E22,
- 0x00680307: 0x1E23,
- 0x00480323: 0x1E24,
- 0x00680323: 0x1E25,
- 0x00480308: 0x1E26,
- 0x00680308: 0x1E27,
- 0x00480327: 0x1E28,
- 0x00680327: 0x1E29,
- 0x0048032E: 0x1E2A,
- 0x0068032E: 0x1E2B,
- 0x00490330: 0x1E2C,
- 0x00690330: 0x1E2D,
- 0x00CF0301: 0x1E2E,
- 0x00EF0301: 0x1E2F,
- 0x004B0301: 0x1E30,
- 0x006B0301: 0x1E31,
- 0x004B0323: 0x1E32,
- 0x006B0323: 0x1E33,
- 0x004B0331: 0x1E34,
- 0x006B0331: 0x1E35,
- 0x004C0323: 0x1E36,
- 0x006C0323: 0x1E37,
- 0x1E360304: 0x1E38,
- 0x1E370304: 0x1E39,
- 0x004C0331: 0x1E3A,
- 0x006C0331: 0x1E3B,
- 0x004C032D: 0x1E3C,
- 0x006C032D: 0x1E3D,
- 0x004D0301: 0x1E3E,
- 0x006D0301: 0x1E3F,
- 0x004D0307: 0x1E40,
- 0x006D0307: 0x1E41,
- 0x004D0323: 0x1E42,
- 0x006D0323: 0x1E43,
- 0x004E0307: 0x1E44,
- 0x006E0307: 0x1E45,
- 0x004E0323: 0x1E46,
- 0x006E0323: 0x1E47,
- 0x004E0331: 0x1E48,
- 0x006E0331: 0x1E49,
- 0x004E032D: 0x1E4A,
- 0x006E032D: 0x1E4B,
- 0x00D50301: 0x1E4C,
- 0x00F50301: 0x1E4D,
- 0x00D50308: 0x1E4E,
- 0x00F50308: 0x1E4F,
- 0x014C0300: 0x1E50,
- 0x014D0300: 0x1E51,
- 0x014C0301: 0x1E52,
- 0x014D0301: 0x1E53,
- 0x00500301: 0x1E54,
- 0x00700301: 0x1E55,
- 0x00500307: 0x1E56,
- 0x00700307: 0x1E57,
- 0x00520307: 0x1E58,
- 0x00720307: 0x1E59,
- 0x00520323: 0x1E5A,
- 0x00720323: 0x1E5B,
- 0x1E5A0304: 0x1E5C,
- 0x1E5B0304: 0x1E5D,
- 0x00520331: 0x1E5E,
- 0x00720331: 0x1E5F,
- 0x00530307: 0x1E60,
- 0x00730307: 0x1E61,
- 0x00530323: 0x1E62,
- 0x00730323: 0x1E63,
- 0x015A0307: 0x1E64,
- 0x015B0307: 0x1E65,
- 0x01600307: 0x1E66,
- 0x01610307: 0x1E67,
- 0x1E620307: 0x1E68,
- 0x1E630307: 0x1E69,
- 0x00540307: 0x1E6A,
- 0x00740307: 0x1E6B,
- 0x00540323: 0x1E6C,
- 0x00740323: 0x1E6D,
- 0x00540331: 0x1E6E,
- 0x00740331: 0x1E6F,
- 0x0054032D: 0x1E70,
- 0x0074032D: 0x1E71,
- 0x00550324: 0x1E72,
- 0x00750324: 0x1E73,
- 0x00550330: 0x1E74,
- 0x00750330: 0x1E75,
- 0x0055032D: 0x1E76,
- 0x0075032D: 0x1E77,
- 0x01680301: 0x1E78,
- 0x01690301: 0x1E79,
- 0x016A0308: 0x1E7A,
- 0x016B0308: 0x1E7B,
- 0x00560303: 0x1E7C,
- 0x00760303: 0x1E7D,
- 0x00560323: 0x1E7E,
- 0x00760323: 0x1E7F,
- 0x00570300: 0x1E80,
- 0x00770300: 0x1E81,
- 0x00570301: 0x1E82,
- 0x00770301: 0x1E83,
- 0x00570308: 0x1E84,
- 0x00770308: 0x1E85,
- 0x00570307: 0x1E86,
- 0x00770307: 0x1E87,
- 0x00570323: 0x1E88,
- 0x00770323: 0x1E89,
- 0x00580307: 0x1E8A,
- 0x00780307: 0x1E8B,
- 0x00580308: 0x1E8C,
- 0x00780308: 0x1E8D,
- 0x00590307: 0x1E8E,
- 0x00790307: 0x1E8F,
- 0x005A0302: 0x1E90,
- 0x007A0302: 0x1E91,
- 0x005A0323: 0x1E92,
- 0x007A0323: 0x1E93,
- 0x005A0331: 0x1E94,
- 0x007A0331: 0x1E95,
- 0x00680331: 0x1E96,
- 0x00740308: 0x1E97,
- 0x0077030A: 0x1E98,
- 0x0079030A: 0x1E99,
- 0x017F0307: 0x1E9B,
- 0x00410323: 0x1EA0,
- 0x00610323: 0x1EA1,
- 0x00410309: 0x1EA2,
- 0x00610309: 0x1EA3,
- 0x00C20301: 0x1EA4,
- 0x00E20301: 0x1EA5,
- 0x00C20300: 0x1EA6,
- 0x00E20300: 0x1EA7,
- 0x00C20309: 0x1EA8,
- 0x00E20309: 0x1EA9,
- 0x00C20303: 0x1EAA,
- 0x00E20303: 0x1EAB,
- 0x1EA00302: 0x1EAC,
- 0x1EA10302: 0x1EAD,
- 0x01020301: 0x1EAE,
- 0x01030301: 0x1EAF,
- 0x01020300: 0x1EB0,
- 0x01030300: 0x1EB1,
- 0x01020309: 0x1EB2,
- 0x01030309: 0x1EB3,
- 0x01020303: 0x1EB4,
- 0x01030303: 0x1EB5,
- 0x1EA00306: 0x1EB6,
- 0x1EA10306: 0x1EB7,
- 0x00450323: 0x1EB8,
- 0x00650323: 0x1EB9,
- 0x00450309: 0x1EBA,
- 0x00650309: 0x1EBB,
- 0x00450303: 0x1EBC,
- 0x00650303: 0x1EBD,
- 0x00CA0301: 0x1EBE,
- 0x00EA0301: 0x1EBF,
- 0x00CA0300: 0x1EC0,
- 0x00EA0300: 0x1EC1,
- 0x00CA0309: 0x1EC2,
- 0x00EA0309: 0x1EC3,
- 0x00CA0303: 0x1EC4,
- 0x00EA0303: 0x1EC5,
- 0x1EB80302: 0x1EC6,
- 0x1EB90302: 0x1EC7,
- 0x00490309: 0x1EC8,
- 0x00690309: 0x1EC9,
- 0x00490323: 0x1ECA,
- 0x00690323: 0x1ECB,
- 0x004F0323: 0x1ECC,
- 0x006F0323: 0x1ECD,
- 0x004F0309: 0x1ECE,
- 0x006F0309: 0x1ECF,
- 0x00D40301: 0x1ED0,
- 0x00F40301: 0x1ED1,
- 0x00D40300: 0x1ED2,
- 0x00F40300: 0x1ED3,
- 0x00D40309: 0x1ED4,
- 0x00F40309: 0x1ED5,
- 0x00D40303: 0x1ED6,
- 0x00F40303: 0x1ED7,
- 0x1ECC0302: 0x1ED8,
- 0x1ECD0302: 0x1ED9,
- 0x01A00301: 0x1EDA,
- 0x01A10301: 0x1EDB,
- 0x01A00300: 0x1EDC,
- 0x01A10300: 0x1EDD,
- 0x01A00309: 0x1EDE,
- 0x01A10309: 0x1EDF,
- 0x01A00303: 0x1EE0,
- 0x01A10303: 0x1EE1,
- 0x01A00323: 0x1EE2,
- 0x01A10323: 0x1EE3,
- 0x00550323: 0x1EE4,
- 0x00750323: 0x1EE5,
- 0x00550309: 0x1EE6,
- 0x00750309: 0x1EE7,
- 0x01AF0301: 0x1EE8,
- 0x01B00301: 0x1EE9,
- 0x01AF0300: 0x1EEA,
- 0x01B00300: 0x1EEB,
- 0x01AF0309: 0x1EEC,
- 0x01B00309: 0x1EED,
- 0x01AF0303: 0x1EEE,
- 0x01B00303: 0x1EEF,
- 0x01AF0323: 0x1EF0,
- 0x01B00323: 0x1EF1,
- 0x00590300: 0x1EF2,
- 0x00790300: 0x1EF3,
- 0x00590323: 0x1EF4,
- 0x00790323: 0x1EF5,
- 0x00590309: 0x1EF6,
- 0x00790309: 0x1EF7,
- 0x00590303: 0x1EF8,
- 0x00790303: 0x1EF9,
- 0x03B10313: 0x1F00,
- 0x03B10314: 0x1F01,
- 0x1F000300: 0x1F02,
- 0x1F010300: 0x1F03,
- 0x1F000301: 0x1F04,
- 0x1F010301: 0x1F05,
- 0x1F000342: 0x1F06,
- 0x1F010342: 0x1F07,
- 0x03910313: 0x1F08,
- 0x03910314: 0x1F09,
- 0x1F080300: 0x1F0A,
- 0x1F090300: 0x1F0B,
- 0x1F080301: 0x1F0C,
- 0x1F090301: 0x1F0D,
- 0x1F080342: 0x1F0E,
- 0x1F090342: 0x1F0F,
- 0x03B50313: 0x1F10,
- 0x03B50314: 0x1F11,
- 0x1F100300: 0x1F12,
- 0x1F110300: 0x1F13,
- 0x1F100301: 0x1F14,
- 0x1F110301: 0x1F15,
- 0x03950313: 0x1F18,
- 0x03950314: 0x1F19,
- 0x1F180300: 0x1F1A,
- 0x1F190300: 0x1F1B,
- 0x1F180301: 0x1F1C,
- 0x1F190301: 0x1F1D,
- 0x03B70313: 0x1F20,
- 0x03B70314: 0x1F21,
- 0x1F200300: 0x1F22,
- 0x1F210300: 0x1F23,
- 0x1F200301: 0x1F24,
- 0x1F210301: 0x1F25,
- 0x1F200342: 0x1F26,
- 0x1F210342: 0x1F27,
- 0x03970313: 0x1F28,
- 0x03970314: 0x1F29,
- 0x1F280300: 0x1F2A,
- 0x1F290300: 0x1F2B,
- 0x1F280301: 0x1F2C,
- 0x1F290301: 0x1F2D,
- 0x1F280342: 0x1F2E,
- 0x1F290342: 0x1F2F,
- 0x03B90313: 0x1F30,
- 0x03B90314: 0x1F31,
- 0x1F300300: 0x1F32,
- 0x1F310300: 0x1F33,
- 0x1F300301: 0x1F34,
- 0x1F310301: 0x1F35,
- 0x1F300342: 0x1F36,
- 0x1F310342: 0x1F37,
- 0x03990313: 0x1F38,
- 0x03990314: 0x1F39,
- 0x1F380300: 0x1F3A,
- 0x1F390300: 0x1F3B,
- 0x1F380301: 0x1F3C,
- 0x1F390301: 0x1F3D,
- 0x1F380342: 0x1F3E,
- 0x1F390342: 0x1F3F,
- 0x03BF0313: 0x1F40,
- 0x03BF0314: 0x1F41,
- 0x1F400300: 0x1F42,
- 0x1F410300: 0x1F43,
- 0x1F400301: 0x1F44,
- 0x1F410301: 0x1F45,
- 0x039F0313: 0x1F48,
- 0x039F0314: 0x1F49,
- 0x1F480300: 0x1F4A,
- 0x1F490300: 0x1F4B,
- 0x1F480301: 0x1F4C,
- 0x1F490301: 0x1F4D,
- 0x03C50313: 0x1F50,
- 0x03C50314: 0x1F51,
- 0x1F500300: 0x1F52,
- 0x1F510300: 0x1F53,
- 0x1F500301: 0x1F54,
- 0x1F510301: 0x1F55,
- 0x1F500342: 0x1F56,
- 0x1F510342: 0x1F57,
- 0x03A50314: 0x1F59,
- 0x1F590300: 0x1F5B,
- 0x1F590301: 0x1F5D,
- 0x1F590342: 0x1F5F,
- 0x03C90313: 0x1F60,
- 0x03C90314: 0x1F61,
- 0x1F600300: 0x1F62,
- 0x1F610300: 0x1F63,
- 0x1F600301: 0x1F64,
- 0x1F610301: 0x1F65,
- 0x1F600342: 0x1F66,
- 0x1F610342: 0x1F67,
- 0x03A90313: 0x1F68,
- 0x03A90314: 0x1F69,
- 0x1F680300: 0x1F6A,
- 0x1F690300: 0x1F6B,
- 0x1F680301: 0x1F6C,
- 0x1F690301: 0x1F6D,
- 0x1F680342: 0x1F6E,
- 0x1F690342: 0x1F6F,
- 0x03B10300: 0x1F70,
- 0x03B50300: 0x1F72,
- 0x03B70300: 0x1F74,
- 0x03B90300: 0x1F76,
- 0x03BF0300: 0x1F78,
- 0x03C50300: 0x1F7A,
- 0x03C90300: 0x1F7C,
- 0x1F000345: 0x1F80,
- 0x1F010345: 0x1F81,
- 0x1F020345: 0x1F82,
- 0x1F030345: 0x1F83,
- 0x1F040345: 0x1F84,
- 0x1F050345: 0x1F85,
- 0x1F060345: 0x1F86,
- 0x1F070345: 0x1F87,
- 0x1F080345: 0x1F88,
- 0x1F090345: 0x1F89,
- 0x1F0A0345: 0x1F8A,
- 0x1F0B0345: 0x1F8B,
- 0x1F0C0345: 0x1F8C,
- 0x1F0D0345: 0x1F8D,
- 0x1F0E0345: 0x1F8E,
- 0x1F0F0345: 0x1F8F,
- 0x1F200345: 0x1F90,
- 0x1F210345: 0x1F91,
- 0x1F220345: 0x1F92,
- 0x1F230345: 0x1F93,
- 0x1F240345: 0x1F94,
- 0x1F250345: 0x1F95,
- 0x1F260345: 0x1F96,
- 0x1F270345: 0x1F97,
- 0x1F280345: 0x1F98,
- 0x1F290345: 0x1F99,
- 0x1F2A0345: 0x1F9A,
- 0x1F2B0345: 0x1F9B,
- 0x1F2C0345: 0x1F9C,
- 0x1F2D0345: 0x1F9D,
- 0x1F2E0345: 0x1F9E,
- 0x1F2F0345: 0x1F9F,
- 0x1F600345: 0x1FA0,
- 0x1F610345: 0x1FA1,
- 0x1F620345: 0x1FA2,
- 0x1F630345: 0x1FA3,
- 0x1F640345: 0x1FA4,
- 0x1F650345: 0x1FA5,
- 0x1F660345: 0x1FA6,
- 0x1F670345: 0x1FA7,
- 0x1F680345: 0x1FA8,
- 0x1F690345: 0x1FA9,
- 0x1F6A0345: 0x1FAA,
- 0x1F6B0345: 0x1FAB,
- 0x1F6C0345: 0x1FAC,
- 0x1F6D0345: 0x1FAD,
- 0x1F6E0345: 0x1FAE,
- 0x1F6F0345: 0x1FAF,
- 0x03B10306: 0x1FB0,
- 0x03B10304: 0x1FB1,
- 0x1F700345: 0x1FB2,
- 0x03B10345: 0x1FB3,
- 0x03AC0345: 0x1FB4,
- 0x03B10342: 0x1FB6,
- 0x1FB60345: 0x1FB7,
- 0x03910306: 0x1FB8,
- 0x03910304: 0x1FB9,
- 0x03910300: 0x1FBA,
- 0x03910345: 0x1FBC,
- 0x00A80342: 0x1FC1,
- 0x1F740345: 0x1FC2,
- 0x03B70345: 0x1FC3,
- 0x03AE0345: 0x1FC4,
- 0x03B70342: 0x1FC6,
- 0x1FC60345: 0x1FC7,
- 0x03950300: 0x1FC8,
- 0x03970300: 0x1FCA,
- 0x03970345: 0x1FCC,
- 0x1FBF0300: 0x1FCD,
- 0x1FBF0301: 0x1FCE,
- 0x1FBF0342: 0x1FCF,
- 0x03B90306: 0x1FD0,
- 0x03B90304: 0x1FD1,
- 0x03CA0300: 0x1FD2,
- 0x03B90342: 0x1FD6,
- 0x03CA0342: 0x1FD7,
- 0x03990306: 0x1FD8,
- 0x03990304: 0x1FD9,
- 0x03990300: 0x1FDA,
- 0x1FFE0300: 0x1FDD,
- 0x1FFE0301: 0x1FDE,
- 0x1FFE0342: 0x1FDF,
- 0x03C50306: 0x1FE0,
- 0x03C50304: 0x1FE1,
- 0x03CB0300: 0x1FE2,
- 0x03C10313: 0x1FE4,
- 0x03C10314: 0x1FE5,
- 0x03C50342: 0x1FE6,
- 0x03CB0342: 0x1FE7,
- 0x03A50306: 0x1FE8,
- 0x03A50304: 0x1FE9,
- 0x03A50300: 0x1FEA,
- 0x03A10314: 0x1FEC,
- 0x00A80300: 0x1FED,
- 0x1F7C0345: 0x1FF2,
- 0x03C90345: 0x1FF3,
- 0x03CE0345: 0x1FF4,
- 0x03C90342: 0x1FF6,
- 0x1FF60345: 0x1FF7,
- 0x039F0300: 0x1FF8,
- 0x03A90300: 0x1FFA,
- 0x03A90345: 0x1FFC,
- 0x21900338: 0x219A,
- 0x21920338: 0x219B,
- 0x21940338: 0x21AE,
- 0x21D00338: 0x21CD,
- 0x21D40338: 0x21CE,
- 0x21D20338: 0x21CF,
- 0x22030338: 0x2204,
- 0x22080338: 0x2209,
- 0x220B0338: 0x220C,
- 0x22230338: 0x2224,
- 0x22250338: 0x2226,
- 0x223C0338: 0x2241,
- 0x22430338: 0x2244,
- 0x22450338: 0x2247,
- 0x22480338: 0x2249,
- 0x003D0338: 0x2260,
- 0x22610338: 0x2262,
- 0x224D0338: 0x226D,
- 0x003C0338: 0x226E,
- 0x003E0338: 0x226F,
- 0x22640338: 0x2270,
- 0x22650338: 0x2271,
- 0x22720338: 0x2274,
- 0x22730338: 0x2275,
- 0x22760338: 0x2278,
- 0x22770338: 0x2279,
- 0x227A0338: 0x2280,
- 0x227B0338: 0x2281,
- 0x22820338: 0x2284,
- 0x22830338: 0x2285,
- 0x22860338: 0x2288,
- 0x22870338: 0x2289,
- 0x22A20338: 0x22AC,
- 0x22A80338: 0x22AD,
- 0x22A90338: 0x22AE,
- 0x22AB0338: 0x22AF,
- 0x227C0338: 0x22E0,
- 0x227D0338: 0x22E1,
- 0x22910338: 0x22E2,
- 0x22920338: 0x22E3,
- 0x22B20338: 0x22EA,
- 0x22B30338: 0x22EB,
- 0x22B40338: 0x22EC,
- 0x22B50338: 0x22ED,
- 0x304B3099: 0x304C,
- 0x304D3099: 0x304E,
- 0x304F3099: 0x3050,
- 0x30513099: 0x3052,
- 0x30533099: 0x3054,
- 0x30553099: 0x3056,
- 0x30573099: 0x3058,
- 0x30593099: 0x305A,
- 0x305B3099: 0x305C,
- 0x305D3099: 0x305E,
- 0x305F3099: 0x3060,
- 0x30613099: 0x3062,
- 0x30643099: 0x3065,
- 0x30663099: 0x3067,
- 0x30683099: 0x3069,
- 0x306F3099: 0x3070,
- 0x306F309A: 0x3071,
- 0x30723099: 0x3073,
- 0x3072309A: 0x3074,
- 0x30753099: 0x3076,
- 0x3075309A: 0x3077,
- 0x30783099: 0x3079,
- 0x3078309A: 0x307A,
- 0x307B3099: 0x307C,
- 0x307B309A: 0x307D,
- 0x30463099: 0x3094,
- 0x309D3099: 0x309E,
- 0x30AB3099: 0x30AC,
- 0x30AD3099: 0x30AE,
- 0x30AF3099: 0x30B0,
- 0x30B13099: 0x30B2,
- 0x30B33099: 0x30B4,
- 0x30B53099: 0x30B6,
- 0x30B73099: 0x30B8,
- 0x30B93099: 0x30BA,
- 0x30BB3099: 0x30BC,
- 0x30BD3099: 0x30BE,
- 0x30BF3099: 0x30C0,
- 0x30C13099: 0x30C2,
- 0x30C43099: 0x30C5,
- 0x30C63099: 0x30C7,
- 0x30C83099: 0x30C9,
- 0x30CF3099: 0x30D0,
- 0x30CF309A: 0x30D1,
- 0x30D23099: 0x30D3,
- 0x30D2309A: 0x30D4,
- 0x30D53099: 0x30D6,
- 0x30D5309A: 0x30D7,
- 0x30D83099: 0x30D9,
- 0x30D8309A: 0x30DA,
- 0x30DB3099: 0x30DC,
- 0x30DB309A: 0x30DD,
- 0x30A63099: 0x30F4,
- 0x30EF3099: 0x30F7,
- 0x30F03099: 0x30F8,
- 0x30F13099: 0x30F9,
- 0x30F23099: 0x30FA,
- 0x30FD3099: 0x30FE,
- 0x109910BA: 0x1109A,
- 0x109B10BA: 0x1109C,
- 0x10A510BA: 0x110AB,
- 0x11311127: 0x1112E,
- 0x11321127: 0x1112F,
- 0x1347133E: 0x1134B,
- 0x13471357: 0x1134C,
- 0x14B914BA: 0x114BB,
- 0x14B914B0: 0x114BC,
- 0x14B914BD: 0x114BE,
- 0x15B815AF: 0x115BA,
- 0x15B915AF: 0x115BB,
-}
+var recompMap map[uint32]rune
+var recompMapOnce sync.Once
-// Total size of tables: 53KB (54006 bytes)
+const recompMapPacked = "" +
+ "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0
+ "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1
+ "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2
+ "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3
+ "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4
+ "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5
+ "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7
+ "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8
+ "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9
+ "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA
+ "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB
+ "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC
+ "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD
+ "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE
+ "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF
+ "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1
+ "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2
+ "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3
+ "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4
+ "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5
+ "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6
+ "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9
+ "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA
+ "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB
+ "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC
+ "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD
+ "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0
+ "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1
+ "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2
+ "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3
+ "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4
+ "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5
+ "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7
+ "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8
+ "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9
+ "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA
+ "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB
+ "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC
+ "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED
+ "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE
+ "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF
+ "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1
+ "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2
+ "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3
+ "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4
+ "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5
+ "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6
+ "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9
+ "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA
+ "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB
+ "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC
+ "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD
+ "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF
+ "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100
+ "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101
+ "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102
+ "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103
+ "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104
+ "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105
+ "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106
+ "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107
+ "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108
+ "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109
+ "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A
+ "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B
+ "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C
+ "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D
+ "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E
+ "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F
+ "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112
+ "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113
+ "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114
+ "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115
+ "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116
+ "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117
+ "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118
+ "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119
+ "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A
+ "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B
+ "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C
+ "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D
+ "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E
+ "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F
+ "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120
+ "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121
+ "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122
+ "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123
+ "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124
+ "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125
+ "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128
+ "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129
+ "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A
+ "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B
+ "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C
+ "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D
+ "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E
+ "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F
+ "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130
+ "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134
+ "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135
+ "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136
+ "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137
+ "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139
+ "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A
+ "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B
+ "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C
+ "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D
+ "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E
+ "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143
+ "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144
+ "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145
+ "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146
+ "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147
+ "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148
+ "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C
+ "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D
+ "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E
+ "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F
+ "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150
+ "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151
+ "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154
+ "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155
+ "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156
+ "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157
+ "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158
+ "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159
+ "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A
+ "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B
+ "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C
+ "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D
+ "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E
+ "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F
+ "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160
+ "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161
+ "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162
+ "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163
+ "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164
+ "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165
+ "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168
+ "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169
+ "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A
+ "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B
+ "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C
+ "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D
+ "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E
+ "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F
+ "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170
+ "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171
+ "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172
+ "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173
+ "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174
+ "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175
+ "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176
+ "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177
+ "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178
+ "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179
+ "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A
+ "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B
+ "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C
+ "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D
+ "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E
+ "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0
+ "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1
+ "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF
+ "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0
+ "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD
+ "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE
+ "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF
+ "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0
+ "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1
+ "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2
+ "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3
+ "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4
+ "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5
+ "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6
+ "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7
+ "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8
+ "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9
+ "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA
+ "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB
+ "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC
+ "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE
+ "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF
+ "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0
+ "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1
+ "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2
+ "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3
+ "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6
+ "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7
+ "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8
+ "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9
+ "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA
+ "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB
+ "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC
+ "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED
+ "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE
+ "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF
+ "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0
+ "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4
+ "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5
+ "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8
+ "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9
+ "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA
+ "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB
+ "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC
+ "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD
+ "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE
+ "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF
+ "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200
+ "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201
+ "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202
+ "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203
+ "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204
+ "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205
+ "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206
+ "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207
+ "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208
+ "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209
+ "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A
+ "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B
+ "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C
+ "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D
+ "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E
+ "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F
+ "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210
+ "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211
+ "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212
+ "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213
+ "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214
+ "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215
+ "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216
+ "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217
+ "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218
+ "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219
+ "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A
+ "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B
+ "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E
+ "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F
+ "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226
+ "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227
+ "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228
+ "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229
+ "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A
+ "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B
+ "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C
+ "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D
+ "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E
+ "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F
+ "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230
+ "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231
+ "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232
+ "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233
+ "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385
+ "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386
+ "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388
+ "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389
+ "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A
+ "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C
+ "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E
+ "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F
+ "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390
+ "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA
+ "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB
+ "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC
+ "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD
+ "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE
+ "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF
+ "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0
+ "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA
+ "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB
+ "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC
+ "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD
+ "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE
+ "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3
+ "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4
+ "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400
+ "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401
+ "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403
+ "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407
+ "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C
+ "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D
+ "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E
+ "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419
+ "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439
+ "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450
+ "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451
+ "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453
+ "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457
+ "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C
+ "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D
+ "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E
+ "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476
+ "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477
+ "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1
+ "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2
+ "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0
+ "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1
+ "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2
+ "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3
+ "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6
+ "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7
+ "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA
+ "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB
+ "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC
+ "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD
+ "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE
+ "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF
+ "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2
+ "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3
+ "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4
+ "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5
+ "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6
+ "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7
+ "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA
+ "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB
+ "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC
+ "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED
+ "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE
+ "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF
+ "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0
+ "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1
+ "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2
+ "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3
+ "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4
+ "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5
+ "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8
+ "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9
+ "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622
+ "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623
+ "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624
+ "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625
+ "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626
+ "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0
+ "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2
+ "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3
+ "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929
+ "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931
+ "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934
+ "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB
+ "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC
+ "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48
+ "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B
+ "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C
+ "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94
+ "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA
+ "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB
+ "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC
+ "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48
+ "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0
+ "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7
+ "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8
+ "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA
+ "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB
+ "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A
+ "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B
+ "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C
+ "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA
+ "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC
+ "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD
+ "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE
+ "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026
+ "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06
+ "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08
+ "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A
+ "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C
+ "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E
+ "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12
+ "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B
+ "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D
+ "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40
+ "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41
+ "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43
+ "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00
+ "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01
+ "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02
+ "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03
+ "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04
+ "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05
+ "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06
+ "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07
+ "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08
+ "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09
+ "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A
+ "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B
+ "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C
+ "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D
+ "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E
+ "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F
+ "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10
+ "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11
+ "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12
+ "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13
+ "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14
+ "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15
+ "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16
+ "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17
+ "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18
+ "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19
+ "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A
+ "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B
+ "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C
+ "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D
+ "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E
+ "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F
+ "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20
+ "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21
+ "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22
+ "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23
+ "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24
+ "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25
+ "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26
+ "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27
+ "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28
+ "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29
+ "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A
+ "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B
+ "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C
+ "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D
+ "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E
+ "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F
+ "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30
+ "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31
+ "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32
+ "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33
+ "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34
+ "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35
+ "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36
+ "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37
+ "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38
+ "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39
+ "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A
+ "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B
+ "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C
+ "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D
+ "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E
+ "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F
+ "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40
+ "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41
+ "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42
+ "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43
+ "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44
+ "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45
+ "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46
+ "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47
+ "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48
+ "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49
+ "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A
+ "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B
+ "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C
+ "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D
+ "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E
+ "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F
+ "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50
+ "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51
+ "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52
+ "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53
+ "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54
+ "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55
+ "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56
+ "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57
+ "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58
+ "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59
+ "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A
+ "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B
+ "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C
+ "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D
+ "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E
+ "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F
+ "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60
+ "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61
+ "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62
+ "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63
+ "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64
+ "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65
+ "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66
+ "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67
+ "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68
+ "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69
+ "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A
+ "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B
+ "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C
+ "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D
+ "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E
+ "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F
+ "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70
+ "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71
+ "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72
+ "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73
+ "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74
+ "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75
+ "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76
+ "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77
+ "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78
+ "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79
+ "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A
+ "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B
+ "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
+ "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
+ "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
+ "\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F
+ "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
+ "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
+ "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
+ "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83
+ "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84
+ "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85
+ "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86
+ "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87
+ "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88
+ "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89
+ "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A
+ "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B
+ "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C
+ "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D
+ "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E
+ "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F
+ "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90
+ "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91
+ "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92
+ "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93
+ "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94
+ "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95
+ "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96
+ "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
+ "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
+ "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
+ "\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
+ "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
+ "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
+ "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
+ "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3
+ "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4
+ "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5
+ "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6
+ "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7
+ "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8
+ "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9
+ "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA
+ "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB
+ "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC
+ "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD
+ "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE
+ "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF
+ "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0
+ "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1
+ "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2
+ "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3
+ "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4
+ "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5
+ "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6
+ "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7
+ "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8
+ "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9
+ "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA
+ "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB
+ "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC
+ "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD
+ "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE
+ "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF
+ "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0
+ "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1
+ "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2
+ "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3
+ "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4
+ "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5
+ "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6
+ "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7
+ "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8
+ "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9
+ "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA
+ "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB
+ "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC
+ "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD
+ "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE
+ "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF
+ "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0
+ "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1
+ "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2
+ "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3
+ "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4
+ "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5
+ "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6
+ "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7
+ "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8
+ "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9
+ "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA
+ "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB
+ "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC
+ "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD
+ "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE
+ "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF
+ "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0
+ "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1
+ "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2
+ "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3
+ "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4
+ "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5
+ "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6
+ "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7
+ "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8
+ "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9
+ "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA
+ "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB
+ "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC
+ "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED
+ "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE
+ "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF
+ "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0
+ "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1
+ "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2
+ "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3
+ "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4
+ "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5
+ "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6
+ "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7
+ "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8
+ "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9
+ "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00
+ "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01
+ "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02
+ "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03
+ "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04
+ "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05
+ "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06
+ "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07
+ "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08
+ "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09
+ "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A
+ "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B
+ "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C
+ "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D
+ "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E
+ "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F
+ "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10
+ "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11
+ "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12
+ "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13
+ "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14
+ "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15
+ "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18
+ "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19
+ "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A
+ "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B
+ "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C
+ "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D
+ "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20
+ "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21
+ "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22
+ "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23
+ "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24
+ "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25
+ "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26
+ "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27
+ "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28
+ "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29
+ "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A
+ "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B
+ "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C
+ "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D
+ "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E
+ "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F
+ "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30
+ "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31
+ "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32
+ "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33
+ "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34
+ "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35
+ "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36
+ "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37
+ "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38
+ "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39
+ "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A
+ "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B
+ "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C
+ "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D
+ "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E
+ "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F
+ "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40
+ "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41
+ "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42
+ "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43
+ "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44
+ "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45
+ "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48
+ "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49
+ "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A
+ "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B
+ "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C
+ "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D
+ "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50
+ "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51
+ "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52
+ "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53
+ "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54
+ "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55
+ "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56
+ "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57
+ "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59
+ "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B
+ "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D
+ "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F
+ "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60
+ "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61
+ "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62
+ "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63
+ "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64
+ "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65
+ "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66
+ "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67
+ "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68
+ "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69
+ "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A
+ "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B
+ "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C
+ "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D
+ "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E
+ "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F
+ "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70
+ "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72
+ "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74
+ "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76
+ "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78
+ "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A
+ "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C
+ "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80
+ "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81
+ "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82
+ "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83
+ "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84
+ "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85
+ "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86
+ "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87
+ "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88
+ "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89
+ "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A
+ "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B
+ "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C
+ "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D
+ "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E
+ "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F
+ "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90
+ "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91
+ "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92
+ "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93
+ "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94
+ "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95
+ "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96
+ "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97
+ "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98
+ "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99
+ "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A
+ "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B
+ "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C
+ "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D
+ "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E
+ "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F
+ "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0
+ "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1
+ "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2
+ "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3
+ "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4
+ "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5
+ "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6
+ "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7
+ "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8
+ "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9
+ "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA
+ "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB
+ "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC
+ "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD
+ "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE
+ "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF
+ "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0
+ "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1
+ "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2
+ "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3
+ "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4
+ "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6
+ "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7
+ "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8
+ "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9
+ "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA
+ "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC
+ "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1
+ "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2
+ "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3
+ "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4
+ "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6
+ "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7
+ "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8
+ "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA
+ "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC
+ "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD
+ "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE
+ "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF
+ "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0
+ "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1
+ "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2
+ "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6
+ "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7
+ "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8
+ "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9
+ "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA
+ "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD
+ "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE
+ "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF
+ "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0
+ "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1
+ "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2
+ "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4
+ "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5
+ "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6
+ "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7
+ "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8
+ "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9
+ "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA
+ "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC
+ "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED
+ "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2
+ "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3
+ "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4
+ "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6
+ "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7
+ "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8
+ "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA
+ "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC
+ "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A
+ "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B
+ "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE
+ "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD
+ "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE
+ "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF
+ "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204
+ "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209
+ "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C
+ "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224
+ "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226
+ "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241
+ "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244
+ "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247
+ "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249
+ "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260
+ "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262
+ "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D
+ "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E
+ "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F
+ "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270
+ "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271
+ "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274
+ "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275
+ "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278
+ "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279
+ "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280
+ "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281
+ "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284
+ "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285
+ "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288
+ "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289
+ "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC
+ "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD
+ "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE
+ "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF
+ "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0
+ "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1
+ "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2
+ "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3
+ "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA
+ "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB
+ "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC
+ "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED
+ "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C
+ "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E
+ "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050
+ "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052
+ "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054
+ "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056
+ "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058
+ "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A
+ "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C
+ "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E
+ "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060
+ "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062
+ "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065
+ "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067
+ "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069
+ "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070
+ "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071
+ "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073
+ "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074
+ "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076
+ "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077
+ "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079
+ "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A
+ "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C
+ "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D
+ "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094
+ "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E
+ "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC
+ "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE
+ "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0
+ "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2
+ "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4
+ "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6
+ "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8
+ "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA
+ "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC
+ "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE
+ "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0
+ "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2
+ "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5
+ "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7
+ "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9
+ "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0
+ "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1
+ "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3
+ "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4
+ "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6
+ "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7
+ "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9
+ "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA
+ "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC
+ "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD
+ "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4
+ "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7
+ "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8
+ "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9
+ "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA
+ "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE
+ "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A
+ "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C
+ "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB
+ "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E
+ "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F
+ "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B
+ "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C
+ "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB
+ "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC
+ "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE
+ "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA
+ "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB
+ ""
+ // Total size of tables: 53KB (54006 bytes)
diff --git a/vendor/google.golang.org/api/option/option.go b/vendor/google.golang.org/api/option/option.go
index ffbee32..c1499f9 100644
--- a/vendor/google.golang.org/api/option/option.go
+++ b/vendor/google.golang.org/api/option/option.go
@@ -153,6 +153,9 @@ func (w withGRPCConnectionPool) Apply(o *internal.DialSettings) {
// WithAPIKey returns a ClientOption that specifies an API key to be used
// as the basis for authentication.
+//
+// API Keys can only be used for JSON-over-HTTP APIs, including those under
+// the import path google.golang.org/api/....
func WithAPIKey(apiKey string) ClientOption {
return withAPIKey(apiKey)
}
diff --git a/vendor/google.golang.org/api/storage/v1/storage-gen.go b/vendor/google.golang.org/api/storage/v1/storage-gen.go
index e7405c7..df5d71f 100644
--- a/vendor/google.golang.org/api/storage/v1/storage-gen.go
+++ b/vendor/google.golang.org/api/storage/v1/storage-gen.go
@@ -1,5 +1,7 @@
// Package storage provides access to the Cloud Storage JSON API.
//
+// This package is DEPRECATED. Use package cloud.google.com/go/storage instead.
+//
// See https://developers.google.com/storage/docs/json_api/
//
// Usage example:
diff --git a/vendor/google.golang.org/api/transport/http/dial_appengine.go b/vendor/google.golang.org/api/transport/http/dial_appengine.go
deleted file mode 100644
index 0cdef74..0000000
--- a/vendor/google.golang.org/api/transport/http/dial_appengine.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// 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.
-
-// +build appengine
-
-package http
-
-import (
- "net/http"
-
- "golang.org/x/net/context"
- "google.golang.org/appengine/urlfetch"
-)
-
-func init() {
- appengineUrlfetchHook = func(ctx context.Context) http.RoundTripper {
- return &urlfetch.Transport{Context: ctx}
- }
-}
diff --git a/vendor/google.golang.org/api/transport/http/go18.go b/vendor/google.golang.org/api/transport/http/go18.go
index 1d4bb8e..0b01c70 100644
--- a/vendor/google.golang.org/api/transport/http/go18.go
+++ b/vendor/google.golang.org/api/transport/http/go18.go
@@ -19,7 +19,7 @@ package http
import (
"net/http"
- "go.opencensus.io/exporter/stackdriver/propagation"
+ "contrib.go.opencensus.io/exporter/stackdriver/propagation"
"go.opencensus.io/plugin/ochttp"
)
diff --git a/vendor/google.golang.org/appengine/CONTRIBUTING.md b/vendor/google.golang.org/appengine/CONTRIBUTING.md
new file mode 100644
index 0000000..ffc2985
--- /dev/null
+++ b/vendor/google.golang.org/appengine/CONTRIBUTING.md
@@ -0,0 +1,90 @@
+# Contributing
+
+1. Sign one of the contributor license agreements below.
+1. Get the package:
+
+ `go get -d google.golang.org/appengine`
+1. Change into the checked out source:
+
+ `cd $GOPATH/src/google.golang.org/appengine`
+1. Fork the repo.
+1. Set your fork as a remote:
+
+ `git remote add fork git@github.com:GITHUB_USERNAME/appengine.git`
+1. Make changes, commit to your fork.
+1. Send a pull request with your changes.
+ The first line of your commit message is conventionally a one-line summary of the change, prefixed by the primary affected package, and is used as the title of your pull request.
+
+# Testing
+
+## Running system tests
+
+Download and install the [Go App Engine SDK](https://cloud.google.com/appengine/docs/go/download). Make sure the `go_appengine` dir is in your `PATH`.
+
+Set the `APPENGINE_DEV_APPSERVER` environment variable to `/path/to/go_appengine/dev_appserver.py`.
+
+Run tests with `goapp test`:
+
+```
+goapp test -v google.golang.org/appengine/...
+```
+
+## Contributor License Agreements
+
+Before we can accept your pull requests you'll need to sign a Contributor
+License Agreement (CLA):
+
+- **If you are an individual writing original source code** and **you own the
+intellectual property**, then you'll need to sign an [individual CLA][indvcla].
+- **If you work for a company that wants to allow you to contribute your work**,
+then you'll need to sign a [corporate CLA][corpcla].
+
+You can sign these electronically (just scroll to the bottom). After that,
+we'll be able to accept your pull requests.
+
+## Contributor Code of Conduct
+
+As contributors and maintainers of this project,
+and in the interest of fostering an open and welcoming community,
+we pledge to respect all people who contribute through reporting issues,
+posting feature requests, updating documentation,
+submitting pull requests or patches, and other activities.
+
+We are committed to making participation in this project
+a harassment-free experience for everyone,
+regardless of level of experience, gender, gender identity and expression,
+sexual orientation, disability, personal appearance,
+body size, race, ethnicity, age, religion, or nationality.
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery
+* Personal attacks
+* Trolling or insulting/derogatory comments
+* Public or private harassment
+* Publishing other's private information,
+such as physical or electronic
+addresses, without explicit permission
+* Other unethical or unprofessional conduct.
+
+Project maintainers have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct.
+By adopting this Code of Conduct,
+project maintainers commit themselves to fairly and consistently
+applying these principles to every aspect of managing this project.
+Project maintainers who do not follow or enforce the Code of Conduct
+may be permanently removed from the project team.
+
+This code of conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community.
+
+Instances of abusive, harassing, or otherwise unacceptable behavior
+may be reported by opening an issue
+or contacting one or more of the project maintainers.
+
+This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,
+available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)
+
+[indvcla]: https://developers.google.com/open-source/cla/individual
+[corpcla]: https://developers.google.com/open-source/cla/corporate
diff --git a/vendor/google.golang.org/appengine/LICENSE b/vendor/google.golang.org/appengine/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/vendor/google.golang.org/appengine/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/google.golang.org/appengine/README.md b/vendor/google.golang.org/appengine/README.md
new file mode 100644
index 0000000..d86768a
--- /dev/null
+++ b/vendor/google.golang.org/appengine/README.md
@@ -0,0 +1,73 @@
+# Go App Engine packages
+
+[![Build Status](https://travis-ci.org/golang/appengine.svg)](https://travis-ci.org/golang/appengine)
+
+This repository supports the Go runtime on *App Engine standard*.
+It provides APIs for interacting with App Engine services.
+Its canonical import path is `google.golang.org/appengine`.
+
+See https://cloud.google.com/appengine/docs/go/
+for more information.
+
+File issue reports and feature requests on the [GitHub's issue
+tracker](https://github.com/golang/appengine/issues).
+
+## Upgrading an App Engine app to the flexible environment
+
+This package does not work on *App Engine flexible*.
+
+There are many differences between the App Engine standard environment and
+the flexible environment.
+
+See the [documentation on upgrading to the flexible environment](https://cloud.google.com/appengine/docs/flexible/go/upgrading).
+
+## Directory structure
+
+The top level directory of this repository is the `appengine` package. It
+contains the
+basic APIs (e.g. `appengine.NewContext`) that apply across APIs. Specific API
+packages are in subdirectories (e.g. `datastore`).
+
+There is an `internal` subdirectory that contains service protocol buffers,
+plus packages required for connectivity to make API calls. App Engine apps
+should not directly import any package under `internal`.
+
+## Updating from legacy (`import "appengine"`) packages
+
+If you're currently using the bare `appengine` packages
+(that is, not these ones, imported via `google.golang.org/appengine`),
+then you can use the `aefix` tool to help automate an upgrade to these packages.
+
+Run `go get google.golang.org/appengine/cmd/aefix` to install it.
+
+### 1. Update import paths
+
+The import paths for App Engine packages are now fully qualified, based at `google.golang.org/appengine`.
+You will need to update your code to use import paths starting with that; for instance,
+code importing `appengine/datastore` will now need to import `google.golang.org/appengine/datastore`.
+
+### 2. Update code using deprecated, removed or modified APIs
+
+Most App Engine services are available with exactly the same API.
+A few APIs were cleaned up, and there are some differences:
+
+* `appengine.Context` has been replaced with the `Context` type from `golang.org/x/net/context`.
+* Logging methods that were on `appengine.Context` are now functions in `google.golang.org/appengine/log`.
+* `appengine.Timeout` has been removed. Use `context.WithTimeout` instead.
+* `appengine.Datacenter` now takes a `context.Context` argument.
+* `datastore.PropertyLoadSaver` has been simplified to use slices in place of channels.
+* `delay.Call` now returns an error.
+* `search.FieldLoadSaver` now handles document metadata.
+* `urlfetch.Transport` no longer has a Deadline field; set a deadline on the
+ `context.Context` instead.
+* `aetest` no longer declares its own Context type, and uses the standard one instead.
+* `taskqueue.QueueStats` no longer takes a maxTasks argument. That argument has been
+ deprecated and unused for a long time.
+* `appengine.BackendHostname` and `appengine.BackendInstance` were for the deprecated backends feature.
+ Use `appengine.ModuleHostname`and `appengine.ModuleName` instead.
+* Most of `appengine/file` and parts of `appengine/blobstore` are deprecated.
+ Use [Google Cloud Storage](https://godoc.org/cloud.google.com/go/storage) if the
+ feature you require is not present in the new
+ [blobstore package](https://google.golang.org/appengine/blobstore).
+* `appengine/socket` is not required on App Engine flexible environment / Managed VMs.
+ Use the standard `net` package instead.
diff --git a/vendor/google.golang.org/appengine/appengine.go b/vendor/google.golang.org/appengine/appengine.go
new file mode 100644
index 0000000..76dedc8
--- /dev/null
+++ b/vendor/google.golang.org/appengine/appengine.go
@@ -0,0 +1,113 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+// Package appengine provides basic functionality for Google App Engine.
+//
+// For more information on how to write Go apps for Google App Engine, see:
+// https://cloud.google.com/appengine/docs/go/
+package appengine // import "google.golang.org/appengine"
+
+import (
+ "net/http"
+
+ "github.com/golang/protobuf/proto"
+ "golang.org/x/net/context"
+
+ "google.golang.org/appengine/internal"
+)
+
+// The gophers party all night; the rabbits provide the beats.
+
+// Main is the principal entry point for an app running in App Engine.
+//
+// On App Engine Flexible it installs a trivial health checker if one isn't
+// already registered, and starts listening on port 8080 (overridden by the
+// $PORT environment variable).
+//
+// See https://cloud.google.com/appengine/docs/flexible/custom-runtimes#health_check_requests
+// for details on how to do your own health checking.
+//
+// On App Engine Standard it ensures the server has started and is prepared to
+// receive requests.
+//
+// Main never returns.
+//
+// Main is designed so that the app's main package looks like this:
+//
+// package main
+//
+// import (
+// "google.golang.org/appengine"
+//
+// _ "myapp/package0"
+// _ "myapp/package1"
+// )
+//
+// func main() {
+// appengine.Main()
+// }
+//
+// The "myapp/packageX" packages are expected to register HTTP handlers
+// in their init functions.
+func Main() {
+ internal.Main()
+}
+
+// IsDevAppServer reports whether the App Engine app is running in the
+// development App Server.
+func IsDevAppServer() bool {
+ return internal.IsDevAppServer()
+}
+
+// NewContext returns a context for an in-flight HTTP request.
+// This function is cheap.
+func NewContext(req *http.Request) context.Context {
+ return internal.ReqContext(req)
+}
+
+// WithContext returns a copy of the parent context
+// and associates it with an in-flight HTTP request.
+// This function is cheap.
+func WithContext(parent context.Context, req *http.Request) context.Context {
+ return internal.WithContext(parent, req)
+}
+
+// TODO(dsymonds): Add a Call function here? Otherwise other packages can't access internal.Call.
+
+// BlobKey is a key for a blobstore blob.
+//
+// Conceptually, this type belongs in the blobstore package, but it lives in
+// the appengine package to avoid a circular dependency: blobstore depends on
+// datastore, and datastore needs to refer to the BlobKey type.
+type BlobKey string
+
+// GeoPoint represents a location as latitude/longitude in degrees.
+type GeoPoint struct {
+ Lat, Lng float64
+}
+
+// Valid returns whether a GeoPoint is within [-90, 90] latitude and [-180, 180] longitude.
+func (g GeoPoint) Valid() bool {
+ return -90 <= g.Lat && g.Lat <= 90 && -180 <= g.Lng && g.Lng <= 180
+}
+
+// APICallFunc defines a function type for handling an API call.
+// See WithCallOverride.
+type APICallFunc func(ctx context.Context, service, method string, in, out proto.Message) error
+
+// WithAPICallFunc returns a copy of the parent context
+// that will cause API calls to invoke f instead of their normal operation.
+//
+// This is intended for advanced users only.
+func WithAPICallFunc(ctx context.Context, f APICallFunc) context.Context {
+ return internal.WithCallOverride(ctx, internal.CallOverrideFunc(f))
+}
+
+// APICall performs an API call.
+//
+// This is not intended for general use; it is exported for use in conjunction
+// with WithAPICallFunc.
+func APICall(ctx context.Context, service, method string, in, out proto.Message) error {
+ return internal.Call(ctx, service, method, in, out)
+}
diff --git a/vendor/google.golang.org/appengine/appengine_vm.go b/vendor/google.golang.org/appengine/appengine_vm.go
new file mode 100644
index 0000000..f4b645a
--- /dev/null
+++ b/vendor/google.golang.org/appengine/appengine_vm.go
@@ -0,0 +1,20 @@
+// Copyright 2015 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+// +build !appengine
+
+package appengine
+
+import (
+ "golang.org/x/net/context"
+
+ "google.golang.org/appengine/internal"
+)
+
+// BackgroundContext returns a context not associated with a request.
+// This should only be used when not servicing a request.
+// This only works in App Engine "flexible environment".
+func BackgroundContext() context.Context {
+ return internal.BackgroundContext()
+}
diff --git a/vendor/google.golang.org/appengine/errors.go b/vendor/google.golang.org/appengine/errors.go
new file mode 100644
index 0000000..16d0772
--- /dev/null
+++ b/vendor/google.golang.org/appengine/errors.go
@@ -0,0 +1,46 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+// This file provides error functions for common API failure modes.
+
+package appengine
+
+import (
+ "fmt"
+
+ "google.golang.org/appengine/internal"
+)
+
+// IsOverQuota reports whether err represents an API call failure
+// due to insufficient available quota.
+func IsOverQuota(err error) bool {
+ callErr, ok := err.(*internal.CallError)
+ return ok && callErr.Code == 4
+}
+
+// MultiError is returned by batch operations when there are errors with
+// particular elements. Errors will be in a one-to-one correspondence with
+// the input elements; successful elements will have a nil entry.
+type MultiError []error
+
+func (m MultiError) Error() string {
+ s, n := "", 0
+ for _, e := range m {
+ if e != nil {
+ if n == 0 {
+ s = e.Error()
+ }
+ n++
+ }
+ }
+ switch n {
+ case 0:
+ return "(0 errors)"
+ case 1:
+ return s
+ case 2:
+ return s + " (and 1 other error)"
+ }
+ return fmt.Sprintf("%s (and %d other errors)", s, n-1)
+}
diff --git a/vendor/google.golang.org/appengine/go.mod b/vendor/google.golang.org/appengine/go.mod
new file mode 100644
index 0000000..92b8a6d
--- /dev/null
+++ b/vendor/google.golang.org/appengine/go.mod
@@ -0,0 +1,7 @@
+module google.golang.org/appengine
+
+require (
+ github.com/golang/protobuf v1.0.0
+ golang.org/x/net v0.0.0-20180724234803-3673e40ba225
+ golang.org/x/text v0.3.0
+)
diff --git a/vendor/google.golang.org/appengine/go.sum b/vendor/google.golang.org/appengine/go.sum
new file mode 100644
index 0000000..033d8d7
--- /dev/null
+++ b/vendor/google.golang.org/appengine/go.sum
@@ -0,0 +1,8 @@
+github.com/golang/protobuf v1.0.0 h1:lsek0oXi8iFE9L+EXARyHIjU5rlWIhhTkjDz3vHhWWQ=
+github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.1.0 h1:0iH4Ffd/meGoXqF2lSAhZHt8X+cPgkfn/cb6Cce5Vpc=
+github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225 h1:kNX+jCowfMYzvlSvJu5pQWEmyWFrBXJ3PBy10xKMXK8=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
diff --git a/vendor/google.golang.org/appengine/identity.go b/vendor/google.golang.org/appengine/identity.go
new file mode 100644
index 0000000..b8dcf8f
--- /dev/null
+++ b/vendor/google.golang.org/appengine/identity.go
@@ -0,0 +1,142 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package appengine
+
+import (
+ "time"
+
+ "golang.org/x/net/context"
+
+ "google.golang.org/appengine/internal"
+ pb "google.golang.org/appengine/internal/app_identity"
+ modpb "google.golang.org/appengine/internal/modules"
+)
+
+// AppID returns the application ID for the current application.
+// The string will be a plain application ID (e.g. "appid"), with a
+// domain prefix for custom domain deployments (e.g. "example.com:appid").
+func AppID(c context.Context) string { return internal.AppID(c) }
+
+// DefaultVersionHostname returns the standard hostname of the default version
+// of the current application (e.g. "my-app.appspot.com"). This is suitable for
+// use in constructing URLs.
+func DefaultVersionHostname(c context.Context) string {
+ return internal.DefaultVersionHostname(c)
+}
+
+// ModuleName returns the module name of the current instance.
+func ModuleName(c context.Context) string {
+ return internal.ModuleName(c)
+}
+
+// ModuleHostname returns a hostname of a module instance.
+// If module is the empty string, it refers to the module of the current instance.
+// If version is empty, it refers to the version of the current instance if valid,
+// or the default version of the module of the current instance.
+// If instance is empty, ModuleHostname returns the load-balancing hostname.
+func ModuleHostname(c context.Context, module, version, instance string) (string, error) {
+ req := &modpb.GetHostnameRequest{}
+ if module != "" {
+ req.Module = &module
+ }
+ if version != "" {
+ req.Version = &version
+ }
+ if instance != "" {
+ req.Instance = &instance
+ }
+ res := &modpb.GetHostnameResponse{}
+ if err := internal.Call(c, "modules", "GetHostname", req, res); err != nil {
+ return "", err
+ }
+ return *res.Hostname, nil
+}
+
+// VersionID returns the version ID for the current application.
+// It will be of the form "X.Y", where X is specified in app.yaml,
+// and Y is a number generated when each version of the app is uploaded.
+// It does not include a module name.
+func VersionID(c context.Context) string { return internal.VersionID(c) }
+
+// InstanceID returns a mostly-unique identifier for this instance.
+func InstanceID() string { return internal.InstanceID() }
+
+// Datacenter returns an identifier for the datacenter that the instance is running in.
+func Datacenter(c context.Context) string { return internal.Datacenter(c) }
+
+// ServerSoftware returns the App Engine release version.
+// In production, it looks like "Google App Engine/X.Y.Z".
+// In the development appserver, it looks like "Development/X.Y".
+func ServerSoftware() string { return internal.ServerSoftware() }
+
+// RequestID returns a string that uniquely identifies the request.
+func RequestID(c context.Context) string { return internal.RequestID(c) }
+
+// AccessToken generates an OAuth2 access token for the specified scopes on
+// behalf of service account of this application. This token will expire after
+// the returned time.
+func AccessToken(c context.Context, scopes ...string) (token string, expiry time.Time, err error) {
+ req := &pb.GetAccessTokenRequest{Scope: scopes}
+ res := &pb.GetAccessTokenResponse{}
+
+ err = internal.Call(c, "app_identity_service", "GetAccessToken", req, res)
+ if err != nil {
+ return "", time.Time{}, err
+ }
+ return res.GetAccessToken(), time.Unix(res.GetExpirationTime(), 0), nil
+}
+
+// Certificate represents a public certificate for the app.
+type Certificate struct {
+ KeyName string
+ Data []byte // PEM-encoded X.509 certificate
+}
+
+// PublicCertificates retrieves the public certificates for the app.
+// They can be used to verify a signature returned by SignBytes.
+func PublicCertificates(c context.Context) ([]Certificate, error) {
+ req := &pb.GetPublicCertificateForAppRequest{}
+ res := &pb.GetPublicCertificateForAppResponse{}
+ if err := internal.Call(c, "app_identity_service", "GetPublicCertificatesForApp", req, res); err != nil {
+ return nil, err
+ }
+ var cs []Certificate
+ for _, pc := range res.PublicCertificateList {
+ cs = append(cs, Certificate{
+ KeyName: pc.GetKeyName(),
+ Data: []byte(pc.GetX509CertificatePem()),
+ })
+ }
+ return cs, nil
+}
+
+// ServiceAccount returns a string representing the service account name, in
+// the form of an email address (typically app_id@appspot.gserviceaccount.com).
+func ServiceAccount(c context.Context) (string, error) {
+ req := &pb.GetServiceAccountNameRequest{}
+ res := &pb.GetServiceAccountNameResponse{}
+
+ err := internal.Call(c, "app_identity_service", "GetServiceAccountName", req, res)
+ if err != nil {
+ return "", err
+ }
+ return res.GetServiceAccountName(), err
+}
+
+// SignBytes signs bytes using a private key unique to your application.
+func SignBytes(c context.Context, bytes []byte) (keyName string, signature []byte, err error) {
+ req := &pb.SignForAppRequest{BytesToSign: bytes}
+ res := &pb.SignForAppResponse{}
+
+ if err := internal.Call(c, "app_identity_service", "SignForApp", req, res); err != nil {
+ return "", nil, err
+ }
+ return res.GetKeyName(), res.GetSignatureBytes(), nil
+}
+
+func init() {
+ internal.RegisterErrorCodeMap("app_identity_service", pb.AppIdentityServiceError_ErrorCode_name)
+ internal.RegisterErrorCodeMap("modules", modpb.ModulesServiceError_ErrorCode_name)
+}
diff --git a/vendor/google.golang.org/appengine/internal/api.go b/vendor/google.golang.org/appengine/internal/api.go
new file mode 100644
index 0000000..16f87c5
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/api.go
@@ -0,0 +1,660 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+// +build !appengine
+// +build go1.7
+
+package internal
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "io/ioutil"
+ "log"
+ "net"
+ "net/http"
+ "net/url"
+ "os"
+ "runtime"
+ "strconv"
+ "strings"
+ "sync"
+ "sync/atomic"
+ "time"
+
+ "github.com/golang/protobuf/proto"
+ netcontext "golang.org/x/net/context"
+
+ basepb "google.golang.org/appengine/internal/base"
+ logpb "google.golang.org/appengine/internal/log"
+ remotepb "google.golang.org/appengine/internal/remote_api"
+)
+
+const (
+ apiPath = "/rpc_http"
+ defaultTicketSuffix = "/default.20150612t184001.0"
+)
+
+var (
+ // Incoming headers.
+ ticketHeader = http.CanonicalHeaderKey("X-AppEngine-API-Ticket")
+ dapperHeader = http.CanonicalHeaderKey("X-Google-DapperTraceInfo")
+ traceHeader = http.CanonicalHeaderKey("X-Cloud-Trace-Context")
+ curNamespaceHeader = http.CanonicalHeaderKey("X-AppEngine-Current-Namespace")
+ userIPHeader = http.CanonicalHeaderKey("X-AppEngine-User-IP")
+ remoteAddrHeader = http.CanonicalHeaderKey("X-AppEngine-Remote-Addr")
+
+ // Outgoing headers.
+ apiEndpointHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Endpoint")
+ apiEndpointHeaderValue = []string{"app-engine-apis"}
+ apiMethodHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Method")
+ apiMethodHeaderValue = []string{"/VMRemoteAPI.CallRemoteAPI"}
+ apiDeadlineHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Deadline")
+ apiContentType = http.CanonicalHeaderKey("Content-Type")
+ apiContentTypeValue = []string{"application/octet-stream"}
+ logFlushHeader = http.CanonicalHeaderKey("X-AppEngine-Log-Flush-Count")
+
+ apiHTTPClient = &http.Client{
+ Transport: &http.Transport{
+ Proxy: http.ProxyFromEnvironment,
+ Dial: limitDial,
+ },
+ }
+
+ defaultTicketOnce sync.Once
+ defaultTicket string
+ backgroundContextOnce sync.Once
+ backgroundContext netcontext.Context
+)
+
+func apiURL() *url.URL {
+ host, port := "appengine.googleapis.internal", "10001"
+ if h := os.Getenv("API_HOST"); h != "" {
+ host = h
+ }
+ if p := os.Getenv("API_PORT"); p != "" {
+ port = p
+ }
+ return &url.URL{
+ Scheme: "http",
+ Host: host + ":" + port,
+ Path: apiPath,
+ }
+}
+
+func handleHTTP(w http.ResponseWriter, r *http.Request) {
+ c := &context{
+ req: r,
+ outHeader: w.Header(),
+ apiURL: apiURL(),
+ }
+ r = r.WithContext(withContext(r.Context(), c))
+ c.req = r
+
+ stopFlushing := make(chan int)
+
+ // Patch up RemoteAddr so it looks reasonable.
+ if addr := r.Header.Get(userIPHeader); addr != "" {
+ r.RemoteAddr = addr
+ } else if addr = r.Header.Get(remoteAddrHeader); addr != "" {
+ r.RemoteAddr = addr
+ } else {
+ // Should not normally reach here, but pick a sensible default anyway.
+ r.RemoteAddr = "127.0.0.1"
+ }
+ // The address in the headers will most likely be of these forms:
+ // 123.123.123.123
+ // 2001:db8::1
+ // net/http.Request.RemoteAddr is specified to be in "IP:port" form.
+ if _, _, err := net.SplitHostPort(r.RemoteAddr); err != nil {
+ // Assume the remote address is only a host; add a default port.
+ r.RemoteAddr = net.JoinHostPort(r.RemoteAddr, "80")
+ }
+
+ // Start goroutine responsible for flushing app logs.
+ // This is done after adding c to ctx.m (and stopped before removing it)
+ // because flushing logs requires making an API call.
+ go c.logFlusher(stopFlushing)
+
+ executeRequestSafely(c, r)
+ c.outHeader = nil // make sure header changes aren't respected any more
+
+ stopFlushing <- 1 // any logging beyond this point will be dropped
+
+ // Flush any pending logs asynchronously.
+ c.pendingLogs.Lock()
+ flushes := c.pendingLogs.flushes
+ if len(c.pendingLogs.lines) > 0 {
+ flushes++
+ }
+ c.pendingLogs.Unlock()
+ go c.flushLog(false)
+ w.Header().Set(logFlushHeader, strconv.Itoa(flushes))
+
+ // Avoid nil Write call if c.Write is never called.
+ if c.outCode != 0 {
+ w.WriteHeader(c.outCode)
+ }
+ if c.outBody != nil {
+ w.Write(c.outBody)
+ }
+}
+
+func executeRequestSafely(c *context, r *http.Request) {
+ defer func() {
+ if x := recover(); x != nil {
+ logf(c, 4, "%s", renderPanic(x)) // 4 == critical
+ c.outCode = 500
+ }
+ }()
+
+ http.DefaultServeMux.ServeHTTP(c, r)
+}
+
+func renderPanic(x interface{}) string {
+ buf := make([]byte, 16<<10) // 16 KB should be plenty
+ buf = buf[:runtime.Stack(buf, false)]
+
+ // Remove the first few stack frames:
+ // this func
+ // the recover closure in the caller
+ // That will root the stack trace at the site of the panic.
+ const (
+ skipStart = "internal.renderPanic"
+ skipFrames = 2
+ )
+ start := bytes.Index(buf, []byte(skipStart))
+ p := start
+ for i := 0; i < skipFrames*2 && p+1 < len(buf); i++ {
+ p = bytes.IndexByte(buf[p+1:], '\n') + p + 1
+ if p < 0 {
+ break
+ }
+ }
+ if p >= 0 {
+ // buf[start:p+1] is the block to remove.
+ // Copy buf[p+1:] over buf[start:] and shrink buf.
+ copy(buf[start:], buf[p+1:])
+ buf = buf[:len(buf)-(p+1-start)]
+ }
+
+ // Add panic heading.
+ head := fmt.Sprintf("panic: %v\n\n", x)
+ if len(head) > len(buf) {
+ // Extremely unlikely to happen.
+ return head
+ }
+ copy(buf[len(head):], buf)
+ copy(buf, head)
+
+ return string(buf)
+}
+
+// context represents the context of an in-flight HTTP request.
+// It implements the appengine.Context and http.ResponseWriter interfaces.
+type context struct {
+ req *http.Request
+
+ outCode int
+ outHeader http.Header
+ outBody []byte
+
+ pendingLogs struct {
+ sync.Mutex
+ lines []*logpb.UserAppLogLine
+ flushes int
+ }
+
+ apiURL *url.URL
+}
+
+var contextKey = "holds a *context"
+
+// jointContext joins two contexts in a superficial way.
+// It takes values and timeouts from a base context, and only values from another context.
+type jointContext struct {
+ base netcontext.Context
+ valuesOnly netcontext.Context
+}
+
+func (c jointContext) Deadline() (time.Time, bool) {
+ return c.base.Deadline()
+}
+
+func (c jointContext) Done() <-chan struct{} {
+ return c.base.Done()
+}
+
+func (c jointContext) Err() error {
+ return c.base.Err()
+}
+
+func (c jointContext) Value(key interface{}) interface{} {
+ if val := c.base.Value(key); val != nil {
+ return val
+ }
+ return c.valuesOnly.Value(key)
+}
+
+// fromContext returns the App Engine context or nil if ctx is not
+// derived from an App Engine context.
+func fromContext(ctx netcontext.Context) *context {
+ c, _ := ctx.Value(&contextKey).(*context)
+ return c
+}
+
+func withContext(parent netcontext.Context, c *context) netcontext.Context {
+ ctx := netcontext.WithValue(parent, &contextKey, c)
+ if ns := c.req.Header.Get(curNamespaceHeader); ns != "" {
+ ctx = withNamespace(ctx, ns)
+ }
+ return ctx
+}
+
+func toContext(c *context) netcontext.Context {
+ return withContext(netcontext.Background(), c)
+}
+
+func IncomingHeaders(ctx netcontext.Context) http.Header {
+ if c := fromContext(ctx); c != nil {
+ return c.req.Header
+ }
+ return nil
+}
+
+func ReqContext(req *http.Request) netcontext.Context {
+ return req.Context()
+}
+
+func WithContext(parent netcontext.Context, req *http.Request) netcontext.Context {
+ return jointContext{
+ base: parent,
+ valuesOnly: req.Context(),
+ }
+}
+
+// DefaultTicket returns a ticket used for background context or dev_appserver.
+func DefaultTicket() string {
+ defaultTicketOnce.Do(func() {
+ if IsDevAppServer() {
+ defaultTicket = "testapp" + defaultTicketSuffix
+ return
+ }
+ appID := partitionlessAppID()
+ escAppID := strings.Replace(strings.Replace(appID, ":", "_", -1), ".", "_", -1)
+ majVersion := VersionID(nil)
+ if i := strings.Index(majVersion, "."); i > 0 {
+ majVersion = majVersion[:i]
+ }
+ defaultTicket = fmt.Sprintf("%s/%s.%s.%s", escAppID, ModuleName(nil), majVersion, InstanceID())
+ })
+ return defaultTicket
+}
+
+func BackgroundContext() netcontext.Context {
+ backgroundContextOnce.Do(func() {
+ // Compute background security ticket.
+ ticket := DefaultTicket()
+
+ c := &context{
+ req: &http.Request{
+ Header: http.Header{
+ ticketHeader: []string{ticket},
+ },
+ },
+ apiURL: apiURL(),
+ }
+ backgroundContext = toContext(c)
+
+ // TODO(dsymonds): Wire up the shutdown handler to do a final flush.
+ go c.logFlusher(make(chan int))
+ })
+
+ return backgroundContext
+}
+
+// RegisterTestRequest registers the HTTP request req for testing, such that
+// any API calls are sent to the provided URL. It returns a closure to delete
+// the registration.
+// It should only be used by aetest package.
+func RegisterTestRequest(req *http.Request, apiURL *url.URL, decorate func(netcontext.Context) netcontext.Context) (*http.Request, func()) {
+ c := &context{
+ req: req,
+ apiURL: apiURL,
+ }
+ ctx := withContext(decorate(req.Context()), c)
+ req = req.WithContext(ctx)
+ c.req = req
+ return req, func() {}
+}
+
+var errTimeout = &CallError{
+ Detail: "Deadline exceeded",
+ Code: int32(remotepb.RpcError_CANCELLED),
+ Timeout: true,
+}
+
+func (c *context) Header() http.Header { return c.outHeader }
+
+// Copied from $GOROOT/src/pkg/net/http/transfer.go. Some response status
+// codes do not permit a response body (nor response entity headers such as
+// Content-Length, Content-Type, etc).
+func bodyAllowedForStatus(status int) bool {
+ switch {
+ case status >= 100 && status <= 199:
+ return false
+ case status == 204:
+ return false
+ case status == 304:
+ return false
+ }
+ return true
+}
+
+func (c *context) Write(b []byte) (int, error) {
+ if c.outCode == 0 {
+ c.WriteHeader(http.StatusOK)
+ }
+ if len(b) > 0 && !bodyAllowedForStatus(c.outCode) {
+ return 0, http.ErrBodyNotAllowed
+ }
+ c.outBody = append(c.outBody, b...)
+ return len(b), nil
+}
+
+func (c *context) WriteHeader(code int) {
+ if c.outCode != 0 {
+ logf(c, 3, "WriteHeader called multiple times on request.") // error level
+ return
+ }
+ c.outCode = code
+}
+
+func (c *context) post(body []byte, timeout time.Duration) (b []byte, err error) {
+ hreq := &http.Request{
+ Method: "POST",
+ URL: c.apiURL,
+ Header: http.Header{
+ apiEndpointHeader: apiEndpointHeaderValue,
+ apiMethodHeader: apiMethodHeaderValue,
+ apiContentType: apiContentTypeValue,
+ apiDeadlineHeader: []string{strconv.FormatFloat(timeout.Seconds(), 'f', -1, 64)},
+ },
+ Body: ioutil.NopCloser(bytes.NewReader(body)),
+ ContentLength: int64(len(body)),
+ Host: c.apiURL.Host,
+ }
+ if info := c.req.Header.Get(dapperHeader); info != "" {
+ hreq.Header.Set(dapperHeader, info)
+ }
+ if info := c.req.Header.Get(traceHeader); info != "" {
+ hreq.Header.Set(traceHeader, info)
+ }
+
+ tr := apiHTTPClient.Transport.(*http.Transport)
+
+ var timedOut int32 // atomic; set to 1 if timed out
+ t := time.AfterFunc(timeout, func() {
+ atomic.StoreInt32(&timedOut, 1)
+ tr.CancelRequest(hreq)
+ })
+ defer t.Stop()
+ defer func() {
+ // Check if timeout was exceeded.
+ if atomic.LoadInt32(&timedOut) != 0 {
+ err = errTimeout
+ }
+ }()
+
+ hresp, err := apiHTTPClient.Do(hreq)
+ if err != nil {
+ return nil, &CallError{
+ Detail: fmt.Sprintf("service bridge HTTP failed: %v", err),
+ Code: int32(remotepb.RpcError_UNKNOWN),
+ }
+ }
+ defer hresp.Body.Close()
+ hrespBody, err := ioutil.ReadAll(hresp.Body)
+ if hresp.StatusCode != 200 {
+ return nil, &CallError{
+ Detail: fmt.Sprintf("service bridge returned HTTP %d (%q)", hresp.StatusCode, hrespBody),
+ Code: int32(remotepb.RpcError_UNKNOWN),
+ }
+ }
+ if err != nil {
+ return nil, &CallError{
+ Detail: fmt.Sprintf("service bridge response bad: %v", err),
+ Code: int32(remotepb.RpcError_UNKNOWN),
+ }
+ }
+ return hrespBody, nil
+}
+
+func Call(ctx netcontext.Context, service, method string, in, out proto.Message) error {
+ if ns := NamespaceFromContext(ctx); ns != "" {
+ if fn, ok := NamespaceMods[service]; ok {
+ fn(in, ns)
+ }
+ }
+
+ if f, ctx, ok := callOverrideFromContext(ctx); ok {
+ return f(ctx, service, method, in, out)
+ }
+
+ // Handle already-done contexts quickly.
+ select {
+ case <-ctx.Done():
+ return ctx.Err()
+ default:
+ }
+
+ c := fromContext(ctx)
+ if c == nil {
+ // Give a good error message rather than a panic lower down.
+ return errNotAppEngineContext
+ }
+
+ // Apply transaction modifications if we're in a transaction.
+ if t := transactionFromContext(ctx); t != nil {
+ if t.finished {
+ return errors.New("transaction context has expired")
+ }
+ applyTransaction(in, &t.transaction)
+ }
+
+ // Default RPC timeout is 60s.
+ timeout := 60 * time.Second
+ if deadline, ok := ctx.Deadline(); ok {
+ timeout = deadline.Sub(time.Now())
+ }
+
+ data, err := proto.Marshal(in)
+ if err != nil {
+ return err
+ }
+
+ ticket := c.req.Header.Get(ticketHeader)
+ // Use a test ticket under test environment.
+ if ticket == "" {
+ if appid := ctx.Value(&appIDOverrideKey); appid != nil {
+ ticket = appid.(string) + defaultTicketSuffix
+ }
+ }
+ // Fall back to use background ticket when the request ticket is not available in Flex or dev_appserver.
+ if ticket == "" {
+ ticket = DefaultTicket()
+ }
+ req := &remotepb.Request{
+ ServiceName: &service,
+ Method: &method,
+ Request: data,
+ RequestId: &ticket,
+ }
+ hreqBody, err := proto.Marshal(req)
+ if err != nil {
+ return err
+ }
+
+ hrespBody, err := c.post(hreqBody, timeout)
+ if err != nil {
+ return err
+ }
+
+ res := &remotepb.Response{}
+ if err := proto.Unmarshal(hrespBody, res); err != nil {
+ return err
+ }
+ if res.RpcError != nil {
+ ce := &CallError{
+ Detail: res.RpcError.GetDetail(),
+ Code: *res.RpcError.Code,
+ }
+ switch remotepb.RpcError_ErrorCode(ce.Code) {
+ case remotepb.RpcError_CANCELLED, remotepb.RpcError_DEADLINE_EXCEEDED:
+ ce.Timeout = true
+ }
+ return ce
+ }
+ if res.ApplicationError != nil {
+ return &APIError{
+ Service: *req.ServiceName,
+ Detail: res.ApplicationError.GetDetail(),
+ Code: *res.ApplicationError.Code,
+ }
+ }
+ if res.Exception != nil || res.JavaException != nil {
+ // This shouldn't happen, but let's be defensive.
+ return &CallError{
+ Detail: "service bridge returned exception",
+ Code: int32(remotepb.RpcError_UNKNOWN),
+ }
+ }
+ return proto.Unmarshal(res.Response, out)
+}
+
+func (c *context) Request() *http.Request {
+ return c.req
+}
+
+func (c *context) addLogLine(ll *logpb.UserAppLogLine) {
+ // Truncate long log lines.
+ // TODO(dsymonds): Check if this is still necessary.
+ const lim = 8 << 10
+ if len(*ll.Message) > lim {
+ suffix := fmt.Sprintf("...(length %d)", len(*ll.Message))
+ ll.Message = proto.String((*ll.Message)[:lim-len(suffix)] + suffix)
+ }
+
+ c.pendingLogs.Lock()
+ c.pendingLogs.lines = append(c.pendingLogs.lines, ll)
+ c.pendingLogs.Unlock()
+}
+
+var logLevelName = map[int64]string{
+ 0: "DEBUG",
+ 1: "INFO",
+ 2: "WARNING",
+ 3: "ERROR",
+ 4: "CRITICAL",
+}
+
+func logf(c *context, level int64, format string, args ...interface{}) {
+ if c == nil {
+ panic("not an App Engine context")
+ }
+ s := fmt.Sprintf(format, args...)
+ s = strings.TrimRight(s, "\n") // Remove any trailing newline characters.
+ c.addLogLine(&logpb.UserAppLogLine{
+ TimestampUsec: proto.Int64(time.Now().UnixNano() / 1e3),
+ Level: &level,
+ Message: &s,
+ })
+ log.Print(logLevelName[level] + ": " + s)
+}
+
+// flushLog attempts to flush any pending logs to the appserver.
+// It should not be called concurrently.
+func (c *context) flushLog(force bool) (flushed bool) {
+ c.pendingLogs.Lock()
+ // Grab up to 30 MB. We can get away with up to 32 MB, but let's be cautious.
+ n, rem := 0, 30<<20
+ for ; n < len(c.pendingLogs.lines); n++ {
+ ll := c.pendingLogs.lines[n]
+ // Each log line will require about 3 bytes of overhead.
+ nb := proto.Size(ll) + 3
+ if nb > rem {
+ break
+ }
+ rem -= nb
+ }
+ lines := c.pendingLogs.lines[:n]
+ c.pendingLogs.lines = c.pendingLogs.lines[n:]
+ c.pendingLogs.Unlock()
+
+ if len(lines) == 0 && !force {
+ // Nothing to flush.
+ return false
+ }
+
+ rescueLogs := false
+ defer func() {
+ if rescueLogs {
+ c.pendingLogs.Lock()
+ c.pendingLogs.lines = append(lines, c.pendingLogs.lines...)
+ c.pendingLogs.Unlock()
+ }
+ }()
+
+ buf, err := proto.Marshal(&logpb.UserAppLogGroup{
+ LogLine: lines,
+ })
+ if err != nil {
+ log.Printf("internal.flushLog: marshaling UserAppLogGroup: %v", err)
+ rescueLogs = true
+ return false
+ }
+
+ req := &logpb.FlushRequest{
+ Logs: buf,
+ }
+ res := &basepb.VoidProto{}
+ c.pendingLogs.Lock()
+ c.pendingLogs.flushes++
+ c.pendingLogs.Unlock()
+ if err := Call(toContext(c), "logservice", "Flush", req, res); err != nil {
+ log.Printf("internal.flushLog: Flush RPC: %v", err)
+ rescueLogs = true
+ return false
+ }
+ return true
+}
+
+const (
+ // Log flushing parameters.
+ flushInterval = 1 * time.Second
+ forceFlushInterval = 60 * time.Second
+)
+
+func (c *context) logFlusher(stop <-chan int) {
+ lastFlush := time.Now()
+ tick := time.NewTicker(flushInterval)
+ for {
+ select {
+ case <-stop:
+ // Request finished.
+ tick.Stop()
+ return
+ case <-tick.C:
+ force := time.Now().Sub(lastFlush) > forceFlushInterval
+ if c.flushLog(force) {
+ lastFlush = time.Now()
+ }
+ }
+ }
+}
+
+func ContextForTesting(req *http.Request) netcontext.Context {
+ return toContext(&context{req: req})
+}
diff --git a/vendor/google.golang.org/appengine/internal/api_common.go b/vendor/google.golang.org/appengine/internal/api_common.go
new file mode 100644
index 0000000..e0c0b21
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/api_common.go
@@ -0,0 +1,123 @@
+// Copyright 2015 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package internal
+
+import (
+ "errors"
+ "os"
+
+ "github.com/golang/protobuf/proto"
+ netcontext "golang.org/x/net/context"
+)
+
+var errNotAppEngineContext = errors.New("not an App Engine context")
+
+type CallOverrideFunc func(ctx netcontext.Context, service, method string, in, out proto.Message) error
+
+var callOverrideKey = "holds []CallOverrideFunc"
+
+func WithCallOverride(ctx netcontext.Context, f CallOverrideFunc) netcontext.Context {
+ // We avoid appending to any existing call override
+ // so we don't risk overwriting a popped stack below.
+ var cofs []CallOverrideFunc
+ if uf, ok := ctx.Value(&callOverrideKey).([]CallOverrideFunc); ok {
+ cofs = append(cofs, uf...)
+ }
+ cofs = append(cofs, f)
+ return netcontext.WithValue(ctx, &callOverrideKey, cofs)
+}
+
+func callOverrideFromContext(ctx netcontext.Context) (CallOverrideFunc, netcontext.Context, bool) {
+ cofs, _ := ctx.Value(&callOverrideKey).([]CallOverrideFunc)
+ if len(cofs) == 0 {
+ return nil, nil, false
+ }
+ // We found a list of overrides; grab the last, and reconstitute a
+ // context that will hide it.
+ f := cofs[len(cofs)-1]
+ ctx = netcontext.WithValue(ctx, &callOverrideKey, cofs[:len(cofs)-1])
+ return f, ctx, true
+}
+
+type logOverrideFunc func(level int64, format string, args ...interface{})
+
+var logOverrideKey = "holds a logOverrideFunc"
+
+func WithLogOverride(ctx netcontext.Context, f logOverrideFunc) netcontext.Context {
+ return netcontext.WithValue(ctx, &logOverrideKey, f)
+}
+
+var appIDOverrideKey = "holds a string, being the full app ID"
+
+func WithAppIDOverride(ctx netcontext.Context, appID string) netcontext.Context {
+ return netcontext.WithValue(ctx, &appIDOverrideKey, appID)
+}
+
+var namespaceKey = "holds the namespace string"
+
+func withNamespace(ctx netcontext.Context, ns string) netcontext.Context {
+ return netcontext.WithValue(ctx, &namespaceKey, ns)
+}
+
+func NamespaceFromContext(ctx netcontext.Context) string {
+ // If there's no namespace, return the empty string.
+ ns, _ := ctx.Value(&namespaceKey).(string)
+ return ns
+}
+
+// FullyQualifiedAppID returns the fully-qualified application ID.
+// This may contain a partition prefix (e.g. "s~" for High Replication apps),
+// or a domain prefix (e.g. "example.com:").
+func FullyQualifiedAppID(ctx netcontext.Context) string {
+ if id, ok := ctx.Value(&appIDOverrideKey).(string); ok {
+ return id
+ }
+ return fullyQualifiedAppID(ctx)
+}
+
+func Logf(ctx netcontext.Context, level int64, format string, args ...interface{}) {
+ if f, ok := ctx.Value(&logOverrideKey).(logOverrideFunc); ok {
+ f(level, format, args...)
+ return
+ }
+ c := fromContext(ctx)
+ if c == nil {
+ panic(errNotAppEngineContext)
+ }
+ logf(c, level, format, args...)
+}
+
+// NamespacedContext wraps a Context to support namespaces.
+func NamespacedContext(ctx netcontext.Context, namespace string) netcontext.Context {
+ return withNamespace(ctx, namespace)
+}
+
+// SetTestEnv sets the env variables for testing background ticket in Flex.
+func SetTestEnv() func() {
+ var environ = []struct {
+ key, value string
+ }{
+ {"GAE_LONG_APP_ID", "my-app-id"},
+ {"GAE_MINOR_VERSION", "067924799508853122"},
+ {"GAE_MODULE_INSTANCE", "0"},
+ {"GAE_MODULE_NAME", "default"},
+ {"GAE_MODULE_VERSION", "20150612t184001"},
+ }
+
+ for _, v := range environ {
+ old := os.Getenv(v.key)
+ os.Setenv(v.key, v.value)
+ v.value = old
+ }
+ return func() { // Restore old environment after the test completes.
+ for _, v := range environ {
+ if v.value == "" {
+ os.Unsetenv(v.key)
+ continue
+ }
+ os.Setenv(v.key, v.value)
+ }
+ }
+}
diff --git a/vendor/google.golang.org/appengine/internal/api_pre17.go b/vendor/google.golang.org/appengine/internal/api_pre17.go
new file mode 100644
index 0000000..028b4f0
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/api_pre17.go
@@ -0,0 +1,682 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+// +build !appengine
+// +build !go1.7
+
+package internal
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "io/ioutil"
+ "log"
+ "net"
+ "net/http"
+ "net/url"
+ "os"
+ "runtime"
+ "strconv"
+ "strings"
+ "sync"
+ "sync/atomic"
+ "time"
+
+ "github.com/golang/protobuf/proto"
+ netcontext "golang.org/x/net/context"
+
+ basepb "google.golang.org/appengine/internal/base"
+ logpb "google.golang.org/appengine/internal/log"
+ remotepb "google.golang.org/appengine/internal/remote_api"
+)
+
+const (
+ apiPath = "/rpc_http"
+ defaultTicketSuffix = "/default.20150612t184001.0"
+)
+
+var (
+ // Incoming headers.
+ ticketHeader = http.CanonicalHeaderKey("X-AppEngine-API-Ticket")
+ dapperHeader = http.CanonicalHeaderKey("X-Google-DapperTraceInfo")
+ traceHeader = http.CanonicalHeaderKey("X-Cloud-Trace-Context")
+ curNamespaceHeader = http.CanonicalHeaderKey("X-AppEngine-Current-Namespace")
+ userIPHeader = http.CanonicalHeaderKey("X-AppEngine-User-IP")
+ remoteAddrHeader = http.CanonicalHeaderKey("X-AppEngine-Remote-Addr")
+
+ // Outgoing headers.
+ apiEndpointHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Endpoint")
+ apiEndpointHeaderValue = []string{"app-engine-apis"}
+ apiMethodHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Method")
+ apiMethodHeaderValue = []string{"/VMRemoteAPI.CallRemoteAPI"}
+ apiDeadlineHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Deadline")
+ apiContentType = http.CanonicalHeaderKey("Content-Type")
+ apiContentTypeValue = []string{"application/octet-stream"}
+ logFlushHeader = http.CanonicalHeaderKey("X-AppEngine-Log-Flush-Count")
+
+ apiHTTPClient = &http.Client{
+ Transport: &http.Transport{
+ Proxy: http.ProxyFromEnvironment,
+ Dial: limitDial,
+ },
+ }
+
+ defaultTicketOnce sync.Once
+ defaultTicket string
+)
+
+func apiURL() *url.URL {
+ host, port := "appengine.googleapis.internal", "10001"
+ if h := os.Getenv("API_HOST"); h != "" {
+ host = h
+ }
+ if p := os.Getenv("API_PORT"); p != "" {
+ port = p
+ }
+ return &url.URL{
+ Scheme: "http",
+ Host: host + ":" + port,
+ Path: apiPath,
+ }
+}
+
+func handleHTTP(w http.ResponseWriter, r *http.Request) {
+ c := &context{
+ req: r,
+ outHeader: w.Header(),
+ apiURL: apiURL(),
+ }
+ stopFlushing := make(chan int)
+
+ ctxs.Lock()
+ ctxs.m[r] = c
+ ctxs.Unlock()
+ defer func() {
+ ctxs.Lock()
+ delete(ctxs.m, r)
+ ctxs.Unlock()
+ }()
+
+ // Patch up RemoteAddr so it looks reasonable.
+ if addr := r.Header.Get(userIPHeader); addr != "" {
+ r.RemoteAddr = addr
+ } else if addr = r.Header.Get(remoteAddrHeader); addr != "" {
+ r.RemoteAddr = addr
+ } else {
+ // Should not normally reach here, but pick a sensible default anyway.
+ r.RemoteAddr = "127.0.0.1"
+ }
+ // The address in the headers will most likely be of these forms:
+ // 123.123.123.123
+ // 2001:db8::1
+ // net/http.Request.RemoteAddr is specified to be in "IP:port" form.
+ if _, _, err := net.SplitHostPort(r.RemoteAddr); err != nil {
+ // Assume the remote address is only a host; add a default port.
+ r.RemoteAddr = net.JoinHostPort(r.RemoteAddr, "80")
+ }
+
+ // Start goroutine responsible for flushing app logs.
+ // This is done after adding c to ctx.m (and stopped before removing it)
+ // because flushing logs requires making an API call.
+ go c.logFlusher(stopFlushing)
+
+ executeRequestSafely(c, r)
+ c.outHeader = nil // make sure header changes aren't respected any more
+
+ stopFlushing <- 1 // any logging beyond this point will be dropped
+
+ // Flush any pending logs asynchronously.
+ c.pendingLogs.Lock()
+ flushes := c.pendingLogs.flushes
+ if len(c.pendingLogs.lines) > 0 {
+ flushes++
+ }
+ c.pendingLogs.Unlock()
+ go c.flushLog(false)
+ w.Header().Set(logFlushHeader, strconv.Itoa(flushes))
+
+ // Avoid nil Write call if c.Write is never called.
+ if c.outCode != 0 {
+ w.WriteHeader(c.outCode)
+ }
+ if c.outBody != nil {
+ w.Write(c.outBody)
+ }
+}
+
+func executeRequestSafely(c *context, r *http.Request) {
+ defer func() {
+ if x := recover(); x != nil {
+ logf(c, 4, "%s", renderPanic(x)) // 4 == critical
+ c.outCode = 500
+ }
+ }()
+
+ http.DefaultServeMux.ServeHTTP(c, r)
+}
+
+func renderPanic(x interface{}) string {
+ buf := make([]byte, 16<<10) // 16 KB should be plenty
+ buf = buf[:runtime.Stack(buf, false)]
+
+ // Remove the first few stack frames:
+ // this func
+ // the recover closure in the caller
+ // That will root the stack trace at the site of the panic.
+ const (
+ skipStart = "internal.renderPanic"
+ skipFrames = 2
+ )
+ start := bytes.Index(buf, []byte(skipStart))
+ p := start
+ for i := 0; i < skipFrames*2 && p+1 < len(buf); i++ {
+ p = bytes.IndexByte(buf[p+1:], '\n') + p + 1
+ if p < 0 {
+ break
+ }
+ }
+ if p >= 0 {
+ // buf[start:p+1] is the block to remove.
+ // Copy buf[p+1:] over buf[start:] and shrink buf.
+ copy(buf[start:], buf[p+1:])
+ buf = buf[:len(buf)-(p+1-start)]
+ }
+
+ // Add panic heading.
+ head := fmt.Sprintf("panic: %v\n\n", x)
+ if len(head) > len(buf) {
+ // Extremely unlikely to happen.
+ return head
+ }
+ copy(buf[len(head):], buf)
+ copy(buf, head)
+
+ return string(buf)
+}
+
+var ctxs = struct {
+ sync.Mutex
+ m map[*http.Request]*context
+ bg *context // background context, lazily initialized
+ // dec is used by tests to decorate the netcontext.Context returned
+ // for a given request. This allows tests to add overrides (such as
+ // WithAppIDOverride) to the context. The map is nil outside tests.
+ dec map[*http.Request]func(netcontext.Context) netcontext.Context
+}{
+ m: make(map[*http.Request]*context),
+}
+
+// context represents the context of an in-flight HTTP request.
+// It implements the appengine.Context and http.ResponseWriter interfaces.
+type context struct {
+ req *http.Request
+
+ outCode int
+ outHeader http.Header
+ outBody []byte
+
+ pendingLogs struct {
+ sync.Mutex
+ lines []*logpb.UserAppLogLine
+ flushes int
+ }
+
+ apiURL *url.URL
+}
+
+var contextKey = "holds a *context"
+
+// fromContext returns the App Engine context or nil if ctx is not
+// derived from an App Engine context.
+func fromContext(ctx netcontext.Context) *context {
+ c, _ := ctx.Value(&contextKey).(*context)
+ return c
+}
+
+func withContext(parent netcontext.Context, c *context) netcontext.Context {
+ ctx := netcontext.WithValue(parent, &contextKey, c)
+ if ns := c.req.Header.Get(curNamespaceHeader); ns != "" {
+ ctx = withNamespace(ctx, ns)
+ }
+ return ctx
+}
+
+func toContext(c *context) netcontext.Context {
+ return withContext(netcontext.Background(), c)
+}
+
+func IncomingHeaders(ctx netcontext.Context) http.Header {
+ if c := fromContext(ctx); c != nil {
+ return c.req.Header
+ }
+ return nil
+}
+
+func ReqContext(req *http.Request) netcontext.Context {
+ return WithContext(netcontext.Background(), req)
+}
+
+func WithContext(parent netcontext.Context, req *http.Request) netcontext.Context {
+ ctxs.Lock()
+ c := ctxs.m[req]
+ d := ctxs.dec[req]
+ ctxs.Unlock()
+
+ if d != nil {
+ parent = d(parent)
+ }
+
+ if c == nil {
+ // Someone passed in an http.Request that is not in-flight.
+ // We panic here rather than panicking at a later point
+ // so that stack traces will be more sensible.
+ log.Panic("appengine: NewContext passed an unknown http.Request")
+ }
+ return withContext(parent, c)
+}
+
+// DefaultTicket returns a ticket used for background context or dev_appserver.
+func DefaultTicket() string {
+ defaultTicketOnce.Do(func() {
+ if IsDevAppServer() {
+ defaultTicket = "testapp" + defaultTicketSuffix
+ return
+ }
+ appID := partitionlessAppID()
+ escAppID := strings.Replace(strings.Replace(appID, ":", "_", -1), ".", "_", -1)
+ majVersion := VersionID(nil)
+ if i := strings.Index(majVersion, "."); i > 0 {
+ majVersion = majVersion[:i]
+ }
+ defaultTicket = fmt.Sprintf("%s/%s.%s.%s", escAppID, ModuleName(nil), majVersion, InstanceID())
+ })
+ return defaultTicket
+}
+
+func BackgroundContext() netcontext.Context {
+ ctxs.Lock()
+ defer ctxs.Unlock()
+
+ if ctxs.bg != nil {
+ return toContext(ctxs.bg)
+ }
+
+ // Compute background security ticket.
+ ticket := DefaultTicket()
+
+ ctxs.bg = &context{
+ req: &http.Request{
+ Header: http.Header{
+ ticketHeader: []string{ticket},
+ },
+ },
+ apiURL: apiURL(),
+ }
+
+ // TODO(dsymonds): Wire up the shutdown handler to do a final flush.
+ go ctxs.bg.logFlusher(make(chan int))
+
+ return toContext(ctxs.bg)
+}
+
+// RegisterTestRequest registers the HTTP request req for testing, such that
+// any API calls are sent to the provided URL. It returns a closure to delete
+// the registration.
+// It should only be used by aetest package.
+func RegisterTestRequest(req *http.Request, apiURL *url.URL, decorate func(netcontext.Context) netcontext.Context) (*http.Request, func()) {
+ c := &context{
+ req: req,
+ apiURL: apiURL,
+ }
+ ctxs.Lock()
+ defer ctxs.Unlock()
+ if _, ok := ctxs.m[req]; ok {
+ log.Panic("req already associated with context")
+ }
+ if _, ok := ctxs.dec[req]; ok {
+ log.Panic("req already associated with context")
+ }
+ if ctxs.dec == nil {
+ ctxs.dec = make(map[*http.Request]func(netcontext.Context) netcontext.Context)
+ }
+ ctxs.m[req] = c
+ ctxs.dec[req] = decorate
+
+ return req, func() {
+ ctxs.Lock()
+ delete(ctxs.m, req)
+ delete(ctxs.dec, req)
+ ctxs.Unlock()
+ }
+}
+
+var errTimeout = &CallError{
+ Detail: "Deadline exceeded",
+ Code: int32(remotepb.RpcError_CANCELLED),
+ Timeout: true,
+}
+
+func (c *context) Header() http.Header { return c.outHeader }
+
+// Copied from $GOROOT/src/pkg/net/http/transfer.go. Some response status
+// codes do not permit a response body (nor response entity headers such as
+// Content-Length, Content-Type, etc).
+func bodyAllowedForStatus(status int) bool {
+ switch {
+ case status >= 100 && status <= 199:
+ return false
+ case status == 204:
+ return false
+ case status == 304:
+ return false
+ }
+ return true
+}
+
+func (c *context) Write(b []byte) (int, error) {
+ if c.outCode == 0 {
+ c.WriteHeader(http.StatusOK)
+ }
+ if len(b) > 0 && !bodyAllowedForStatus(c.outCode) {
+ return 0, http.ErrBodyNotAllowed
+ }
+ c.outBody = append(c.outBody, b...)
+ return len(b), nil
+}
+
+func (c *context) WriteHeader(code int) {
+ if c.outCode != 0 {
+ logf(c, 3, "WriteHeader called multiple times on request.") // error level
+ return
+ }
+ c.outCode = code
+}
+
+func (c *context) post(body []byte, timeout time.Duration) (b []byte, err error) {
+ hreq := &http.Request{
+ Method: "POST",
+ URL: c.apiURL,
+ Header: http.Header{
+ apiEndpointHeader: apiEndpointHeaderValue,
+ apiMethodHeader: apiMethodHeaderValue,
+ apiContentType: apiContentTypeValue,
+ apiDeadlineHeader: []string{strconv.FormatFloat(timeout.Seconds(), 'f', -1, 64)},
+ },
+ Body: ioutil.NopCloser(bytes.NewReader(body)),
+ ContentLength: int64(len(body)),
+ Host: c.apiURL.Host,
+ }
+ if info := c.req.Header.Get(dapperHeader); info != "" {
+ hreq.Header.Set(dapperHeader, info)
+ }
+ if info := c.req.Header.Get(traceHeader); info != "" {
+ hreq.Header.Set(traceHeader, info)
+ }
+
+ tr := apiHTTPClient.Transport.(*http.Transport)
+
+ var timedOut int32 // atomic; set to 1 if timed out
+ t := time.AfterFunc(timeout, func() {
+ atomic.StoreInt32(&timedOut, 1)
+ tr.CancelRequest(hreq)
+ })
+ defer t.Stop()
+ defer func() {
+ // Check if timeout was exceeded.
+ if atomic.LoadInt32(&timedOut) != 0 {
+ err = errTimeout
+ }
+ }()
+
+ hresp, err := apiHTTPClient.Do(hreq)
+ if err != nil {
+ return nil, &CallError{
+ Detail: fmt.Sprintf("service bridge HTTP failed: %v", err),
+ Code: int32(remotepb.RpcError_UNKNOWN),
+ }
+ }
+ defer hresp.Body.Close()
+ hrespBody, err := ioutil.ReadAll(hresp.Body)
+ if hresp.StatusCode != 200 {
+ return nil, &CallError{
+ Detail: fmt.Sprintf("service bridge returned HTTP %d (%q)", hresp.StatusCode, hrespBody),
+ Code: int32(remotepb.RpcError_UNKNOWN),
+ }
+ }
+ if err != nil {
+ return nil, &CallError{
+ Detail: fmt.Sprintf("service bridge response bad: %v", err),
+ Code: int32(remotepb.RpcError_UNKNOWN),
+ }
+ }
+ return hrespBody, nil
+}
+
+func Call(ctx netcontext.Context, service, method string, in, out proto.Message) error {
+ if ns := NamespaceFromContext(ctx); ns != "" {
+ if fn, ok := NamespaceMods[service]; ok {
+ fn(in, ns)
+ }
+ }
+
+ if f, ctx, ok := callOverrideFromContext(ctx); ok {
+ return f(ctx, service, method, in, out)
+ }
+
+ // Handle already-done contexts quickly.
+ select {
+ case <-ctx.Done():
+ return ctx.Err()
+ default:
+ }
+
+ c := fromContext(ctx)
+ if c == nil {
+ // Give a good error message rather than a panic lower down.
+ return errNotAppEngineContext
+ }
+
+ // Apply transaction modifications if we're in a transaction.
+ if t := transactionFromContext(ctx); t != nil {
+ if t.finished {
+ return errors.New("transaction context has expired")
+ }
+ applyTransaction(in, &t.transaction)
+ }
+
+ // Default RPC timeout is 60s.
+ timeout := 60 * time.Second
+ if deadline, ok := ctx.Deadline(); ok {
+ timeout = deadline.Sub(time.Now())
+ }
+
+ data, err := proto.Marshal(in)
+ if err != nil {
+ return err
+ }
+
+ ticket := c.req.Header.Get(ticketHeader)
+ // Use a test ticket under test environment.
+ if ticket == "" {
+ if appid := ctx.Value(&appIDOverrideKey); appid != nil {
+ ticket = appid.(string) + defaultTicketSuffix
+ }
+ }
+ // Fall back to use background ticket when the request ticket is not available in Flex or dev_appserver.
+ if ticket == "" {
+ ticket = DefaultTicket()
+ }
+ req := &remotepb.Request{
+ ServiceName: &service,
+ Method: &method,
+ Request: data,
+ RequestId: &ticket,
+ }
+ hreqBody, err := proto.Marshal(req)
+ if err != nil {
+ return err
+ }
+
+ hrespBody, err := c.post(hreqBody, timeout)
+ if err != nil {
+ return err
+ }
+
+ res := &remotepb.Response{}
+ if err := proto.Unmarshal(hrespBody, res); err != nil {
+ return err
+ }
+ if res.RpcError != nil {
+ ce := &CallError{
+ Detail: res.RpcError.GetDetail(),
+ Code: *res.RpcError.Code,
+ }
+ switch remotepb.RpcError_ErrorCode(ce.Code) {
+ case remotepb.RpcError_CANCELLED, remotepb.RpcError_DEADLINE_EXCEEDED:
+ ce.Timeout = true
+ }
+ return ce
+ }
+ if res.ApplicationError != nil {
+ return &APIError{
+ Service: *req.ServiceName,
+ Detail: res.ApplicationError.GetDetail(),
+ Code: *res.ApplicationError.Code,
+ }
+ }
+ if res.Exception != nil || res.JavaException != nil {
+ // This shouldn't happen, but let's be defensive.
+ return &CallError{
+ Detail: "service bridge returned exception",
+ Code: int32(remotepb.RpcError_UNKNOWN),
+ }
+ }
+ return proto.Unmarshal(res.Response, out)
+}
+
+func (c *context) Request() *http.Request {
+ return c.req
+}
+
+func (c *context) addLogLine(ll *logpb.UserAppLogLine) {
+ // Truncate long log lines.
+ // TODO(dsymonds): Check if this is still necessary.
+ const lim = 8 << 10
+ if len(*ll.Message) > lim {
+ suffix := fmt.Sprintf("...(length %d)", len(*ll.Message))
+ ll.Message = proto.String((*ll.Message)[:lim-len(suffix)] + suffix)
+ }
+
+ c.pendingLogs.Lock()
+ c.pendingLogs.lines = append(c.pendingLogs.lines, ll)
+ c.pendingLogs.Unlock()
+}
+
+var logLevelName = map[int64]string{
+ 0: "DEBUG",
+ 1: "INFO",
+ 2: "WARNING",
+ 3: "ERROR",
+ 4: "CRITICAL",
+}
+
+func logf(c *context, level int64, format string, args ...interface{}) {
+ if c == nil {
+ panic("not an App Engine context")
+ }
+ s := fmt.Sprintf(format, args...)
+ s = strings.TrimRight(s, "\n") // Remove any trailing newline characters.
+ c.addLogLine(&logpb.UserAppLogLine{
+ TimestampUsec: proto.Int64(time.Now().UnixNano() / 1e3),
+ Level: &level,
+ Message: &s,
+ })
+ log.Print(logLevelName[level] + ": " + s)
+}
+
+// flushLog attempts to flush any pending logs to the appserver.
+// It should not be called concurrently.
+func (c *context) flushLog(force bool) (flushed bool) {
+ c.pendingLogs.Lock()
+ // Grab up to 30 MB. We can get away with up to 32 MB, but let's be cautious.
+ n, rem := 0, 30<<20
+ for ; n < len(c.pendingLogs.lines); n++ {
+ ll := c.pendingLogs.lines[n]
+ // Each log line will require about 3 bytes of overhead.
+ nb := proto.Size(ll) + 3
+ if nb > rem {
+ break
+ }
+ rem -= nb
+ }
+ lines := c.pendingLogs.lines[:n]
+ c.pendingLogs.lines = c.pendingLogs.lines[n:]
+ c.pendingLogs.Unlock()
+
+ if len(lines) == 0 && !force {
+ // Nothing to flush.
+ return false
+ }
+
+ rescueLogs := false
+ defer func() {
+ if rescueLogs {
+ c.pendingLogs.Lock()
+ c.pendingLogs.lines = append(lines, c.pendingLogs.lines...)
+ c.pendingLogs.Unlock()
+ }
+ }()
+
+ buf, err := proto.Marshal(&logpb.UserAppLogGroup{
+ LogLine: lines,
+ })
+ if err != nil {
+ log.Printf("internal.flushLog: marshaling UserAppLogGroup: %v", err)
+ rescueLogs = true
+ return false
+ }
+
+ req := &logpb.FlushRequest{
+ Logs: buf,
+ }
+ res := &basepb.VoidProto{}
+ c.pendingLogs.Lock()
+ c.pendingLogs.flushes++
+ c.pendingLogs.Unlock()
+ if err := Call(toContext(c), "logservice", "Flush", req, res); err != nil {
+ log.Printf("internal.flushLog: Flush RPC: %v", err)
+ rescueLogs = true
+ return false
+ }
+ return true
+}
+
+const (
+ // Log flushing parameters.
+ flushInterval = 1 * time.Second
+ forceFlushInterval = 60 * time.Second
+)
+
+func (c *context) logFlusher(stop <-chan int) {
+ lastFlush := time.Now()
+ tick := time.NewTicker(flushInterval)
+ for {
+ select {
+ case <-stop:
+ // Request finished.
+ tick.Stop()
+ return
+ case <-tick.C:
+ force := time.Now().Sub(lastFlush) > forceFlushInterval
+ if c.flushLog(force) {
+ lastFlush = time.Now()
+ }
+ }
+ }
+}
+
+func ContextForTesting(req *http.Request) netcontext.Context {
+ return toContext(&context{req: req})
+}
diff --git a/vendor/google.golang.org/appengine/internal/app_id.go b/vendor/google.golang.org/appengine/internal/app_id.go
new file mode 100644
index 0000000..11df8c0
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/app_id.go
@@ -0,0 +1,28 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package internal
+
+import (
+ "strings"
+)
+
+func parseFullAppID(appid string) (partition, domain, displayID string) {
+ if i := strings.Index(appid, "~"); i != -1 {
+ partition, appid = appid[:i], appid[i+1:]
+ }
+ if i := strings.Index(appid, ":"); i != -1 {
+ domain, appid = appid[:i], appid[i+1:]
+ }
+ return partition, domain, appid
+}
+
+// appID returns "appid" or "domain.com:appid".
+func appID(fullAppID string) string {
+ _, dom, dis := parseFullAppID(fullAppID)
+ if dom != "" {
+ return dom + ":" + dis
+ }
+ return dis
+}
diff --git a/vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.pb.go b/vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.pb.go
new file mode 100644
index 0000000..9a2ff77
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.pb.go
@@ -0,0 +1,611 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google.golang.org/appengine/internal/app_identity/app_identity_service.proto
+
+package app_identity
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type AppIdentityServiceError_ErrorCode int32
+
+const (
+ AppIdentityServiceError_SUCCESS AppIdentityServiceError_ErrorCode = 0
+ AppIdentityServiceError_UNKNOWN_SCOPE AppIdentityServiceError_ErrorCode = 9
+ AppIdentityServiceError_BLOB_TOO_LARGE AppIdentityServiceError_ErrorCode = 1000
+ AppIdentityServiceError_DEADLINE_EXCEEDED AppIdentityServiceError_ErrorCode = 1001
+ AppIdentityServiceError_NOT_A_VALID_APP AppIdentityServiceError_ErrorCode = 1002
+ AppIdentityServiceError_UNKNOWN_ERROR AppIdentityServiceError_ErrorCode = 1003
+ AppIdentityServiceError_NOT_ALLOWED AppIdentityServiceError_ErrorCode = 1005
+ AppIdentityServiceError_NOT_IMPLEMENTED AppIdentityServiceError_ErrorCode = 1006
+)
+
+var AppIdentityServiceError_ErrorCode_name = map[int32]string{
+ 0: "SUCCESS",
+ 9: "UNKNOWN_SCOPE",
+ 1000: "BLOB_TOO_LARGE",
+ 1001: "DEADLINE_EXCEEDED",
+ 1002: "NOT_A_VALID_APP",
+ 1003: "UNKNOWN_ERROR",
+ 1005: "NOT_ALLOWED",
+ 1006: "NOT_IMPLEMENTED",
+}
+var AppIdentityServiceError_ErrorCode_value = map[string]int32{
+ "SUCCESS": 0,
+ "UNKNOWN_SCOPE": 9,
+ "BLOB_TOO_LARGE": 1000,
+ "DEADLINE_EXCEEDED": 1001,
+ "NOT_A_VALID_APP": 1002,
+ "UNKNOWN_ERROR": 1003,
+ "NOT_ALLOWED": 1005,
+ "NOT_IMPLEMENTED": 1006,
+}
+
+func (x AppIdentityServiceError_ErrorCode) Enum() *AppIdentityServiceError_ErrorCode {
+ p := new(AppIdentityServiceError_ErrorCode)
+ *p = x
+ return p
+}
+func (x AppIdentityServiceError_ErrorCode) String() string {
+ return proto.EnumName(AppIdentityServiceError_ErrorCode_name, int32(x))
+}
+func (x *AppIdentityServiceError_ErrorCode) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(AppIdentityServiceError_ErrorCode_value, data, "AppIdentityServiceError_ErrorCode")
+ if err != nil {
+ return err
+ }
+ *x = AppIdentityServiceError_ErrorCode(value)
+ return nil
+}
+func (AppIdentityServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{0, 0}
+}
+
+type AppIdentityServiceError struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AppIdentityServiceError) Reset() { *m = AppIdentityServiceError{} }
+func (m *AppIdentityServiceError) String() string { return proto.CompactTextString(m) }
+func (*AppIdentityServiceError) ProtoMessage() {}
+func (*AppIdentityServiceError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{0}
+}
+func (m *AppIdentityServiceError) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AppIdentityServiceError.Unmarshal(m, b)
+}
+func (m *AppIdentityServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AppIdentityServiceError.Marshal(b, m, deterministic)
+}
+func (dst *AppIdentityServiceError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AppIdentityServiceError.Merge(dst, src)
+}
+func (m *AppIdentityServiceError) XXX_Size() int {
+ return xxx_messageInfo_AppIdentityServiceError.Size(m)
+}
+func (m *AppIdentityServiceError) XXX_DiscardUnknown() {
+ xxx_messageInfo_AppIdentityServiceError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppIdentityServiceError proto.InternalMessageInfo
+
+type SignForAppRequest struct {
+ BytesToSign []byte `protobuf:"bytes,1,opt,name=bytes_to_sign,json=bytesToSign" json:"bytes_to_sign,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SignForAppRequest) Reset() { *m = SignForAppRequest{} }
+func (m *SignForAppRequest) String() string { return proto.CompactTextString(m) }
+func (*SignForAppRequest) ProtoMessage() {}
+func (*SignForAppRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{1}
+}
+func (m *SignForAppRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SignForAppRequest.Unmarshal(m, b)
+}
+func (m *SignForAppRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SignForAppRequest.Marshal(b, m, deterministic)
+}
+func (dst *SignForAppRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SignForAppRequest.Merge(dst, src)
+}
+func (m *SignForAppRequest) XXX_Size() int {
+ return xxx_messageInfo_SignForAppRequest.Size(m)
+}
+func (m *SignForAppRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_SignForAppRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SignForAppRequest proto.InternalMessageInfo
+
+func (m *SignForAppRequest) GetBytesToSign() []byte {
+ if m != nil {
+ return m.BytesToSign
+ }
+ return nil
+}
+
+type SignForAppResponse struct {
+ KeyName *string `protobuf:"bytes,1,opt,name=key_name,json=keyName" json:"key_name,omitempty"`
+ SignatureBytes []byte `protobuf:"bytes,2,opt,name=signature_bytes,json=signatureBytes" json:"signature_bytes,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SignForAppResponse) Reset() { *m = SignForAppResponse{} }
+func (m *SignForAppResponse) String() string { return proto.CompactTextString(m) }
+func (*SignForAppResponse) ProtoMessage() {}
+func (*SignForAppResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{2}
+}
+func (m *SignForAppResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SignForAppResponse.Unmarshal(m, b)
+}
+func (m *SignForAppResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SignForAppResponse.Marshal(b, m, deterministic)
+}
+func (dst *SignForAppResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SignForAppResponse.Merge(dst, src)
+}
+func (m *SignForAppResponse) XXX_Size() int {
+ return xxx_messageInfo_SignForAppResponse.Size(m)
+}
+func (m *SignForAppResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_SignForAppResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SignForAppResponse proto.InternalMessageInfo
+
+func (m *SignForAppResponse) GetKeyName() string {
+ if m != nil && m.KeyName != nil {
+ return *m.KeyName
+ }
+ return ""
+}
+
+func (m *SignForAppResponse) GetSignatureBytes() []byte {
+ if m != nil {
+ return m.SignatureBytes
+ }
+ return nil
+}
+
+type GetPublicCertificateForAppRequest struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetPublicCertificateForAppRequest) Reset() { *m = GetPublicCertificateForAppRequest{} }
+func (m *GetPublicCertificateForAppRequest) String() string { return proto.CompactTextString(m) }
+func (*GetPublicCertificateForAppRequest) ProtoMessage() {}
+func (*GetPublicCertificateForAppRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{3}
+}
+func (m *GetPublicCertificateForAppRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetPublicCertificateForAppRequest.Unmarshal(m, b)
+}
+func (m *GetPublicCertificateForAppRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetPublicCertificateForAppRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetPublicCertificateForAppRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetPublicCertificateForAppRequest.Merge(dst, src)
+}
+func (m *GetPublicCertificateForAppRequest) XXX_Size() int {
+ return xxx_messageInfo_GetPublicCertificateForAppRequest.Size(m)
+}
+func (m *GetPublicCertificateForAppRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetPublicCertificateForAppRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetPublicCertificateForAppRequest proto.InternalMessageInfo
+
+type PublicCertificate struct {
+ KeyName *string `protobuf:"bytes,1,opt,name=key_name,json=keyName" json:"key_name,omitempty"`
+ X509CertificatePem *string `protobuf:"bytes,2,opt,name=x509_certificate_pem,json=x509CertificatePem" json:"x509_certificate_pem,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *PublicCertificate) Reset() { *m = PublicCertificate{} }
+func (m *PublicCertificate) String() string { return proto.CompactTextString(m) }
+func (*PublicCertificate) ProtoMessage() {}
+func (*PublicCertificate) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{4}
+}
+func (m *PublicCertificate) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_PublicCertificate.Unmarshal(m, b)
+}
+func (m *PublicCertificate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_PublicCertificate.Marshal(b, m, deterministic)
+}
+func (dst *PublicCertificate) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PublicCertificate.Merge(dst, src)
+}
+func (m *PublicCertificate) XXX_Size() int {
+ return xxx_messageInfo_PublicCertificate.Size(m)
+}
+func (m *PublicCertificate) XXX_DiscardUnknown() {
+ xxx_messageInfo_PublicCertificate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PublicCertificate proto.InternalMessageInfo
+
+func (m *PublicCertificate) GetKeyName() string {
+ if m != nil && m.KeyName != nil {
+ return *m.KeyName
+ }
+ return ""
+}
+
+func (m *PublicCertificate) GetX509CertificatePem() string {
+ if m != nil && m.X509CertificatePem != nil {
+ return *m.X509CertificatePem
+ }
+ return ""
+}
+
+type GetPublicCertificateForAppResponse struct {
+ PublicCertificateList []*PublicCertificate `protobuf:"bytes,1,rep,name=public_certificate_list,json=publicCertificateList" json:"public_certificate_list,omitempty"`
+ MaxClientCacheTimeInSecond *int64 `protobuf:"varint,2,opt,name=max_client_cache_time_in_second,json=maxClientCacheTimeInSecond" json:"max_client_cache_time_in_second,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetPublicCertificateForAppResponse) Reset() { *m = GetPublicCertificateForAppResponse{} }
+func (m *GetPublicCertificateForAppResponse) String() string { return proto.CompactTextString(m) }
+func (*GetPublicCertificateForAppResponse) ProtoMessage() {}
+func (*GetPublicCertificateForAppResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{5}
+}
+func (m *GetPublicCertificateForAppResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetPublicCertificateForAppResponse.Unmarshal(m, b)
+}
+func (m *GetPublicCertificateForAppResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetPublicCertificateForAppResponse.Marshal(b, m, deterministic)
+}
+func (dst *GetPublicCertificateForAppResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetPublicCertificateForAppResponse.Merge(dst, src)
+}
+func (m *GetPublicCertificateForAppResponse) XXX_Size() int {
+ return xxx_messageInfo_GetPublicCertificateForAppResponse.Size(m)
+}
+func (m *GetPublicCertificateForAppResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetPublicCertificateForAppResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetPublicCertificateForAppResponse proto.InternalMessageInfo
+
+func (m *GetPublicCertificateForAppResponse) GetPublicCertificateList() []*PublicCertificate {
+ if m != nil {
+ return m.PublicCertificateList
+ }
+ return nil
+}
+
+func (m *GetPublicCertificateForAppResponse) GetMaxClientCacheTimeInSecond() int64 {
+ if m != nil && m.MaxClientCacheTimeInSecond != nil {
+ return *m.MaxClientCacheTimeInSecond
+ }
+ return 0
+}
+
+type GetServiceAccountNameRequest struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetServiceAccountNameRequest) Reset() { *m = GetServiceAccountNameRequest{} }
+func (m *GetServiceAccountNameRequest) String() string { return proto.CompactTextString(m) }
+func (*GetServiceAccountNameRequest) ProtoMessage() {}
+func (*GetServiceAccountNameRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{6}
+}
+func (m *GetServiceAccountNameRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetServiceAccountNameRequest.Unmarshal(m, b)
+}
+func (m *GetServiceAccountNameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetServiceAccountNameRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetServiceAccountNameRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetServiceAccountNameRequest.Merge(dst, src)
+}
+func (m *GetServiceAccountNameRequest) XXX_Size() int {
+ return xxx_messageInfo_GetServiceAccountNameRequest.Size(m)
+}
+func (m *GetServiceAccountNameRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetServiceAccountNameRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetServiceAccountNameRequest proto.InternalMessageInfo
+
+type GetServiceAccountNameResponse struct {
+ ServiceAccountName *string `protobuf:"bytes,1,opt,name=service_account_name,json=serviceAccountName" json:"service_account_name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetServiceAccountNameResponse) Reset() { *m = GetServiceAccountNameResponse{} }
+func (m *GetServiceAccountNameResponse) String() string { return proto.CompactTextString(m) }
+func (*GetServiceAccountNameResponse) ProtoMessage() {}
+func (*GetServiceAccountNameResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{7}
+}
+func (m *GetServiceAccountNameResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetServiceAccountNameResponse.Unmarshal(m, b)
+}
+func (m *GetServiceAccountNameResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetServiceAccountNameResponse.Marshal(b, m, deterministic)
+}
+func (dst *GetServiceAccountNameResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetServiceAccountNameResponse.Merge(dst, src)
+}
+func (m *GetServiceAccountNameResponse) XXX_Size() int {
+ return xxx_messageInfo_GetServiceAccountNameResponse.Size(m)
+}
+func (m *GetServiceAccountNameResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetServiceAccountNameResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetServiceAccountNameResponse proto.InternalMessageInfo
+
+func (m *GetServiceAccountNameResponse) GetServiceAccountName() string {
+ if m != nil && m.ServiceAccountName != nil {
+ return *m.ServiceAccountName
+ }
+ return ""
+}
+
+type GetAccessTokenRequest struct {
+ Scope []string `protobuf:"bytes,1,rep,name=scope" json:"scope,omitempty"`
+ ServiceAccountId *int64 `protobuf:"varint,2,opt,name=service_account_id,json=serviceAccountId" json:"service_account_id,omitempty"`
+ ServiceAccountName *string `protobuf:"bytes,3,opt,name=service_account_name,json=serviceAccountName" json:"service_account_name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetAccessTokenRequest) Reset() { *m = GetAccessTokenRequest{} }
+func (m *GetAccessTokenRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAccessTokenRequest) ProtoMessage() {}
+func (*GetAccessTokenRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{8}
+}
+func (m *GetAccessTokenRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetAccessTokenRequest.Unmarshal(m, b)
+}
+func (m *GetAccessTokenRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetAccessTokenRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetAccessTokenRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetAccessTokenRequest.Merge(dst, src)
+}
+func (m *GetAccessTokenRequest) XXX_Size() int {
+ return xxx_messageInfo_GetAccessTokenRequest.Size(m)
+}
+func (m *GetAccessTokenRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetAccessTokenRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAccessTokenRequest proto.InternalMessageInfo
+
+func (m *GetAccessTokenRequest) GetScope() []string {
+ if m != nil {
+ return m.Scope
+ }
+ return nil
+}
+
+func (m *GetAccessTokenRequest) GetServiceAccountId() int64 {
+ if m != nil && m.ServiceAccountId != nil {
+ return *m.ServiceAccountId
+ }
+ return 0
+}
+
+func (m *GetAccessTokenRequest) GetServiceAccountName() string {
+ if m != nil && m.ServiceAccountName != nil {
+ return *m.ServiceAccountName
+ }
+ return ""
+}
+
+type GetAccessTokenResponse struct {
+ AccessToken *string `protobuf:"bytes,1,opt,name=access_token,json=accessToken" json:"access_token,omitempty"`
+ ExpirationTime *int64 `protobuf:"varint,2,opt,name=expiration_time,json=expirationTime" json:"expiration_time,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetAccessTokenResponse) Reset() { *m = GetAccessTokenResponse{} }
+func (m *GetAccessTokenResponse) String() string { return proto.CompactTextString(m) }
+func (*GetAccessTokenResponse) ProtoMessage() {}
+func (*GetAccessTokenResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{9}
+}
+func (m *GetAccessTokenResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetAccessTokenResponse.Unmarshal(m, b)
+}
+func (m *GetAccessTokenResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetAccessTokenResponse.Marshal(b, m, deterministic)
+}
+func (dst *GetAccessTokenResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetAccessTokenResponse.Merge(dst, src)
+}
+func (m *GetAccessTokenResponse) XXX_Size() int {
+ return xxx_messageInfo_GetAccessTokenResponse.Size(m)
+}
+func (m *GetAccessTokenResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetAccessTokenResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAccessTokenResponse proto.InternalMessageInfo
+
+func (m *GetAccessTokenResponse) GetAccessToken() string {
+ if m != nil && m.AccessToken != nil {
+ return *m.AccessToken
+ }
+ return ""
+}
+
+func (m *GetAccessTokenResponse) GetExpirationTime() int64 {
+ if m != nil && m.ExpirationTime != nil {
+ return *m.ExpirationTime
+ }
+ return 0
+}
+
+type GetDefaultGcsBucketNameRequest struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetDefaultGcsBucketNameRequest) Reset() { *m = GetDefaultGcsBucketNameRequest{} }
+func (m *GetDefaultGcsBucketNameRequest) String() string { return proto.CompactTextString(m) }
+func (*GetDefaultGcsBucketNameRequest) ProtoMessage() {}
+func (*GetDefaultGcsBucketNameRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{10}
+}
+func (m *GetDefaultGcsBucketNameRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetDefaultGcsBucketNameRequest.Unmarshal(m, b)
+}
+func (m *GetDefaultGcsBucketNameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetDefaultGcsBucketNameRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetDefaultGcsBucketNameRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetDefaultGcsBucketNameRequest.Merge(dst, src)
+}
+func (m *GetDefaultGcsBucketNameRequest) XXX_Size() int {
+ return xxx_messageInfo_GetDefaultGcsBucketNameRequest.Size(m)
+}
+func (m *GetDefaultGcsBucketNameRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetDefaultGcsBucketNameRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDefaultGcsBucketNameRequest proto.InternalMessageInfo
+
+type GetDefaultGcsBucketNameResponse struct {
+ DefaultGcsBucketName *string `protobuf:"bytes,1,opt,name=default_gcs_bucket_name,json=defaultGcsBucketName" json:"default_gcs_bucket_name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetDefaultGcsBucketNameResponse) Reset() { *m = GetDefaultGcsBucketNameResponse{} }
+func (m *GetDefaultGcsBucketNameResponse) String() string { return proto.CompactTextString(m) }
+func (*GetDefaultGcsBucketNameResponse) ProtoMessage() {}
+func (*GetDefaultGcsBucketNameResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{11}
+}
+func (m *GetDefaultGcsBucketNameResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetDefaultGcsBucketNameResponse.Unmarshal(m, b)
+}
+func (m *GetDefaultGcsBucketNameResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetDefaultGcsBucketNameResponse.Marshal(b, m, deterministic)
+}
+func (dst *GetDefaultGcsBucketNameResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetDefaultGcsBucketNameResponse.Merge(dst, src)
+}
+func (m *GetDefaultGcsBucketNameResponse) XXX_Size() int {
+ return xxx_messageInfo_GetDefaultGcsBucketNameResponse.Size(m)
+}
+func (m *GetDefaultGcsBucketNameResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetDefaultGcsBucketNameResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDefaultGcsBucketNameResponse proto.InternalMessageInfo
+
+func (m *GetDefaultGcsBucketNameResponse) GetDefaultGcsBucketName() string {
+ if m != nil && m.DefaultGcsBucketName != nil {
+ return *m.DefaultGcsBucketName
+ }
+ return ""
+}
+
+func init() {
+ proto.RegisterType((*AppIdentityServiceError)(nil), "appengine.AppIdentityServiceError")
+ proto.RegisterType((*SignForAppRequest)(nil), "appengine.SignForAppRequest")
+ proto.RegisterType((*SignForAppResponse)(nil), "appengine.SignForAppResponse")
+ proto.RegisterType((*GetPublicCertificateForAppRequest)(nil), "appengine.GetPublicCertificateForAppRequest")
+ proto.RegisterType((*PublicCertificate)(nil), "appengine.PublicCertificate")
+ proto.RegisterType((*GetPublicCertificateForAppResponse)(nil), "appengine.GetPublicCertificateForAppResponse")
+ proto.RegisterType((*GetServiceAccountNameRequest)(nil), "appengine.GetServiceAccountNameRequest")
+ proto.RegisterType((*GetServiceAccountNameResponse)(nil), "appengine.GetServiceAccountNameResponse")
+ proto.RegisterType((*GetAccessTokenRequest)(nil), "appengine.GetAccessTokenRequest")
+ proto.RegisterType((*GetAccessTokenResponse)(nil), "appengine.GetAccessTokenResponse")
+ proto.RegisterType((*GetDefaultGcsBucketNameRequest)(nil), "appengine.GetDefaultGcsBucketNameRequest")
+ proto.RegisterType((*GetDefaultGcsBucketNameResponse)(nil), "appengine.GetDefaultGcsBucketNameResponse")
+}
+
+func init() {
+ proto.RegisterFile("google.golang.org/appengine/internal/app_identity/app_identity_service.proto", fileDescriptor_app_identity_service_08a6e3f74b04cfa4)
+}
+
+var fileDescriptor_app_identity_service_08a6e3f74b04cfa4 = []byte{
+ // 676 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xdb, 0x6e, 0xda, 0x58,
+ 0x14, 0x1d, 0x26, 0x1a, 0x31, 0x6c, 0x12, 0x62, 0xce, 0x90, 0xcb, 0x8c, 0x32, 0xb9, 0x78, 0x1e,
+ 0x26, 0x0f, 0x15, 0x89, 0x2a, 0x45, 0x55, 0x1f, 0x8d, 0xed, 0x22, 0x54, 0x07, 0x53, 0x43, 0x9a,
+ 0xa8, 0x2f, 0xa7, 0xce, 0x61, 0xc7, 0x3d, 0x02, 0x9f, 0xe3, 0xda, 0x87, 0x0a, 0x3e, 0xa2, 0x3f,
+ 0xd2, 0x9f, 0xe8, 0x5b, 0xbf, 0xa5, 0x17, 0xb5, 0xdf, 0x50, 0xd9, 0x38, 0x5c, 0x92, 0x92, 0x37,
+ 0xbc, 0xf6, 0x5a, 0xcb, 0x6b, 0x2f, 0x6d, 0x0c, 0x4e, 0x20, 0x65, 0x30, 0xc4, 0x7a, 0x20, 0x87,
+ 0xbe, 0x08, 0xea, 0x32, 0x0e, 0x4e, 0xfc, 0x28, 0x42, 0x11, 0x70, 0x81, 0x27, 0x5c, 0x28, 0x8c,
+ 0x85, 0x3f, 0x4c, 0x21, 0xca, 0xfb, 0x28, 0x14, 0x57, 0x93, 0xa5, 0x07, 0x9a, 0x60, 0xfc, 0x8e,
+ 0x33, 0xac, 0x47, 0xb1, 0x54, 0x92, 0x94, 0x66, 0x5a, 0xfd, 0x53, 0x01, 0x76, 0x8c, 0x28, 0x6a,
+ 0xe5, 0xc4, 0xee, 0x94, 0x67, 0xc7, 0xb1, 0x8c, 0xf5, 0x0f, 0x05, 0x28, 0x65, 0xbf, 0x4c, 0xd9,
+ 0x47, 0x52, 0x86, 0x62, 0xf7, 0xc2, 0x34, 0xed, 0x6e, 0x57, 0xfb, 0x8d, 0x54, 0x61, 0xe3, 0xa2,
+ 0xfd, 0xbc, 0xed, 0x5e, 0xb6, 0x69, 0xd7, 0x74, 0x3b, 0xb6, 0x56, 0x22, 0x7f, 0x41, 0xa5, 0xe1,
+ 0xb8, 0x0d, 0xda, 0x73, 0x5d, 0xea, 0x18, 0x5e, 0xd3, 0xd6, 0x3e, 0x17, 0xc9, 0x36, 0x54, 0x2d,
+ 0xdb, 0xb0, 0x9c, 0x56, 0xdb, 0xa6, 0xf6, 0x95, 0x69, 0xdb, 0x96, 0x6d, 0x69, 0x5f, 0x8a, 0xa4,
+ 0x06, 0x9b, 0x6d, 0xb7, 0x47, 0x0d, 0xfa, 0xd2, 0x70, 0x5a, 0x16, 0x35, 0x3a, 0x1d, 0xed, 0x6b,
+ 0x91, 0x90, 0xb9, 0xab, 0xed, 0x79, 0xae, 0xa7, 0x7d, 0x2b, 0x12, 0x0d, 0xca, 0x19, 0xd3, 0x71,
+ 0xdc, 0x4b, 0xdb, 0xd2, 0xbe, 0xcf, 0xb4, 0xad, 0xf3, 0x8e, 0x63, 0x9f, 0xdb, 0xed, 0x9e, 0x6d,
+ 0x69, 0x3f, 0x8a, 0xfa, 0x13, 0xa8, 0x76, 0x79, 0x20, 0x9e, 0xc9, 0xd8, 0x88, 0x22, 0x0f, 0xdf,
+ 0x8e, 0x30, 0x51, 0x44, 0x87, 0x8d, 0xeb, 0x89, 0xc2, 0x84, 0x2a, 0x49, 0x13, 0x1e, 0x88, 0xdd,
+ 0xc2, 0x61, 0xe1, 0x78, 0xdd, 0x2b, 0x67, 0x60, 0x4f, 0xa6, 0x02, 0xfd, 0x0a, 0xc8, 0xa2, 0x30,
+ 0x89, 0xa4, 0x48, 0x90, 0xfc, 0x0d, 0x7f, 0x0e, 0x70, 0x42, 0x85, 0x1f, 0x62, 0x26, 0x2a, 0x79,
+ 0xc5, 0x01, 0x4e, 0xda, 0x7e, 0x88, 0xe4, 0x7f, 0xd8, 0x4c, 0xbd, 0x7c, 0x35, 0x8a, 0x91, 0x66,
+ 0x4e, 0xbb, 0xbf, 0x67, 0xb6, 0x95, 0x19, 0xdc, 0x48, 0x51, 0xfd, 0x3f, 0x38, 0x6a, 0xa2, 0xea,
+ 0x8c, 0xae, 0x87, 0x9c, 0x99, 0x18, 0x2b, 0x7e, 0xc3, 0x99, 0xaf, 0x70, 0x29, 0xa2, 0xfe, 0x1a,
+ 0xaa, 0xf7, 0x18, 0x0f, 0xbd, 0xfd, 0x14, 0x6a, 0xe3, 0xb3, 0xd3, 0xa7, 0x94, 0xcd, 0xe9, 0x34,
+ 0xc2, 0x30, 0x8b, 0x50, 0xf2, 0x48, 0x3a, 0x5b, 0x70, 0xea, 0x60, 0xa8, 0x7f, 0x2c, 0x80, 0xfe,
+ 0x50, 0x8e, 0x7c, 0xe3, 0x1e, 0xec, 0x44, 0x19, 0x65, 0xc9, 0x7a, 0xc8, 0x13, 0xb5, 0x5b, 0x38,
+ 0x5c, 0x3b, 0x2e, 0x3f, 0xde, 0xab, 0xcf, 0xce, 0xa6, 0x7e, 0xcf, 0xcc, 0xdb, 0x8a, 0xee, 0x42,
+ 0x0e, 0x4f, 0x14, 0x31, 0xe1, 0x20, 0xf4, 0xc7, 0x94, 0x0d, 0x39, 0x0a, 0x45, 0x99, 0xcf, 0xde,
+ 0x20, 0x55, 0x3c, 0x44, 0xca, 0x05, 0x4d, 0x90, 0x49, 0xd1, 0xcf, 0x92, 0xaf, 0x79, 0xff, 0x84,
+ 0xfe, 0xd8, 0xcc, 0x58, 0x66, 0x4a, 0xea, 0xf1, 0x10, 0x5b, 0xa2, 0x9b, 0x31, 0xf4, 0x7d, 0xd8,
+ 0x6b, 0xa2, 0xca, 0x6f, 0xd3, 0x60, 0x4c, 0x8e, 0x84, 0x4a, 0xcb, 0xb8, 0xed, 0xf0, 0x05, 0xfc,
+ 0xbb, 0x62, 0x9e, 0xef, 0x76, 0x0a, 0xb5, 0xfc, 0x1f, 0x40, 0xfd, 0xe9, 0x78, 0xb1, 0x5b, 0x92,
+ 0xdc, 0x53, 0xea, 0xef, 0x0b, 0xb0, 0xd5, 0x44, 0x65, 0x30, 0x86, 0x49, 0xd2, 0x93, 0x03, 0x14,
+ 0xb7, 0x37, 0x55, 0x83, 0x3f, 0x12, 0x26, 0x23, 0xcc, 0x5a, 0x29, 0x79, 0xd3, 0x07, 0xf2, 0x08,
+ 0xc8, 0xdd, 0x37, 0xf0, 0xdb, 0xd5, 0xb4, 0x65, 0xff, 0x56, 0x7f, 0x65, 0x9e, 0xb5, 0x95, 0x79,
+ 0xfa, 0xb0, 0x7d, 0x37, 0x4e, 0xbe, 0xdb, 0x11, 0xac, 0xfb, 0x19, 0x4c, 0x55, 0x8a, 0xe7, 0x3b,
+ 0x95, 0xfd, 0x39, 0x35, 0xbd, 0x58, 0x1c, 0x47, 0x3c, 0xf6, 0x15, 0x97, 0x22, 0xab, 0x3f, 0x4f,
+ 0x56, 0x99, 0xc3, 0x69, 0xe1, 0xfa, 0x21, 0xec, 0x37, 0x51, 0x59, 0x78, 0xe3, 0x8f, 0x86, 0xaa,
+ 0xc9, 0x92, 0xc6, 0x88, 0x0d, 0x70, 0xa9, 0xea, 0x2b, 0x38, 0x58, 0xc9, 0xc8, 0x03, 0x9d, 0xc1,
+ 0x4e, 0x7f, 0x3a, 0xa7, 0x01, 0x4b, 0xe8, 0x75, 0xc6, 0x58, 0xec, 0xbb, 0xd6, 0xff, 0x85, 0xbc,
+ 0x51, 0x79, 0xb5, 0xbe, 0xf8, 0xc9, 0xfa, 0x19, 0x00, 0x00, 0xff, 0xff, 0x37, 0x4c, 0x56, 0x38,
+ 0xf3, 0x04, 0x00, 0x00,
+}
diff --git a/vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.proto b/vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.proto
new file mode 100644
index 0000000..19610ca
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.proto
@@ -0,0 +1,64 @@
+syntax = "proto2";
+option go_package = "app_identity";
+
+package appengine;
+
+message AppIdentityServiceError {
+ enum ErrorCode {
+ SUCCESS = 0;
+ UNKNOWN_SCOPE = 9;
+ BLOB_TOO_LARGE = 1000;
+ DEADLINE_EXCEEDED = 1001;
+ NOT_A_VALID_APP = 1002;
+ UNKNOWN_ERROR = 1003;
+ NOT_ALLOWED = 1005;
+ NOT_IMPLEMENTED = 1006;
+ }
+}
+
+message SignForAppRequest {
+ optional bytes bytes_to_sign = 1;
+}
+
+message SignForAppResponse {
+ optional string key_name = 1;
+ optional bytes signature_bytes = 2;
+}
+
+message GetPublicCertificateForAppRequest {
+}
+
+message PublicCertificate {
+ optional string key_name = 1;
+ optional string x509_certificate_pem = 2;
+}
+
+message GetPublicCertificateForAppResponse {
+ repeated PublicCertificate public_certificate_list = 1;
+ optional int64 max_client_cache_time_in_second = 2;
+}
+
+message GetServiceAccountNameRequest {
+}
+
+message GetServiceAccountNameResponse {
+ optional string service_account_name = 1;
+}
+
+message GetAccessTokenRequest {
+ repeated string scope = 1;
+ optional int64 service_account_id = 2;
+ optional string service_account_name = 3;
+}
+
+message GetAccessTokenResponse {
+ optional string access_token = 1;
+ optional int64 expiration_time = 2;
+}
+
+message GetDefaultGcsBucketNameRequest {
+}
+
+message GetDefaultGcsBucketNameResponse {
+ optional string default_gcs_bucket_name = 1;
+}
diff --git a/vendor/google.golang.org/appengine/internal/base/api_base.pb.go b/vendor/google.golang.org/appengine/internal/base/api_base.pb.go
new file mode 100644
index 0000000..db4777e
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/base/api_base.pb.go
@@ -0,0 +1,308 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google.golang.org/appengine/internal/base/api_base.proto
+
+package base
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type StringProto struct {
+ Value *string `protobuf:"bytes,1,req,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *StringProto) Reset() { *m = StringProto{} }
+func (m *StringProto) String() string { return proto.CompactTextString(m) }
+func (*StringProto) ProtoMessage() {}
+func (*StringProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_api_base_9d49f8792e0c1140, []int{0}
+}
+func (m *StringProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_StringProto.Unmarshal(m, b)
+}
+func (m *StringProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_StringProto.Marshal(b, m, deterministic)
+}
+func (dst *StringProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_StringProto.Merge(dst, src)
+}
+func (m *StringProto) XXX_Size() int {
+ return xxx_messageInfo_StringProto.Size(m)
+}
+func (m *StringProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_StringProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StringProto proto.InternalMessageInfo
+
+func (m *StringProto) GetValue() string {
+ if m != nil && m.Value != nil {
+ return *m.Value
+ }
+ return ""
+}
+
+type Integer32Proto struct {
+ Value *int32 `protobuf:"varint,1,req,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Integer32Proto) Reset() { *m = Integer32Proto{} }
+func (m *Integer32Proto) String() string { return proto.CompactTextString(m) }
+func (*Integer32Proto) ProtoMessage() {}
+func (*Integer32Proto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_api_base_9d49f8792e0c1140, []int{1}
+}
+func (m *Integer32Proto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Integer32Proto.Unmarshal(m, b)
+}
+func (m *Integer32Proto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Integer32Proto.Marshal(b, m, deterministic)
+}
+func (dst *Integer32Proto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Integer32Proto.Merge(dst, src)
+}
+func (m *Integer32Proto) XXX_Size() int {
+ return xxx_messageInfo_Integer32Proto.Size(m)
+}
+func (m *Integer32Proto) XXX_DiscardUnknown() {
+ xxx_messageInfo_Integer32Proto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Integer32Proto proto.InternalMessageInfo
+
+func (m *Integer32Proto) GetValue() int32 {
+ if m != nil && m.Value != nil {
+ return *m.Value
+ }
+ return 0
+}
+
+type Integer64Proto struct {
+ Value *int64 `protobuf:"varint,1,req,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Integer64Proto) Reset() { *m = Integer64Proto{} }
+func (m *Integer64Proto) String() string { return proto.CompactTextString(m) }
+func (*Integer64Proto) ProtoMessage() {}
+func (*Integer64Proto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_api_base_9d49f8792e0c1140, []int{2}
+}
+func (m *Integer64Proto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Integer64Proto.Unmarshal(m, b)
+}
+func (m *Integer64Proto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Integer64Proto.Marshal(b, m, deterministic)
+}
+func (dst *Integer64Proto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Integer64Proto.Merge(dst, src)
+}
+func (m *Integer64Proto) XXX_Size() int {
+ return xxx_messageInfo_Integer64Proto.Size(m)
+}
+func (m *Integer64Proto) XXX_DiscardUnknown() {
+ xxx_messageInfo_Integer64Proto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Integer64Proto proto.InternalMessageInfo
+
+func (m *Integer64Proto) GetValue() int64 {
+ if m != nil && m.Value != nil {
+ return *m.Value
+ }
+ return 0
+}
+
+type BoolProto struct {
+ Value *bool `protobuf:"varint,1,req,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *BoolProto) Reset() { *m = BoolProto{} }
+func (m *BoolProto) String() string { return proto.CompactTextString(m) }
+func (*BoolProto) ProtoMessage() {}
+func (*BoolProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_api_base_9d49f8792e0c1140, []int{3}
+}
+func (m *BoolProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_BoolProto.Unmarshal(m, b)
+}
+func (m *BoolProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_BoolProto.Marshal(b, m, deterministic)
+}
+func (dst *BoolProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_BoolProto.Merge(dst, src)
+}
+func (m *BoolProto) XXX_Size() int {
+ return xxx_messageInfo_BoolProto.Size(m)
+}
+func (m *BoolProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_BoolProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BoolProto proto.InternalMessageInfo
+
+func (m *BoolProto) GetValue() bool {
+ if m != nil && m.Value != nil {
+ return *m.Value
+ }
+ return false
+}
+
+type DoubleProto struct {
+ Value *float64 `protobuf:"fixed64,1,req,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DoubleProto) Reset() { *m = DoubleProto{} }
+func (m *DoubleProto) String() string { return proto.CompactTextString(m) }
+func (*DoubleProto) ProtoMessage() {}
+func (*DoubleProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_api_base_9d49f8792e0c1140, []int{4}
+}
+func (m *DoubleProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DoubleProto.Unmarshal(m, b)
+}
+func (m *DoubleProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DoubleProto.Marshal(b, m, deterministic)
+}
+func (dst *DoubleProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DoubleProto.Merge(dst, src)
+}
+func (m *DoubleProto) XXX_Size() int {
+ return xxx_messageInfo_DoubleProto.Size(m)
+}
+func (m *DoubleProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_DoubleProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DoubleProto proto.InternalMessageInfo
+
+func (m *DoubleProto) GetValue() float64 {
+ if m != nil && m.Value != nil {
+ return *m.Value
+ }
+ return 0
+}
+
+type BytesProto struct {
+ Value []byte `protobuf:"bytes,1,req,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *BytesProto) Reset() { *m = BytesProto{} }
+func (m *BytesProto) String() string { return proto.CompactTextString(m) }
+func (*BytesProto) ProtoMessage() {}
+func (*BytesProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_api_base_9d49f8792e0c1140, []int{5}
+}
+func (m *BytesProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_BytesProto.Unmarshal(m, b)
+}
+func (m *BytesProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_BytesProto.Marshal(b, m, deterministic)
+}
+func (dst *BytesProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_BytesProto.Merge(dst, src)
+}
+func (m *BytesProto) XXX_Size() int {
+ return xxx_messageInfo_BytesProto.Size(m)
+}
+func (m *BytesProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_BytesProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BytesProto proto.InternalMessageInfo
+
+func (m *BytesProto) GetValue() []byte {
+ if m != nil {
+ return m.Value
+ }
+ return nil
+}
+
+type VoidProto struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *VoidProto) Reset() { *m = VoidProto{} }
+func (m *VoidProto) String() string { return proto.CompactTextString(m) }
+func (*VoidProto) ProtoMessage() {}
+func (*VoidProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_api_base_9d49f8792e0c1140, []int{6}
+}
+func (m *VoidProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_VoidProto.Unmarshal(m, b)
+}
+func (m *VoidProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_VoidProto.Marshal(b, m, deterministic)
+}
+func (dst *VoidProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_VoidProto.Merge(dst, src)
+}
+func (m *VoidProto) XXX_Size() int {
+ return xxx_messageInfo_VoidProto.Size(m)
+}
+func (m *VoidProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_VoidProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoidProto proto.InternalMessageInfo
+
+func init() {
+ proto.RegisterType((*StringProto)(nil), "appengine.base.StringProto")
+ proto.RegisterType((*Integer32Proto)(nil), "appengine.base.Integer32Proto")
+ proto.RegisterType((*Integer64Proto)(nil), "appengine.base.Integer64Proto")
+ proto.RegisterType((*BoolProto)(nil), "appengine.base.BoolProto")
+ proto.RegisterType((*DoubleProto)(nil), "appengine.base.DoubleProto")
+ proto.RegisterType((*BytesProto)(nil), "appengine.base.BytesProto")
+ proto.RegisterType((*VoidProto)(nil), "appengine.base.VoidProto")
+}
+
+func init() {
+ proto.RegisterFile("google.golang.org/appengine/internal/base/api_base.proto", fileDescriptor_api_base_9d49f8792e0c1140)
+}
+
+var fileDescriptor_api_base_9d49f8792e0c1140 = []byte{
+ // 199 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0xcf, 0x3f, 0x4b, 0xc6, 0x30,
+ 0x10, 0x06, 0x70, 0x5a, 0xad, 0xb4, 0x57, 0xe9, 0x20, 0x0e, 0x1d, 0xb5, 0x05, 0x71, 0x4a, 0x40,
+ 0x45, 0x9c, 0x83, 0x8b, 0x9b, 0x28, 0x38, 0xb8, 0x48, 0x8a, 0xc7, 0x11, 0x08, 0xb9, 0x90, 0xa6,
+ 0x82, 0xdf, 0x5e, 0xda, 0xd2, 0xfa, 0xc2, 0x9b, 0xed, 0xfe, 0xfc, 0xe0, 0xe1, 0x81, 0x27, 0x62,
+ 0x26, 0x8b, 0x82, 0xd8, 0x6a, 0x47, 0x82, 0x03, 0x49, 0xed, 0x3d, 0x3a, 0x32, 0x0e, 0xa5, 0x71,
+ 0x11, 0x83, 0xd3, 0x56, 0x0e, 0x7a, 0x44, 0xa9, 0xbd, 0xf9, 0x9a, 0x07, 0xe1, 0x03, 0x47, 0xbe,
+ 0x68, 0x76, 0x27, 0xe6, 0x6b, 0xd7, 0x43, 0xfd, 0x1e, 0x83, 0x71, 0xf4, 0xba, 0xbc, 0x2f, 0xa1,
+ 0xf8, 0xd1, 0x76, 0xc2, 0x36, 0xbb, 0xca, 0x6f, 0xab, 0xb7, 0x75, 0xe9, 0x6e, 0xa0, 0x79, 0x71,
+ 0x11, 0x09, 0xc3, 0xfd, 0x5d, 0xc2, 0x15, 0xc7, 0xee, 0xf1, 0x21, 0xe1, 0x4e, 0x36, 0x77, 0x0d,
+ 0x95, 0x62, 0xb6, 0x09, 0x52, 0x6e, 0xa4, 0x87, 0xfa, 0x99, 0xa7, 0xc1, 0x62, 0x02, 0x65, 0xff,
+ 0x79, 0xa0, 0x7e, 0x23, 0x8e, 0xab, 0x69, 0x0f, 0xcd, 0xb9, 0xca, 0xcb, 0xdd, 0xd5, 0x50, 0x7d,
+ 0xb0, 0xf9, 0x5e, 0x98, 0x3a, 0xfb, 0x3c, 0x9d, 0x9b, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xba,
+ 0x37, 0x25, 0xea, 0x44, 0x01, 0x00, 0x00,
+}
diff --git a/vendor/google.golang.org/appengine/internal/base/api_base.proto b/vendor/google.golang.org/appengine/internal/base/api_base.proto
new file mode 100644
index 0000000..56cd7a3
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/base/api_base.proto
@@ -0,0 +1,33 @@
+// Built-in base types for API calls. Primarily useful as return types.
+
+syntax = "proto2";
+option go_package = "base";
+
+package appengine.base;
+
+message StringProto {
+ required string value = 1;
+}
+
+message Integer32Proto {
+ required int32 value = 1;
+}
+
+message Integer64Proto {
+ required int64 value = 1;
+}
+
+message BoolProto {
+ required bool value = 1;
+}
+
+message DoubleProto {
+ required double value = 1;
+}
+
+message BytesProto {
+ required bytes value = 1 [ctype=CORD];
+}
+
+message VoidProto {
+}
diff --git a/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go b/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go
new file mode 100644
index 0000000..2fb7482
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go
@@ -0,0 +1,4367 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google.golang.org/appengine/internal/datastore/datastore_v3.proto
+
+package datastore
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type Property_Meaning int32
+
+const (
+ Property_NO_MEANING Property_Meaning = 0
+ Property_BLOB Property_Meaning = 14
+ Property_TEXT Property_Meaning = 15
+ Property_BYTESTRING Property_Meaning = 16
+ Property_ATOM_CATEGORY Property_Meaning = 1
+ Property_ATOM_LINK Property_Meaning = 2
+ Property_ATOM_TITLE Property_Meaning = 3
+ Property_ATOM_CONTENT Property_Meaning = 4
+ Property_ATOM_SUMMARY Property_Meaning = 5
+ Property_ATOM_AUTHOR Property_Meaning = 6
+ Property_GD_WHEN Property_Meaning = 7
+ Property_GD_EMAIL Property_Meaning = 8
+ Property_GEORSS_POINT Property_Meaning = 9
+ Property_GD_IM Property_Meaning = 10
+ Property_GD_PHONENUMBER Property_Meaning = 11
+ Property_GD_POSTALADDRESS Property_Meaning = 12
+ Property_GD_RATING Property_Meaning = 13
+ Property_BLOBKEY Property_Meaning = 17
+ Property_ENTITY_PROTO Property_Meaning = 19
+ Property_INDEX_VALUE Property_Meaning = 18
+)
+
+var Property_Meaning_name = map[int32]string{
+ 0: "NO_MEANING",
+ 14: "BLOB",
+ 15: "TEXT",
+ 16: "BYTESTRING",
+ 1: "ATOM_CATEGORY",
+ 2: "ATOM_LINK",
+ 3: "ATOM_TITLE",
+ 4: "ATOM_CONTENT",
+ 5: "ATOM_SUMMARY",
+ 6: "ATOM_AUTHOR",
+ 7: "GD_WHEN",
+ 8: "GD_EMAIL",
+ 9: "GEORSS_POINT",
+ 10: "GD_IM",
+ 11: "GD_PHONENUMBER",
+ 12: "GD_POSTALADDRESS",
+ 13: "GD_RATING",
+ 17: "BLOBKEY",
+ 19: "ENTITY_PROTO",
+ 18: "INDEX_VALUE",
+}
+var Property_Meaning_value = map[string]int32{
+ "NO_MEANING": 0,
+ "BLOB": 14,
+ "TEXT": 15,
+ "BYTESTRING": 16,
+ "ATOM_CATEGORY": 1,
+ "ATOM_LINK": 2,
+ "ATOM_TITLE": 3,
+ "ATOM_CONTENT": 4,
+ "ATOM_SUMMARY": 5,
+ "ATOM_AUTHOR": 6,
+ "GD_WHEN": 7,
+ "GD_EMAIL": 8,
+ "GEORSS_POINT": 9,
+ "GD_IM": 10,
+ "GD_PHONENUMBER": 11,
+ "GD_POSTALADDRESS": 12,
+ "GD_RATING": 13,
+ "BLOBKEY": 17,
+ "ENTITY_PROTO": 19,
+ "INDEX_VALUE": 18,
+}
+
+func (x Property_Meaning) Enum() *Property_Meaning {
+ p := new(Property_Meaning)
+ *p = x
+ return p
+}
+func (x Property_Meaning) String() string {
+ return proto.EnumName(Property_Meaning_name, int32(x))
+}
+func (x *Property_Meaning) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(Property_Meaning_value, data, "Property_Meaning")
+ if err != nil {
+ return err
+ }
+ *x = Property_Meaning(value)
+ return nil
+}
+func (Property_Meaning) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2, 0}
+}
+
+type Property_FtsTokenizationOption int32
+
+const (
+ Property_HTML Property_FtsTokenizationOption = 1
+ Property_ATOM Property_FtsTokenizationOption = 2
+)
+
+var Property_FtsTokenizationOption_name = map[int32]string{
+ 1: "HTML",
+ 2: "ATOM",
+}
+var Property_FtsTokenizationOption_value = map[string]int32{
+ "HTML": 1,
+ "ATOM": 2,
+}
+
+func (x Property_FtsTokenizationOption) Enum() *Property_FtsTokenizationOption {
+ p := new(Property_FtsTokenizationOption)
+ *p = x
+ return p
+}
+func (x Property_FtsTokenizationOption) String() string {
+ return proto.EnumName(Property_FtsTokenizationOption_name, int32(x))
+}
+func (x *Property_FtsTokenizationOption) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(Property_FtsTokenizationOption_value, data, "Property_FtsTokenizationOption")
+ if err != nil {
+ return err
+ }
+ *x = Property_FtsTokenizationOption(value)
+ return nil
+}
+func (Property_FtsTokenizationOption) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2, 1}
+}
+
+type EntityProto_Kind int32
+
+const (
+ EntityProto_GD_CONTACT EntityProto_Kind = 1
+ EntityProto_GD_EVENT EntityProto_Kind = 2
+ EntityProto_GD_MESSAGE EntityProto_Kind = 3
+)
+
+var EntityProto_Kind_name = map[int32]string{
+ 1: "GD_CONTACT",
+ 2: "GD_EVENT",
+ 3: "GD_MESSAGE",
+}
+var EntityProto_Kind_value = map[string]int32{
+ "GD_CONTACT": 1,
+ "GD_EVENT": 2,
+ "GD_MESSAGE": 3,
+}
+
+func (x EntityProto_Kind) Enum() *EntityProto_Kind {
+ p := new(EntityProto_Kind)
+ *p = x
+ return p
+}
+func (x EntityProto_Kind) String() string {
+ return proto.EnumName(EntityProto_Kind_name, int32(x))
+}
+func (x *EntityProto_Kind) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(EntityProto_Kind_value, data, "EntityProto_Kind")
+ if err != nil {
+ return err
+ }
+ *x = EntityProto_Kind(value)
+ return nil
+}
+func (EntityProto_Kind) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{6, 0}
+}
+
+type Index_Property_Direction int32
+
+const (
+ Index_Property_ASCENDING Index_Property_Direction = 1
+ Index_Property_DESCENDING Index_Property_Direction = 2
+)
+
+var Index_Property_Direction_name = map[int32]string{
+ 1: "ASCENDING",
+ 2: "DESCENDING",
+}
+var Index_Property_Direction_value = map[string]int32{
+ "ASCENDING": 1,
+ "DESCENDING": 2,
+}
+
+func (x Index_Property_Direction) Enum() *Index_Property_Direction {
+ p := new(Index_Property_Direction)
+ *p = x
+ return p
+}
+func (x Index_Property_Direction) String() string {
+ return proto.EnumName(Index_Property_Direction_name, int32(x))
+}
+func (x *Index_Property_Direction) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(Index_Property_Direction_value, data, "Index_Property_Direction")
+ if err != nil {
+ return err
+ }
+ *x = Index_Property_Direction(value)
+ return nil
+}
+func (Index_Property_Direction) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8, 0, 0}
+}
+
+type CompositeIndex_State int32
+
+const (
+ CompositeIndex_WRITE_ONLY CompositeIndex_State = 1
+ CompositeIndex_READ_WRITE CompositeIndex_State = 2
+ CompositeIndex_DELETED CompositeIndex_State = 3
+ CompositeIndex_ERROR CompositeIndex_State = 4
+)
+
+var CompositeIndex_State_name = map[int32]string{
+ 1: "WRITE_ONLY",
+ 2: "READ_WRITE",
+ 3: "DELETED",
+ 4: "ERROR",
+}
+var CompositeIndex_State_value = map[string]int32{
+ "WRITE_ONLY": 1,
+ "READ_WRITE": 2,
+ "DELETED": 3,
+ "ERROR": 4,
+}
+
+func (x CompositeIndex_State) Enum() *CompositeIndex_State {
+ p := new(CompositeIndex_State)
+ *p = x
+ return p
+}
+func (x CompositeIndex_State) String() string {
+ return proto.EnumName(CompositeIndex_State_name, int32(x))
+}
+func (x *CompositeIndex_State) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(CompositeIndex_State_value, data, "CompositeIndex_State")
+ if err != nil {
+ return err
+ }
+ *x = CompositeIndex_State(value)
+ return nil
+}
+func (CompositeIndex_State) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{9, 0}
+}
+
+type Snapshot_Status int32
+
+const (
+ Snapshot_INACTIVE Snapshot_Status = 0
+ Snapshot_ACTIVE Snapshot_Status = 1
+)
+
+var Snapshot_Status_name = map[int32]string{
+ 0: "INACTIVE",
+ 1: "ACTIVE",
+}
+var Snapshot_Status_value = map[string]int32{
+ "INACTIVE": 0,
+ "ACTIVE": 1,
+}
+
+func (x Snapshot_Status) Enum() *Snapshot_Status {
+ p := new(Snapshot_Status)
+ *p = x
+ return p
+}
+func (x Snapshot_Status) String() string {
+ return proto.EnumName(Snapshot_Status_name, int32(x))
+}
+func (x *Snapshot_Status) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(Snapshot_Status_value, data, "Snapshot_Status")
+ if err != nil {
+ return err
+ }
+ *x = Snapshot_Status(value)
+ return nil
+}
+func (Snapshot_Status) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{12, 0}
+}
+
+type Query_Hint int32
+
+const (
+ Query_ORDER_FIRST Query_Hint = 1
+ Query_ANCESTOR_FIRST Query_Hint = 2
+ Query_FILTER_FIRST Query_Hint = 3
+)
+
+var Query_Hint_name = map[int32]string{
+ 1: "ORDER_FIRST",
+ 2: "ANCESTOR_FIRST",
+ 3: "FILTER_FIRST",
+}
+var Query_Hint_value = map[string]int32{
+ "ORDER_FIRST": 1,
+ "ANCESTOR_FIRST": 2,
+ "FILTER_FIRST": 3,
+}
+
+func (x Query_Hint) Enum() *Query_Hint {
+ p := new(Query_Hint)
+ *p = x
+ return p
+}
+func (x Query_Hint) String() string {
+ return proto.EnumName(Query_Hint_name, int32(x))
+}
+func (x *Query_Hint) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(Query_Hint_value, data, "Query_Hint")
+ if err != nil {
+ return err
+ }
+ *x = Query_Hint(value)
+ return nil
+}
+func (Query_Hint) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0}
+}
+
+type Query_Filter_Operator int32
+
+const (
+ Query_Filter_LESS_THAN Query_Filter_Operator = 1
+ Query_Filter_LESS_THAN_OR_EQUAL Query_Filter_Operator = 2
+ Query_Filter_GREATER_THAN Query_Filter_Operator = 3
+ Query_Filter_GREATER_THAN_OR_EQUAL Query_Filter_Operator = 4
+ Query_Filter_EQUAL Query_Filter_Operator = 5
+ Query_Filter_IN Query_Filter_Operator = 6
+ Query_Filter_EXISTS Query_Filter_Operator = 7
+)
+
+var Query_Filter_Operator_name = map[int32]string{
+ 1: "LESS_THAN",
+ 2: "LESS_THAN_OR_EQUAL",
+ 3: "GREATER_THAN",
+ 4: "GREATER_THAN_OR_EQUAL",
+ 5: "EQUAL",
+ 6: "IN",
+ 7: "EXISTS",
+}
+var Query_Filter_Operator_value = map[string]int32{
+ "LESS_THAN": 1,
+ "LESS_THAN_OR_EQUAL": 2,
+ "GREATER_THAN": 3,
+ "GREATER_THAN_OR_EQUAL": 4,
+ "EQUAL": 5,
+ "IN": 6,
+ "EXISTS": 7,
+}
+
+func (x Query_Filter_Operator) Enum() *Query_Filter_Operator {
+ p := new(Query_Filter_Operator)
+ *p = x
+ return p
+}
+func (x Query_Filter_Operator) String() string {
+ return proto.EnumName(Query_Filter_Operator_name, int32(x))
+}
+func (x *Query_Filter_Operator) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(Query_Filter_Operator_value, data, "Query_Filter_Operator")
+ if err != nil {
+ return err
+ }
+ *x = Query_Filter_Operator(value)
+ return nil
+}
+func (Query_Filter_Operator) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0, 0}
+}
+
+type Query_Order_Direction int32
+
+const (
+ Query_Order_ASCENDING Query_Order_Direction = 1
+ Query_Order_DESCENDING Query_Order_Direction = 2
+)
+
+var Query_Order_Direction_name = map[int32]string{
+ 1: "ASCENDING",
+ 2: "DESCENDING",
+}
+var Query_Order_Direction_value = map[string]int32{
+ "ASCENDING": 1,
+ "DESCENDING": 2,
+}
+
+func (x Query_Order_Direction) Enum() *Query_Order_Direction {
+ p := new(Query_Order_Direction)
+ *p = x
+ return p
+}
+func (x Query_Order_Direction) String() string {
+ return proto.EnumName(Query_Order_Direction_name, int32(x))
+}
+func (x *Query_Order_Direction) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(Query_Order_Direction_value, data, "Query_Order_Direction")
+ if err != nil {
+ return err
+ }
+ *x = Query_Order_Direction(value)
+ return nil
+}
+func (Query_Order_Direction) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 1, 0}
+}
+
+type Error_ErrorCode int32
+
+const (
+ Error_BAD_REQUEST Error_ErrorCode = 1
+ Error_CONCURRENT_TRANSACTION Error_ErrorCode = 2
+ Error_INTERNAL_ERROR Error_ErrorCode = 3
+ Error_NEED_INDEX Error_ErrorCode = 4
+ Error_TIMEOUT Error_ErrorCode = 5
+ Error_PERMISSION_DENIED Error_ErrorCode = 6
+ Error_BIGTABLE_ERROR Error_ErrorCode = 7
+ Error_COMMITTED_BUT_STILL_APPLYING Error_ErrorCode = 8
+ Error_CAPABILITY_DISABLED Error_ErrorCode = 9
+ Error_TRY_ALTERNATE_BACKEND Error_ErrorCode = 10
+ Error_SAFE_TIME_TOO_OLD Error_ErrorCode = 11
+)
+
+var Error_ErrorCode_name = map[int32]string{
+ 1: "BAD_REQUEST",
+ 2: "CONCURRENT_TRANSACTION",
+ 3: "INTERNAL_ERROR",
+ 4: "NEED_INDEX",
+ 5: "TIMEOUT",
+ 6: "PERMISSION_DENIED",
+ 7: "BIGTABLE_ERROR",
+ 8: "COMMITTED_BUT_STILL_APPLYING",
+ 9: "CAPABILITY_DISABLED",
+ 10: "TRY_ALTERNATE_BACKEND",
+ 11: "SAFE_TIME_TOO_OLD",
+}
+var Error_ErrorCode_value = map[string]int32{
+ "BAD_REQUEST": 1,
+ "CONCURRENT_TRANSACTION": 2,
+ "INTERNAL_ERROR": 3,
+ "NEED_INDEX": 4,
+ "TIMEOUT": 5,
+ "PERMISSION_DENIED": 6,
+ "BIGTABLE_ERROR": 7,
+ "COMMITTED_BUT_STILL_APPLYING": 8,
+ "CAPABILITY_DISABLED": 9,
+ "TRY_ALTERNATE_BACKEND": 10,
+ "SAFE_TIME_TOO_OLD": 11,
+}
+
+func (x Error_ErrorCode) Enum() *Error_ErrorCode {
+ p := new(Error_ErrorCode)
+ *p = x
+ return p
+}
+func (x Error_ErrorCode) String() string {
+ return proto.EnumName(Error_ErrorCode_name, int32(x))
+}
+func (x *Error_ErrorCode) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(Error_ErrorCode_value, data, "Error_ErrorCode")
+ if err != nil {
+ return err
+ }
+ *x = Error_ErrorCode(value)
+ return nil
+}
+func (Error_ErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{19, 0}
+}
+
+type PutRequest_AutoIdPolicy int32
+
+const (
+ PutRequest_CURRENT PutRequest_AutoIdPolicy = 0
+ PutRequest_SEQUENTIAL PutRequest_AutoIdPolicy = 1
+)
+
+var PutRequest_AutoIdPolicy_name = map[int32]string{
+ 0: "CURRENT",
+ 1: "SEQUENTIAL",
+}
+var PutRequest_AutoIdPolicy_value = map[string]int32{
+ "CURRENT": 0,
+ "SEQUENTIAL": 1,
+}
+
+func (x PutRequest_AutoIdPolicy) Enum() *PutRequest_AutoIdPolicy {
+ p := new(PutRequest_AutoIdPolicy)
+ *p = x
+ return p
+}
+func (x PutRequest_AutoIdPolicy) String() string {
+ return proto.EnumName(PutRequest_AutoIdPolicy_name, int32(x))
+}
+func (x *PutRequest_AutoIdPolicy) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(PutRequest_AutoIdPolicy_value, data, "PutRequest_AutoIdPolicy")
+ if err != nil {
+ return err
+ }
+ *x = PutRequest_AutoIdPolicy(value)
+ return nil
+}
+func (PutRequest_AutoIdPolicy) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{23, 0}
+}
+
+type BeginTransactionRequest_TransactionMode int32
+
+const (
+ BeginTransactionRequest_UNKNOWN BeginTransactionRequest_TransactionMode = 0
+ BeginTransactionRequest_READ_ONLY BeginTransactionRequest_TransactionMode = 1
+ BeginTransactionRequest_READ_WRITE BeginTransactionRequest_TransactionMode = 2
+)
+
+var BeginTransactionRequest_TransactionMode_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "READ_ONLY",
+ 2: "READ_WRITE",
+}
+var BeginTransactionRequest_TransactionMode_value = map[string]int32{
+ "UNKNOWN": 0,
+ "READ_ONLY": 1,
+ "READ_WRITE": 2,
+}
+
+func (x BeginTransactionRequest_TransactionMode) Enum() *BeginTransactionRequest_TransactionMode {
+ p := new(BeginTransactionRequest_TransactionMode)
+ *p = x
+ return p
+}
+func (x BeginTransactionRequest_TransactionMode) String() string {
+ return proto.EnumName(BeginTransactionRequest_TransactionMode_name, int32(x))
+}
+func (x *BeginTransactionRequest_TransactionMode) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(BeginTransactionRequest_TransactionMode_value, data, "BeginTransactionRequest_TransactionMode")
+ if err != nil {
+ return err
+ }
+ *x = BeginTransactionRequest_TransactionMode(value)
+ return nil
+}
+func (BeginTransactionRequest_TransactionMode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{36, 0}
+}
+
+type Action struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Action) Reset() { *m = Action{} }
+func (m *Action) String() string { return proto.CompactTextString(m) }
+func (*Action) ProtoMessage() {}
+func (*Action) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{0}
+}
+func (m *Action) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Action.Unmarshal(m, b)
+}
+func (m *Action) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Action.Marshal(b, m, deterministic)
+}
+func (dst *Action) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Action.Merge(dst, src)
+}
+func (m *Action) XXX_Size() int {
+ return xxx_messageInfo_Action.Size(m)
+}
+func (m *Action) XXX_DiscardUnknown() {
+ xxx_messageInfo_Action.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Action proto.InternalMessageInfo
+
+type PropertyValue struct {
+ Int64Value *int64 `protobuf:"varint,1,opt,name=int64Value" json:"int64Value,omitempty"`
+ BooleanValue *bool `protobuf:"varint,2,opt,name=booleanValue" json:"booleanValue,omitempty"`
+ StringValue *string `protobuf:"bytes,3,opt,name=stringValue" json:"stringValue,omitempty"`
+ DoubleValue *float64 `protobuf:"fixed64,4,opt,name=doubleValue" json:"doubleValue,omitempty"`
+ Pointvalue *PropertyValue_PointValue `protobuf:"group,5,opt,name=PointValue,json=pointvalue" json:"pointvalue,omitempty"`
+ Uservalue *PropertyValue_UserValue `protobuf:"group,8,opt,name=UserValue,json=uservalue" json:"uservalue,omitempty"`
+ Referencevalue *PropertyValue_ReferenceValue `protobuf:"group,12,opt,name=ReferenceValue,json=referencevalue" json:"referencevalue,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *PropertyValue) Reset() { *m = PropertyValue{} }
+func (m *PropertyValue) String() string { return proto.CompactTextString(m) }
+func (*PropertyValue) ProtoMessage() {}
+func (*PropertyValue) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1}
+}
+func (m *PropertyValue) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_PropertyValue.Unmarshal(m, b)
+}
+func (m *PropertyValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_PropertyValue.Marshal(b, m, deterministic)
+}
+func (dst *PropertyValue) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PropertyValue.Merge(dst, src)
+}
+func (m *PropertyValue) XXX_Size() int {
+ return xxx_messageInfo_PropertyValue.Size(m)
+}
+func (m *PropertyValue) XXX_DiscardUnknown() {
+ xxx_messageInfo_PropertyValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PropertyValue proto.InternalMessageInfo
+
+func (m *PropertyValue) GetInt64Value() int64 {
+ if m != nil && m.Int64Value != nil {
+ return *m.Int64Value
+ }
+ return 0
+}
+
+func (m *PropertyValue) GetBooleanValue() bool {
+ if m != nil && m.BooleanValue != nil {
+ return *m.BooleanValue
+ }
+ return false
+}
+
+func (m *PropertyValue) GetStringValue() string {
+ if m != nil && m.StringValue != nil {
+ return *m.StringValue
+ }
+ return ""
+}
+
+func (m *PropertyValue) GetDoubleValue() float64 {
+ if m != nil && m.DoubleValue != nil {
+ return *m.DoubleValue
+ }
+ return 0
+}
+
+func (m *PropertyValue) GetPointvalue() *PropertyValue_PointValue {
+ if m != nil {
+ return m.Pointvalue
+ }
+ return nil
+}
+
+func (m *PropertyValue) GetUservalue() *PropertyValue_UserValue {
+ if m != nil {
+ return m.Uservalue
+ }
+ return nil
+}
+
+func (m *PropertyValue) GetReferencevalue() *PropertyValue_ReferenceValue {
+ if m != nil {
+ return m.Referencevalue
+ }
+ return nil
+}
+
+type PropertyValue_PointValue struct {
+ X *float64 `protobuf:"fixed64,6,req,name=x" json:"x,omitempty"`
+ Y *float64 `protobuf:"fixed64,7,req,name=y" json:"y,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *PropertyValue_PointValue) Reset() { *m = PropertyValue_PointValue{} }
+func (m *PropertyValue_PointValue) String() string { return proto.CompactTextString(m) }
+func (*PropertyValue_PointValue) ProtoMessage() {}
+func (*PropertyValue_PointValue) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 0}
+}
+func (m *PropertyValue_PointValue) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_PropertyValue_PointValue.Unmarshal(m, b)
+}
+func (m *PropertyValue_PointValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_PropertyValue_PointValue.Marshal(b, m, deterministic)
+}
+func (dst *PropertyValue_PointValue) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PropertyValue_PointValue.Merge(dst, src)
+}
+func (m *PropertyValue_PointValue) XXX_Size() int {
+ return xxx_messageInfo_PropertyValue_PointValue.Size(m)
+}
+func (m *PropertyValue_PointValue) XXX_DiscardUnknown() {
+ xxx_messageInfo_PropertyValue_PointValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PropertyValue_PointValue proto.InternalMessageInfo
+
+func (m *PropertyValue_PointValue) GetX() float64 {
+ if m != nil && m.X != nil {
+ return *m.X
+ }
+ return 0
+}
+
+func (m *PropertyValue_PointValue) GetY() float64 {
+ if m != nil && m.Y != nil {
+ return *m.Y
+ }
+ return 0
+}
+
+type PropertyValue_UserValue struct {
+ Email *string `protobuf:"bytes,9,req,name=email" json:"email,omitempty"`
+ AuthDomain *string `protobuf:"bytes,10,req,name=auth_domain,json=authDomain" json:"auth_domain,omitempty"`
+ Nickname *string `protobuf:"bytes,11,opt,name=nickname" json:"nickname,omitempty"`
+ FederatedIdentity *string `protobuf:"bytes,21,opt,name=federated_identity,json=federatedIdentity" json:"federated_identity,omitempty"`
+ FederatedProvider *string `protobuf:"bytes,22,opt,name=federated_provider,json=federatedProvider" json:"federated_provider,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *PropertyValue_UserValue) Reset() { *m = PropertyValue_UserValue{} }
+func (m *PropertyValue_UserValue) String() string { return proto.CompactTextString(m) }
+func (*PropertyValue_UserValue) ProtoMessage() {}
+func (*PropertyValue_UserValue) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 1}
+}
+func (m *PropertyValue_UserValue) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_PropertyValue_UserValue.Unmarshal(m, b)
+}
+func (m *PropertyValue_UserValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_PropertyValue_UserValue.Marshal(b, m, deterministic)
+}
+func (dst *PropertyValue_UserValue) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PropertyValue_UserValue.Merge(dst, src)
+}
+func (m *PropertyValue_UserValue) XXX_Size() int {
+ return xxx_messageInfo_PropertyValue_UserValue.Size(m)
+}
+func (m *PropertyValue_UserValue) XXX_DiscardUnknown() {
+ xxx_messageInfo_PropertyValue_UserValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PropertyValue_UserValue proto.InternalMessageInfo
+
+func (m *PropertyValue_UserValue) GetEmail() string {
+ if m != nil && m.Email != nil {
+ return *m.Email
+ }
+ return ""
+}
+
+func (m *PropertyValue_UserValue) GetAuthDomain() string {
+ if m != nil && m.AuthDomain != nil {
+ return *m.AuthDomain
+ }
+ return ""
+}
+
+func (m *PropertyValue_UserValue) GetNickname() string {
+ if m != nil && m.Nickname != nil {
+ return *m.Nickname
+ }
+ return ""
+}
+
+func (m *PropertyValue_UserValue) GetFederatedIdentity() string {
+ if m != nil && m.FederatedIdentity != nil {
+ return *m.FederatedIdentity
+ }
+ return ""
+}
+
+func (m *PropertyValue_UserValue) GetFederatedProvider() string {
+ if m != nil && m.FederatedProvider != nil {
+ return *m.FederatedProvider
+ }
+ return ""
+}
+
+type PropertyValue_ReferenceValue struct {
+ App *string `protobuf:"bytes,13,req,name=app" json:"app,omitempty"`
+ NameSpace *string `protobuf:"bytes,20,opt,name=name_space,json=nameSpace" json:"name_space,omitempty"`
+ Pathelement []*PropertyValue_ReferenceValue_PathElement `protobuf:"group,14,rep,name=PathElement,json=pathelement" json:"pathelement,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *PropertyValue_ReferenceValue) Reset() { *m = PropertyValue_ReferenceValue{} }
+func (m *PropertyValue_ReferenceValue) String() string { return proto.CompactTextString(m) }
+func (*PropertyValue_ReferenceValue) ProtoMessage() {}
+func (*PropertyValue_ReferenceValue) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 2}
+}
+func (m *PropertyValue_ReferenceValue) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_PropertyValue_ReferenceValue.Unmarshal(m, b)
+}
+func (m *PropertyValue_ReferenceValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_PropertyValue_ReferenceValue.Marshal(b, m, deterministic)
+}
+func (dst *PropertyValue_ReferenceValue) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PropertyValue_ReferenceValue.Merge(dst, src)
+}
+func (m *PropertyValue_ReferenceValue) XXX_Size() int {
+ return xxx_messageInfo_PropertyValue_ReferenceValue.Size(m)
+}
+func (m *PropertyValue_ReferenceValue) XXX_DiscardUnknown() {
+ xxx_messageInfo_PropertyValue_ReferenceValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PropertyValue_ReferenceValue proto.InternalMessageInfo
+
+func (m *PropertyValue_ReferenceValue) GetApp() string {
+ if m != nil && m.App != nil {
+ return *m.App
+ }
+ return ""
+}
+
+func (m *PropertyValue_ReferenceValue) GetNameSpace() string {
+ if m != nil && m.NameSpace != nil {
+ return *m.NameSpace
+ }
+ return ""
+}
+
+func (m *PropertyValue_ReferenceValue) GetPathelement() []*PropertyValue_ReferenceValue_PathElement {
+ if m != nil {
+ return m.Pathelement
+ }
+ return nil
+}
+
+type PropertyValue_ReferenceValue_PathElement struct {
+ Type *string `protobuf:"bytes,15,req,name=type" json:"type,omitempty"`
+ Id *int64 `protobuf:"varint,16,opt,name=id" json:"id,omitempty"`
+ Name *string `protobuf:"bytes,17,opt,name=name" json:"name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *PropertyValue_ReferenceValue_PathElement) Reset() {
+ *m = PropertyValue_ReferenceValue_PathElement{}
+}
+func (m *PropertyValue_ReferenceValue_PathElement) String() string { return proto.CompactTextString(m) }
+func (*PropertyValue_ReferenceValue_PathElement) ProtoMessage() {}
+func (*PropertyValue_ReferenceValue_PathElement) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 2, 0}
+}
+func (m *PropertyValue_ReferenceValue_PathElement) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Unmarshal(m, b)
+}
+func (m *PropertyValue_ReferenceValue_PathElement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Marshal(b, m, deterministic)
+}
+func (dst *PropertyValue_ReferenceValue_PathElement) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Merge(dst, src)
+}
+func (m *PropertyValue_ReferenceValue_PathElement) XXX_Size() int {
+ return xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Size(m)
+}
+func (m *PropertyValue_ReferenceValue_PathElement) XXX_DiscardUnknown() {
+ xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PropertyValue_ReferenceValue_PathElement proto.InternalMessageInfo
+
+func (m *PropertyValue_ReferenceValue_PathElement) GetType() string {
+ if m != nil && m.Type != nil {
+ return *m.Type
+ }
+ return ""
+}
+
+func (m *PropertyValue_ReferenceValue_PathElement) GetId() int64 {
+ if m != nil && m.Id != nil {
+ return *m.Id
+ }
+ return 0
+}
+
+func (m *PropertyValue_ReferenceValue_PathElement) GetName() string {
+ if m != nil && m.Name != nil {
+ return *m.Name
+ }
+ return ""
+}
+
+type Property struct {
+ Meaning *Property_Meaning `protobuf:"varint,1,opt,name=meaning,enum=appengine.Property_Meaning,def=0" json:"meaning,omitempty"`
+ MeaningUri *string `protobuf:"bytes,2,opt,name=meaning_uri,json=meaningUri" json:"meaning_uri,omitempty"`
+ Name *string `protobuf:"bytes,3,req,name=name" json:"name,omitempty"`
+ Value *PropertyValue `protobuf:"bytes,5,req,name=value" json:"value,omitempty"`
+ Multiple *bool `protobuf:"varint,4,req,name=multiple" json:"multiple,omitempty"`
+ Searchable *bool `protobuf:"varint,6,opt,name=searchable,def=0" json:"searchable,omitempty"`
+ FtsTokenizationOption *Property_FtsTokenizationOption `protobuf:"varint,8,opt,name=fts_tokenization_option,json=ftsTokenizationOption,enum=appengine.Property_FtsTokenizationOption" json:"fts_tokenization_option,omitempty"`
+ Locale *string `protobuf:"bytes,9,opt,name=locale,def=en" json:"locale,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Property) Reset() { *m = Property{} }
+func (m *Property) String() string { return proto.CompactTextString(m) }
+func (*Property) ProtoMessage() {}
+func (*Property) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2}
+}
+func (m *Property) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Property.Unmarshal(m, b)
+}
+func (m *Property) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Property.Marshal(b, m, deterministic)
+}
+func (dst *Property) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Property.Merge(dst, src)
+}
+func (m *Property) XXX_Size() int {
+ return xxx_messageInfo_Property.Size(m)
+}
+func (m *Property) XXX_DiscardUnknown() {
+ xxx_messageInfo_Property.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Property proto.InternalMessageInfo
+
+const Default_Property_Meaning Property_Meaning = Property_NO_MEANING
+const Default_Property_Searchable bool = false
+const Default_Property_Locale string = "en"
+
+func (m *Property) GetMeaning() Property_Meaning {
+ if m != nil && m.Meaning != nil {
+ return *m.Meaning
+ }
+ return Default_Property_Meaning
+}
+
+func (m *Property) GetMeaningUri() string {
+ if m != nil && m.MeaningUri != nil {
+ return *m.MeaningUri
+ }
+ return ""
+}
+
+func (m *Property) GetName() string {
+ if m != nil && m.Name != nil {
+ return *m.Name
+ }
+ return ""
+}
+
+func (m *Property) GetValue() *PropertyValue {
+ if m != nil {
+ return m.Value
+ }
+ return nil
+}
+
+func (m *Property) GetMultiple() bool {
+ if m != nil && m.Multiple != nil {
+ return *m.Multiple
+ }
+ return false
+}
+
+func (m *Property) GetSearchable() bool {
+ if m != nil && m.Searchable != nil {
+ return *m.Searchable
+ }
+ return Default_Property_Searchable
+}
+
+func (m *Property) GetFtsTokenizationOption() Property_FtsTokenizationOption {
+ if m != nil && m.FtsTokenizationOption != nil {
+ return *m.FtsTokenizationOption
+ }
+ return Property_HTML
+}
+
+func (m *Property) GetLocale() string {
+ if m != nil && m.Locale != nil {
+ return *m.Locale
+ }
+ return Default_Property_Locale
+}
+
+type Path struct {
+ Element []*Path_Element `protobuf:"group,1,rep,name=Element,json=element" json:"element,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Path) Reset() { *m = Path{} }
+func (m *Path) String() string { return proto.CompactTextString(m) }
+func (*Path) ProtoMessage() {}
+func (*Path) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{3}
+}
+func (m *Path) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Path.Unmarshal(m, b)
+}
+func (m *Path) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Path.Marshal(b, m, deterministic)
+}
+func (dst *Path) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Path.Merge(dst, src)
+}
+func (m *Path) XXX_Size() int {
+ return xxx_messageInfo_Path.Size(m)
+}
+func (m *Path) XXX_DiscardUnknown() {
+ xxx_messageInfo_Path.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Path proto.InternalMessageInfo
+
+func (m *Path) GetElement() []*Path_Element {
+ if m != nil {
+ return m.Element
+ }
+ return nil
+}
+
+type Path_Element struct {
+ Type *string `protobuf:"bytes,2,req,name=type" json:"type,omitempty"`
+ Id *int64 `protobuf:"varint,3,opt,name=id" json:"id,omitempty"`
+ Name *string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Path_Element) Reset() { *m = Path_Element{} }
+func (m *Path_Element) String() string { return proto.CompactTextString(m) }
+func (*Path_Element) ProtoMessage() {}
+func (*Path_Element) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{3, 0}
+}
+func (m *Path_Element) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Path_Element.Unmarshal(m, b)
+}
+func (m *Path_Element) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Path_Element.Marshal(b, m, deterministic)
+}
+func (dst *Path_Element) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Path_Element.Merge(dst, src)
+}
+func (m *Path_Element) XXX_Size() int {
+ return xxx_messageInfo_Path_Element.Size(m)
+}
+func (m *Path_Element) XXX_DiscardUnknown() {
+ xxx_messageInfo_Path_Element.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Path_Element proto.InternalMessageInfo
+
+func (m *Path_Element) GetType() string {
+ if m != nil && m.Type != nil {
+ return *m.Type
+ }
+ return ""
+}
+
+func (m *Path_Element) GetId() int64 {
+ if m != nil && m.Id != nil {
+ return *m.Id
+ }
+ return 0
+}
+
+func (m *Path_Element) GetName() string {
+ if m != nil && m.Name != nil {
+ return *m.Name
+ }
+ return ""
+}
+
+type Reference struct {
+ App *string `protobuf:"bytes,13,req,name=app" json:"app,omitempty"`
+ NameSpace *string `protobuf:"bytes,20,opt,name=name_space,json=nameSpace" json:"name_space,omitempty"`
+ Path *Path `protobuf:"bytes,14,req,name=path" json:"path,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Reference) Reset() { *m = Reference{} }
+func (m *Reference) String() string { return proto.CompactTextString(m) }
+func (*Reference) ProtoMessage() {}
+func (*Reference) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{4}
+}
+func (m *Reference) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Reference.Unmarshal(m, b)
+}
+func (m *Reference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Reference.Marshal(b, m, deterministic)
+}
+func (dst *Reference) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Reference.Merge(dst, src)
+}
+func (m *Reference) XXX_Size() int {
+ return xxx_messageInfo_Reference.Size(m)
+}
+func (m *Reference) XXX_DiscardUnknown() {
+ xxx_messageInfo_Reference.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Reference proto.InternalMessageInfo
+
+func (m *Reference) GetApp() string {
+ if m != nil && m.App != nil {
+ return *m.App
+ }
+ return ""
+}
+
+func (m *Reference) GetNameSpace() string {
+ if m != nil && m.NameSpace != nil {
+ return *m.NameSpace
+ }
+ return ""
+}
+
+func (m *Reference) GetPath() *Path {
+ if m != nil {
+ return m.Path
+ }
+ return nil
+}
+
+type User struct {
+ Email *string `protobuf:"bytes,1,req,name=email" json:"email,omitempty"`
+ AuthDomain *string `protobuf:"bytes,2,req,name=auth_domain,json=authDomain" json:"auth_domain,omitempty"`
+ Nickname *string `protobuf:"bytes,3,opt,name=nickname" json:"nickname,omitempty"`
+ FederatedIdentity *string `protobuf:"bytes,6,opt,name=federated_identity,json=federatedIdentity" json:"federated_identity,omitempty"`
+ FederatedProvider *string `protobuf:"bytes,7,opt,name=federated_provider,json=federatedProvider" json:"federated_provider,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *User) Reset() { *m = User{} }
+func (m *User) String() string { return proto.CompactTextString(m) }
+func (*User) ProtoMessage() {}
+func (*User) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{5}
+}
+func (m *User) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_User.Unmarshal(m, b)
+}
+func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_User.Marshal(b, m, deterministic)
+}
+func (dst *User) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_User.Merge(dst, src)
+}
+func (m *User) XXX_Size() int {
+ return xxx_messageInfo_User.Size(m)
+}
+func (m *User) XXX_DiscardUnknown() {
+ xxx_messageInfo_User.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_User proto.InternalMessageInfo
+
+func (m *User) GetEmail() string {
+ if m != nil && m.Email != nil {
+ return *m.Email
+ }
+ return ""
+}
+
+func (m *User) GetAuthDomain() string {
+ if m != nil && m.AuthDomain != nil {
+ return *m.AuthDomain
+ }
+ return ""
+}
+
+func (m *User) GetNickname() string {
+ if m != nil && m.Nickname != nil {
+ return *m.Nickname
+ }
+ return ""
+}
+
+func (m *User) GetFederatedIdentity() string {
+ if m != nil && m.FederatedIdentity != nil {
+ return *m.FederatedIdentity
+ }
+ return ""
+}
+
+func (m *User) GetFederatedProvider() string {
+ if m != nil && m.FederatedProvider != nil {
+ return *m.FederatedProvider
+ }
+ return ""
+}
+
+type EntityProto struct {
+ Key *Reference `protobuf:"bytes,13,req,name=key" json:"key,omitempty"`
+ EntityGroup *Path `protobuf:"bytes,16,req,name=entity_group,json=entityGroup" json:"entity_group,omitempty"`
+ Owner *User `protobuf:"bytes,17,opt,name=owner" json:"owner,omitempty"`
+ Kind *EntityProto_Kind `protobuf:"varint,4,opt,name=kind,enum=appengine.EntityProto_Kind" json:"kind,omitempty"`
+ KindUri *string `protobuf:"bytes,5,opt,name=kind_uri,json=kindUri" json:"kind_uri,omitempty"`
+ Property []*Property `protobuf:"bytes,14,rep,name=property" json:"property,omitempty"`
+ RawProperty []*Property `protobuf:"bytes,15,rep,name=raw_property,json=rawProperty" json:"raw_property,omitempty"`
+ Rank *int32 `protobuf:"varint,18,opt,name=rank" json:"rank,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *EntityProto) Reset() { *m = EntityProto{} }
+func (m *EntityProto) String() string { return proto.CompactTextString(m) }
+func (*EntityProto) ProtoMessage() {}
+func (*EntityProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{6}
+}
+func (m *EntityProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_EntityProto.Unmarshal(m, b)
+}
+func (m *EntityProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_EntityProto.Marshal(b, m, deterministic)
+}
+func (dst *EntityProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EntityProto.Merge(dst, src)
+}
+func (m *EntityProto) XXX_Size() int {
+ return xxx_messageInfo_EntityProto.Size(m)
+}
+func (m *EntityProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_EntityProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EntityProto proto.InternalMessageInfo
+
+func (m *EntityProto) GetKey() *Reference {
+ if m != nil {
+ return m.Key
+ }
+ return nil
+}
+
+func (m *EntityProto) GetEntityGroup() *Path {
+ if m != nil {
+ return m.EntityGroup
+ }
+ return nil
+}
+
+func (m *EntityProto) GetOwner() *User {
+ if m != nil {
+ return m.Owner
+ }
+ return nil
+}
+
+func (m *EntityProto) GetKind() EntityProto_Kind {
+ if m != nil && m.Kind != nil {
+ return *m.Kind
+ }
+ return EntityProto_GD_CONTACT
+}
+
+func (m *EntityProto) GetKindUri() string {
+ if m != nil && m.KindUri != nil {
+ return *m.KindUri
+ }
+ return ""
+}
+
+func (m *EntityProto) GetProperty() []*Property {
+ if m != nil {
+ return m.Property
+ }
+ return nil
+}
+
+func (m *EntityProto) GetRawProperty() []*Property {
+ if m != nil {
+ return m.RawProperty
+ }
+ return nil
+}
+
+func (m *EntityProto) GetRank() int32 {
+ if m != nil && m.Rank != nil {
+ return *m.Rank
+ }
+ return 0
+}
+
+type CompositeProperty struct {
+ IndexId *int64 `protobuf:"varint,1,req,name=index_id,json=indexId" json:"index_id,omitempty"`
+ Value []string `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CompositeProperty) Reset() { *m = CompositeProperty{} }
+func (m *CompositeProperty) String() string { return proto.CompactTextString(m) }
+func (*CompositeProperty) ProtoMessage() {}
+func (*CompositeProperty) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{7}
+}
+func (m *CompositeProperty) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CompositeProperty.Unmarshal(m, b)
+}
+func (m *CompositeProperty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CompositeProperty.Marshal(b, m, deterministic)
+}
+func (dst *CompositeProperty) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CompositeProperty.Merge(dst, src)
+}
+func (m *CompositeProperty) XXX_Size() int {
+ return xxx_messageInfo_CompositeProperty.Size(m)
+}
+func (m *CompositeProperty) XXX_DiscardUnknown() {
+ xxx_messageInfo_CompositeProperty.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompositeProperty proto.InternalMessageInfo
+
+func (m *CompositeProperty) GetIndexId() int64 {
+ if m != nil && m.IndexId != nil {
+ return *m.IndexId
+ }
+ return 0
+}
+
+func (m *CompositeProperty) GetValue() []string {
+ if m != nil {
+ return m.Value
+ }
+ return nil
+}
+
+type Index struct {
+ EntityType *string `protobuf:"bytes,1,req,name=entity_type,json=entityType" json:"entity_type,omitempty"`
+ Ancestor *bool `protobuf:"varint,5,req,name=ancestor" json:"ancestor,omitempty"`
+ Property []*Index_Property `protobuf:"group,2,rep,name=Property,json=property" json:"property,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Index) Reset() { *m = Index{} }
+func (m *Index) String() string { return proto.CompactTextString(m) }
+func (*Index) ProtoMessage() {}
+func (*Index) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8}
+}
+func (m *Index) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Index.Unmarshal(m, b)
+}
+func (m *Index) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Index.Marshal(b, m, deterministic)
+}
+func (dst *Index) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Index.Merge(dst, src)
+}
+func (m *Index) XXX_Size() int {
+ return xxx_messageInfo_Index.Size(m)
+}
+func (m *Index) XXX_DiscardUnknown() {
+ xxx_messageInfo_Index.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Index proto.InternalMessageInfo
+
+func (m *Index) GetEntityType() string {
+ if m != nil && m.EntityType != nil {
+ return *m.EntityType
+ }
+ return ""
+}
+
+func (m *Index) GetAncestor() bool {
+ if m != nil && m.Ancestor != nil {
+ return *m.Ancestor
+ }
+ return false
+}
+
+func (m *Index) GetProperty() []*Index_Property {
+ if m != nil {
+ return m.Property
+ }
+ return nil
+}
+
+type Index_Property struct {
+ Name *string `protobuf:"bytes,3,req,name=name" json:"name,omitempty"`
+ Direction *Index_Property_Direction `protobuf:"varint,4,opt,name=direction,enum=appengine.Index_Property_Direction,def=1" json:"direction,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Index_Property) Reset() { *m = Index_Property{} }
+func (m *Index_Property) String() string { return proto.CompactTextString(m) }
+func (*Index_Property) ProtoMessage() {}
+func (*Index_Property) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8, 0}
+}
+func (m *Index_Property) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Index_Property.Unmarshal(m, b)
+}
+func (m *Index_Property) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Index_Property.Marshal(b, m, deterministic)
+}
+func (dst *Index_Property) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Index_Property.Merge(dst, src)
+}
+func (m *Index_Property) XXX_Size() int {
+ return xxx_messageInfo_Index_Property.Size(m)
+}
+func (m *Index_Property) XXX_DiscardUnknown() {
+ xxx_messageInfo_Index_Property.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Index_Property proto.InternalMessageInfo
+
+const Default_Index_Property_Direction Index_Property_Direction = Index_Property_ASCENDING
+
+func (m *Index_Property) GetName() string {
+ if m != nil && m.Name != nil {
+ return *m.Name
+ }
+ return ""
+}
+
+func (m *Index_Property) GetDirection() Index_Property_Direction {
+ if m != nil && m.Direction != nil {
+ return *m.Direction
+ }
+ return Default_Index_Property_Direction
+}
+
+type CompositeIndex struct {
+ AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"`
+ Id *int64 `protobuf:"varint,2,req,name=id" json:"id,omitempty"`
+ Definition *Index `protobuf:"bytes,3,req,name=definition" json:"definition,omitempty"`
+ State *CompositeIndex_State `protobuf:"varint,4,req,name=state,enum=appengine.CompositeIndex_State" json:"state,omitempty"`
+ OnlyUseIfRequired *bool `protobuf:"varint,6,opt,name=only_use_if_required,json=onlyUseIfRequired,def=0" json:"only_use_if_required,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CompositeIndex) Reset() { *m = CompositeIndex{} }
+func (m *CompositeIndex) String() string { return proto.CompactTextString(m) }
+func (*CompositeIndex) ProtoMessage() {}
+func (*CompositeIndex) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{9}
+}
+func (m *CompositeIndex) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CompositeIndex.Unmarshal(m, b)
+}
+func (m *CompositeIndex) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CompositeIndex.Marshal(b, m, deterministic)
+}
+func (dst *CompositeIndex) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CompositeIndex.Merge(dst, src)
+}
+func (m *CompositeIndex) XXX_Size() int {
+ return xxx_messageInfo_CompositeIndex.Size(m)
+}
+func (m *CompositeIndex) XXX_DiscardUnknown() {
+ xxx_messageInfo_CompositeIndex.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompositeIndex proto.InternalMessageInfo
+
+const Default_CompositeIndex_OnlyUseIfRequired bool = false
+
+func (m *CompositeIndex) GetAppId() string {
+ if m != nil && m.AppId != nil {
+ return *m.AppId
+ }
+ return ""
+}
+
+func (m *CompositeIndex) GetId() int64 {
+ if m != nil && m.Id != nil {
+ return *m.Id
+ }
+ return 0
+}
+
+func (m *CompositeIndex) GetDefinition() *Index {
+ if m != nil {
+ return m.Definition
+ }
+ return nil
+}
+
+func (m *CompositeIndex) GetState() CompositeIndex_State {
+ if m != nil && m.State != nil {
+ return *m.State
+ }
+ return CompositeIndex_WRITE_ONLY
+}
+
+func (m *CompositeIndex) GetOnlyUseIfRequired() bool {
+ if m != nil && m.OnlyUseIfRequired != nil {
+ return *m.OnlyUseIfRequired
+ }
+ return Default_CompositeIndex_OnlyUseIfRequired
+}
+
+type IndexPostfix struct {
+ IndexValue []*IndexPostfix_IndexValue `protobuf:"bytes,1,rep,name=index_value,json=indexValue" json:"index_value,omitempty"`
+ Key *Reference `protobuf:"bytes,2,opt,name=key" json:"key,omitempty"`
+ Before *bool `protobuf:"varint,3,opt,name=before,def=1" json:"before,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *IndexPostfix) Reset() { *m = IndexPostfix{} }
+func (m *IndexPostfix) String() string { return proto.CompactTextString(m) }
+func (*IndexPostfix) ProtoMessage() {}
+func (*IndexPostfix) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{10}
+}
+func (m *IndexPostfix) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_IndexPostfix.Unmarshal(m, b)
+}
+func (m *IndexPostfix) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_IndexPostfix.Marshal(b, m, deterministic)
+}
+func (dst *IndexPostfix) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_IndexPostfix.Merge(dst, src)
+}
+func (m *IndexPostfix) XXX_Size() int {
+ return xxx_messageInfo_IndexPostfix.Size(m)
+}
+func (m *IndexPostfix) XXX_DiscardUnknown() {
+ xxx_messageInfo_IndexPostfix.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IndexPostfix proto.InternalMessageInfo
+
+const Default_IndexPostfix_Before bool = true
+
+func (m *IndexPostfix) GetIndexValue() []*IndexPostfix_IndexValue {
+ if m != nil {
+ return m.IndexValue
+ }
+ return nil
+}
+
+func (m *IndexPostfix) GetKey() *Reference {
+ if m != nil {
+ return m.Key
+ }
+ return nil
+}
+
+func (m *IndexPostfix) GetBefore() bool {
+ if m != nil && m.Before != nil {
+ return *m.Before
+ }
+ return Default_IndexPostfix_Before
+}
+
+type IndexPostfix_IndexValue struct {
+ PropertyName *string `protobuf:"bytes,1,req,name=property_name,json=propertyName" json:"property_name,omitempty"`
+ Value *PropertyValue `protobuf:"bytes,2,req,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *IndexPostfix_IndexValue) Reset() { *m = IndexPostfix_IndexValue{} }
+func (m *IndexPostfix_IndexValue) String() string { return proto.CompactTextString(m) }
+func (*IndexPostfix_IndexValue) ProtoMessage() {}
+func (*IndexPostfix_IndexValue) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{10, 0}
+}
+func (m *IndexPostfix_IndexValue) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_IndexPostfix_IndexValue.Unmarshal(m, b)
+}
+func (m *IndexPostfix_IndexValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_IndexPostfix_IndexValue.Marshal(b, m, deterministic)
+}
+func (dst *IndexPostfix_IndexValue) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_IndexPostfix_IndexValue.Merge(dst, src)
+}
+func (m *IndexPostfix_IndexValue) XXX_Size() int {
+ return xxx_messageInfo_IndexPostfix_IndexValue.Size(m)
+}
+func (m *IndexPostfix_IndexValue) XXX_DiscardUnknown() {
+ xxx_messageInfo_IndexPostfix_IndexValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IndexPostfix_IndexValue proto.InternalMessageInfo
+
+func (m *IndexPostfix_IndexValue) GetPropertyName() string {
+ if m != nil && m.PropertyName != nil {
+ return *m.PropertyName
+ }
+ return ""
+}
+
+func (m *IndexPostfix_IndexValue) GetValue() *PropertyValue {
+ if m != nil {
+ return m.Value
+ }
+ return nil
+}
+
+type IndexPosition struct {
+ Key *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"`
+ Before *bool `protobuf:"varint,2,opt,name=before,def=1" json:"before,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *IndexPosition) Reset() { *m = IndexPosition{} }
+func (m *IndexPosition) String() string { return proto.CompactTextString(m) }
+func (*IndexPosition) ProtoMessage() {}
+func (*IndexPosition) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{11}
+}
+func (m *IndexPosition) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_IndexPosition.Unmarshal(m, b)
+}
+func (m *IndexPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_IndexPosition.Marshal(b, m, deterministic)
+}
+func (dst *IndexPosition) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_IndexPosition.Merge(dst, src)
+}
+func (m *IndexPosition) XXX_Size() int {
+ return xxx_messageInfo_IndexPosition.Size(m)
+}
+func (m *IndexPosition) XXX_DiscardUnknown() {
+ xxx_messageInfo_IndexPosition.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IndexPosition proto.InternalMessageInfo
+
+const Default_IndexPosition_Before bool = true
+
+func (m *IndexPosition) GetKey() string {
+ if m != nil && m.Key != nil {
+ return *m.Key
+ }
+ return ""
+}
+
+func (m *IndexPosition) GetBefore() bool {
+ if m != nil && m.Before != nil {
+ return *m.Before
+ }
+ return Default_IndexPosition_Before
+}
+
+type Snapshot struct {
+ Ts *int64 `protobuf:"varint,1,req,name=ts" json:"ts,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Snapshot) Reset() { *m = Snapshot{} }
+func (m *Snapshot) String() string { return proto.CompactTextString(m) }
+func (*Snapshot) ProtoMessage() {}
+func (*Snapshot) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{12}
+}
+func (m *Snapshot) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Snapshot.Unmarshal(m, b)
+}
+func (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Snapshot.Marshal(b, m, deterministic)
+}
+func (dst *Snapshot) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Snapshot.Merge(dst, src)
+}
+func (m *Snapshot) XXX_Size() int {
+ return xxx_messageInfo_Snapshot.Size(m)
+}
+func (m *Snapshot) XXX_DiscardUnknown() {
+ xxx_messageInfo_Snapshot.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Snapshot proto.InternalMessageInfo
+
+func (m *Snapshot) GetTs() int64 {
+ if m != nil && m.Ts != nil {
+ return *m.Ts
+ }
+ return 0
+}
+
+type InternalHeader struct {
+ Qos *string `protobuf:"bytes,1,opt,name=qos" json:"qos,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *InternalHeader) Reset() { *m = InternalHeader{} }
+func (m *InternalHeader) String() string { return proto.CompactTextString(m) }
+func (*InternalHeader) ProtoMessage() {}
+func (*InternalHeader) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{13}
+}
+func (m *InternalHeader) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_InternalHeader.Unmarshal(m, b)
+}
+func (m *InternalHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_InternalHeader.Marshal(b, m, deterministic)
+}
+func (dst *InternalHeader) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_InternalHeader.Merge(dst, src)
+}
+func (m *InternalHeader) XXX_Size() int {
+ return xxx_messageInfo_InternalHeader.Size(m)
+}
+func (m *InternalHeader) XXX_DiscardUnknown() {
+ xxx_messageInfo_InternalHeader.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InternalHeader proto.InternalMessageInfo
+
+func (m *InternalHeader) GetQos() string {
+ if m != nil && m.Qos != nil {
+ return *m.Qos
+ }
+ return ""
+}
+
+type Transaction struct {
+ Header *InternalHeader `protobuf:"bytes,4,opt,name=header" json:"header,omitempty"`
+ Handle *uint64 `protobuf:"fixed64,1,req,name=handle" json:"handle,omitempty"`
+ App *string `protobuf:"bytes,2,req,name=app" json:"app,omitempty"`
+ MarkChanges *bool `protobuf:"varint,3,opt,name=mark_changes,json=markChanges,def=0" json:"mark_changes,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Transaction) Reset() { *m = Transaction{} }
+func (m *Transaction) String() string { return proto.CompactTextString(m) }
+func (*Transaction) ProtoMessage() {}
+func (*Transaction) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{14}
+}
+func (m *Transaction) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Transaction.Unmarshal(m, b)
+}
+func (m *Transaction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Transaction.Marshal(b, m, deterministic)
+}
+func (dst *Transaction) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Transaction.Merge(dst, src)
+}
+func (m *Transaction) XXX_Size() int {
+ return xxx_messageInfo_Transaction.Size(m)
+}
+func (m *Transaction) XXX_DiscardUnknown() {
+ xxx_messageInfo_Transaction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Transaction proto.InternalMessageInfo
+
+const Default_Transaction_MarkChanges bool = false
+
+func (m *Transaction) GetHeader() *InternalHeader {
+ if m != nil {
+ return m.Header
+ }
+ return nil
+}
+
+func (m *Transaction) GetHandle() uint64 {
+ if m != nil && m.Handle != nil {
+ return *m.Handle
+ }
+ return 0
+}
+
+func (m *Transaction) GetApp() string {
+ if m != nil && m.App != nil {
+ return *m.App
+ }
+ return ""
+}
+
+func (m *Transaction) GetMarkChanges() bool {
+ if m != nil && m.MarkChanges != nil {
+ return *m.MarkChanges
+ }
+ return Default_Transaction_MarkChanges
+}
+
+type Query struct {
+ Header *InternalHeader `protobuf:"bytes,39,opt,name=header" json:"header,omitempty"`
+ App *string `protobuf:"bytes,1,req,name=app" json:"app,omitempty"`
+ NameSpace *string `protobuf:"bytes,29,opt,name=name_space,json=nameSpace" json:"name_space,omitempty"`
+ Kind *string `protobuf:"bytes,3,opt,name=kind" json:"kind,omitempty"`
+ Ancestor *Reference `protobuf:"bytes,17,opt,name=ancestor" json:"ancestor,omitempty"`
+ Filter []*Query_Filter `protobuf:"group,4,rep,name=Filter,json=filter" json:"filter,omitempty"`
+ SearchQuery *string `protobuf:"bytes,8,opt,name=search_query,json=searchQuery" json:"search_query,omitempty"`
+ Order []*Query_Order `protobuf:"group,9,rep,name=Order,json=order" json:"order,omitempty"`
+ Hint *Query_Hint `protobuf:"varint,18,opt,name=hint,enum=appengine.Query_Hint" json:"hint,omitempty"`
+ Count *int32 `protobuf:"varint,23,opt,name=count" json:"count,omitempty"`
+ Offset *int32 `protobuf:"varint,12,opt,name=offset,def=0" json:"offset,omitempty"`
+ Limit *int32 `protobuf:"varint,16,opt,name=limit" json:"limit,omitempty"`
+ CompiledCursor *CompiledCursor `protobuf:"bytes,30,opt,name=compiled_cursor,json=compiledCursor" json:"compiled_cursor,omitempty"`
+ EndCompiledCursor *CompiledCursor `protobuf:"bytes,31,opt,name=end_compiled_cursor,json=endCompiledCursor" json:"end_compiled_cursor,omitempty"`
+ CompositeIndex []*CompositeIndex `protobuf:"bytes,19,rep,name=composite_index,json=compositeIndex" json:"composite_index,omitempty"`
+ RequirePerfectPlan *bool `protobuf:"varint,20,opt,name=require_perfect_plan,json=requirePerfectPlan,def=0" json:"require_perfect_plan,omitempty"`
+ KeysOnly *bool `protobuf:"varint,21,opt,name=keys_only,json=keysOnly,def=0" json:"keys_only,omitempty"`
+ Transaction *Transaction `protobuf:"bytes,22,opt,name=transaction" json:"transaction,omitempty"`
+ Compile *bool `protobuf:"varint,25,opt,name=compile,def=0" json:"compile,omitempty"`
+ FailoverMs *int64 `protobuf:"varint,26,opt,name=failover_ms,json=failoverMs" json:"failover_ms,omitempty"`
+ Strong *bool `protobuf:"varint,32,opt,name=strong" json:"strong,omitempty"`
+ PropertyName []string `protobuf:"bytes,33,rep,name=property_name,json=propertyName" json:"property_name,omitempty"`
+ GroupByPropertyName []string `protobuf:"bytes,34,rep,name=group_by_property_name,json=groupByPropertyName" json:"group_by_property_name,omitempty"`
+ Distinct *bool `protobuf:"varint,24,opt,name=distinct" json:"distinct,omitempty"`
+ MinSafeTimeSeconds *int64 `protobuf:"varint,35,opt,name=min_safe_time_seconds,json=minSafeTimeSeconds" json:"min_safe_time_seconds,omitempty"`
+ SafeReplicaName []string `protobuf:"bytes,36,rep,name=safe_replica_name,json=safeReplicaName" json:"safe_replica_name,omitempty"`
+ PersistOffset *bool `protobuf:"varint,37,opt,name=persist_offset,json=persistOffset,def=0" json:"persist_offset,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Query) Reset() { *m = Query{} }
+func (m *Query) String() string { return proto.CompactTextString(m) }
+func (*Query) ProtoMessage() {}
+func (*Query) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15}
+}
+func (m *Query) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Query.Unmarshal(m, b)
+}
+func (m *Query) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Query.Marshal(b, m, deterministic)
+}
+func (dst *Query) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Query.Merge(dst, src)
+}
+func (m *Query) XXX_Size() int {
+ return xxx_messageInfo_Query.Size(m)
+}
+func (m *Query) XXX_DiscardUnknown() {
+ xxx_messageInfo_Query.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Query proto.InternalMessageInfo
+
+const Default_Query_Offset int32 = 0
+const Default_Query_RequirePerfectPlan bool = false
+const Default_Query_KeysOnly bool = false
+const Default_Query_Compile bool = false
+const Default_Query_PersistOffset bool = false
+
+func (m *Query) GetHeader() *InternalHeader {
+ if m != nil {
+ return m.Header
+ }
+ return nil
+}
+
+func (m *Query) GetApp() string {
+ if m != nil && m.App != nil {
+ return *m.App
+ }
+ return ""
+}
+
+func (m *Query) GetNameSpace() string {
+ if m != nil && m.NameSpace != nil {
+ return *m.NameSpace
+ }
+ return ""
+}
+
+func (m *Query) GetKind() string {
+ if m != nil && m.Kind != nil {
+ return *m.Kind
+ }
+ return ""
+}
+
+func (m *Query) GetAncestor() *Reference {
+ if m != nil {
+ return m.Ancestor
+ }
+ return nil
+}
+
+func (m *Query) GetFilter() []*Query_Filter {
+ if m != nil {
+ return m.Filter
+ }
+ return nil
+}
+
+func (m *Query) GetSearchQuery() string {
+ if m != nil && m.SearchQuery != nil {
+ return *m.SearchQuery
+ }
+ return ""
+}
+
+func (m *Query) GetOrder() []*Query_Order {
+ if m != nil {
+ return m.Order
+ }
+ return nil
+}
+
+func (m *Query) GetHint() Query_Hint {
+ if m != nil && m.Hint != nil {
+ return *m.Hint
+ }
+ return Query_ORDER_FIRST
+}
+
+func (m *Query) GetCount() int32 {
+ if m != nil && m.Count != nil {
+ return *m.Count
+ }
+ return 0
+}
+
+func (m *Query) GetOffset() int32 {
+ if m != nil && m.Offset != nil {
+ return *m.Offset
+ }
+ return Default_Query_Offset
+}
+
+func (m *Query) GetLimit() int32 {
+ if m != nil && m.Limit != nil {
+ return *m.Limit
+ }
+ return 0
+}
+
+func (m *Query) GetCompiledCursor() *CompiledCursor {
+ if m != nil {
+ return m.CompiledCursor
+ }
+ return nil
+}
+
+func (m *Query) GetEndCompiledCursor() *CompiledCursor {
+ if m != nil {
+ return m.EndCompiledCursor
+ }
+ return nil
+}
+
+func (m *Query) GetCompositeIndex() []*CompositeIndex {
+ if m != nil {
+ return m.CompositeIndex
+ }
+ return nil
+}
+
+func (m *Query) GetRequirePerfectPlan() bool {
+ if m != nil && m.RequirePerfectPlan != nil {
+ return *m.RequirePerfectPlan
+ }
+ return Default_Query_RequirePerfectPlan
+}
+
+func (m *Query) GetKeysOnly() bool {
+ if m != nil && m.KeysOnly != nil {
+ return *m.KeysOnly
+ }
+ return Default_Query_KeysOnly
+}
+
+func (m *Query) GetTransaction() *Transaction {
+ if m != nil {
+ return m.Transaction
+ }
+ return nil
+}
+
+func (m *Query) GetCompile() bool {
+ if m != nil && m.Compile != nil {
+ return *m.Compile
+ }
+ return Default_Query_Compile
+}
+
+func (m *Query) GetFailoverMs() int64 {
+ if m != nil && m.FailoverMs != nil {
+ return *m.FailoverMs
+ }
+ return 0
+}
+
+func (m *Query) GetStrong() bool {
+ if m != nil && m.Strong != nil {
+ return *m.Strong
+ }
+ return false
+}
+
+func (m *Query) GetPropertyName() []string {
+ if m != nil {
+ return m.PropertyName
+ }
+ return nil
+}
+
+func (m *Query) GetGroupByPropertyName() []string {
+ if m != nil {
+ return m.GroupByPropertyName
+ }
+ return nil
+}
+
+func (m *Query) GetDistinct() bool {
+ if m != nil && m.Distinct != nil {
+ return *m.Distinct
+ }
+ return false
+}
+
+func (m *Query) GetMinSafeTimeSeconds() int64 {
+ if m != nil && m.MinSafeTimeSeconds != nil {
+ return *m.MinSafeTimeSeconds
+ }
+ return 0
+}
+
+func (m *Query) GetSafeReplicaName() []string {
+ if m != nil {
+ return m.SafeReplicaName
+ }
+ return nil
+}
+
+func (m *Query) GetPersistOffset() bool {
+ if m != nil && m.PersistOffset != nil {
+ return *m.PersistOffset
+ }
+ return Default_Query_PersistOffset
+}
+
+type Query_Filter struct {
+ Op *Query_Filter_Operator `protobuf:"varint,6,req,name=op,enum=appengine.Query_Filter_Operator" json:"op,omitempty"`
+ Property []*Property `protobuf:"bytes,14,rep,name=property" json:"property,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Query_Filter) Reset() { *m = Query_Filter{} }
+func (m *Query_Filter) String() string { return proto.CompactTextString(m) }
+func (*Query_Filter) ProtoMessage() {}
+func (*Query_Filter) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0}
+}
+func (m *Query_Filter) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Query_Filter.Unmarshal(m, b)
+}
+func (m *Query_Filter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Query_Filter.Marshal(b, m, deterministic)
+}
+func (dst *Query_Filter) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Query_Filter.Merge(dst, src)
+}
+func (m *Query_Filter) XXX_Size() int {
+ return xxx_messageInfo_Query_Filter.Size(m)
+}
+func (m *Query_Filter) XXX_DiscardUnknown() {
+ xxx_messageInfo_Query_Filter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Query_Filter proto.InternalMessageInfo
+
+func (m *Query_Filter) GetOp() Query_Filter_Operator {
+ if m != nil && m.Op != nil {
+ return *m.Op
+ }
+ return Query_Filter_LESS_THAN
+}
+
+func (m *Query_Filter) GetProperty() []*Property {
+ if m != nil {
+ return m.Property
+ }
+ return nil
+}
+
+type Query_Order struct {
+ Property *string `protobuf:"bytes,10,req,name=property" json:"property,omitempty"`
+ Direction *Query_Order_Direction `protobuf:"varint,11,opt,name=direction,enum=appengine.Query_Order_Direction,def=1" json:"direction,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Query_Order) Reset() { *m = Query_Order{} }
+func (m *Query_Order) String() string { return proto.CompactTextString(m) }
+func (*Query_Order) ProtoMessage() {}
+func (*Query_Order) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 1}
+}
+func (m *Query_Order) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Query_Order.Unmarshal(m, b)
+}
+func (m *Query_Order) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Query_Order.Marshal(b, m, deterministic)
+}
+func (dst *Query_Order) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Query_Order.Merge(dst, src)
+}
+func (m *Query_Order) XXX_Size() int {
+ return xxx_messageInfo_Query_Order.Size(m)
+}
+func (m *Query_Order) XXX_DiscardUnknown() {
+ xxx_messageInfo_Query_Order.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Query_Order proto.InternalMessageInfo
+
+const Default_Query_Order_Direction Query_Order_Direction = Query_Order_ASCENDING
+
+func (m *Query_Order) GetProperty() string {
+ if m != nil && m.Property != nil {
+ return *m.Property
+ }
+ return ""
+}
+
+func (m *Query_Order) GetDirection() Query_Order_Direction {
+ if m != nil && m.Direction != nil {
+ return *m.Direction
+ }
+ return Default_Query_Order_Direction
+}
+
+type CompiledQuery struct {
+ Primaryscan *CompiledQuery_PrimaryScan `protobuf:"group,1,req,name=PrimaryScan,json=primaryscan" json:"primaryscan,omitempty"`
+ Mergejoinscan []*CompiledQuery_MergeJoinScan `protobuf:"group,7,rep,name=MergeJoinScan,json=mergejoinscan" json:"mergejoinscan,omitempty"`
+ IndexDef *Index `protobuf:"bytes,21,opt,name=index_def,json=indexDef" json:"index_def,omitempty"`
+ Offset *int32 `protobuf:"varint,10,opt,name=offset,def=0" json:"offset,omitempty"`
+ Limit *int32 `protobuf:"varint,11,opt,name=limit" json:"limit,omitempty"`
+ KeysOnly *bool `protobuf:"varint,12,req,name=keys_only,json=keysOnly" json:"keys_only,omitempty"`
+ PropertyName []string `protobuf:"bytes,24,rep,name=property_name,json=propertyName" json:"property_name,omitempty"`
+ DistinctInfixSize *int32 `protobuf:"varint,25,opt,name=distinct_infix_size,json=distinctInfixSize" json:"distinct_infix_size,omitempty"`
+ Entityfilter *CompiledQuery_EntityFilter `protobuf:"group,13,opt,name=EntityFilter,json=entityfilter" json:"entityfilter,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CompiledQuery) Reset() { *m = CompiledQuery{} }
+func (m *CompiledQuery) String() string { return proto.CompactTextString(m) }
+func (*CompiledQuery) ProtoMessage() {}
+func (*CompiledQuery) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16}
+}
+func (m *CompiledQuery) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CompiledQuery.Unmarshal(m, b)
+}
+func (m *CompiledQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CompiledQuery.Marshal(b, m, deterministic)
+}
+func (dst *CompiledQuery) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CompiledQuery.Merge(dst, src)
+}
+func (m *CompiledQuery) XXX_Size() int {
+ return xxx_messageInfo_CompiledQuery.Size(m)
+}
+func (m *CompiledQuery) XXX_DiscardUnknown() {
+ xxx_messageInfo_CompiledQuery.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompiledQuery proto.InternalMessageInfo
+
+const Default_CompiledQuery_Offset int32 = 0
+
+func (m *CompiledQuery) GetPrimaryscan() *CompiledQuery_PrimaryScan {
+ if m != nil {
+ return m.Primaryscan
+ }
+ return nil
+}
+
+func (m *CompiledQuery) GetMergejoinscan() []*CompiledQuery_MergeJoinScan {
+ if m != nil {
+ return m.Mergejoinscan
+ }
+ return nil
+}
+
+func (m *CompiledQuery) GetIndexDef() *Index {
+ if m != nil {
+ return m.IndexDef
+ }
+ return nil
+}
+
+func (m *CompiledQuery) GetOffset() int32 {
+ if m != nil && m.Offset != nil {
+ return *m.Offset
+ }
+ return Default_CompiledQuery_Offset
+}
+
+func (m *CompiledQuery) GetLimit() int32 {
+ if m != nil && m.Limit != nil {
+ return *m.Limit
+ }
+ return 0
+}
+
+func (m *CompiledQuery) GetKeysOnly() bool {
+ if m != nil && m.KeysOnly != nil {
+ return *m.KeysOnly
+ }
+ return false
+}
+
+func (m *CompiledQuery) GetPropertyName() []string {
+ if m != nil {
+ return m.PropertyName
+ }
+ return nil
+}
+
+func (m *CompiledQuery) GetDistinctInfixSize() int32 {
+ if m != nil && m.DistinctInfixSize != nil {
+ return *m.DistinctInfixSize
+ }
+ return 0
+}
+
+func (m *CompiledQuery) GetEntityfilter() *CompiledQuery_EntityFilter {
+ if m != nil {
+ return m.Entityfilter
+ }
+ return nil
+}
+
+type CompiledQuery_PrimaryScan struct {
+ IndexName *string `protobuf:"bytes,2,opt,name=index_name,json=indexName" json:"index_name,omitempty"`
+ StartKey *string `protobuf:"bytes,3,opt,name=start_key,json=startKey" json:"start_key,omitempty"`
+ StartInclusive *bool `protobuf:"varint,4,opt,name=start_inclusive,json=startInclusive" json:"start_inclusive,omitempty"`
+ EndKey *string `protobuf:"bytes,5,opt,name=end_key,json=endKey" json:"end_key,omitempty"`
+ EndInclusive *bool `protobuf:"varint,6,opt,name=end_inclusive,json=endInclusive" json:"end_inclusive,omitempty"`
+ StartPostfixValue []string `protobuf:"bytes,22,rep,name=start_postfix_value,json=startPostfixValue" json:"start_postfix_value,omitempty"`
+ EndPostfixValue []string `protobuf:"bytes,23,rep,name=end_postfix_value,json=endPostfixValue" json:"end_postfix_value,omitempty"`
+ EndUnappliedLogTimestampUs *int64 `protobuf:"varint,19,opt,name=end_unapplied_log_timestamp_us,json=endUnappliedLogTimestampUs" json:"end_unapplied_log_timestamp_us,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CompiledQuery_PrimaryScan) Reset() { *m = CompiledQuery_PrimaryScan{} }
+func (m *CompiledQuery_PrimaryScan) String() string { return proto.CompactTextString(m) }
+func (*CompiledQuery_PrimaryScan) ProtoMessage() {}
+func (*CompiledQuery_PrimaryScan) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 0}
+}
+func (m *CompiledQuery_PrimaryScan) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CompiledQuery_PrimaryScan.Unmarshal(m, b)
+}
+func (m *CompiledQuery_PrimaryScan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CompiledQuery_PrimaryScan.Marshal(b, m, deterministic)
+}
+func (dst *CompiledQuery_PrimaryScan) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CompiledQuery_PrimaryScan.Merge(dst, src)
+}
+func (m *CompiledQuery_PrimaryScan) XXX_Size() int {
+ return xxx_messageInfo_CompiledQuery_PrimaryScan.Size(m)
+}
+func (m *CompiledQuery_PrimaryScan) XXX_DiscardUnknown() {
+ xxx_messageInfo_CompiledQuery_PrimaryScan.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompiledQuery_PrimaryScan proto.InternalMessageInfo
+
+func (m *CompiledQuery_PrimaryScan) GetIndexName() string {
+ if m != nil && m.IndexName != nil {
+ return *m.IndexName
+ }
+ return ""
+}
+
+func (m *CompiledQuery_PrimaryScan) GetStartKey() string {
+ if m != nil && m.StartKey != nil {
+ return *m.StartKey
+ }
+ return ""
+}
+
+func (m *CompiledQuery_PrimaryScan) GetStartInclusive() bool {
+ if m != nil && m.StartInclusive != nil {
+ return *m.StartInclusive
+ }
+ return false
+}
+
+func (m *CompiledQuery_PrimaryScan) GetEndKey() string {
+ if m != nil && m.EndKey != nil {
+ return *m.EndKey
+ }
+ return ""
+}
+
+func (m *CompiledQuery_PrimaryScan) GetEndInclusive() bool {
+ if m != nil && m.EndInclusive != nil {
+ return *m.EndInclusive
+ }
+ return false
+}
+
+func (m *CompiledQuery_PrimaryScan) GetStartPostfixValue() []string {
+ if m != nil {
+ return m.StartPostfixValue
+ }
+ return nil
+}
+
+func (m *CompiledQuery_PrimaryScan) GetEndPostfixValue() []string {
+ if m != nil {
+ return m.EndPostfixValue
+ }
+ return nil
+}
+
+func (m *CompiledQuery_PrimaryScan) GetEndUnappliedLogTimestampUs() int64 {
+ if m != nil && m.EndUnappliedLogTimestampUs != nil {
+ return *m.EndUnappliedLogTimestampUs
+ }
+ return 0
+}
+
+type CompiledQuery_MergeJoinScan struct {
+ IndexName *string `protobuf:"bytes,8,req,name=index_name,json=indexName" json:"index_name,omitempty"`
+ PrefixValue []string `protobuf:"bytes,9,rep,name=prefix_value,json=prefixValue" json:"prefix_value,omitempty"`
+ ValuePrefix *bool `protobuf:"varint,20,opt,name=value_prefix,json=valuePrefix,def=0" json:"value_prefix,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CompiledQuery_MergeJoinScan) Reset() { *m = CompiledQuery_MergeJoinScan{} }
+func (m *CompiledQuery_MergeJoinScan) String() string { return proto.CompactTextString(m) }
+func (*CompiledQuery_MergeJoinScan) ProtoMessage() {}
+func (*CompiledQuery_MergeJoinScan) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 1}
+}
+func (m *CompiledQuery_MergeJoinScan) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CompiledQuery_MergeJoinScan.Unmarshal(m, b)
+}
+func (m *CompiledQuery_MergeJoinScan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CompiledQuery_MergeJoinScan.Marshal(b, m, deterministic)
+}
+func (dst *CompiledQuery_MergeJoinScan) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CompiledQuery_MergeJoinScan.Merge(dst, src)
+}
+func (m *CompiledQuery_MergeJoinScan) XXX_Size() int {
+ return xxx_messageInfo_CompiledQuery_MergeJoinScan.Size(m)
+}
+func (m *CompiledQuery_MergeJoinScan) XXX_DiscardUnknown() {
+ xxx_messageInfo_CompiledQuery_MergeJoinScan.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompiledQuery_MergeJoinScan proto.InternalMessageInfo
+
+const Default_CompiledQuery_MergeJoinScan_ValuePrefix bool = false
+
+func (m *CompiledQuery_MergeJoinScan) GetIndexName() string {
+ if m != nil && m.IndexName != nil {
+ return *m.IndexName
+ }
+ return ""
+}
+
+func (m *CompiledQuery_MergeJoinScan) GetPrefixValue() []string {
+ if m != nil {
+ return m.PrefixValue
+ }
+ return nil
+}
+
+func (m *CompiledQuery_MergeJoinScan) GetValuePrefix() bool {
+ if m != nil && m.ValuePrefix != nil {
+ return *m.ValuePrefix
+ }
+ return Default_CompiledQuery_MergeJoinScan_ValuePrefix
+}
+
+type CompiledQuery_EntityFilter struct {
+ Distinct *bool `protobuf:"varint,14,opt,name=distinct,def=0" json:"distinct,omitempty"`
+ Kind *string `protobuf:"bytes,17,opt,name=kind" json:"kind,omitempty"`
+ Ancestor *Reference `protobuf:"bytes,18,opt,name=ancestor" json:"ancestor,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CompiledQuery_EntityFilter) Reset() { *m = CompiledQuery_EntityFilter{} }
+func (m *CompiledQuery_EntityFilter) String() string { return proto.CompactTextString(m) }
+func (*CompiledQuery_EntityFilter) ProtoMessage() {}
+func (*CompiledQuery_EntityFilter) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 2}
+}
+func (m *CompiledQuery_EntityFilter) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CompiledQuery_EntityFilter.Unmarshal(m, b)
+}
+func (m *CompiledQuery_EntityFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CompiledQuery_EntityFilter.Marshal(b, m, deterministic)
+}
+func (dst *CompiledQuery_EntityFilter) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CompiledQuery_EntityFilter.Merge(dst, src)
+}
+func (m *CompiledQuery_EntityFilter) XXX_Size() int {
+ return xxx_messageInfo_CompiledQuery_EntityFilter.Size(m)
+}
+func (m *CompiledQuery_EntityFilter) XXX_DiscardUnknown() {
+ xxx_messageInfo_CompiledQuery_EntityFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompiledQuery_EntityFilter proto.InternalMessageInfo
+
+const Default_CompiledQuery_EntityFilter_Distinct bool = false
+
+func (m *CompiledQuery_EntityFilter) GetDistinct() bool {
+ if m != nil && m.Distinct != nil {
+ return *m.Distinct
+ }
+ return Default_CompiledQuery_EntityFilter_Distinct
+}
+
+func (m *CompiledQuery_EntityFilter) GetKind() string {
+ if m != nil && m.Kind != nil {
+ return *m.Kind
+ }
+ return ""
+}
+
+func (m *CompiledQuery_EntityFilter) GetAncestor() *Reference {
+ if m != nil {
+ return m.Ancestor
+ }
+ return nil
+}
+
+type CompiledCursor struct {
+ Position *CompiledCursor_Position `protobuf:"group,2,opt,name=Position,json=position" json:"position,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CompiledCursor) Reset() { *m = CompiledCursor{} }
+func (m *CompiledCursor) String() string { return proto.CompactTextString(m) }
+func (*CompiledCursor) ProtoMessage() {}
+func (*CompiledCursor) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17}
+}
+func (m *CompiledCursor) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CompiledCursor.Unmarshal(m, b)
+}
+func (m *CompiledCursor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CompiledCursor.Marshal(b, m, deterministic)
+}
+func (dst *CompiledCursor) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CompiledCursor.Merge(dst, src)
+}
+func (m *CompiledCursor) XXX_Size() int {
+ return xxx_messageInfo_CompiledCursor.Size(m)
+}
+func (m *CompiledCursor) XXX_DiscardUnknown() {
+ xxx_messageInfo_CompiledCursor.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompiledCursor proto.InternalMessageInfo
+
+func (m *CompiledCursor) GetPosition() *CompiledCursor_Position {
+ if m != nil {
+ return m.Position
+ }
+ return nil
+}
+
+type CompiledCursor_Position struct {
+ StartKey *string `protobuf:"bytes,27,opt,name=start_key,json=startKey" json:"start_key,omitempty"`
+ Indexvalue []*CompiledCursor_Position_IndexValue `protobuf:"group,29,rep,name=IndexValue,json=indexvalue" json:"indexvalue,omitempty"`
+ Key *Reference `protobuf:"bytes,32,opt,name=key" json:"key,omitempty"`
+ StartInclusive *bool `protobuf:"varint,28,opt,name=start_inclusive,json=startInclusive,def=1" json:"start_inclusive,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CompiledCursor_Position) Reset() { *m = CompiledCursor_Position{} }
+func (m *CompiledCursor_Position) String() string { return proto.CompactTextString(m) }
+func (*CompiledCursor_Position) ProtoMessage() {}
+func (*CompiledCursor_Position) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17, 0}
+}
+func (m *CompiledCursor_Position) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CompiledCursor_Position.Unmarshal(m, b)
+}
+func (m *CompiledCursor_Position) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CompiledCursor_Position.Marshal(b, m, deterministic)
+}
+func (dst *CompiledCursor_Position) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CompiledCursor_Position.Merge(dst, src)
+}
+func (m *CompiledCursor_Position) XXX_Size() int {
+ return xxx_messageInfo_CompiledCursor_Position.Size(m)
+}
+func (m *CompiledCursor_Position) XXX_DiscardUnknown() {
+ xxx_messageInfo_CompiledCursor_Position.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompiledCursor_Position proto.InternalMessageInfo
+
+const Default_CompiledCursor_Position_StartInclusive bool = true
+
+func (m *CompiledCursor_Position) GetStartKey() string {
+ if m != nil && m.StartKey != nil {
+ return *m.StartKey
+ }
+ return ""
+}
+
+func (m *CompiledCursor_Position) GetIndexvalue() []*CompiledCursor_Position_IndexValue {
+ if m != nil {
+ return m.Indexvalue
+ }
+ return nil
+}
+
+func (m *CompiledCursor_Position) GetKey() *Reference {
+ if m != nil {
+ return m.Key
+ }
+ return nil
+}
+
+func (m *CompiledCursor_Position) GetStartInclusive() bool {
+ if m != nil && m.StartInclusive != nil {
+ return *m.StartInclusive
+ }
+ return Default_CompiledCursor_Position_StartInclusive
+}
+
+type CompiledCursor_Position_IndexValue struct {
+ Property *string `protobuf:"bytes,30,opt,name=property" json:"property,omitempty"`
+ Value *PropertyValue `protobuf:"bytes,31,req,name=value" json:"value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CompiledCursor_Position_IndexValue) Reset() { *m = CompiledCursor_Position_IndexValue{} }
+func (m *CompiledCursor_Position_IndexValue) String() string { return proto.CompactTextString(m) }
+func (*CompiledCursor_Position_IndexValue) ProtoMessage() {}
+func (*CompiledCursor_Position_IndexValue) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17, 0, 0}
+}
+func (m *CompiledCursor_Position_IndexValue) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CompiledCursor_Position_IndexValue.Unmarshal(m, b)
+}
+func (m *CompiledCursor_Position_IndexValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CompiledCursor_Position_IndexValue.Marshal(b, m, deterministic)
+}
+func (dst *CompiledCursor_Position_IndexValue) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CompiledCursor_Position_IndexValue.Merge(dst, src)
+}
+func (m *CompiledCursor_Position_IndexValue) XXX_Size() int {
+ return xxx_messageInfo_CompiledCursor_Position_IndexValue.Size(m)
+}
+func (m *CompiledCursor_Position_IndexValue) XXX_DiscardUnknown() {
+ xxx_messageInfo_CompiledCursor_Position_IndexValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompiledCursor_Position_IndexValue proto.InternalMessageInfo
+
+func (m *CompiledCursor_Position_IndexValue) GetProperty() string {
+ if m != nil && m.Property != nil {
+ return *m.Property
+ }
+ return ""
+}
+
+func (m *CompiledCursor_Position_IndexValue) GetValue() *PropertyValue {
+ if m != nil {
+ return m.Value
+ }
+ return nil
+}
+
+type Cursor struct {
+ Cursor *uint64 `protobuf:"fixed64,1,req,name=cursor" json:"cursor,omitempty"`
+ App *string `protobuf:"bytes,2,opt,name=app" json:"app,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Cursor) Reset() { *m = Cursor{} }
+func (m *Cursor) String() string { return proto.CompactTextString(m) }
+func (*Cursor) ProtoMessage() {}
+func (*Cursor) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{18}
+}
+func (m *Cursor) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Cursor.Unmarshal(m, b)
+}
+func (m *Cursor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Cursor.Marshal(b, m, deterministic)
+}
+func (dst *Cursor) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Cursor.Merge(dst, src)
+}
+func (m *Cursor) XXX_Size() int {
+ return xxx_messageInfo_Cursor.Size(m)
+}
+func (m *Cursor) XXX_DiscardUnknown() {
+ xxx_messageInfo_Cursor.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Cursor proto.InternalMessageInfo
+
+func (m *Cursor) GetCursor() uint64 {
+ if m != nil && m.Cursor != nil {
+ return *m.Cursor
+ }
+ return 0
+}
+
+func (m *Cursor) GetApp() string {
+ if m != nil && m.App != nil {
+ return *m.App
+ }
+ return ""
+}
+
+type Error struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Error) Reset() { *m = Error{} }
+func (m *Error) String() string { return proto.CompactTextString(m) }
+func (*Error) ProtoMessage() {}
+func (*Error) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{19}
+}
+func (m *Error) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Error.Unmarshal(m, b)
+}
+func (m *Error) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Error.Marshal(b, m, deterministic)
+}
+func (dst *Error) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Error.Merge(dst, src)
+}
+func (m *Error) XXX_Size() int {
+ return xxx_messageInfo_Error.Size(m)
+}
+func (m *Error) XXX_DiscardUnknown() {
+ xxx_messageInfo_Error.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Error proto.InternalMessageInfo
+
+type Cost struct {
+ IndexWrites *int32 `protobuf:"varint,1,opt,name=index_writes,json=indexWrites" json:"index_writes,omitempty"`
+ IndexWriteBytes *int32 `protobuf:"varint,2,opt,name=index_write_bytes,json=indexWriteBytes" json:"index_write_bytes,omitempty"`
+ EntityWrites *int32 `protobuf:"varint,3,opt,name=entity_writes,json=entityWrites" json:"entity_writes,omitempty"`
+ EntityWriteBytes *int32 `protobuf:"varint,4,opt,name=entity_write_bytes,json=entityWriteBytes" json:"entity_write_bytes,omitempty"`
+ Commitcost *Cost_CommitCost `protobuf:"group,5,opt,name=CommitCost,json=commitcost" json:"commitcost,omitempty"`
+ ApproximateStorageDelta *int32 `protobuf:"varint,8,opt,name=approximate_storage_delta,json=approximateStorageDelta" json:"approximate_storage_delta,omitempty"`
+ IdSequenceUpdates *int32 `protobuf:"varint,9,opt,name=id_sequence_updates,json=idSequenceUpdates" json:"id_sequence_updates,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Cost) Reset() { *m = Cost{} }
+func (m *Cost) String() string { return proto.CompactTextString(m) }
+func (*Cost) ProtoMessage() {}
+func (*Cost) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{20}
+}
+func (m *Cost) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Cost.Unmarshal(m, b)
+}
+func (m *Cost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Cost.Marshal(b, m, deterministic)
+}
+func (dst *Cost) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Cost.Merge(dst, src)
+}
+func (m *Cost) XXX_Size() int {
+ return xxx_messageInfo_Cost.Size(m)
+}
+func (m *Cost) XXX_DiscardUnknown() {
+ xxx_messageInfo_Cost.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Cost proto.InternalMessageInfo
+
+func (m *Cost) GetIndexWrites() int32 {
+ if m != nil && m.IndexWrites != nil {
+ return *m.IndexWrites
+ }
+ return 0
+}
+
+func (m *Cost) GetIndexWriteBytes() int32 {
+ if m != nil && m.IndexWriteBytes != nil {
+ return *m.IndexWriteBytes
+ }
+ return 0
+}
+
+func (m *Cost) GetEntityWrites() int32 {
+ if m != nil && m.EntityWrites != nil {
+ return *m.EntityWrites
+ }
+ return 0
+}
+
+func (m *Cost) GetEntityWriteBytes() int32 {
+ if m != nil && m.EntityWriteBytes != nil {
+ return *m.EntityWriteBytes
+ }
+ return 0
+}
+
+func (m *Cost) GetCommitcost() *Cost_CommitCost {
+ if m != nil {
+ return m.Commitcost
+ }
+ return nil
+}
+
+func (m *Cost) GetApproximateStorageDelta() int32 {
+ if m != nil && m.ApproximateStorageDelta != nil {
+ return *m.ApproximateStorageDelta
+ }
+ return 0
+}
+
+func (m *Cost) GetIdSequenceUpdates() int32 {
+ if m != nil && m.IdSequenceUpdates != nil {
+ return *m.IdSequenceUpdates
+ }
+ return 0
+}
+
+type Cost_CommitCost struct {
+ RequestedEntityPuts *int32 `protobuf:"varint,6,opt,name=requested_entity_puts,json=requestedEntityPuts" json:"requested_entity_puts,omitempty"`
+ RequestedEntityDeletes *int32 `protobuf:"varint,7,opt,name=requested_entity_deletes,json=requestedEntityDeletes" json:"requested_entity_deletes,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Cost_CommitCost) Reset() { *m = Cost_CommitCost{} }
+func (m *Cost_CommitCost) String() string { return proto.CompactTextString(m) }
+func (*Cost_CommitCost) ProtoMessage() {}
+func (*Cost_CommitCost) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{20, 0}
+}
+func (m *Cost_CommitCost) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Cost_CommitCost.Unmarshal(m, b)
+}
+func (m *Cost_CommitCost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Cost_CommitCost.Marshal(b, m, deterministic)
+}
+func (dst *Cost_CommitCost) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Cost_CommitCost.Merge(dst, src)
+}
+func (m *Cost_CommitCost) XXX_Size() int {
+ return xxx_messageInfo_Cost_CommitCost.Size(m)
+}
+func (m *Cost_CommitCost) XXX_DiscardUnknown() {
+ xxx_messageInfo_Cost_CommitCost.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Cost_CommitCost proto.InternalMessageInfo
+
+func (m *Cost_CommitCost) GetRequestedEntityPuts() int32 {
+ if m != nil && m.RequestedEntityPuts != nil {
+ return *m.RequestedEntityPuts
+ }
+ return 0
+}
+
+func (m *Cost_CommitCost) GetRequestedEntityDeletes() int32 {
+ if m != nil && m.RequestedEntityDeletes != nil {
+ return *m.RequestedEntityDeletes
+ }
+ return 0
+}
+
+type GetRequest struct {
+ Header *InternalHeader `protobuf:"bytes,6,opt,name=header" json:"header,omitempty"`
+ Key []*Reference `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"`
+ Transaction *Transaction `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"`
+ FailoverMs *int64 `protobuf:"varint,3,opt,name=failover_ms,json=failoverMs" json:"failover_ms,omitempty"`
+ Strong *bool `protobuf:"varint,4,opt,name=strong" json:"strong,omitempty"`
+ AllowDeferred *bool `protobuf:"varint,5,opt,name=allow_deferred,json=allowDeferred,def=0" json:"allow_deferred,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetRequest) Reset() { *m = GetRequest{} }
+func (m *GetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetRequest) ProtoMessage() {}
+func (*GetRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{21}
+}
+func (m *GetRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetRequest.Unmarshal(m, b)
+}
+func (m *GetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetRequest.Merge(dst, src)
+}
+func (m *GetRequest) XXX_Size() int {
+ return xxx_messageInfo_GetRequest.Size(m)
+}
+func (m *GetRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetRequest proto.InternalMessageInfo
+
+const Default_GetRequest_AllowDeferred bool = false
+
+func (m *GetRequest) GetHeader() *InternalHeader {
+ if m != nil {
+ return m.Header
+ }
+ return nil
+}
+
+func (m *GetRequest) GetKey() []*Reference {
+ if m != nil {
+ return m.Key
+ }
+ return nil
+}
+
+func (m *GetRequest) GetTransaction() *Transaction {
+ if m != nil {
+ return m.Transaction
+ }
+ return nil
+}
+
+func (m *GetRequest) GetFailoverMs() int64 {
+ if m != nil && m.FailoverMs != nil {
+ return *m.FailoverMs
+ }
+ return 0
+}
+
+func (m *GetRequest) GetStrong() bool {
+ if m != nil && m.Strong != nil {
+ return *m.Strong
+ }
+ return false
+}
+
+func (m *GetRequest) GetAllowDeferred() bool {
+ if m != nil && m.AllowDeferred != nil {
+ return *m.AllowDeferred
+ }
+ return Default_GetRequest_AllowDeferred
+}
+
+type GetResponse struct {
+ Entity []*GetResponse_Entity `protobuf:"group,1,rep,name=Entity,json=entity" json:"entity,omitempty"`
+ Deferred []*Reference `protobuf:"bytes,5,rep,name=deferred" json:"deferred,omitempty"`
+ InOrder *bool `protobuf:"varint,6,opt,name=in_order,json=inOrder,def=1" json:"in_order,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetResponse) Reset() { *m = GetResponse{} }
+func (m *GetResponse) String() string { return proto.CompactTextString(m) }
+func (*GetResponse) ProtoMessage() {}
+func (*GetResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{22}
+}
+func (m *GetResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetResponse.Unmarshal(m, b)
+}
+func (m *GetResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetResponse.Marshal(b, m, deterministic)
+}
+func (dst *GetResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetResponse.Merge(dst, src)
+}
+func (m *GetResponse) XXX_Size() int {
+ return xxx_messageInfo_GetResponse.Size(m)
+}
+func (m *GetResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetResponse proto.InternalMessageInfo
+
+const Default_GetResponse_InOrder bool = true
+
+func (m *GetResponse) GetEntity() []*GetResponse_Entity {
+ if m != nil {
+ return m.Entity
+ }
+ return nil
+}
+
+func (m *GetResponse) GetDeferred() []*Reference {
+ if m != nil {
+ return m.Deferred
+ }
+ return nil
+}
+
+func (m *GetResponse) GetInOrder() bool {
+ if m != nil && m.InOrder != nil {
+ return *m.InOrder
+ }
+ return Default_GetResponse_InOrder
+}
+
+type GetResponse_Entity struct {
+ Entity *EntityProto `protobuf:"bytes,2,opt,name=entity" json:"entity,omitempty"`
+ Key *Reference `protobuf:"bytes,4,opt,name=key" json:"key,omitempty"`
+ Version *int64 `protobuf:"varint,3,opt,name=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetResponse_Entity) Reset() { *m = GetResponse_Entity{} }
+func (m *GetResponse_Entity) String() string { return proto.CompactTextString(m) }
+func (*GetResponse_Entity) ProtoMessage() {}
+func (*GetResponse_Entity) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{22, 0}
+}
+func (m *GetResponse_Entity) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetResponse_Entity.Unmarshal(m, b)
+}
+func (m *GetResponse_Entity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetResponse_Entity.Marshal(b, m, deterministic)
+}
+func (dst *GetResponse_Entity) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetResponse_Entity.Merge(dst, src)
+}
+func (m *GetResponse_Entity) XXX_Size() int {
+ return xxx_messageInfo_GetResponse_Entity.Size(m)
+}
+func (m *GetResponse_Entity) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetResponse_Entity.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetResponse_Entity proto.InternalMessageInfo
+
+func (m *GetResponse_Entity) GetEntity() *EntityProto {
+ if m != nil {
+ return m.Entity
+ }
+ return nil
+}
+
+func (m *GetResponse_Entity) GetKey() *Reference {
+ if m != nil {
+ return m.Key
+ }
+ return nil
+}
+
+func (m *GetResponse_Entity) GetVersion() int64 {
+ if m != nil && m.Version != nil {
+ return *m.Version
+ }
+ return 0
+}
+
+type PutRequest struct {
+ Header *InternalHeader `protobuf:"bytes,11,opt,name=header" json:"header,omitempty"`
+ Entity []*EntityProto `protobuf:"bytes,1,rep,name=entity" json:"entity,omitempty"`
+ Transaction *Transaction `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"`
+ CompositeIndex []*CompositeIndex `protobuf:"bytes,3,rep,name=composite_index,json=compositeIndex" json:"composite_index,omitempty"`
+ Trusted *bool `protobuf:"varint,4,opt,name=trusted,def=0" json:"trusted,omitempty"`
+ Force *bool `protobuf:"varint,7,opt,name=force,def=0" json:"force,omitempty"`
+ MarkChanges *bool `protobuf:"varint,8,opt,name=mark_changes,json=markChanges,def=0" json:"mark_changes,omitempty"`
+ Snapshot []*Snapshot `protobuf:"bytes,9,rep,name=snapshot" json:"snapshot,omitempty"`
+ AutoIdPolicy *PutRequest_AutoIdPolicy `protobuf:"varint,10,opt,name=auto_id_policy,json=autoIdPolicy,enum=appengine.PutRequest_AutoIdPolicy,def=0" json:"auto_id_policy,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *PutRequest) Reset() { *m = PutRequest{} }
+func (m *PutRequest) String() string { return proto.CompactTextString(m) }
+func (*PutRequest) ProtoMessage() {}
+func (*PutRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{23}
+}
+func (m *PutRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_PutRequest.Unmarshal(m, b)
+}
+func (m *PutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_PutRequest.Marshal(b, m, deterministic)
+}
+func (dst *PutRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PutRequest.Merge(dst, src)
+}
+func (m *PutRequest) XXX_Size() int {
+ return xxx_messageInfo_PutRequest.Size(m)
+}
+func (m *PutRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_PutRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PutRequest proto.InternalMessageInfo
+
+const Default_PutRequest_Trusted bool = false
+const Default_PutRequest_Force bool = false
+const Default_PutRequest_MarkChanges bool = false
+const Default_PutRequest_AutoIdPolicy PutRequest_AutoIdPolicy = PutRequest_CURRENT
+
+func (m *PutRequest) GetHeader() *InternalHeader {
+ if m != nil {
+ return m.Header
+ }
+ return nil
+}
+
+func (m *PutRequest) GetEntity() []*EntityProto {
+ if m != nil {
+ return m.Entity
+ }
+ return nil
+}
+
+func (m *PutRequest) GetTransaction() *Transaction {
+ if m != nil {
+ return m.Transaction
+ }
+ return nil
+}
+
+func (m *PutRequest) GetCompositeIndex() []*CompositeIndex {
+ if m != nil {
+ return m.CompositeIndex
+ }
+ return nil
+}
+
+func (m *PutRequest) GetTrusted() bool {
+ if m != nil && m.Trusted != nil {
+ return *m.Trusted
+ }
+ return Default_PutRequest_Trusted
+}
+
+func (m *PutRequest) GetForce() bool {
+ if m != nil && m.Force != nil {
+ return *m.Force
+ }
+ return Default_PutRequest_Force
+}
+
+func (m *PutRequest) GetMarkChanges() bool {
+ if m != nil && m.MarkChanges != nil {
+ return *m.MarkChanges
+ }
+ return Default_PutRequest_MarkChanges
+}
+
+func (m *PutRequest) GetSnapshot() []*Snapshot {
+ if m != nil {
+ return m.Snapshot
+ }
+ return nil
+}
+
+func (m *PutRequest) GetAutoIdPolicy() PutRequest_AutoIdPolicy {
+ if m != nil && m.AutoIdPolicy != nil {
+ return *m.AutoIdPolicy
+ }
+ return Default_PutRequest_AutoIdPolicy
+}
+
+type PutResponse struct {
+ Key []*Reference `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"`
+ Cost *Cost `protobuf:"bytes,2,opt,name=cost" json:"cost,omitempty"`
+ Version []int64 `protobuf:"varint,3,rep,name=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *PutResponse) Reset() { *m = PutResponse{} }
+func (m *PutResponse) String() string { return proto.CompactTextString(m) }
+func (*PutResponse) ProtoMessage() {}
+func (*PutResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{24}
+}
+func (m *PutResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_PutResponse.Unmarshal(m, b)
+}
+func (m *PutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_PutResponse.Marshal(b, m, deterministic)
+}
+func (dst *PutResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PutResponse.Merge(dst, src)
+}
+func (m *PutResponse) XXX_Size() int {
+ return xxx_messageInfo_PutResponse.Size(m)
+}
+func (m *PutResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_PutResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PutResponse proto.InternalMessageInfo
+
+func (m *PutResponse) GetKey() []*Reference {
+ if m != nil {
+ return m.Key
+ }
+ return nil
+}
+
+func (m *PutResponse) GetCost() *Cost {
+ if m != nil {
+ return m.Cost
+ }
+ return nil
+}
+
+func (m *PutResponse) GetVersion() []int64 {
+ if m != nil {
+ return m.Version
+ }
+ return nil
+}
+
+type TouchRequest struct {
+ Header *InternalHeader `protobuf:"bytes,10,opt,name=header" json:"header,omitempty"`
+ Key []*Reference `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"`
+ CompositeIndex []*CompositeIndex `protobuf:"bytes,2,rep,name=composite_index,json=compositeIndex" json:"composite_index,omitempty"`
+ Force *bool `protobuf:"varint,3,opt,name=force,def=0" json:"force,omitempty"`
+ Snapshot []*Snapshot `protobuf:"bytes,9,rep,name=snapshot" json:"snapshot,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *TouchRequest) Reset() { *m = TouchRequest{} }
+func (m *TouchRequest) String() string { return proto.CompactTextString(m) }
+func (*TouchRequest) ProtoMessage() {}
+func (*TouchRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{25}
+}
+func (m *TouchRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_TouchRequest.Unmarshal(m, b)
+}
+func (m *TouchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_TouchRequest.Marshal(b, m, deterministic)
+}
+func (dst *TouchRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TouchRequest.Merge(dst, src)
+}
+func (m *TouchRequest) XXX_Size() int {
+ return xxx_messageInfo_TouchRequest.Size(m)
+}
+func (m *TouchRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_TouchRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TouchRequest proto.InternalMessageInfo
+
+const Default_TouchRequest_Force bool = false
+
+func (m *TouchRequest) GetHeader() *InternalHeader {
+ if m != nil {
+ return m.Header
+ }
+ return nil
+}
+
+func (m *TouchRequest) GetKey() []*Reference {
+ if m != nil {
+ return m.Key
+ }
+ return nil
+}
+
+func (m *TouchRequest) GetCompositeIndex() []*CompositeIndex {
+ if m != nil {
+ return m.CompositeIndex
+ }
+ return nil
+}
+
+func (m *TouchRequest) GetForce() bool {
+ if m != nil && m.Force != nil {
+ return *m.Force
+ }
+ return Default_TouchRequest_Force
+}
+
+func (m *TouchRequest) GetSnapshot() []*Snapshot {
+ if m != nil {
+ return m.Snapshot
+ }
+ return nil
+}
+
+type TouchResponse struct {
+ Cost *Cost `protobuf:"bytes,1,opt,name=cost" json:"cost,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *TouchResponse) Reset() { *m = TouchResponse{} }
+func (m *TouchResponse) String() string { return proto.CompactTextString(m) }
+func (*TouchResponse) ProtoMessage() {}
+func (*TouchResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{26}
+}
+func (m *TouchResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_TouchResponse.Unmarshal(m, b)
+}
+func (m *TouchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_TouchResponse.Marshal(b, m, deterministic)
+}
+func (dst *TouchResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TouchResponse.Merge(dst, src)
+}
+func (m *TouchResponse) XXX_Size() int {
+ return xxx_messageInfo_TouchResponse.Size(m)
+}
+func (m *TouchResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_TouchResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TouchResponse proto.InternalMessageInfo
+
+func (m *TouchResponse) GetCost() *Cost {
+ if m != nil {
+ return m.Cost
+ }
+ return nil
+}
+
+type DeleteRequest struct {
+ Header *InternalHeader `protobuf:"bytes,10,opt,name=header" json:"header,omitempty"`
+ Key []*Reference `protobuf:"bytes,6,rep,name=key" json:"key,omitempty"`
+ Transaction *Transaction `protobuf:"bytes,5,opt,name=transaction" json:"transaction,omitempty"`
+ Trusted *bool `protobuf:"varint,4,opt,name=trusted,def=0" json:"trusted,omitempty"`
+ Force *bool `protobuf:"varint,7,opt,name=force,def=0" json:"force,omitempty"`
+ MarkChanges *bool `protobuf:"varint,8,opt,name=mark_changes,json=markChanges,def=0" json:"mark_changes,omitempty"`
+ Snapshot []*Snapshot `protobuf:"bytes,9,rep,name=snapshot" json:"snapshot,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DeleteRequest) Reset() { *m = DeleteRequest{} }
+func (m *DeleteRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteRequest) ProtoMessage() {}
+func (*DeleteRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{27}
+}
+func (m *DeleteRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DeleteRequest.Unmarshal(m, b)
+}
+func (m *DeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DeleteRequest.Marshal(b, m, deterministic)
+}
+func (dst *DeleteRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DeleteRequest.Merge(dst, src)
+}
+func (m *DeleteRequest) XXX_Size() int {
+ return xxx_messageInfo_DeleteRequest.Size(m)
+}
+func (m *DeleteRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_DeleteRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteRequest proto.InternalMessageInfo
+
+const Default_DeleteRequest_Trusted bool = false
+const Default_DeleteRequest_Force bool = false
+const Default_DeleteRequest_MarkChanges bool = false
+
+func (m *DeleteRequest) GetHeader() *InternalHeader {
+ if m != nil {
+ return m.Header
+ }
+ return nil
+}
+
+func (m *DeleteRequest) GetKey() []*Reference {
+ if m != nil {
+ return m.Key
+ }
+ return nil
+}
+
+func (m *DeleteRequest) GetTransaction() *Transaction {
+ if m != nil {
+ return m.Transaction
+ }
+ return nil
+}
+
+func (m *DeleteRequest) GetTrusted() bool {
+ if m != nil && m.Trusted != nil {
+ return *m.Trusted
+ }
+ return Default_DeleteRequest_Trusted
+}
+
+func (m *DeleteRequest) GetForce() bool {
+ if m != nil && m.Force != nil {
+ return *m.Force
+ }
+ return Default_DeleteRequest_Force
+}
+
+func (m *DeleteRequest) GetMarkChanges() bool {
+ if m != nil && m.MarkChanges != nil {
+ return *m.MarkChanges
+ }
+ return Default_DeleteRequest_MarkChanges
+}
+
+func (m *DeleteRequest) GetSnapshot() []*Snapshot {
+ if m != nil {
+ return m.Snapshot
+ }
+ return nil
+}
+
+type DeleteResponse struct {
+ Cost *Cost `protobuf:"bytes,1,opt,name=cost" json:"cost,omitempty"`
+ Version []int64 `protobuf:"varint,3,rep,name=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *DeleteResponse) Reset() { *m = DeleteResponse{} }
+func (m *DeleteResponse) String() string { return proto.CompactTextString(m) }
+func (*DeleteResponse) ProtoMessage() {}
+func (*DeleteResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{28}
+}
+func (m *DeleteResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DeleteResponse.Unmarshal(m, b)
+}
+func (m *DeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DeleteResponse.Marshal(b, m, deterministic)
+}
+func (dst *DeleteResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DeleteResponse.Merge(dst, src)
+}
+func (m *DeleteResponse) XXX_Size() int {
+ return xxx_messageInfo_DeleteResponse.Size(m)
+}
+func (m *DeleteResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_DeleteResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteResponse proto.InternalMessageInfo
+
+func (m *DeleteResponse) GetCost() *Cost {
+ if m != nil {
+ return m.Cost
+ }
+ return nil
+}
+
+func (m *DeleteResponse) GetVersion() []int64 {
+ if m != nil {
+ return m.Version
+ }
+ return nil
+}
+
+type NextRequest struct {
+ Header *InternalHeader `protobuf:"bytes,5,opt,name=header" json:"header,omitempty"`
+ Cursor *Cursor `protobuf:"bytes,1,req,name=cursor" json:"cursor,omitempty"`
+ Count *int32 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
+ Offset *int32 `protobuf:"varint,4,opt,name=offset,def=0" json:"offset,omitempty"`
+ Compile *bool `protobuf:"varint,3,opt,name=compile,def=0" json:"compile,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *NextRequest) Reset() { *m = NextRequest{} }
+func (m *NextRequest) String() string { return proto.CompactTextString(m) }
+func (*NextRequest) ProtoMessage() {}
+func (*NextRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{29}
+}
+func (m *NextRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_NextRequest.Unmarshal(m, b)
+}
+func (m *NextRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_NextRequest.Marshal(b, m, deterministic)
+}
+func (dst *NextRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_NextRequest.Merge(dst, src)
+}
+func (m *NextRequest) XXX_Size() int {
+ return xxx_messageInfo_NextRequest.Size(m)
+}
+func (m *NextRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_NextRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NextRequest proto.InternalMessageInfo
+
+const Default_NextRequest_Offset int32 = 0
+const Default_NextRequest_Compile bool = false
+
+func (m *NextRequest) GetHeader() *InternalHeader {
+ if m != nil {
+ return m.Header
+ }
+ return nil
+}
+
+func (m *NextRequest) GetCursor() *Cursor {
+ if m != nil {
+ return m.Cursor
+ }
+ return nil
+}
+
+func (m *NextRequest) GetCount() int32 {
+ if m != nil && m.Count != nil {
+ return *m.Count
+ }
+ return 0
+}
+
+func (m *NextRequest) GetOffset() int32 {
+ if m != nil && m.Offset != nil {
+ return *m.Offset
+ }
+ return Default_NextRequest_Offset
+}
+
+func (m *NextRequest) GetCompile() bool {
+ if m != nil && m.Compile != nil {
+ return *m.Compile
+ }
+ return Default_NextRequest_Compile
+}
+
+type QueryResult struct {
+ Cursor *Cursor `protobuf:"bytes,1,opt,name=cursor" json:"cursor,omitempty"`
+ Result []*EntityProto `protobuf:"bytes,2,rep,name=result" json:"result,omitempty"`
+ SkippedResults *int32 `protobuf:"varint,7,opt,name=skipped_results,json=skippedResults" json:"skipped_results,omitempty"`
+ MoreResults *bool `protobuf:"varint,3,req,name=more_results,json=moreResults" json:"more_results,omitempty"`
+ KeysOnly *bool `protobuf:"varint,4,opt,name=keys_only,json=keysOnly" json:"keys_only,omitempty"`
+ IndexOnly *bool `protobuf:"varint,9,opt,name=index_only,json=indexOnly" json:"index_only,omitempty"`
+ SmallOps *bool `protobuf:"varint,10,opt,name=small_ops,json=smallOps" json:"small_ops,omitempty"`
+ CompiledQuery *CompiledQuery `protobuf:"bytes,5,opt,name=compiled_query,json=compiledQuery" json:"compiled_query,omitempty"`
+ CompiledCursor *CompiledCursor `protobuf:"bytes,6,opt,name=compiled_cursor,json=compiledCursor" json:"compiled_cursor,omitempty"`
+ Index []*CompositeIndex `protobuf:"bytes,8,rep,name=index" json:"index,omitempty"`
+ Version []int64 `protobuf:"varint,11,rep,name=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *QueryResult) Reset() { *m = QueryResult{} }
+func (m *QueryResult) String() string { return proto.CompactTextString(m) }
+func (*QueryResult) ProtoMessage() {}
+func (*QueryResult) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{30}
+}
+func (m *QueryResult) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_QueryResult.Unmarshal(m, b)
+}
+func (m *QueryResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_QueryResult.Marshal(b, m, deterministic)
+}
+func (dst *QueryResult) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryResult.Merge(dst, src)
+}
+func (m *QueryResult) XXX_Size() int {
+ return xxx_messageInfo_QueryResult.Size(m)
+}
+func (m *QueryResult) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QueryResult proto.InternalMessageInfo
+
+func (m *QueryResult) GetCursor() *Cursor {
+ if m != nil {
+ return m.Cursor
+ }
+ return nil
+}
+
+func (m *QueryResult) GetResult() []*EntityProto {
+ if m != nil {
+ return m.Result
+ }
+ return nil
+}
+
+func (m *QueryResult) GetSkippedResults() int32 {
+ if m != nil && m.SkippedResults != nil {
+ return *m.SkippedResults
+ }
+ return 0
+}
+
+func (m *QueryResult) GetMoreResults() bool {
+ if m != nil && m.MoreResults != nil {
+ return *m.MoreResults
+ }
+ return false
+}
+
+func (m *QueryResult) GetKeysOnly() bool {
+ if m != nil && m.KeysOnly != nil {
+ return *m.KeysOnly
+ }
+ return false
+}
+
+func (m *QueryResult) GetIndexOnly() bool {
+ if m != nil && m.IndexOnly != nil {
+ return *m.IndexOnly
+ }
+ return false
+}
+
+func (m *QueryResult) GetSmallOps() bool {
+ if m != nil && m.SmallOps != nil {
+ return *m.SmallOps
+ }
+ return false
+}
+
+func (m *QueryResult) GetCompiledQuery() *CompiledQuery {
+ if m != nil {
+ return m.CompiledQuery
+ }
+ return nil
+}
+
+func (m *QueryResult) GetCompiledCursor() *CompiledCursor {
+ if m != nil {
+ return m.CompiledCursor
+ }
+ return nil
+}
+
+func (m *QueryResult) GetIndex() []*CompositeIndex {
+ if m != nil {
+ return m.Index
+ }
+ return nil
+}
+
+func (m *QueryResult) GetVersion() []int64 {
+ if m != nil {
+ return m.Version
+ }
+ return nil
+}
+
+type AllocateIdsRequest struct {
+ Header *InternalHeader `protobuf:"bytes,4,opt,name=header" json:"header,omitempty"`
+ ModelKey *Reference `protobuf:"bytes,1,opt,name=model_key,json=modelKey" json:"model_key,omitempty"`
+ Size *int64 `protobuf:"varint,2,opt,name=size" json:"size,omitempty"`
+ Max *int64 `protobuf:"varint,3,opt,name=max" json:"max,omitempty"`
+ Reserve []*Reference `protobuf:"bytes,5,rep,name=reserve" json:"reserve,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AllocateIdsRequest) Reset() { *m = AllocateIdsRequest{} }
+func (m *AllocateIdsRequest) String() string { return proto.CompactTextString(m) }
+func (*AllocateIdsRequest) ProtoMessage() {}
+func (*AllocateIdsRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{31}
+}
+func (m *AllocateIdsRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AllocateIdsRequest.Unmarshal(m, b)
+}
+func (m *AllocateIdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AllocateIdsRequest.Marshal(b, m, deterministic)
+}
+func (dst *AllocateIdsRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AllocateIdsRequest.Merge(dst, src)
+}
+func (m *AllocateIdsRequest) XXX_Size() int {
+ return xxx_messageInfo_AllocateIdsRequest.Size(m)
+}
+func (m *AllocateIdsRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_AllocateIdsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AllocateIdsRequest proto.InternalMessageInfo
+
+func (m *AllocateIdsRequest) GetHeader() *InternalHeader {
+ if m != nil {
+ return m.Header
+ }
+ return nil
+}
+
+func (m *AllocateIdsRequest) GetModelKey() *Reference {
+ if m != nil {
+ return m.ModelKey
+ }
+ return nil
+}
+
+func (m *AllocateIdsRequest) GetSize() int64 {
+ if m != nil && m.Size != nil {
+ return *m.Size
+ }
+ return 0
+}
+
+func (m *AllocateIdsRequest) GetMax() int64 {
+ if m != nil && m.Max != nil {
+ return *m.Max
+ }
+ return 0
+}
+
+func (m *AllocateIdsRequest) GetReserve() []*Reference {
+ if m != nil {
+ return m.Reserve
+ }
+ return nil
+}
+
+type AllocateIdsResponse struct {
+ Start *int64 `protobuf:"varint,1,req,name=start" json:"start,omitempty"`
+ End *int64 `protobuf:"varint,2,req,name=end" json:"end,omitempty"`
+ Cost *Cost `protobuf:"bytes,3,opt,name=cost" json:"cost,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AllocateIdsResponse) Reset() { *m = AllocateIdsResponse{} }
+func (m *AllocateIdsResponse) String() string { return proto.CompactTextString(m) }
+func (*AllocateIdsResponse) ProtoMessage() {}
+func (*AllocateIdsResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{32}
+}
+func (m *AllocateIdsResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AllocateIdsResponse.Unmarshal(m, b)
+}
+func (m *AllocateIdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AllocateIdsResponse.Marshal(b, m, deterministic)
+}
+func (dst *AllocateIdsResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AllocateIdsResponse.Merge(dst, src)
+}
+func (m *AllocateIdsResponse) XXX_Size() int {
+ return xxx_messageInfo_AllocateIdsResponse.Size(m)
+}
+func (m *AllocateIdsResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_AllocateIdsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AllocateIdsResponse proto.InternalMessageInfo
+
+func (m *AllocateIdsResponse) GetStart() int64 {
+ if m != nil && m.Start != nil {
+ return *m.Start
+ }
+ return 0
+}
+
+func (m *AllocateIdsResponse) GetEnd() int64 {
+ if m != nil && m.End != nil {
+ return *m.End
+ }
+ return 0
+}
+
+func (m *AllocateIdsResponse) GetCost() *Cost {
+ if m != nil {
+ return m.Cost
+ }
+ return nil
+}
+
+type CompositeIndices struct {
+ Index []*CompositeIndex `protobuf:"bytes,1,rep,name=index" json:"index,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CompositeIndices) Reset() { *m = CompositeIndices{} }
+func (m *CompositeIndices) String() string { return proto.CompactTextString(m) }
+func (*CompositeIndices) ProtoMessage() {}
+func (*CompositeIndices) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{33}
+}
+func (m *CompositeIndices) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CompositeIndices.Unmarshal(m, b)
+}
+func (m *CompositeIndices) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CompositeIndices.Marshal(b, m, deterministic)
+}
+func (dst *CompositeIndices) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CompositeIndices.Merge(dst, src)
+}
+func (m *CompositeIndices) XXX_Size() int {
+ return xxx_messageInfo_CompositeIndices.Size(m)
+}
+func (m *CompositeIndices) XXX_DiscardUnknown() {
+ xxx_messageInfo_CompositeIndices.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompositeIndices proto.InternalMessageInfo
+
+func (m *CompositeIndices) GetIndex() []*CompositeIndex {
+ if m != nil {
+ return m.Index
+ }
+ return nil
+}
+
+type AddActionsRequest struct {
+ Header *InternalHeader `protobuf:"bytes,3,opt,name=header" json:"header,omitempty"`
+ Transaction *Transaction `protobuf:"bytes,1,req,name=transaction" json:"transaction,omitempty"`
+ Action []*Action `protobuf:"bytes,2,rep,name=action" json:"action,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AddActionsRequest) Reset() { *m = AddActionsRequest{} }
+func (m *AddActionsRequest) String() string { return proto.CompactTextString(m) }
+func (*AddActionsRequest) ProtoMessage() {}
+func (*AddActionsRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{34}
+}
+func (m *AddActionsRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AddActionsRequest.Unmarshal(m, b)
+}
+func (m *AddActionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AddActionsRequest.Marshal(b, m, deterministic)
+}
+func (dst *AddActionsRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AddActionsRequest.Merge(dst, src)
+}
+func (m *AddActionsRequest) XXX_Size() int {
+ return xxx_messageInfo_AddActionsRequest.Size(m)
+}
+func (m *AddActionsRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_AddActionsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AddActionsRequest proto.InternalMessageInfo
+
+func (m *AddActionsRequest) GetHeader() *InternalHeader {
+ if m != nil {
+ return m.Header
+ }
+ return nil
+}
+
+func (m *AddActionsRequest) GetTransaction() *Transaction {
+ if m != nil {
+ return m.Transaction
+ }
+ return nil
+}
+
+func (m *AddActionsRequest) GetAction() []*Action {
+ if m != nil {
+ return m.Action
+ }
+ return nil
+}
+
+type AddActionsResponse struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *AddActionsResponse) Reset() { *m = AddActionsResponse{} }
+func (m *AddActionsResponse) String() string { return proto.CompactTextString(m) }
+func (*AddActionsResponse) ProtoMessage() {}
+func (*AddActionsResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{35}
+}
+func (m *AddActionsResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_AddActionsResponse.Unmarshal(m, b)
+}
+func (m *AddActionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_AddActionsResponse.Marshal(b, m, deterministic)
+}
+func (dst *AddActionsResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_AddActionsResponse.Merge(dst, src)
+}
+func (m *AddActionsResponse) XXX_Size() int {
+ return xxx_messageInfo_AddActionsResponse.Size(m)
+}
+func (m *AddActionsResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_AddActionsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AddActionsResponse proto.InternalMessageInfo
+
+type BeginTransactionRequest struct {
+ Header *InternalHeader `protobuf:"bytes,3,opt,name=header" json:"header,omitempty"`
+ App *string `protobuf:"bytes,1,req,name=app" json:"app,omitempty"`
+ AllowMultipleEg *bool `protobuf:"varint,2,opt,name=allow_multiple_eg,json=allowMultipleEg,def=0" json:"allow_multiple_eg,omitempty"`
+ DatabaseId *string `protobuf:"bytes,4,opt,name=database_id,json=databaseId" json:"database_id,omitempty"`
+ Mode *BeginTransactionRequest_TransactionMode `protobuf:"varint,5,opt,name=mode,enum=appengine.BeginTransactionRequest_TransactionMode,def=0" json:"mode,omitempty"`
+ PreviousTransaction *Transaction `protobuf:"bytes,7,opt,name=previous_transaction,json=previousTransaction" json:"previous_transaction,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} }
+func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) }
+func (*BeginTransactionRequest) ProtoMessage() {}
+func (*BeginTransactionRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{36}
+}
+func (m *BeginTransactionRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_BeginTransactionRequest.Unmarshal(m, b)
+}
+func (m *BeginTransactionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_BeginTransactionRequest.Marshal(b, m, deterministic)
+}
+func (dst *BeginTransactionRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_BeginTransactionRequest.Merge(dst, src)
+}
+func (m *BeginTransactionRequest) XXX_Size() int {
+ return xxx_messageInfo_BeginTransactionRequest.Size(m)
+}
+func (m *BeginTransactionRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_BeginTransactionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BeginTransactionRequest proto.InternalMessageInfo
+
+const Default_BeginTransactionRequest_AllowMultipleEg bool = false
+const Default_BeginTransactionRequest_Mode BeginTransactionRequest_TransactionMode = BeginTransactionRequest_UNKNOWN
+
+func (m *BeginTransactionRequest) GetHeader() *InternalHeader {
+ if m != nil {
+ return m.Header
+ }
+ return nil
+}
+
+func (m *BeginTransactionRequest) GetApp() string {
+ if m != nil && m.App != nil {
+ return *m.App
+ }
+ return ""
+}
+
+func (m *BeginTransactionRequest) GetAllowMultipleEg() bool {
+ if m != nil && m.AllowMultipleEg != nil {
+ return *m.AllowMultipleEg
+ }
+ return Default_BeginTransactionRequest_AllowMultipleEg
+}
+
+func (m *BeginTransactionRequest) GetDatabaseId() string {
+ if m != nil && m.DatabaseId != nil {
+ return *m.DatabaseId
+ }
+ return ""
+}
+
+func (m *BeginTransactionRequest) GetMode() BeginTransactionRequest_TransactionMode {
+ if m != nil && m.Mode != nil {
+ return *m.Mode
+ }
+ return Default_BeginTransactionRequest_Mode
+}
+
+func (m *BeginTransactionRequest) GetPreviousTransaction() *Transaction {
+ if m != nil {
+ return m.PreviousTransaction
+ }
+ return nil
+}
+
+type CommitResponse struct {
+ Cost *Cost `protobuf:"bytes,1,opt,name=cost" json:"cost,omitempty"`
+ Version []*CommitResponse_Version `protobuf:"group,3,rep,name=Version,json=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CommitResponse) Reset() { *m = CommitResponse{} }
+func (m *CommitResponse) String() string { return proto.CompactTextString(m) }
+func (*CommitResponse) ProtoMessage() {}
+func (*CommitResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{37}
+}
+func (m *CommitResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CommitResponse.Unmarshal(m, b)
+}
+func (m *CommitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CommitResponse.Marshal(b, m, deterministic)
+}
+func (dst *CommitResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommitResponse.Merge(dst, src)
+}
+func (m *CommitResponse) XXX_Size() int {
+ return xxx_messageInfo_CommitResponse.Size(m)
+}
+func (m *CommitResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommitResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommitResponse proto.InternalMessageInfo
+
+func (m *CommitResponse) GetCost() *Cost {
+ if m != nil {
+ return m.Cost
+ }
+ return nil
+}
+
+func (m *CommitResponse) GetVersion() []*CommitResponse_Version {
+ if m != nil {
+ return m.Version
+ }
+ return nil
+}
+
+type CommitResponse_Version struct {
+ RootEntityKey *Reference `protobuf:"bytes,4,req,name=root_entity_key,json=rootEntityKey" json:"root_entity_key,omitempty"`
+ Version *int64 `protobuf:"varint,5,req,name=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CommitResponse_Version) Reset() { *m = CommitResponse_Version{} }
+func (m *CommitResponse_Version) String() string { return proto.CompactTextString(m) }
+func (*CommitResponse_Version) ProtoMessage() {}
+func (*CommitResponse_Version) Descriptor() ([]byte, []int) {
+ return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{37, 0}
+}
+func (m *CommitResponse_Version) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CommitResponse_Version.Unmarshal(m, b)
+}
+func (m *CommitResponse_Version) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CommitResponse_Version.Marshal(b, m, deterministic)
+}
+func (dst *CommitResponse_Version) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommitResponse_Version.Merge(dst, src)
+}
+func (m *CommitResponse_Version) XXX_Size() int {
+ return xxx_messageInfo_CommitResponse_Version.Size(m)
+}
+func (m *CommitResponse_Version) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommitResponse_Version.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommitResponse_Version proto.InternalMessageInfo
+
+func (m *CommitResponse_Version) GetRootEntityKey() *Reference {
+ if m != nil {
+ return m.RootEntityKey
+ }
+ return nil
+}
+
+func (m *CommitResponse_Version) GetVersion() int64 {
+ if m != nil && m.Version != nil {
+ return *m.Version
+ }
+ return 0
+}
+
+func init() {
+ proto.RegisterType((*Action)(nil), "appengine.Action")
+ proto.RegisterType((*PropertyValue)(nil), "appengine.PropertyValue")
+ proto.RegisterType((*PropertyValue_PointValue)(nil), "appengine.PropertyValue.PointValue")
+ proto.RegisterType((*PropertyValue_UserValue)(nil), "appengine.PropertyValue.UserValue")
+ proto.RegisterType((*PropertyValue_ReferenceValue)(nil), "appengine.PropertyValue.ReferenceValue")
+ proto.RegisterType((*PropertyValue_ReferenceValue_PathElement)(nil), "appengine.PropertyValue.ReferenceValue.PathElement")
+ proto.RegisterType((*Property)(nil), "appengine.Property")
+ proto.RegisterType((*Path)(nil), "appengine.Path")
+ proto.RegisterType((*Path_Element)(nil), "appengine.Path.Element")
+ proto.RegisterType((*Reference)(nil), "appengine.Reference")
+ proto.RegisterType((*User)(nil), "appengine.User")
+ proto.RegisterType((*EntityProto)(nil), "appengine.EntityProto")
+ proto.RegisterType((*CompositeProperty)(nil), "appengine.CompositeProperty")
+ proto.RegisterType((*Index)(nil), "appengine.Index")
+ proto.RegisterType((*Index_Property)(nil), "appengine.Index.Property")
+ proto.RegisterType((*CompositeIndex)(nil), "appengine.CompositeIndex")
+ proto.RegisterType((*IndexPostfix)(nil), "appengine.IndexPostfix")
+ proto.RegisterType((*IndexPostfix_IndexValue)(nil), "appengine.IndexPostfix.IndexValue")
+ proto.RegisterType((*IndexPosition)(nil), "appengine.IndexPosition")
+ proto.RegisterType((*Snapshot)(nil), "appengine.Snapshot")
+ proto.RegisterType((*InternalHeader)(nil), "appengine.InternalHeader")
+ proto.RegisterType((*Transaction)(nil), "appengine.Transaction")
+ proto.RegisterType((*Query)(nil), "appengine.Query")
+ proto.RegisterType((*Query_Filter)(nil), "appengine.Query.Filter")
+ proto.RegisterType((*Query_Order)(nil), "appengine.Query.Order")
+ proto.RegisterType((*CompiledQuery)(nil), "appengine.CompiledQuery")
+ proto.RegisterType((*CompiledQuery_PrimaryScan)(nil), "appengine.CompiledQuery.PrimaryScan")
+ proto.RegisterType((*CompiledQuery_MergeJoinScan)(nil), "appengine.CompiledQuery.MergeJoinScan")
+ proto.RegisterType((*CompiledQuery_EntityFilter)(nil), "appengine.CompiledQuery.EntityFilter")
+ proto.RegisterType((*CompiledCursor)(nil), "appengine.CompiledCursor")
+ proto.RegisterType((*CompiledCursor_Position)(nil), "appengine.CompiledCursor.Position")
+ proto.RegisterType((*CompiledCursor_Position_IndexValue)(nil), "appengine.CompiledCursor.Position.IndexValue")
+ proto.RegisterType((*Cursor)(nil), "appengine.Cursor")
+ proto.RegisterType((*Error)(nil), "appengine.Error")
+ proto.RegisterType((*Cost)(nil), "appengine.Cost")
+ proto.RegisterType((*Cost_CommitCost)(nil), "appengine.Cost.CommitCost")
+ proto.RegisterType((*GetRequest)(nil), "appengine.GetRequest")
+ proto.RegisterType((*GetResponse)(nil), "appengine.GetResponse")
+ proto.RegisterType((*GetResponse_Entity)(nil), "appengine.GetResponse.Entity")
+ proto.RegisterType((*PutRequest)(nil), "appengine.PutRequest")
+ proto.RegisterType((*PutResponse)(nil), "appengine.PutResponse")
+ proto.RegisterType((*TouchRequest)(nil), "appengine.TouchRequest")
+ proto.RegisterType((*TouchResponse)(nil), "appengine.TouchResponse")
+ proto.RegisterType((*DeleteRequest)(nil), "appengine.DeleteRequest")
+ proto.RegisterType((*DeleteResponse)(nil), "appengine.DeleteResponse")
+ proto.RegisterType((*NextRequest)(nil), "appengine.NextRequest")
+ proto.RegisterType((*QueryResult)(nil), "appengine.QueryResult")
+ proto.RegisterType((*AllocateIdsRequest)(nil), "appengine.AllocateIdsRequest")
+ proto.RegisterType((*AllocateIdsResponse)(nil), "appengine.AllocateIdsResponse")
+ proto.RegisterType((*CompositeIndices)(nil), "appengine.CompositeIndices")
+ proto.RegisterType((*AddActionsRequest)(nil), "appengine.AddActionsRequest")
+ proto.RegisterType((*AddActionsResponse)(nil), "appengine.AddActionsResponse")
+ proto.RegisterType((*BeginTransactionRequest)(nil), "appengine.BeginTransactionRequest")
+ proto.RegisterType((*CommitResponse)(nil), "appengine.CommitResponse")
+ proto.RegisterType((*CommitResponse_Version)(nil), "appengine.CommitResponse.Version")
+}
+
+func init() {
+ proto.RegisterFile("google.golang.org/appengine/internal/datastore/datastore_v3.proto", fileDescriptor_datastore_v3_83b17b80c34f6179)
+}
+
+var fileDescriptor_datastore_v3_83b17b80c34f6179 = []byte{
+ // 4156 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x73, 0xe3, 0x46,
+ 0x76, 0x37, 0xc1, 0xef, 0x47, 0x89, 0x82, 0x5a, 0xf3, 0xc1, 0xa1, 0x3f, 0x46, 0xc6, 0xac, 0x6d,
+ 0xd9, 0x6b, 0x73, 0x6c, 0xf9, 0x23, 0x5b, 0x4a, 0x76, 0x1d, 0x4a, 0xc4, 0x68, 0x90, 0xa1, 0x48,
+ 0xb9, 0x09, 0xd9, 0x9e, 0x5c, 0x50, 0x18, 0xa2, 0x29, 0x21, 0x43, 0x02, 0x30, 0x00, 0x6a, 0x46,
+ 0x93, 0xe4, 0x90, 0x4b, 0x2a, 0x55, 0x5b, 0xa9, 0x1c, 0x92, 0x4a, 0x25, 0xf9, 0x07, 0x72, 0xc8,
+ 0x39, 0x95, 0xaa, 0x54, 0xf6, 0x98, 0x5b, 0x0e, 0x7b, 0xc9, 0x31, 0x95, 0x73, 0xf2, 0x27, 0x24,
+ 0x39, 0xa4, 0xfa, 0x75, 0x03, 0x02, 0x28, 0x4a, 0x23, 0x6d, 0xf6, 0x90, 0x13, 0xd1, 0xef, 0xfd,
+ 0xba, 0xf1, 0xfa, 0xf5, 0xfb, 0x6c, 0x10, 0xba, 0xc7, 0xbe, 0x7f, 0x3c, 0x65, 0x9d, 0x63, 0x7f,
+ 0x6a, 0x7b, 0xc7, 0x1d, 0x3f, 0x3c, 0x7e, 0x68, 0x07, 0x01, 0xf3, 0x8e, 0x5d, 0x8f, 0x3d, 0x74,
+ 0xbd, 0x98, 0x85, 0x9e, 0x3d, 0x7d, 0xe8, 0xd8, 0xb1, 0x1d, 0xc5, 0x7e, 0xc8, 0xce, 0x9f, 0xac,
+ 0xd3, 0xcf, 0x3b, 0x41, 0xe8, 0xc7, 0x3e, 0xa9, 0xa7, 0x13, 0xb4, 0x1a, 0x54, 0xba, 0xe3, 0xd8,
+ 0xf5, 0x3d, 0xed, 0x1f, 0x2b, 0xb0, 0x7a, 0x18, 0xfa, 0x01, 0x0b, 0xe3, 0xb3, 0x6f, 0xed, 0xe9,
+ 0x9c, 0x91, 0x77, 0x00, 0x5c, 0x2f, 0xfe, 0xea, 0x0b, 0x1c, 0xb5, 0x0a, 0x9b, 0x85, 0xad, 0x22,
+ 0xcd, 0x50, 0x88, 0x06, 0x2b, 0xcf, 0x7c, 0x7f, 0xca, 0x6c, 0x4f, 0x20, 0x94, 0xcd, 0xc2, 0x56,
+ 0x8d, 0xe6, 0x68, 0x64, 0x13, 0x1a, 0x51, 0x1c, 0xba, 0xde, 0xb1, 0x80, 0x14, 0x37, 0x0b, 0x5b,
+ 0x75, 0x9a, 0x25, 0x71, 0x84, 0xe3, 0xcf, 0x9f, 0x4d, 0x99, 0x40, 0x94, 0x36, 0x0b, 0x5b, 0x05,
+ 0x9a, 0x25, 0x91, 0x3d, 0x80, 0xc0, 0x77, 0xbd, 0xf8, 0x14, 0x01, 0xe5, 0xcd, 0xc2, 0x16, 0x6c,
+ 0x3f, 0xe8, 0xa4, 0x7b, 0xe8, 0xe4, 0xa4, 0xee, 0x1c, 0x72, 0x28, 0x3e, 0xd2, 0xcc, 0x34, 0xf2,
+ 0xdb, 0x50, 0x9f, 0x47, 0x2c, 0x14, 0x6b, 0xd4, 0x70, 0x0d, 0xed, 0xd2, 0x35, 0x8e, 0x22, 0x16,
+ 0x8a, 0x25, 0xce, 0x27, 0x91, 0x21, 0x34, 0x43, 0x36, 0x61, 0x21, 0xf3, 0xc6, 0x4c, 0x2c, 0xb3,
+ 0x82, 0xcb, 0x7c, 0x70, 0xe9, 0x32, 0x34, 0x81, 0x8b, 0xb5, 0x16, 0xa6, 0xb7, 0xb7, 0x00, 0xce,
+ 0x85, 0x25, 0x2b, 0x50, 0x78, 0xd9, 0xaa, 0x6c, 0x2a, 0x5b, 0x05, 0x5a, 0x78, 0xc9, 0x47, 0x67,
+ 0xad, 0xaa, 0x18, 0x9d, 0xb5, 0xff, 0xa9, 0x00, 0xf5, 0x54, 0x26, 0x72, 0x0b, 0xca, 0x6c, 0x66,
+ 0xbb, 0xd3, 0x56, 0x7d, 0x53, 0xd9, 0xaa, 0x53, 0x31, 0x20, 0xf7, 0xa1, 0x61, 0xcf, 0xe3, 0x13,
+ 0xcb, 0xf1, 0x67, 0xb6, 0xeb, 0xb5, 0x00, 0x79, 0xc0, 0x49, 0x3d, 0xa4, 0x90, 0x36, 0xd4, 0x3c,
+ 0x77, 0xfc, 0xdc, 0xb3, 0x67, 0xac, 0xd5, 0xc0, 0x73, 0x48, 0xc7, 0xe4, 0x13, 0x20, 0x13, 0xe6,
+ 0xb0, 0xd0, 0x8e, 0x99, 0x63, 0xb9, 0x0e, 0xf3, 0x62, 0x37, 0x3e, 0x6b, 0xdd, 0x46, 0xd4, 0x7a,
+ 0xca, 0x31, 0x24, 0x23, 0x0f, 0x0f, 0x42, 0xff, 0xd4, 0x75, 0x58, 0xd8, 0xba, 0xb3, 0x00, 0x3f,
+ 0x94, 0x8c, 0xf6, 0xbf, 0x17, 0xa0, 0x99, 0xd7, 0x05, 0x51, 0xa1, 0x68, 0x07, 0x41, 0x6b, 0x15,
+ 0xa5, 0xe4, 0x8f, 0xe4, 0x6d, 0x00, 0x2e, 0x8a, 0x15, 0x05, 0xf6, 0x98, 0xb5, 0x6e, 0xe1, 0x5a,
+ 0x75, 0x4e, 0x19, 0x71, 0x02, 0x39, 0x82, 0x46, 0x60, 0xc7, 0x27, 0x6c, 0xca, 0x66, 0xcc, 0x8b,
+ 0x5b, 0xcd, 0xcd, 0xe2, 0x16, 0x6c, 0x7f, 0x7e, 0x4d, 0xd5, 0x77, 0x0e, 0xed, 0xf8, 0x44, 0x17,
+ 0x53, 0x69, 0x76, 0x9d, 0xb6, 0x0e, 0x8d, 0x0c, 0x8f, 0x10, 0x28, 0xc5, 0x67, 0x01, 0x6b, 0xad,
+ 0xa1, 0x5c, 0xf8, 0x4c, 0x9a, 0xa0, 0xb8, 0x4e, 0x4b, 0x45, 0xf3, 0x57, 0x5c, 0x87, 0x63, 0x50,
+ 0x87, 0xeb, 0x28, 0x22, 0x3e, 0x6b, 0xff, 0x51, 0x86, 0x5a, 0x22, 0x00, 0xe9, 0x42, 0x75, 0xc6,
+ 0x6c, 0xcf, 0xf5, 0x8e, 0xd1, 0x69, 0x9a, 0xdb, 0x6f, 0x2e, 0x11, 0xb3, 0x73, 0x20, 0x20, 0x3b,
+ 0x30, 0x18, 0x5a, 0x07, 0x7a, 0x77, 0x60, 0x0c, 0xf6, 0x69, 0x32, 0x8f, 0x1f, 0xa6, 0x7c, 0xb4,
+ 0xe6, 0xa1, 0x8b, 0x9e, 0x55, 0xa7, 0x20, 0x49, 0x47, 0xa1, 0x9b, 0x0a, 0x51, 0x14, 0x82, 0xe2,
+ 0x21, 0x76, 0xa0, 0x9c, 0xb8, 0x88, 0xb2, 0xd5, 0xd8, 0x6e, 0x5d, 0xa6, 0x1c, 0x2a, 0x60, 0xdc,
+ 0x20, 0x66, 0xf3, 0x69, 0xec, 0x06, 0x53, 0xee, 0x76, 0xca, 0x56, 0x8d, 0xa6, 0x63, 0xf2, 0x1e,
+ 0x40, 0xc4, 0xec, 0x70, 0x7c, 0x62, 0x3f, 0x9b, 0xb2, 0x56, 0x85, 0x7b, 0xf6, 0x4e, 0x79, 0x62,
+ 0x4f, 0x23, 0x46, 0x33, 0x0c, 0x62, 0xc3, 0xdd, 0x49, 0x1c, 0x59, 0xb1, 0xff, 0x9c, 0x79, 0xee,
+ 0x2b, 0x9b, 0x07, 0x12, 0xcb, 0x0f, 0xf8, 0x0f, 0xfa, 0x58, 0x73, 0xfb, 0xc3, 0x65, 0x5b, 0x7f,
+ 0x14, 0x47, 0x66, 0x66, 0xc6, 0x10, 0x27, 0xd0, 0xdb, 0x93, 0x65, 0x64, 0xd2, 0x86, 0xca, 0xd4,
+ 0x1f, 0xdb, 0x53, 0xd6, 0xaa, 0x73, 0x2d, 0xec, 0x28, 0xcc, 0xa3, 0x92, 0xa2, 0xfd, 0xb3, 0x02,
+ 0x55, 0xa9, 0x47, 0xd2, 0x84, 0x8c, 0x26, 0xd5, 0x37, 0x48, 0x0d, 0x4a, 0xbb, 0xfd, 0xe1, 0xae,
+ 0xda, 0xe4, 0x4f, 0xa6, 0xfe, 0xbd, 0xa9, 0xae, 0x71, 0xcc, 0xee, 0x53, 0x53, 0x1f, 0x99, 0x94,
+ 0x63, 0x54, 0xb2, 0x0e, 0xab, 0x5d, 0x73, 0x78, 0x60, 0xed, 0x75, 0x4d, 0x7d, 0x7f, 0x48, 0x9f,
+ 0xaa, 0x05, 0xb2, 0x0a, 0x75, 0x24, 0xf5, 0x8d, 0xc1, 0x13, 0x55, 0xe1, 0x33, 0x70, 0x68, 0x1a,
+ 0x66, 0x5f, 0x57, 0x8b, 0x44, 0x85, 0x15, 0x31, 0x63, 0x38, 0x30, 0xf5, 0x81, 0xa9, 0x96, 0x52,
+ 0xca, 0xe8, 0xe8, 0xe0, 0xa0, 0x4b, 0x9f, 0xaa, 0x65, 0xb2, 0x06, 0x0d, 0xa4, 0x74, 0x8f, 0xcc,
+ 0xc7, 0x43, 0xaa, 0x56, 0x48, 0x03, 0xaa, 0xfb, 0x3d, 0xeb, 0xbb, 0xc7, 0xfa, 0x40, 0xad, 0x92,
+ 0x15, 0xa8, 0xed, 0xf7, 0x2c, 0xfd, 0xa0, 0x6b, 0xf4, 0xd5, 0x1a, 0x9f, 0xbd, 0xaf, 0x0f, 0xe9,
+ 0x68, 0x64, 0x1d, 0x0e, 0x8d, 0x81, 0xa9, 0xd6, 0x49, 0x1d, 0xca, 0xfb, 0x3d, 0xcb, 0x38, 0x50,
+ 0x81, 0x10, 0x68, 0xee, 0xf7, 0xac, 0xc3, 0xc7, 0xc3, 0x81, 0x3e, 0x38, 0x3a, 0xd8, 0xd5, 0xa9,
+ 0xda, 0x20, 0xb7, 0x40, 0xe5, 0xb4, 0xe1, 0xc8, 0xec, 0xf6, 0xbb, 0xbd, 0x1e, 0xd5, 0x47, 0x23,
+ 0x75, 0x85, 0x4b, 0xbd, 0xdf, 0xb3, 0x68, 0xd7, 0xe4, 0xfb, 0x5a, 0xe5, 0x2f, 0xe4, 0x7b, 0x7f,
+ 0xa2, 0x3f, 0x55, 0xd7, 0xf9, 0x2b, 0xf4, 0x81, 0x69, 0x98, 0x4f, 0xad, 0x43, 0x3a, 0x34, 0x87,
+ 0xea, 0x06, 0x17, 0xd0, 0x18, 0xf4, 0xf4, 0xef, 0xad, 0x6f, 0xbb, 0xfd, 0x23, 0x5d, 0x25, 0xda,
+ 0x8f, 0xe1, 0xf6, 0xd2, 0x33, 0xe1, 0xaa, 0x7b, 0x6c, 0x1e, 0xf4, 0xd5, 0x02, 0x7f, 0xe2, 0x9b,
+ 0x52, 0x15, 0xed, 0x0f, 0xa0, 0xc4, 0x5d, 0x86, 0x7c, 0x06, 0xd5, 0xc4, 0x1b, 0x0b, 0xe8, 0x8d,
+ 0x77, 0xb3, 0x67, 0x6d, 0xc7, 0x27, 0x9d, 0xc4, 0xe3, 0x12, 0x5c, 0xbb, 0x0b, 0xd5, 0x45, 0x4f,
+ 0x53, 0x2e, 0x78, 0x5a, 0xf1, 0x82, 0xa7, 0x95, 0x32, 0x9e, 0x66, 0x43, 0x3d, 0xf5, 0xed, 0x9b,
+ 0x47, 0x91, 0x07, 0x50, 0xe2, 0xde, 0xdf, 0x6a, 0xa2, 0x87, 0xac, 0x2d, 0x08, 0x4c, 0x91, 0xa9,
+ 0xfd, 0x43, 0x01, 0x4a, 0x3c, 0xda, 0x9e, 0x07, 0xda, 0xc2, 0x15, 0x81, 0x56, 0xb9, 0x32, 0xd0,
+ 0x16, 0xaf, 0x15, 0x68, 0x2b, 0x37, 0x0b, 0xb4, 0xd5, 0x4b, 0x02, 0xad, 0xf6, 0x67, 0x45, 0x68,
+ 0xe8, 0x38, 0xf3, 0x10, 0x13, 0xfd, 0xfb, 0x50, 0x7c, 0xce, 0xce, 0x50, 0x3f, 0x8d, 0xed, 0x5b,
+ 0x99, 0xdd, 0xa6, 0x2a, 0xa4, 0x1c, 0x40, 0xb6, 0x61, 0x45, 0xbc, 0xd0, 0x3a, 0x0e, 0xfd, 0x79,
+ 0xd0, 0x52, 0x97, 0xab, 0xa7, 0x21, 0x40, 0xfb, 0x1c, 0x43, 0xde, 0x83, 0xb2, 0xff, 0xc2, 0x63,
+ 0x21, 0xc6, 0xc1, 0x3c, 0x98, 0x2b, 0x8f, 0x0a, 0x2e, 0x79, 0x08, 0xa5, 0xe7, 0xae, 0xe7, 0xe0,
+ 0x19, 0xe6, 0x23, 0x61, 0x46, 0xd0, 0xce, 0x13, 0xd7, 0x73, 0x28, 0x02, 0xc9, 0x3d, 0xa8, 0xf1,
+ 0x5f, 0x8c, 0x7b, 0x65, 0xdc, 0x68, 0x95, 0x8f, 0x79, 0xd0, 0x7b, 0x08, 0xb5, 0x40, 0xc6, 0x10,
+ 0x4c, 0x00, 0x8d, 0xed, 0x8d, 0x25, 0xe1, 0x85, 0xa6, 0x20, 0xf2, 0x15, 0xac, 0x84, 0xf6, 0x0b,
+ 0x2b, 0x9d, 0xb4, 0x76, 0xf9, 0xa4, 0x46, 0x68, 0xbf, 0x48, 0x23, 0x38, 0x81, 0x52, 0x68, 0x7b,
+ 0xcf, 0x5b, 0x64, 0xb3, 0xb0, 0x55, 0xa6, 0xf8, 0xac, 0x7d, 0x01, 0x25, 0x2e, 0x25, 0x8f, 0x08,
+ 0xfb, 0x3d, 0xf4, 0xff, 0xee, 0x9e, 0xa9, 0x16, 0x12, 0x7f, 0xfe, 0x96, 0x47, 0x03, 0x45, 0x72,
+ 0x0f, 0xf4, 0xd1, 0xa8, 0xbb, 0xaf, 0xab, 0x45, 0xad, 0x07, 0xeb, 0x7b, 0xfe, 0x2c, 0xf0, 0x23,
+ 0x37, 0x66, 0xe9, 0xf2, 0xf7, 0xa0, 0xe6, 0x7a, 0x0e, 0x7b, 0x69, 0xb9, 0x0e, 0x9a, 0x56, 0x91,
+ 0x56, 0x71, 0x6c, 0x38, 0xdc, 0xe4, 0x4e, 0x65, 0x31, 0x55, 0xe4, 0x26, 0x87, 0x03, 0xed, 0x2f,
+ 0x15, 0x28, 0x1b, 0x1c, 0xc1, 0x8d, 0x4f, 0x9e, 0x14, 0x7a, 0x8f, 0x30, 0x4c, 0x10, 0x24, 0x93,
+ 0xfb, 0x50, 0x1b, 0x6a, 0xb6, 0x37, 0x66, 0xbc, 0xe2, 0xc3, 0x3c, 0x50, 0xa3, 0xe9, 0x98, 0x7c,
+ 0x99, 0xd1, 0x9f, 0x82, 0x2e, 0x7b, 0x2f, 0xa3, 0x0a, 0x7c, 0xc1, 0x12, 0x2d, 0xb6, 0xff, 0xaa,
+ 0x90, 0x49, 0x6e, 0xcb, 0x12, 0x4f, 0x1f, 0xea, 0x8e, 0x1b, 0x32, 0xac, 0x23, 0xe5, 0x41, 0x3f,
+ 0xb8, 0x74, 0xe1, 0x4e, 0x2f, 0x81, 0xee, 0xd4, 0xbb, 0xa3, 0x3d, 0x7d, 0xd0, 0xe3, 0x99, 0xef,
+ 0x7c, 0x01, 0xed, 0x23, 0xa8, 0xa7, 0x10, 0x0c, 0xc7, 0x09, 0x48, 0x2d, 0x70, 0xf5, 0xf6, 0xf4,
+ 0x74, 0xac, 0x68, 0x7f, 0xad, 0x40, 0x33, 0xd5, 0xaf, 0xd0, 0xd0, 0x6d, 0xa8, 0xd8, 0x41, 0x90,
+ 0xa8, 0xb6, 0x4e, 0xcb, 0x76, 0x10, 0x18, 0x8e, 0x8c, 0x2d, 0x0a, 0x6a, 0x9b, 0xc7, 0x96, 0x4f,
+ 0x01, 0x1c, 0x36, 0x71, 0x3d, 0x17, 0x85, 0x2e, 0xa2, 0xc1, 0xab, 0x8b, 0x42, 0xd3, 0x0c, 0x86,
+ 0x7c, 0x09, 0xe5, 0x28, 0xb6, 0x63, 0x91, 0x2b, 0x9b, 0xdb, 0xf7, 0x33, 0xe0, 0xbc, 0x08, 0x9d,
+ 0x11, 0x87, 0x51, 0x81, 0x26, 0x5f, 0xc1, 0x2d, 0xdf, 0x9b, 0x9e, 0x59, 0xf3, 0x88, 0x59, 0xee,
+ 0xc4, 0x0a, 0xd9, 0x0f, 0x73, 0x37, 0x64, 0x4e, 0x3e, 0xa7, 0xae, 0x73, 0xc8, 0x51, 0xc4, 0x8c,
+ 0x09, 0x95, 0x7c, 0xed, 0x6b, 0x28, 0xe3, 0x3a, 0x7c, 0xcf, 0xdf, 0x51, 0xc3, 0xd4, 0xad, 0xe1,
+ 0xa0, 0xff, 0x54, 0xe8, 0x80, 0xea, 0xdd, 0x9e, 0x85, 0x44, 0x55, 0xe1, 0xc1, 0xbe, 0xa7, 0xf7,
+ 0x75, 0x53, 0xef, 0xa9, 0x45, 0x9e, 0x3d, 0x74, 0x4a, 0x87, 0x54, 0x2d, 0x69, 0xff, 0x53, 0x80,
+ 0x15, 0x94, 0xe7, 0xd0, 0x8f, 0xe2, 0x89, 0xfb, 0x92, 0xec, 0x41, 0x43, 0x98, 0xdd, 0xa9, 0x2c,
+ 0xe8, 0xb9, 0x33, 0x68, 0x8b, 0x7b, 0x96, 0x68, 0x31, 0x90, 0x75, 0xb4, 0x9b, 0x3e, 0x27, 0x21,
+ 0x45, 0x41, 0xa7, 0xbf, 0x22, 0xa4, 0xbc, 0x05, 0x95, 0x67, 0x6c, 0xe2, 0x87, 0x22, 0x04, 0xd6,
+ 0x76, 0x4a, 0x71, 0x38, 0x67, 0x54, 0xd2, 0xda, 0x36, 0xc0, 0xf9, 0xfa, 0xe4, 0x01, 0xac, 0x26,
+ 0xc6, 0x66, 0xa1, 0x71, 0x89, 0x93, 0x5b, 0x49, 0x88, 0x83, 0x5c, 0x75, 0xa3, 0x5c, 0xab, 0xba,
+ 0xd1, 0xbe, 0x86, 0xd5, 0x64, 0x3f, 0xe2, 0xfc, 0x54, 0x21, 0x79, 0x01, 0x63, 0xca, 0x82, 0x8c,
+ 0xca, 0x45, 0x19, 0xb5, 0x9f, 0x41, 0x6d, 0xe4, 0xd9, 0x41, 0x74, 0xe2, 0xc7, 0xdc, 0x7a, 0xe2,
+ 0x48, 0xfa, 0xaa, 0x12, 0x47, 0x9a, 0x06, 0x15, 0x7e, 0x38, 0xf3, 0x88, 0xbb, 0xbf, 0x31, 0xe8,
+ 0xee, 0x99, 0xc6, 0xb7, 0xba, 0xfa, 0x06, 0x01, 0xa8, 0xc8, 0xe7, 0x82, 0xa6, 0x41, 0xd3, 0x90,
+ 0xed, 0xd8, 0x63, 0x66, 0x3b, 0x2c, 0xe4, 0x12, 0xfc, 0xe0, 0x47, 0x89, 0x04, 0x3f, 0xf8, 0x91,
+ 0xf6, 0x17, 0x05, 0x68, 0x98, 0xa1, 0xed, 0x45, 0xb6, 0x30, 0xf7, 0xcf, 0xa0, 0x72, 0x82, 0x58,
+ 0x74, 0xa3, 0xc6, 0x82, 0x7f, 0x66, 0x17, 0xa3, 0x12, 0x48, 0xee, 0x40, 0xe5, 0xc4, 0xf6, 0x9c,
+ 0xa9, 0xd0, 0x5a, 0x85, 0xca, 0x51, 0x92, 0x1b, 0x95, 0xf3, 0xdc, 0xb8, 0x05, 0x2b, 0x33, 0x3b,
+ 0x7c, 0x6e, 0x8d, 0x4f, 0x6c, 0xef, 0x98, 0x45, 0xf2, 0x60, 0xa4, 0x05, 0x36, 0x38, 0x6b, 0x4f,
+ 0x70, 0xb4, 0xbf, 0x5f, 0x81, 0xf2, 0x37, 0x73, 0x16, 0x9e, 0x65, 0x04, 0xfa, 0xe0, 0xba, 0x02,
+ 0xc9, 0x17, 0x17, 0x2e, 0x4b, 0xca, 0x6f, 0x2f, 0x26, 0x65, 0x22, 0x53, 0x84, 0xc8, 0x95, 0x22,
+ 0x0b, 0x7c, 0x9a, 0x09, 0x63, 0xeb, 0x57, 0xd8, 0xda, 0x79, 0x70, 0x7b, 0x08, 0x95, 0x89, 0x3b,
+ 0x8d, 0x51, 0x75, 0x8b, 0xd5, 0x08, 0xee, 0xa5, 0xf3, 0x08, 0xd9, 0x54, 0xc2, 0xc8, 0xbb, 0xb0,
+ 0x22, 0x2a, 0x59, 0xeb, 0x07, 0xce, 0xc6, 0x82, 0x95, 0xf7, 0xa6, 0x48, 0x13, 0xbb, 0xff, 0x18,
+ 0xca, 0x7e, 0xc8, 0x37, 0x5f, 0xc7, 0x25, 0xef, 0x5c, 0x58, 0x72, 0xc8, 0xb9, 0x54, 0x80, 0xc8,
+ 0x87, 0x50, 0x3a, 0x71, 0xbd, 0x18, 0xb3, 0x46, 0x73, 0xfb, 0xf6, 0x05, 0xf0, 0x63, 0xd7, 0x8b,
+ 0x29, 0x42, 0x78, 0x98, 0x1f, 0xfb, 0x73, 0x2f, 0x6e, 0xdd, 0xc5, 0x0c, 0x23, 0x06, 0xe4, 0x1e,
+ 0x54, 0xfc, 0xc9, 0x24, 0x62, 0x31, 0x76, 0x96, 0xe5, 0x9d, 0xc2, 0xa7, 0x54, 0x12, 0xf8, 0x84,
+ 0xa9, 0x3b, 0x73, 0x63, 0xec, 0x43, 0xca, 0x54, 0x0c, 0xc8, 0x2e, 0xac, 0x8d, 0xfd, 0x59, 0xe0,
+ 0x4e, 0x99, 0x63, 0x8d, 0xe7, 0x61, 0xe4, 0x87, 0xad, 0x77, 0x2e, 0x1c, 0xd3, 0x9e, 0x44, 0xec,
+ 0x21, 0x80, 0x36, 0xc7, 0xb9, 0x31, 0x31, 0x60, 0x83, 0x79, 0x8e, 0xb5, 0xb8, 0xce, 0xfd, 0xd7,
+ 0xad, 0xb3, 0xce, 0x3c, 0x27, 0x4f, 0x4a, 0xc4, 0xc1, 0x48, 0x68, 0x61, 0xcc, 0x68, 0x6d, 0x60,
+ 0x90, 0xb9, 0x77, 0x69, 0xac, 0x14, 0xe2, 0x64, 0xc2, 0xf7, 0x6f, 0xc0, 0x2d, 0x19, 0x22, 0xad,
+ 0x80, 0x85, 0x13, 0x36, 0x8e, 0xad, 0x60, 0x6a, 0x7b, 0x58, 0xca, 0xa5, 0xc6, 0x4a, 0x24, 0xe4,
+ 0x50, 0x20, 0x0e, 0xa7, 0xb6, 0x47, 0x34, 0xa8, 0x3f, 0x67, 0x67, 0x91, 0xc5, 0x23, 0x29, 0x76,
+ 0xae, 0x29, 0xba, 0xc6, 0xe9, 0x43, 0x6f, 0x7a, 0x46, 0x7e, 0x02, 0x8d, 0xf8, 0xdc, 0xdb, 0xb0,
+ 0x61, 0x6d, 0xe4, 0x4e, 0x35, 0xe3, 0x8b, 0x34, 0x0b, 0x25, 0xf7, 0xa1, 0x2a, 0x35, 0xd4, 0xba,
+ 0x97, 0x5d, 0x3b, 0xa1, 0xf2, 0xc4, 0x3c, 0xb1, 0xdd, 0xa9, 0x7f, 0xca, 0x42, 0x6b, 0x16, 0xb5,
+ 0xda, 0xe2, 0xb6, 0x24, 0x21, 0x1d, 0x44, 0xdc, 0x4f, 0xa3, 0x38, 0xf4, 0xbd, 0xe3, 0xd6, 0x26,
+ 0xde, 0x93, 0xc8, 0xd1, 0xc5, 0xe0, 0xf7, 0x2e, 0x66, 0xfe, 0x7c, 0xf0, 0xfb, 0x1c, 0xee, 0x60,
+ 0x65, 0x66, 0x3d, 0x3b, 0xb3, 0xf2, 0x68, 0x0d, 0xd1, 0x1b, 0xc8, 0xdd, 0x3d, 0x3b, 0xcc, 0x4e,
+ 0x6a, 0x43, 0xcd, 0x71, 0xa3, 0xd8, 0xf5, 0xc6, 0x71, 0xab, 0x85, 0xef, 0x4c, 0xc7, 0xe4, 0x33,
+ 0xb8, 0x3d, 0x73, 0x3d, 0x2b, 0xb2, 0x27, 0xcc, 0x8a, 0x5d, 0xee, 0x9b, 0x6c, 0xec, 0x7b, 0x4e,
+ 0xd4, 0x7a, 0x80, 0x82, 0x93, 0x99, 0xeb, 0x8d, 0xec, 0x09, 0x33, 0xdd, 0x19, 0x1b, 0x09, 0x0e,
+ 0xf9, 0x08, 0xd6, 0x11, 0x1e, 0xb2, 0x60, 0xea, 0x8e, 0x6d, 0xf1, 0xfa, 0x1f, 0xe1, 0xeb, 0xd7,
+ 0x38, 0x83, 0x0a, 0x3a, 0xbe, 0xfa, 0x63, 0x68, 0x06, 0x2c, 0x8c, 0xdc, 0x28, 0xb6, 0xa4, 0x45,
+ 0xbf, 0x97, 0xd5, 0xda, 0xaa, 0x64, 0x0e, 0x91, 0xd7, 0xfe, 0xcf, 0x02, 0x54, 0x84, 0x73, 0x92,
+ 0x4f, 0x41, 0xf1, 0x03, 0xbc, 0x06, 0x69, 0x6e, 0x6f, 0x5e, 0xe2, 0xc1, 0x9d, 0x61, 0xc0, 0xeb,
+ 0x5e, 0x3f, 0xa4, 0x8a, 0x1f, 0xdc, 0xb8, 0x28, 0xd4, 0xfe, 0x10, 0x6a, 0xc9, 0x02, 0xbc, 0xbc,
+ 0xe8, 0xeb, 0xa3, 0x91, 0x65, 0x3e, 0xee, 0x0e, 0xd4, 0x02, 0xb9, 0x03, 0x24, 0x1d, 0x5a, 0x43,
+ 0x6a, 0xe9, 0xdf, 0x1c, 0x75, 0xfb, 0xaa, 0x82, 0x5d, 0x1a, 0xd5, 0xbb, 0xa6, 0x4e, 0x05, 0xb2,
+ 0x48, 0xee, 0xc1, 0xed, 0x2c, 0xe5, 0x1c, 0x5c, 0xc2, 0x14, 0x8c, 0x8f, 0x65, 0x52, 0x01, 0xc5,
+ 0x18, 0xa8, 0x15, 0x9e, 0x16, 0xf4, 0xef, 0x8d, 0x91, 0x39, 0x52, 0xab, 0xed, 0xbf, 0x29, 0x40,
+ 0x19, 0xc3, 0x06, 0x3f, 0x9f, 0x54, 0x72, 0x71, 0x5d, 0x73, 0x5e, 0xb9, 0x1a, 0xd9, 0x92, 0xaa,
+ 0x81, 0x01, 0x65, 0x73, 0x79, 0xf4, 0xf9, 0xb5, 0xd6, 0x53, 0x3f, 0x85, 0x12, 0x8f, 0x52, 0xbc,
+ 0x43, 0x1c, 0xd2, 0x9e, 0x4e, 0xad, 0x47, 0x06, 0x1d, 0xf1, 0x2a, 0x97, 0x40, 0xb3, 0x3b, 0xd8,
+ 0xd3, 0x47, 0xe6, 0x30, 0xa1, 0xa1, 0x56, 0x1e, 0x19, 0x7d, 0x33, 0x45, 0x15, 0xb5, 0x9f, 0xd7,
+ 0x60, 0x35, 0x89, 0x09, 0x22, 0x82, 0x3e, 0x82, 0x46, 0x10, 0xba, 0x33, 0x3b, 0x3c, 0x8b, 0xc6,
+ 0xb6, 0x87, 0x49, 0x01, 0xb6, 0x7f, 0xb4, 0x24, 0xaa, 0x88, 0x1d, 0x1d, 0x0a, 0xec, 0x68, 0x6c,
+ 0x7b, 0x34, 0x3b, 0x91, 0xf4, 0x61, 0x75, 0xc6, 0xc2, 0x63, 0xf6, 0x7b, 0xbe, 0xeb, 0xe1, 0x4a,
+ 0x55, 0x8c, 0xc8, 0xef, 0x5f, 0xba, 0xd2, 0x01, 0x47, 0xff, 0x8e, 0xef, 0x7a, 0xb8, 0x56, 0x7e,
+ 0x32, 0xf9, 0x04, 0xea, 0xa2, 0x12, 0x72, 0xd8, 0x04, 0x63, 0xc5, 0xb2, 0xda, 0x4f, 0xd4, 0xe8,
+ 0x3d, 0x36, 0xc9, 0xc4, 0x65, 0xb8, 0x34, 0x2e, 0x37, 0xb2, 0x71, 0xf9, 0xcd, 0x6c, 0x2c, 0x5a,
+ 0x11, 0x55, 0x78, 0x1a, 0x84, 0x2e, 0x38, 0x7c, 0x6b, 0x89, 0xc3, 0x77, 0x60, 0x23, 0xf1, 0x55,
+ 0xcb, 0xf5, 0x26, 0xee, 0x4b, 0x2b, 0x72, 0x5f, 0x89, 0xd8, 0x53, 0xa6, 0xeb, 0x09, 0xcb, 0xe0,
+ 0x9c, 0x91, 0xfb, 0x8a, 0x11, 0x23, 0xe9, 0xe0, 0x64, 0x0e, 0x5c, 0xc5, 0xab, 0xc9, 0xf7, 0x2e,
+ 0x55, 0x8f, 0x68, 0xbe, 0x64, 0x46, 0xcc, 0x4d, 0x6d, 0xff, 0x52, 0x81, 0x46, 0xe6, 0x1c, 0x78,
+ 0xf6, 0x16, 0xca, 0x42, 0x61, 0xc5, 0x55, 0x94, 0x50, 0x1f, 0x4a, 0xfa, 0x26, 0xd4, 0xa3, 0xd8,
+ 0x0e, 0x63, 0x8b, 0x17, 0x57, 0xb2, 0xdd, 0x45, 0xc2, 0x13, 0x76, 0x46, 0x3e, 0x80, 0x35, 0xc1,
+ 0x74, 0xbd, 0xf1, 0x74, 0x1e, 0xb9, 0xa7, 0xa2, 0x99, 0xaf, 0xd1, 0x26, 0x92, 0x8d, 0x84, 0x4a,
+ 0xee, 0x42, 0x95, 0x67, 0x21, 0xbe, 0x86, 0x68, 0xfa, 0x2a, 0xcc, 0x73, 0xf8, 0x0a, 0x0f, 0x60,
+ 0x95, 0x33, 0xce, 0xe7, 0x57, 0xc4, 0x2d, 0x33, 0xf3, 0x9c, 0xf3, 0xd9, 0x1d, 0xd8, 0x10, 0xaf,
+ 0x09, 0x44, 0xf1, 0x2a, 0x2b, 0xdc, 0x3b, 0xa8, 0xd8, 0x75, 0x64, 0xc9, 0xb2, 0x56, 0x14, 0x9c,
+ 0x1f, 0x01, 0xcf, 0x5e, 0x0b, 0xe8, 0xbb, 0x22, 0x94, 0x31, 0xcf, 0xc9, 0x61, 0x77, 0xe1, 0x1d,
+ 0x8e, 0x9d, 0x7b, 0x76, 0x10, 0x4c, 0x5d, 0xe6, 0x58, 0x53, 0xff, 0x18, 0x43, 0x66, 0x14, 0xdb,
+ 0xb3, 0xc0, 0x9a, 0x47, 0xad, 0x0d, 0x0c, 0x99, 0x6d, 0xe6, 0x39, 0x47, 0x09, 0xa8, 0xef, 0x1f,
+ 0x9b, 0x09, 0xe4, 0x28, 0x6a, 0xff, 0x3e, 0xac, 0xe6, 0xec, 0x71, 0x41, 0xa7, 0x35, 0x74, 0xfe,
+ 0x8c, 0x4e, 0xdf, 0x85, 0x95, 0x20, 0x64, 0xe7, 0xa2, 0xd5, 0x51, 0xb4, 0x86, 0xa0, 0x09, 0xb1,
+ 0xb6, 0x60, 0x05, 0x79, 0x96, 0x20, 0xe6, 0xf3, 0x63, 0x03, 0x59, 0x87, 0xc8, 0x69, 0xbf, 0x80,
+ 0x95, 0xec, 0x69, 0x93, 0x77, 0x33, 0x69, 0xa1, 0x99, 0xcb, 0x93, 0x69, 0x76, 0x48, 0x2a, 0xb2,
+ 0xf5, 0x4b, 0x2a, 0x32, 0x72, 0x9d, 0x8a, 0x4c, 0xfb, 0x2f, 0xd9, 0x9c, 0x65, 0x2a, 0x84, 0x9f,
+ 0x41, 0x2d, 0x90, 0xf5, 0x38, 0x5a, 0x52, 0xfe, 0x12, 0x3e, 0x0f, 0xee, 0x24, 0x95, 0x3b, 0x4d,
+ 0xe7, 0xb4, 0xff, 0x56, 0x81, 0x5a, 0x5a, 0xd0, 0xe7, 0x2c, 0xef, 0xcd, 0x05, 0xcb, 0x3b, 0x90,
+ 0x1a, 0x16, 0x0a, 0x7c, 0x1b, 0xa3, 0xc5, 0x27, 0xaf, 0x7f, 0xd7, 0xc5, 0xb6, 0xe7, 0x34, 0xdb,
+ 0xf6, 0x6c, 0xbe, 0xae, 0xed, 0xf9, 0xe4, 0xa2, 0xc1, 0xbf, 0x95, 0xe9, 0x2d, 0x16, 0xcc, 0xbe,
+ 0xfd, 0x7d, 0xae, 0x0f, 0xca, 0x26, 0x84, 0x77, 0xc4, 0x7e, 0xd2, 0x84, 0x90, 0xb6, 0x3f, 0xf7,
+ 0xaf, 0xd7, 0xfe, 0x6c, 0x43, 0x45, 0xea, 0xfc, 0x0e, 0x54, 0x64, 0x4d, 0x27, 0x1b, 0x04, 0x31,
+ 0x3a, 0x6f, 0x10, 0x0a, 0xb2, 0x4e, 0xd7, 0x7e, 0xae, 0x40, 0x59, 0x0f, 0x43, 0x3f, 0xd4, 0xfe,
+ 0x48, 0x81, 0x3a, 0x3e, 0xed, 0xf9, 0x0e, 0xe3, 0xd9, 0x60, 0xb7, 0xdb, 0xb3, 0xa8, 0xfe, 0xcd,
+ 0x91, 0x8e, 0xd9, 0xa0, 0x0d, 0x77, 0xf6, 0x86, 0x83, 0xbd, 0x23, 0x4a, 0xf5, 0x81, 0x69, 0x99,
+ 0xb4, 0x3b, 0x18, 0xf1, 0xb6, 0x67, 0x38, 0x50, 0x15, 0x9e, 0x29, 0x8c, 0x81, 0xa9, 0xd3, 0x41,
+ 0xb7, 0x6f, 0x89, 0x56, 0xb4, 0x88, 0x77, 0xb3, 0xba, 0xde, 0xb3, 0xf0, 0xd6, 0x51, 0x2d, 0xf1,
+ 0x96, 0xd5, 0x34, 0x0e, 0xf4, 0xe1, 0x91, 0xa9, 0x96, 0xc9, 0x6d, 0x58, 0x3f, 0xd4, 0xe9, 0x81,
+ 0x31, 0x1a, 0x19, 0xc3, 0x81, 0xd5, 0xd3, 0x07, 0x86, 0xde, 0x53, 0x2b, 0x7c, 0x9d, 0x5d, 0x63,
+ 0xdf, 0xec, 0xee, 0xf6, 0x75, 0xb9, 0x4e, 0x95, 0x6c, 0xc2, 0x5b, 0x7b, 0xc3, 0x83, 0x03, 0xc3,
+ 0x34, 0xf5, 0x9e, 0xb5, 0x7b, 0x64, 0x5a, 0x23, 0xd3, 0xe8, 0xf7, 0xad, 0xee, 0xe1, 0x61, 0xff,
+ 0x29, 0x4f, 0x60, 0x35, 0x72, 0x17, 0x36, 0xf6, 0xba, 0x87, 0xdd, 0x5d, 0xa3, 0x6f, 0x98, 0x4f,
+ 0xad, 0x9e, 0x31, 0xe2, 0xf3, 0x7b, 0x6a, 0x9d, 0x27, 0x6c, 0x93, 0x3e, 0xb5, 0xba, 0x7d, 0x14,
+ 0xcd, 0xd4, 0xad, 0xdd, 0xee, 0xde, 0x13, 0x7d, 0xd0, 0x53, 0x81, 0x0b, 0x30, 0xea, 0x3e, 0xd2,
+ 0x2d, 0x2e, 0x92, 0x65, 0x0e, 0x87, 0xd6, 0xb0, 0xdf, 0x53, 0x1b, 0xda, 0xbf, 0x14, 0xa1, 0xb4,
+ 0xe7, 0x47, 0x31, 0xf7, 0x46, 0xe1, 0xac, 0x2f, 0x42, 0x37, 0x66, 0xa2, 0x7f, 0x2b, 0x53, 0xd1,
+ 0x4b, 0x7f, 0x87, 0x24, 0x1e, 0x50, 0x32, 0x10, 0xeb, 0xd9, 0x19, 0xc7, 0x29, 0x88, 0x5b, 0x3b,
+ 0xc7, 0xed, 0x72, 0xb2, 0x88, 0x68, 0x78, 0x85, 0x23, 0xd7, 0x2b, 0x22, 0x4e, 0x06, 0x61, 0xb9,
+ 0xe0, 0xc7, 0x40, 0xb2, 0x20, 0xb9, 0x62, 0x09, 0x91, 0x6a, 0x06, 0x29, 0x96, 0xdc, 0x01, 0x18,
+ 0xfb, 0xb3, 0x99, 0x1b, 0x8f, 0xfd, 0x28, 0x96, 0x5f, 0xc8, 0xda, 0x39, 0x63, 0x8f, 0x62, 0x6e,
+ 0xf1, 0x33, 0x37, 0xe6, 0x8f, 0x34, 0x83, 0x26, 0x3b, 0x70, 0xcf, 0x0e, 0x82, 0xd0, 0x7f, 0xe9,
+ 0xce, 0xec, 0x98, 0x59, 0xdc, 0x73, 0xed, 0x63, 0x66, 0x39, 0x6c, 0x1a, 0xdb, 0xd8, 0x13, 0x95,
+ 0xe9, 0xdd, 0x0c, 0x60, 0x24, 0xf8, 0x3d, 0xce, 0xe6, 0x71, 0xd7, 0x75, 0xac, 0x88, 0xfd, 0x30,
+ 0xe7, 0x1e, 0x60, 0xcd, 0x03, 0xc7, 0xe6, 0x62, 0xd6, 0x45, 0x96, 0x72, 0x9d, 0x91, 0xe4, 0x1c,
+ 0x09, 0x46, 0xfb, 0x15, 0xc0, 0xb9, 0x14, 0x64, 0x1b, 0x6e, 0xf3, 0x3a, 0x9e, 0x45, 0x31, 0x73,
+ 0x2c, 0xb9, 0xdb, 0x60, 0x1e, 0x47, 0x18, 0xe2, 0xcb, 0x74, 0x23, 0x65, 0xca, 0x9b, 0xc2, 0x79,
+ 0x1c, 0x91, 0x9f, 0x40, 0xeb, 0xc2, 0x1c, 0x87, 0x4d, 0x19, 0x7f, 0x6d, 0x15, 0xa7, 0xdd, 0x59,
+ 0x98, 0xd6, 0x13, 0x5c, 0xed, 0x4f, 0x14, 0x80, 0x7d, 0x16, 0x53, 0xc1, 0xcd, 0x34, 0xb6, 0x95,
+ 0xeb, 0x36, 0xb6, 0xef, 0x27, 0x17, 0x08, 0xc5, 0xab, 0x63, 0xc0, 0x42, 0x97, 0xa1, 0xdc, 0xa4,
+ 0xcb, 0xc8, 0x35, 0x11, 0xc5, 0x2b, 0x9a, 0x88, 0x52, 0xae, 0x89, 0xf8, 0x18, 0x9a, 0xf6, 0x74,
+ 0xea, 0xbf, 0xe0, 0x05, 0x0d, 0x0b, 0x43, 0xe6, 0xa0, 0x11, 0x9c, 0xd7, 0xdb, 0xc8, 0xec, 0x49,
+ 0x9e, 0xf6, 0xe7, 0x0a, 0x34, 0x50, 0x15, 0x51, 0xe0, 0x7b, 0x11, 0x23, 0x5f, 0x42, 0x45, 0x5e,
+ 0x44, 0x8b, 0x8b, 0xfc, 0xb7, 0x33, 0xb2, 0x66, 0x70, 0xb2, 0x68, 0xa0, 0x12, 0xcc, 0x33, 0x42,
+ 0xe6, 0x75, 0x97, 0x2b, 0x25, 0x45, 0x91, 0xfb, 0x50, 0x73, 0x3d, 0x4b, 0xb4, 0xd4, 0x95, 0x4c,
+ 0x58, 0xac, 0xba, 0x1e, 0xd6, 0xb2, 0xed, 0x57, 0x50, 0x11, 0x2f, 0x21, 0x9d, 0x54, 0xa6, 0x8b,
+ 0xfa, 0xcb, 0xdc, 0x1c, 0xa7, 0xc2, 0xc8, 0xc3, 0x29, 0xbd, 0x2e, 0x40, 0xb7, 0xa0, 0x7a, 0xca,
+ 0x9b, 0x0f, 0xbc, 0xf4, 0xe3, 0xea, 0x4d, 0x86, 0xda, 0x1f, 0x97, 0x00, 0x0e, 0xe7, 0x4b, 0x0c,
+ 0xa4, 0x71, 0x5d, 0x03, 0xe9, 0xe4, 0xf4, 0xf8, 0x7a, 0x99, 0x7f, 0x75, 0x43, 0x59, 0xd2, 0x69,
+ 0x17, 0x6f, 0xda, 0x69, 0xdf, 0x87, 0x6a, 0x1c, 0xce, 0xb9, 0xa3, 0x08, 0x63, 0x4a, 0x5b, 0x5a,
+ 0x49, 0x25, 0x6f, 0x42, 0x79, 0xe2, 0x87, 0x63, 0x86, 0x8e, 0x95, 0xb2, 0x05, 0xed, 0xc2, 0x65,
+ 0x52, 0xed, 0xb2, 0xcb, 0x24, 0xde, 0xa0, 0x45, 0xf2, 0x1e, 0x0d, 0x0b, 0x99, 0x7c, 0x83, 0x96,
+ 0x5c, 0xb1, 0xd1, 0x14, 0x44, 0xbe, 0x81, 0xa6, 0x3d, 0x8f, 0x7d, 0xcb, 0xe5, 0x15, 0xda, 0xd4,
+ 0x1d, 0x9f, 0x61, 0xd9, 0xdd, 0xcc, 0x7f, 0xaf, 0x4f, 0x0f, 0xaa, 0xd3, 0x9d, 0xc7, 0xbe, 0xe1,
+ 0x1c, 0x22, 0x72, 0xa7, 0x2a, 0x93, 0x12, 0x5d, 0xb1, 0x33, 0x64, 0xed, 0xc7, 0xb0, 0x92, 0x85,
+ 0xf1, 0x04, 0x24, 0x81, 0xea, 0x1b, 0x3c, 0x3b, 0x8d, 0x78, 0x6a, 0x1b, 0x98, 0x46, 0xb7, 0xaf,
+ 0x16, 0xb4, 0x18, 0x1a, 0xb8, 0xbc, 0xf4, 0x8e, 0xeb, 0xba, 0xfd, 0x03, 0x28, 0x61, 0xf8, 0x55,
+ 0x2e, 0x7c, 0x0f, 0xc1, 0x98, 0x8b, 0xcc, 0xbc, 0xf9, 0x15, 0xb3, 0xe6, 0xf7, 0xdf, 0x05, 0x58,
+ 0x31, 0xfd, 0xf9, 0xf8, 0xe4, 0xa2, 0x01, 0xc2, 0xaf, 0x3b, 0x42, 0x2d, 0x31, 0x1f, 0xe5, 0xa6,
+ 0xe6, 0x93, 0x5a, 0x47, 0x71, 0x89, 0x75, 0xdc, 0xf4, 0xcc, 0xb5, 0x2f, 0x60, 0x55, 0x6e, 0x5e,
+ 0x6a, 0x3d, 0xd1, 0x66, 0xe1, 0x0a, 0x6d, 0x6a, 0xbf, 0x50, 0x60, 0x55, 0xc4, 0xf7, 0xff, 0xbb,
+ 0xd2, 0x2a, 0x37, 0x0c, 0xeb, 0xe5, 0x1b, 0x5d, 0x1e, 0xfd, 0xbf, 0xf4, 0x34, 0x6d, 0x08, 0xcd,
+ 0x44, 0x7d, 0x37, 0x50, 0xfb, 0x15, 0x46, 0xfc, 0x8b, 0x02, 0x34, 0x06, 0xec, 0xe5, 0x92, 0x20,
+ 0x5a, 0xbe, 0xee, 0x71, 0x7c, 0x98, 0x2b, 0x57, 0x1b, 0xdb, 0xeb, 0x59, 0x19, 0xc4, 0xd5, 0x63,
+ 0x52, 0xc1, 0xa6, 0xb7, 0xa8, 0xca, 0xf2, 0x5b, 0xd4, 0xd2, 0x62, 0xb7, 0x9e, 0xb9, 0xc5, 0x2b,
+ 0x2e, 0xbb, 0xc5, 0xd3, 0xfe, 0xad, 0x08, 0x0d, 0x6c, 0x90, 0x29, 0x8b, 0xe6, 0xd3, 0x38, 0x27,
+ 0x4c, 0xe1, 0x6a, 0x61, 0x3a, 0x50, 0x09, 0x71, 0x92, 0x74, 0xa5, 0x4b, 0x83, 0xbf, 0x40, 0x61,
+ 0x6b, 0xfc, 0xdc, 0x0d, 0x02, 0xe6, 0x58, 0x82, 0x92, 0x14, 0x30, 0x4d, 0x49, 0x16, 0x22, 0x44,
+ 0xbc, 0xfc, 0x9c, 0xf9, 0x21, 0x4b, 0x51, 0x45, 0xbc, 0x4f, 0x68, 0x70, 0x5a, 0x02, 0xc9, 0xdd,
+ 0x37, 0x88, 0xca, 0xe0, 0xfc, 0xbe, 0x21, 0xed, 0x35, 0x91, 0x5b, 0x47, 0xae, 0xe8, 0x35, 0x91,
+ 0xcd, 0xbb, 0xa8, 0x99, 0x3d, 0x9d, 0x5a, 0x7e, 0x10, 0xa1, 0xd3, 0xd4, 0x68, 0x0d, 0x09, 0xc3,
+ 0x20, 0x22, 0x5f, 0x43, 0x7a, 0x5d, 0x2c, 0x6f, 0xc9, 0xc5, 0x39, 0xb6, 0x2e, 0xbb, 0x58, 0xa0,
+ 0xab, 0xe3, 0xdc, 0xfd, 0xcf, 0x92, 0x1b, 0xea, 0xca, 0x4d, 0x6f, 0xa8, 0x1f, 0x42, 0x59, 0xc4,
+ 0xa8, 0xda, 0xeb, 0x62, 0x94, 0xc0, 0x65, 0xed, 0xb3, 0x91, 0xb7, 0xcf, 0x5f, 0x16, 0x80, 0x74,
+ 0xa7, 0x53, 0x7f, 0x6c, 0xc7, 0xcc, 0x70, 0xa2, 0x8b, 0x66, 0x7a, 0xed, 0xcf, 0x2e, 0x9f, 0x41,
+ 0x7d, 0xe6, 0x3b, 0x6c, 0x6a, 0x25, 0xdf, 0x94, 0x2e, 0xad, 0x7e, 0x10, 0xc6, 0x5b, 0x52, 0x02,
+ 0x25, 0xbc, 0xc4, 0x51, 0xb0, 0xee, 0xc0, 0x67, 0xde, 0x84, 0xcd, 0xec, 0x97, 0xb2, 0x14, 0xe1,
+ 0x8f, 0xa4, 0x03, 0xd5, 0x90, 0x45, 0x2c, 0x3c, 0x65, 0x57, 0x16, 0x55, 0x09, 0x48, 0x7b, 0x06,
+ 0x1b, 0xb9, 0x1d, 0x49, 0x47, 0xbe, 0x85, 0x5f, 0x2b, 0xc3, 0x58, 0x7e, 0xb4, 0x12, 0x03, 0xfe,
+ 0x3a, 0xe6, 0x25, 0x9f, 0x41, 0xf9, 0x63, 0xea, 0xf0, 0xc5, 0xab, 0xe2, 0xec, 0x1e, 0xa8, 0x59,
+ 0x4d, 0xbb, 0x63, 0x0c, 0x36, 0xf2, 0x54, 0x0a, 0xd7, 0x3b, 0x15, 0xed, 0xef, 0x0a, 0xb0, 0xde,
+ 0x75, 0x1c, 0xf1, 0x77, 0xc3, 0x25, 0xaa, 0x2f, 0x5e, 0x57, 0xf5, 0x0b, 0x81, 0x58, 0x84, 0x89,
+ 0x6b, 0x05, 0xe2, 0x0f, 0xa1, 0x92, 0xd6, 0x5a, 0xc5, 0x05, 0x77, 0x16, 0x72, 0x51, 0x09, 0xd0,
+ 0x6e, 0x01, 0xc9, 0x0a, 0x2b, 0xb4, 0xaa, 0xfd, 0x69, 0x11, 0xee, 0xee, 0xb2, 0x63, 0xd7, 0xcb,
+ 0xbe, 0xe2, 0x57, 0xdf, 0xc9, 0xc5, 0x4f, 0x65, 0x9f, 0xc1, 0xba, 0x28, 0xe4, 0x93, 0x7f, 0x62,
+ 0x59, 0xec, 0x58, 0x7e, 0x9d, 0x94, 0xb1, 0x6a, 0x0d, 0xf9, 0x07, 0x92, 0xad, 0xe3, 0x7f, 0xc5,
+ 0x1c, 0x3b, 0xb6, 0x9f, 0xd9, 0x11, 0xb3, 0x5c, 0x47, 0xfe, 0x59, 0x06, 0x12, 0x92, 0xe1, 0x90,
+ 0x21, 0x94, 0xb8, 0x0d, 0xa2, 0xeb, 0x36, 0xb7, 0xb7, 0x33, 0x62, 0x5d, 0xb2, 0x95, 0xac, 0x02,
+ 0x0f, 0x7c, 0x87, 0xed, 0x54, 0x8f, 0x06, 0x4f, 0x06, 0xc3, 0xef, 0x06, 0x14, 0x17, 0x22, 0x06,
+ 0xdc, 0x0a, 0x42, 0x76, 0xea, 0xfa, 0xf3, 0xc8, 0xca, 0x9e, 0x44, 0xf5, 0xca, 0x94, 0xb8, 0x91,
+ 0xcc, 0xc9, 0x10, 0xb5, 0x9f, 0xc2, 0xda, 0xc2, 0xcb, 0x78, 0x6d, 0x26, 0x5f, 0xa7, 0xbe, 0x41,
+ 0x56, 0xa1, 0x8e, 0x1f, 0xbb, 0x97, 0x7f, 0xfb, 0xd6, 0xfe, 0xb5, 0x80, 0x57, 0x4c, 0x33, 0x37,
+ 0xbe, 0x59, 0x06, 0xfb, 0xcd, 0x7c, 0x06, 0x83, 0xed, 0x77, 0xf3, 0xe6, 0x9b, 0x59, 0xb0, 0xf3,
+ 0xad, 0x00, 0xa6, 0x41, 0xa4, 0x6d, 0x43, 0x55, 0xd2, 0xc8, 0x6f, 0xc1, 0x5a, 0xe8, 0xfb, 0x71,
+ 0xd2, 0x89, 0x8a, 0x0e, 0xe4, 0xf2, 0x3f, 0xdb, 0xac, 0x72, 0xb0, 0x48, 0x06, 0x4f, 0xf2, 0xbd,
+ 0x48, 0x59, 0xfc, 0x0d, 0x44, 0x0e, 0x77, 0x1b, 0xbf, 0x5b, 0x4f, 0xff, 0xb7, 0xfb, 0xbf, 0x01,
+ 0x00, 0x00, 0xff, 0xff, 0x35, 0x9f, 0x30, 0x98, 0xf2, 0x2b, 0x00, 0x00,
+}
diff --git a/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto b/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto
new file mode 100755
index 0000000..497b4d9
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto
@@ -0,0 +1,551 @@
+syntax = "proto2";
+option go_package = "datastore";
+
+package appengine;
+
+message Action{}
+
+message PropertyValue {
+ optional int64 int64Value = 1;
+ optional bool booleanValue = 2;
+ optional string stringValue = 3;
+ optional double doubleValue = 4;
+
+ optional group PointValue = 5 {
+ required double x = 6;
+ required double y = 7;
+ }
+
+ optional group UserValue = 8 {
+ required string email = 9;
+ required string auth_domain = 10;
+ optional string nickname = 11;
+ optional string federated_identity = 21;
+ optional string federated_provider = 22;
+ }
+
+ optional group ReferenceValue = 12 {
+ required string app = 13;
+ optional string name_space = 20;
+ repeated group PathElement = 14 {
+ required string type = 15;
+ optional int64 id = 16;
+ optional string name = 17;
+ }
+ }
+}
+
+message Property {
+ enum Meaning {
+ NO_MEANING = 0;
+ BLOB = 14;
+ TEXT = 15;
+ BYTESTRING = 16;
+
+ ATOM_CATEGORY = 1;
+ ATOM_LINK = 2;
+ ATOM_TITLE = 3;
+ ATOM_CONTENT = 4;
+ ATOM_SUMMARY = 5;
+ ATOM_AUTHOR = 6;
+
+ GD_WHEN = 7;
+ GD_EMAIL = 8;
+ GEORSS_POINT = 9;
+ GD_IM = 10;
+
+ GD_PHONENUMBER = 11;
+ GD_POSTALADDRESS = 12;
+
+ GD_RATING = 13;
+
+ BLOBKEY = 17;
+ ENTITY_PROTO = 19;
+
+ INDEX_VALUE = 18;
+ };
+
+ optional Meaning meaning = 1 [default = NO_MEANING];
+ optional string meaning_uri = 2;
+
+ required string name = 3;
+
+ required PropertyValue value = 5;
+
+ required bool multiple = 4;
+
+ optional bool searchable = 6 [default=false];
+
+ enum FtsTokenizationOption {
+ HTML = 1;
+ ATOM = 2;
+ }
+
+ optional FtsTokenizationOption fts_tokenization_option = 8;
+
+ optional string locale = 9 [default = "en"];
+}
+
+message Path {
+ repeated group Element = 1 {
+ required string type = 2;
+ optional int64 id = 3;
+ optional string name = 4;
+ }
+}
+
+message Reference {
+ required string app = 13;
+ optional string name_space = 20;
+ required Path path = 14;
+}
+
+message User {
+ required string email = 1;
+ required string auth_domain = 2;
+ optional string nickname = 3;
+ optional string federated_identity = 6;
+ optional string federated_provider = 7;
+}
+
+message EntityProto {
+ required Reference key = 13;
+ required Path entity_group = 16;
+ optional User owner = 17;
+
+ enum Kind {
+ GD_CONTACT = 1;
+ GD_EVENT = 2;
+ GD_MESSAGE = 3;
+ }
+ optional Kind kind = 4;
+ optional string kind_uri = 5;
+
+ repeated Property property = 14;
+ repeated Property raw_property = 15;
+
+ optional int32 rank = 18;
+}
+
+message CompositeProperty {
+ required int64 index_id = 1;
+ repeated string value = 2;
+}
+
+message Index {
+ required string entity_type = 1;
+ required bool ancestor = 5;
+ repeated group Property = 2 {
+ required string name = 3;
+ enum Direction {
+ ASCENDING = 1;
+ DESCENDING = 2;
+ }
+ optional Direction direction = 4 [default = ASCENDING];
+ }
+}
+
+message CompositeIndex {
+ required string app_id = 1;
+ required int64 id = 2;
+ required Index definition = 3;
+
+ enum State {
+ WRITE_ONLY = 1;
+ READ_WRITE = 2;
+ DELETED = 3;
+ ERROR = 4;
+ }
+ required State state = 4;
+
+ optional bool only_use_if_required = 6 [default = false];
+}
+
+message IndexPostfix {
+ message IndexValue {
+ required string property_name = 1;
+ required PropertyValue value = 2;
+ }
+
+ repeated IndexValue index_value = 1;
+
+ optional Reference key = 2;
+
+ optional bool before = 3 [default=true];
+}
+
+message IndexPosition {
+ optional string key = 1;
+
+ optional bool before = 2 [default=true];
+}
+
+message Snapshot {
+ enum Status {
+ INACTIVE = 0;
+ ACTIVE = 1;
+ }
+
+ required int64 ts = 1;
+}
+
+message InternalHeader {
+ optional string qos = 1;
+}
+
+message Transaction {
+ optional InternalHeader header = 4;
+ required fixed64 handle = 1;
+ required string app = 2;
+ optional bool mark_changes = 3 [default = false];
+}
+
+message Query {
+ optional InternalHeader header = 39;
+
+ required string app = 1;
+ optional string name_space = 29;
+
+ optional string kind = 3;
+ optional Reference ancestor = 17;
+
+ repeated group Filter = 4 {
+ enum Operator {
+ LESS_THAN = 1;
+ LESS_THAN_OR_EQUAL = 2;
+ GREATER_THAN = 3;
+ GREATER_THAN_OR_EQUAL = 4;
+ EQUAL = 5;
+ IN = 6;
+ EXISTS = 7;
+ }
+
+ required Operator op = 6;
+ repeated Property property = 14;
+ }
+
+ optional string search_query = 8;
+
+ repeated group Order = 9 {
+ enum Direction {
+ ASCENDING = 1;
+ DESCENDING = 2;
+ }
+
+ required string property = 10;
+ optional Direction direction = 11 [default = ASCENDING];
+ }
+
+ enum Hint {
+ ORDER_FIRST = 1;
+ ANCESTOR_FIRST = 2;
+ FILTER_FIRST = 3;
+ }
+ optional Hint hint = 18;
+
+ optional int32 count = 23;
+
+ optional int32 offset = 12 [default = 0];
+
+ optional int32 limit = 16;
+
+ optional CompiledCursor compiled_cursor = 30;
+ optional CompiledCursor end_compiled_cursor = 31;
+
+ repeated CompositeIndex composite_index = 19;
+
+ optional bool require_perfect_plan = 20 [default = false];
+
+ optional bool keys_only = 21 [default = false];
+
+ optional Transaction transaction = 22;
+
+ optional bool compile = 25 [default = false];
+
+ optional int64 failover_ms = 26;
+
+ optional bool strong = 32;
+
+ repeated string property_name = 33;
+
+ repeated string group_by_property_name = 34;
+
+ optional bool distinct = 24;
+
+ optional int64 min_safe_time_seconds = 35;
+
+ repeated string safe_replica_name = 36;
+
+ optional bool persist_offset = 37 [default=false];
+}
+
+message CompiledQuery {
+ required group PrimaryScan = 1 {
+ optional string index_name = 2;
+
+ optional string start_key = 3;
+ optional bool start_inclusive = 4;
+ optional string end_key = 5;
+ optional bool end_inclusive = 6;
+
+ repeated string start_postfix_value = 22;
+ repeated string end_postfix_value = 23;
+
+ optional int64 end_unapplied_log_timestamp_us = 19;
+ }
+
+ repeated group MergeJoinScan = 7 {
+ required string index_name = 8;
+
+ repeated string prefix_value = 9;
+
+ optional bool value_prefix = 20 [default=false];
+ }
+
+ optional Index index_def = 21;
+
+ optional int32 offset = 10 [default = 0];
+
+ optional int32 limit = 11;
+
+ required bool keys_only = 12;
+
+ repeated string property_name = 24;
+
+ optional int32 distinct_infix_size = 25;
+
+ optional group EntityFilter = 13 {
+ optional bool distinct = 14 [default=false];
+
+ optional string kind = 17;
+ optional Reference ancestor = 18;
+ }
+}
+
+message CompiledCursor {
+ optional group Position = 2 {
+ optional string start_key = 27;
+
+ repeated group IndexValue = 29 {
+ optional string property = 30;
+ required PropertyValue value = 31;
+ }
+
+ optional Reference key = 32;
+
+ optional bool start_inclusive = 28 [default=true];
+ }
+}
+
+message Cursor {
+ required fixed64 cursor = 1;
+
+ optional string app = 2;
+}
+
+message Error {
+ enum ErrorCode {
+ BAD_REQUEST = 1;
+ CONCURRENT_TRANSACTION = 2;
+ INTERNAL_ERROR = 3;
+ NEED_INDEX = 4;
+ TIMEOUT = 5;
+ PERMISSION_DENIED = 6;
+ BIGTABLE_ERROR = 7;
+ COMMITTED_BUT_STILL_APPLYING = 8;
+ CAPABILITY_DISABLED = 9;
+ TRY_ALTERNATE_BACKEND = 10;
+ SAFE_TIME_TOO_OLD = 11;
+ }
+}
+
+message Cost {
+ optional int32 index_writes = 1;
+ optional int32 index_write_bytes = 2;
+ optional int32 entity_writes = 3;
+ optional int32 entity_write_bytes = 4;
+ optional group CommitCost = 5 {
+ optional int32 requested_entity_puts = 6;
+ optional int32 requested_entity_deletes = 7;
+ };
+ optional int32 approximate_storage_delta = 8;
+ optional int32 id_sequence_updates = 9;
+}
+
+message GetRequest {
+ optional InternalHeader header = 6;
+
+ repeated Reference key = 1;
+ optional Transaction transaction = 2;
+
+ optional int64 failover_ms = 3;
+
+ optional bool strong = 4;
+
+ optional bool allow_deferred = 5 [default=false];
+}
+
+message GetResponse {
+ repeated group Entity = 1 {
+ optional EntityProto entity = 2;
+ optional Reference key = 4;
+
+ optional int64 version = 3;
+ }
+
+ repeated Reference deferred = 5;
+
+ optional bool in_order = 6 [default=true];
+}
+
+message PutRequest {
+ optional InternalHeader header = 11;
+
+ repeated EntityProto entity = 1;
+ optional Transaction transaction = 2;
+ repeated CompositeIndex composite_index = 3;
+
+ optional bool trusted = 4 [default = false];
+
+ optional bool force = 7 [default = false];
+
+ optional bool mark_changes = 8 [default = false];
+ repeated Snapshot snapshot = 9;
+
+ enum AutoIdPolicy {
+ CURRENT = 0;
+ SEQUENTIAL = 1;
+ }
+ optional AutoIdPolicy auto_id_policy = 10 [default = CURRENT];
+}
+
+message PutResponse {
+ repeated Reference key = 1;
+ optional Cost cost = 2;
+ repeated int64 version = 3;
+}
+
+message TouchRequest {
+ optional InternalHeader header = 10;
+
+ repeated Reference key = 1;
+ repeated CompositeIndex composite_index = 2;
+ optional bool force = 3 [default = false];
+ repeated Snapshot snapshot = 9;
+}
+
+message TouchResponse {
+ optional Cost cost = 1;
+}
+
+message DeleteRequest {
+ optional InternalHeader header = 10;
+
+ repeated Reference key = 6;
+ optional Transaction transaction = 5;
+
+ optional bool trusted = 4 [default = false];
+
+ optional bool force = 7 [default = false];
+
+ optional bool mark_changes = 8 [default = false];
+ repeated Snapshot snapshot = 9;
+}
+
+message DeleteResponse {
+ optional Cost cost = 1;
+ repeated int64 version = 3;
+}
+
+message NextRequest {
+ optional InternalHeader header = 5;
+
+ required Cursor cursor = 1;
+ optional int32 count = 2;
+
+ optional int32 offset = 4 [default = 0];
+
+ optional bool compile = 3 [default = false];
+}
+
+message QueryResult {
+ optional Cursor cursor = 1;
+
+ repeated EntityProto result = 2;
+
+ optional int32 skipped_results = 7;
+
+ required bool more_results = 3;
+
+ optional bool keys_only = 4;
+
+ optional bool index_only = 9;
+
+ optional bool small_ops = 10;
+
+ optional CompiledQuery compiled_query = 5;
+
+ optional CompiledCursor compiled_cursor = 6;
+
+ repeated CompositeIndex index = 8;
+
+ repeated int64 version = 11;
+}
+
+message AllocateIdsRequest {
+ optional InternalHeader header = 4;
+
+ optional Reference model_key = 1;
+
+ optional int64 size = 2;
+
+ optional int64 max = 3;
+
+ repeated Reference reserve = 5;
+}
+
+message AllocateIdsResponse {
+ required int64 start = 1;
+ required int64 end = 2;
+ optional Cost cost = 3;
+}
+
+message CompositeIndices {
+ repeated CompositeIndex index = 1;
+}
+
+message AddActionsRequest {
+ optional InternalHeader header = 3;
+
+ required Transaction transaction = 1;
+ repeated Action action = 2;
+}
+
+message AddActionsResponse {
+}
+
+message BeginTransactionRequest {
+ optional InternalHeader header = 3;
+
+ required string app = 1;
+ optional bool allow_multiple_eg = 2 [default = false];
+ optional string database_id = 4;
+
+ enum TransactionMode {
+ UNKNOWN = 0;
+ READ_ONLY = 1;
+ READ_WRITE = 2;
+ }
+ optional TransactionMode mode = 5 [default = UNKNOWN];
+
+ optional Transaction previous_transaction = 7;
+}
+
+message CommitResponse {
+ optional Cost cost = 1;
+
+ repeated group Version = 3 {
+ required Reference root_entity_key = 4;
+ required int64 version = 5;
+ }
+}
diff --git a/vendor/google.golang.org/appengine/internal/identity.go b/vendor/google.golang.org/appengine/internal/identity.go
new file mode 100644
index 0000000..d538701
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/identity.go
@@ -0,0 +1,14 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package internal
+
+import netcontext "golang.org/x/net/context"
+
+// These functions are implementations of the wrapper functions
+// in ../appengine/identity.go. See that file for commentary.
+
+func AppID(c netcontext.Context) string {
+ return appID(FullyQualifiedAppID(c))
+}
diff --git a/vendor/google.golang.org/appengine/internal/identity_vm.go b/vendor/google.golang.org/appengine/internal/identity_vm.go
new file mode 100644
index 0000000..d5fa75b
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/identity_vm.go
@@ -0,0 +1,101 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+// +build !appengine
+
+package internal
+
+import (
+ "net/http"
+ "os"
+
+ netcontext "golang.org/x/net/context"
+)
+
+// These functions are implementations of the wrapper functions
+// in ../appengine/identity.go. See that file for commentary.
+
+const (
+ hDefaultVersionHostname = "X-AppEngine-Default-Version-Hostname"
+ hRequestLogId = "X-AppEngine-Request-Log-Id"
+ hDatacenter = "X-AppEngine-Datacenter"
+)
+
+func ctxHeaders(ctx netcontext.Context) http.Header {
+ c := fromContext(ctx)
+ if c == nil {
+ return nil
+ }
+ return c.Request().Header
+}
+
+func DefaultVersionHostname(ctx netcontext.Context) string {
+ return ctxHeaders(ctx).Get(hDefaultVersionHostname)
+}
+
+func RequestID(ctx netcontext.Context) string {
+ return ctxHeaders(ctx).Get(hRequestLogId)
+}
+
+func Datacenter(ctx netcontext.Context) string {
+ return ctxHeaders(ctx).Get(hDatacenter)
+}
+
+func ServerSoftware() string {
+ // TODO(dsymonds): Remove fallback when we've verified this.
+ if s := os.Getenv("SERVER_SOFTWARE"); s != "" {
+ return s
+ }
+ return "Google App Engine/1.x.x"
+}
+
+// TODO(dsymonds): Remove the metadata fetches.
+
+func ModuleName(_ netcontext.Context) string {
+ if s := os.Getenv("GAE_MODULE_NAME"); s != "" {
+ return s
+ }
+ return string(mustGetMetadata("instance/attributes/gae_backend_name"))
+}
+
+func VersionID(_ netcontext.Context) string {
+ if s1, s2 := os.Getenv("GAE_MODULE_VERSION"), os.Getenv("GAE_MINOR_VERSION"); s1 != "" && s2 != "" {
+ return s1 + "." + s2
+ }
+ return string(mustGetMetadata("instance/attributes/gae_backend_version")) + "." + string(mustGetMetadata("instance/attributes/gae_backend_minor_version"))
+}
+
+func InstanceID() string {
+ if s := os.Getenv("GAE_MODULE_INSTANCE"); s != "" {
+ return s
+ }
+ return string(mustGetMetadata("instance/attributes/gae_backend_instance"))
+}
+
+func partitionlessAppID() string {
+ // gae_project has everything except the partition prefix.
+ appID := os.Getenv("GAE_LONG_APP_ID")
+ if appID == "" {
+ appID = string(mustGetMetadata("instance/attributes/gae_project"))
+ }
+ return appID
+}
+
+func fullyQualifiedAppID(_ netcontext.Context) string {
+ appID := partitionlessAppID()
+
+ part := os.Getenv("GAE_PARTITION")
+ if part == "" {
+ part = string(mustGetMetadata("instance/attributes/gae_partition"))
+ }
+
+ if part != "" {
+ appID = part + "~" + appID
+ }
+ return appID
+}
+
+func IsDevAppServer() bool {
+ return os.Getenv("RUN_WITH_DEVAPPSERVER") != ""
+}
diff --git a/vendor/google.golang.org/appengine/internal/internal.go b/vendor/google.golang.org/appengine/internal/internal.go
new file mode 100644
index 0000000..051ea39
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/internal.go
@@ -0,0 +1,110 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+// Package internal provides support for package appengine.
+//
+// Programs should not use this package directly. Its API is not stable.
+// Use packages appengine and appengine/* instead.
+package internal
+
+import (
+ "fmt"
+
+ "github.com/golang/protobuf/proto"
+
+ remotepb "google.golang.org/appengine/internal/remote_api"
+)
+
+// errorCodeMaps is a map of service name to the error code map for the service.
+var errorCodeMaps = make(map[string]map[int32]string)
+
+// RegisterErrorCodeMap is called from API implementations to register their
+// error code map. This should only be called from init functions.
+func RegisterErrorCodeMap(service string, m map[int32]string) {
+ errorCodeMaps[service] = m
+}
+
+type timeoutCodeKey struct {
+ service string
+ code int32
+}
+
+// timeoutCodes is the set of service+code pairs that represent timeouts.
+var timeoutCodes = make(map[timeoutCodeKey]bool)
+
+func RegisterTimeoutErrorCode(service string, code int32) {
+ timeoutCodes[timeoutCodeKey{service, code}] = true
+}
+
+// APIError is the type returned by appengine.Context's Call method
+// when an API call fails in an API-specific way. This may be, for instance,
+// a taskqueue API call failing with TaskQueueServiceError::UNKNOWN_QUEUE.
+type APIError struct {
+ Service string
+ Detail string
+ Code int32 // API-specific error code
+}
+
+func (e *APIError) Error() string {
+ if e.Code == 0 {
+ if e.Detail == "" {
+ return "APIError <empty>"
+ }
+ return e.Detail
+ }
+ s := fmt.Sprintf("API error %d", e.Code)
+ if m, ok := errorCodeMaps[e.Service]; ok {
+ s += " (" + e.Service + ": " + m[e.Code] + ")"
+ } else {
+ // Shouldn't happen, but provide a bit more detail if it does.
+ s = e.Service + " " + s
+ }
+ if e.Detail != "" {
+ s += ": " + e.Detail
+ }
+ return s
+}
+
+func (e *APIError) IsTimeout() bool {
+ return timeoutCodes[timeoutCodeKey{e.Service, e.Code}]
+}
+
+// CallError is the type returned by appengine.Context's Call method when an
+// API call fails in a generic way, such as RpcError::CAPABILITY_DISABLED.
+type CallError struct {
+ Detail string
+ Code int32
+ // TODO: Remove this if we get a distinguishable error code.
+ Timeout bool
+}
+
+func (e *CallError) Error() string {
+ var msg string
+ switch remotepb.RpcError_ErrorCode(e.Code) {
+ case remotepb.RpcError_UNKNOWN:
+ return e.Detail
+ case remotepb.RpcError_OVER_QUOTA:
+ msg = "Over quota"
+ case remotepb.RpcError_CAPABILITY_DISABLED:
+ msg = "Capability disabled"
+ case remotepb.RpcError_CANCELLED:
+ msg = "Canceled"
+ default:
+ msg = fmt.Sprintf("Call error %d", e.Code)
+ }
+ s := msg + ": " + e.Detail
+ if e.Timeout {
+ s += " (timeout)"
+ }
+ return s
+}
+
+func (e *CallError) IsTimeout() bool {
+ return e.Timeout
+}
+
+// NamespaceMods is a map from API service to a function that will mutate an RPC request to attach a namespace.
+// The function should be prepared to be called on the same message more than once; it should only modify the
+// RPC request the first time.
+var NamespaceMods = make(map[string]func(m proto.Message, namespace string))
diff --git a/vendor/google.golang.org/appengine/internal/log/log_service.pb.go b/vendor/google.golang.org/appengine/internal/log/log_service.pb.go
new file mode 100644
index 0000000..8545ac4
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/log/log_service.pb.go
@@ -0,0 +1,1313 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google.golang.org/appengine/internal/log/log_service.proto
+
+package log
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type LogServiceError_ErrorCode int32
+
+const (
+ LogServiceError_OK LogServiceError_ErrorCode = 0
+ LogServiceError_INVALID_REQUEST LogServiceError_ErrorCode = 1
+ LogServiceError_STORAGE_ERROR LogServiceError_ErrorCode = 2
+)
+
+var LogServiceError_ErrorCode_name = map[int32]string{
+ 0: "OK",
+ 1: "INVALID_REQUEST",
+ 2: "STORAGE_ERROR",
+}
+var LogServiceError_ErrorCode_value = map[string]int32{
+ "OK": 0,
+ "INVALID_REQUEST": 1,
+ "STORAGE_ERROR": 2,
+}
+
+func (x LogServiceError_ErrorCode) Enum() *LogServiceError_ErrorCode {
+ p := new(LogServiceError_ErrorCode)
+ *p = x
+ return p
+}
+func (x LogServiceError_ErrorCode) String() string {
+ return proto.EnumName(LogServiceError_ErrorCode_name, int32(x))
+}
+func (x *LogServiceError_ErrorCode) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(LogServiceError_ErrorCode_value, data, "LogServiceError_ErrorCode")
+ if err != nil {
+ return err
+ }
+ *x = LogServiceError_ErrorCode(value)
+ return nil
+}
+func (LogServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{0, 0}
+}
+
+type LogServiceError struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LogServiceError) Reset() { *m = LogServiceError{} }
+func (m *LogServiceError) String() string { return proto.CompactTextString(m) }
+func (*LogServiceError) ProtoMessage() {}
+func (*LogServiceError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{0}
+}
+func (m *LogServiceError) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LogServiceError.Unmarshal(m, b)
+}
+func (m *LogServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LogServiceError.Marshal(b, m, deterministic)
+}
+func (dst *LogServiceError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LogServiceError.Merge(dst, src)
+}
+func (m *LogServiceError) XXX_Size() int {
+ return xxx_messageInfo_LogServiceError.Size(m)
+}
+func (m *LogServiceError) XXX_DiscardUnknown() {
+ xxx_messageInfo_LogServiceError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogServiceError proto.InternalMessageInfo
+
+type UserAppLogLine struct {
+ TimestampUsec *int64 `protobuf:"varint,1,req,name=timestamp_usec,json=timestampUsec" json:"timestamp_usec,omitempty"`
+ Level *int64 `protobuf:"varint,2,req,name=level" json:"level,omitempty"`
+ Message *string `protobuf:"bytes,3,req,name=message" json:"message,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *UserAppLogLine) Reset() { *m = UserAppLogLine{} }
+func (m *UserAppLogLine) String() string { return proto.CompactTextString(m) }
+func (*UserAppLogLine) ProtoMessage() {}
+func (*UserAppLogLine) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{1}
+}
+func (m *UserAppLogLine) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_UserAppLogLine.Unmarshal(m, b)
+}
+func (m *UserAppLogLine) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_UserAppLogLine.Marshal(b, m, deterministic)
+}
+func (dst *UserAppLogLine) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UserAppLogLine.Merge(dst, src)
+}
+func (m *UserAppLogLine) XXX_Size() int {
+ return xxx_messageInfo_UserAppLogLine.Size(m)
+}
+func (m *UserAppLogLine) XXX_DiscardUnknown() {
+ xxx_messageInfo_UserAppLogLine.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserAppLogLine proto.InternalMessageInfo
+
+func (m *UserAppLogLine) GetTimestampUsec() int64 {
+ if m != nil && m.TimestampUsec != nil {
+ return *m.TimestampUsec
+ }
+ return 0
+}
+
+func (m *UserAppLogLine) GetLevel() int64 {
+ if m != nil && m.Level != nil {
+ return *m.Level
+ }
+ return 0
+}
+
+func (m *UserAppLogLine) GetMessage() string {
+ if m != nil && m.Message != nil {
+ return *m.Message
+ }
+ return ""
+}
+
+type UserAppLogGroup struct {
+ LogLine []*UserAppLogLine `protobuf:"bytes,2,rep,name=log_line,json=logLine" json:"log_line,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *UserAppLogGroup) Reset() { *m = UserAppLogGroup{} }
+func (m *UserAppLogGroup) String() string { return proto.CompactTextString(m) }
+func (*UserAppLogGroup) ProtoMessage() {}
+func (*UserAppLogGroup) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{2}
+}
+func (m *UserAppLogGroup) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_UserAppLogGroup.Unmarshal(m, b)
+}
+func (m *UserAppLogGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_UserAppLogGroup.Marshal(b, m, deterministic)
+}
+func (dst *UserAppLogGroup) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UserAppLogGroup.Merge(dst, src)
+}
+func (m *UserAppLogGroup) XXX_Size() int {
+ return xxx_messageInfo_UserAppLogGroup.Size(m)
+}
+func (m *UserAppLogGroup) XXX_DiscardUnknown() {
+ xxx_messageInfo_UserAppLogGroup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserAppLogGroup proto.InternalMessageInfo
+
+func (m *UserAppLogGroup) GetLogLine() []*UserAppLogLine {
+ if m != nil {
+ return m.LogLine
+ }
+ return nil
+}
+
+type FlushRequest struct {
+ Logs []byte `protobuf:"bytes,1,opt,name=logs" json:"logs,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *FlushRequest) Reset() { *m = FlushRequest{} }
+func (m *FlushRequest) String() string { return proto.CompactTextString(m) }
+func (*FlushRequest) ProtoMessage() {}
+func (*FlushRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{3}
+}
+func (m *FlushRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_FlushRequest.Unmarshal(m, b)
+}
+func (m *FlushRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_FlushRequest.Marshal(b, m, deterministic)
+}
+func (dst *FlushRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_FlushRequest.Merge(dst, src)
+}
+func (m *FlushRequest) XXX_Size() int {
+ return xxx_messageInfo_FlushRequest.Size(m)
+}
+func (m *FlushRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_FlushRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FlushRequest proto.InternalMessageInfo
+
+func (m *FlushRequest) GetLogs() []byte {
+ if m != nil {
+ return m.Logs
+ }
+ return nil
+}
+
+type SetStatusRequest struct {
+ Status *string `protobuf:"bytes,1,req,name=status" json:"status,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SetStatusRequest) Reset() { *m = SetStatusRequest{} }
+func (m *SetStatusRequest) String() string { return proto.CompactTextString(m) }
+func (*SetStatusRequest) ProtoMessage() {}
+func (*SetStatusRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{4}
+}
+func (m *SetStatusRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SetStatusRequest.Unmarshal(m, b)
+}
+func (m *SetStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SetStatusRequest.Marshal(b, m, deterministic)
+}
+func (dst *SetStatusRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SetStatusRequest.Merge(dst, src)
+}
+func (m *SetStatusRequest) XXX_Size() int {
+ return xxx_messageInfo_SetStatusRequest.Size(m)
+}
+func (m *SetStatusRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_SetStatusRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SetStatusRequest proto.InternalMessageInfo
+
+func (m *SetStatusRequest) GetStatus() string {
+ if m != nil && m.Status != nil {
+ return *m.Status
+ }
+ return ""
+}
+
+type LogOffset struct {
+ RequestId []byte `protobuf:"bytes,1,opt,name=request_id,json=requestId" json:"request_id,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LogOffset) Reset() { *m = LogOffset{} }
+func (m *LogOffset) String() string { return proto.CompactTextString(m) }
+func (*LogOffset) ProtoMessage() {}
+func (*LogOffset) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{5}
+}
+func (m *LogOffset) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LogOffset.Unmarshal(m, b)
+}
+func (m *LogOffset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LogOffset.Marshal(b, m, deterministic)
+}
+func (dst *LogOffset) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LogOffset.Merge(dst, src)
+}
+func (m *LogOffset) XXX_Size() int {
+ return xxx_messageInfo_LogOffset.Size(m)
+}
+func (m *LogOffset) XXX_DiscardUnknown() {
+ xxx_messageInfo_LogOffset.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogOffset proto.InternalMessageInfo
+
+func (m *LogOffset) GetRequestId() []byte {
+ if m != nil {
+ return m.RequestId
+ }
+ return nil
+}
+
+type LogLine struct {
+ Time *int64 `protobuf:"varint,1,req,name=time" json:"time,omitempty"`
+ Level *int32 `protobuf:"varint,2,req,name=level" json:"level,omitempty"`
+ LogMessage *string `protobuf:"bytes,3,req,name=log_message,json=logMessage" json:"log_message,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LogLine) Reset() { *m = LogLine{} }
+func (m *LogLine) String() string { return proto.CompactTextString(m) }
+func (*LogLine) ProtoMessage() {}
+func (*LogLine) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{6}
+}
+func (m *LogLine) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LogLine.Unmarshal(m, b)
+}
+func (m *LogLine) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LogLine.Marshal(b, m, deterministic)
+}
+func (dst *LogLine) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LogLine.Merge(dst, src)
+}
+func (m *LogLine) XXX_Size() int {
+ return xxx_messageInfo_LogLine.Size(m)
+}
+func (m *LogLine) XXX_DiscardUnknown() {
+ xxx_messageInfo_LogLine.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogLine proto.InternalMessageInfo
+
+func (m *LogLine) GetTime() int64 {
+ if m != nil && m.Time != nil {
+ return *m.Time
+ }
+ return 0
+}
+
+func (m *LogLine) GetLevel() int32 {
+ if m != nil && m.Level != nil {
+ return *m.Level
+ }
+ return 0
+}
+
+func (m *LogLine) GetLogMessage() string {
+ if m != nil && m.LogMessage != nil {
+ return *m.LogMessage
+ }
+ return ""
+}
+
+type RequestLog struct {
+ AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"`
+ ModuleId *string `protobuf:"bytes,37,opt,name=module_id,json=moduleId,def=default" json:"module_id,omitempty"`
+ VersionId *string `protobuf:"bytes,2,req,name=version_id,json=versionId" json:"version_id,omitempty"`
+ RequestId []byte `protobuf:"bytes,3,req,name=request_id,json=requestId" json:"request_id,omitempty"`
+ Offset *LogOffset `protobuf:"bytes,35,opt,name=offset" json:"offset,omitempty"`
+ Ip *string `protobuf:"bytes,4,req,name=ip" json:"ip,omitempty"`
+ Nickname *string `protobuf:"bytes,5,opt,name=nickname" json:"nickname,omitempty"`
+ StartTime *int64 `protobuf:"varint,6,req,name=start_time,json=startTime" json:"start_time,omitempty"`
+ EndTime *int64 `protobuf:"varint,7,req,name=end_time,json=endTime" json:"end_time,omitempty"`
+ Latency *int64 `protobuf:"varint,8,req,name=latency" json:"latency,omitempty"`
+ Mcycles *int64 `protobuf:"varint,9,req,name=mcycles" json:"mcycles,omitempty"`
+ Method *string `protobuf:"bytes,10,req,name=method" json:"method,omitempty"`
+ Resource *string `protobuf:"bytes,11,req,name=resource" json:"resource,omitempty"`
+ HttpVersion *string `protobuf:"bytes,12,req,name=http_version,json=httpVersion" json:"http_version,omitempty"`
+ Status *int32 `protobuf:"varint,13,req,name=status" json:"status,omitempty"`
+ ResponseSize *int64 `protobuf:"varint,14,req,name=response_size,json=responseSize" json:"response_size,omitempty"`
+ Referrer *string `protobuf:"bytes,15,opt,name=referrer" json:"referrer,omitempty"`
+ UserAgent *string `protobuf:"bytes,16,opt,name=user_agent,json=userAgent" json:"user_agent,omitempty"`
+ UrlMapEntry *string `protobuf:"bytes,17,req,name=url_map_entry,json=urlMapEntry" json:"url_map_entry,omitempty"`
+ Combined *string `protobuf:"bytes,18,req,name=combined" json:"combined,omitempty"`
+ ApiMcycles *int64 `protobuf:"varint,19,opt,name=api_mcycles,json=apiMcycles" json:"api_mcycles,omitempty"`
+ Host *string `protobuf:"bytes,20,opt,name=host" json:"host,omitempty"`
+ Cost *float64 `protobuf:"fixed64,21,opt,name=cost" json:"cost,omitempty"`
+ TaskQueueName *string `protobuf:"bytes,22,opt,name=task_queue_name,json=taskQueueName" json:"task_queue_name,omitempty"`
+ TaskName *string `protobuf:"bytes,23,opt,name=task_name,json=taskName" json:"task_name,omitempty"`
+ WasLoadingRequest *bool `protobuf:"varint,24,opt,name=was_loading_request,json=wasLoadingRequest" json:"was_loading_request,omitempty"`
+ PendingTime *int64 `protobuf:"varint,25,opt,name=pending_time,json=pendingTime" json:"pending_time,omitempty"`
+ ReplicaIndex *int32 `protobuf:"varint,26,opt,name=replica_index,json=replicaIndex,def=-1" json:"replica_index,omitempty"`
+ Finished *bool `protobuf:"varint,27,opt,name=finished,def=1" json:"finished,omitempty"`
+ CloneKey []byte `protobuf:"bytes,28,opt,name=clone_key,json=cloneKey" json:"clone_key,omitempty"`
+ Line []*LogLine `protobuf:"bytes,29,rep,name=line" json:"line,omitempty"`
+ LinesIncomplete *bool `protobuf:"varint,36,opt,name=lines_incomplete,json=linesIncomplete" json:"lines_incomplete,omitempty"`
+ AppEngineRelease []byte `protobuf:"bytes,38,opt,name=app_engine_release,json=appEngineRelease" json:"app_engine_release,omitempty"`
+ ExitReason *int32 `protobuf:"varint,30,opt,name=exit_reason,json=exitReason" json:"exit_reason,omitempty"`
+ WasThrottledForTime *bool `protobuf:"varint,31,opt,name=was_throttled_for_time,json=wasThrottledForTime" json:"was_throttled_for_time,omitempty"`
+ WasThrottledForRequests *bool `protobuf:"varint,32,opt,name=was_throttled_for_requests,json=wasThrottledForRequests" json:"was_throttled_for_requests,omitempty"`
+ ThrottledTime *int64 `protobuf:"varint,33,opt,name=throttled_time,json=throttledTime" json:"throttled_time,omitempty"`
+ ServerName []byte `protobuf:"bytes,34,opt,name=server_name,json=serverName" json:"server_name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *RequestLog) Reset() { *m = RequestLog{} }
+func (m *RequestLog) String() string { return proto.CompactTextString(m) }
+func (*RequestLog) ProtoMessage() {}
+func (*RequestLog) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{7}
+}
+func (m *RequestLog) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_RequestLog.Unmarshal(m, b)
+}
+func (m *RequestLog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_RequestLog.Marshal(b, m, deterministic)
+}
+func (dst *RequestLog) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RequestLog.Merge(dst, src)
+}
+func (m *RequestLog) XXX_Size() int {
+ return xxx_messageInfo_RequestLog.Size(m)
+}
+func (m *RequestLog) XXX_DiscardUnknown() {
+ xxx_messageInfo_RequestLog.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RequestLog proto.InternalMessageInfo
+
+const Default_RequestLog_ModuleId string = "default"
+const Default_RequestLog_ReplicaIndex int32 = -1
+const Default_RequestLog_Finished bool = true
+
+func (m *RequestLog) GetAppId() string {
+ if m != nil && m.AppId != nil {
+ return *m.AppId
+ }
+ return ""
+}
+
+func (m *RequestLog) GetModuleId() string {
+ if m != nil && m.ModuleId != nil {
+ return *m.ModuleId
+ }
+ return Default_RequestLog_ModuleId
+}
+
+func (m *RequestLog) GetVersionId() string {
+ if m != nil && m.VersionId != nil {
+ return *m.VersionId
+ }
+ return ""
+}
+
+func (m *RequestLog) GetRequestId() []byte {
+ if m != nil {
+ return m.RequestId
+ }
+ return nil
+}
+
+func (m *RequestLog) GetOffset() *LogOffset {
+ if m != nil {
+ return m.Offset
+ }
+ return nil
+}
+
+func (m *RequestLog) GetIp() string {
+ if m != nil && m.Ip != nil {
+ return *m.Ip
+ }
+ return ""
+}
+
+func (m *RequestLog) GetNickname() string {
+ if m != nil && m.Nickname != nil {
+ return *m.Nickname
+ }
+ return ""
+}
+
+func (m *RequestLog) GetStartTime() int64 {
+ if m != nil && m.StartTime != nil {
+ return *m.StartTime
+ }
+ return 0
+}
+
+func (m *RequestLog) GetEndTime() int64 {
+ if m != nil && m.EndTime != nil {
+ return *m.EndTime
+ }
+ return 0
+}
+
+func (m *RequestLog) GetLatency() int64 {
+ if m != nil && m.Latency != nil {
+ return *m.Latency
+ }
+ return 0
+}
+
+func (m *RequestLog) GetMcycles() int64 {
+ if m != nil && m.Mcycles != nil {
+ return *m.Mcycles
+ }
+ return 0
+}
+
+func (m *RequestLog) GetMethod() string {
+ if m != nil && m.Method != nil {
+ return *m.Method
+ }
+ return ""
+}
+
+func (m *RequestLog) GetResource() string {
+ if m != nil && m.Resource != nil {
+ return *m.Resource
+ }
+ return ""
+}
+
+func (m *RequestLog) GetHttpVersion() string {
+ if m != nil && m.HttpVersion != nil {
+ return *m.HttpVersion
+ }
+ return ""
+}
+
+func (m *RequestLog) GetStatus() int32 {
+ if m != nil && m.Status != nil {
+ return *m.Status
+ }
+ return 0
+}
+
+func (m *RequestLog) GetResponseSize() int64 {
+ if m != nil && m.ResponseSize != nil {
+ return *m.ResponseSize
+ }
+ return 0
+}
+
+func (m *RequestLog) GetReferrer() string {
+ if m != nil && m.Referrer != nil {
+ return *m.Referrer
+ }
+ return ""
+}
+
+func (m *RequestLog) GetUserAgent() string {
+ if m != nil && m.UserAgent != nil {
+ return *m.UserAgent
+ }
+ return ""
+}
+
+func (m *RequestLog) GetUrlMapEntry() string {
+ if m != nil && m.UrlMapEntry != nil {
+ return *m.UrlMapEntry
+ }
+ return ""
+}
+
+func (m *RequestLog) GetCombined() string {
+ if m != nil && m.Combined != nil {
+ return *m.Combined
+ }
+ return ""
+}
+
+func (m *RequestLog) GetApiMcycles() int64 {
+ if m != nil && m.ApiMcycles != nil {
+ return *m.ApiMcycles
+ }
+ return 0
+}
+
+func (m *RequestLog) GetHost() string {
+ if m != nil && m.Host != nil {
+ return *m.Host
+ }
+ return ""
+}
+
+func (m *RequestLog) GetCost() float64 {
+ if m != nil && m.Cost != nil {
+ return *m.Cost
+ }
+ return 0
+}
+
+func (m *RequestLog) GetTaskQueueName() string {
+ if m != nil && m.TaskQueueName != nil {
+ return *m.TaskQueueName
+ }
+ return ""
+}
+
+func (m *RequestLog) GetTaskName() string {
+ if m != nil && m.TaskName != nil {
+ return *m.TaskName
+ }
+ return ""
+}
+
+func (m *RequestLog) GetWasLoadingRequest() bool {
+ if m != nil && m.WasLoadingRequest != nil {
+ return *m.WasLoadingRequest
+ }
+ return false
+}
+
+func (m *RequestLog) GetPendingTime() int64 {
+ if m != nil && m.PendingTime != nil {
+ return *m.PendingTime
+ }
+ return 0
+}
+
+func (m *RequestLog) GetReplicaIndex() int32 {
+ if m != nil && m.ReplicaIndex != nil {
+ return *m.ReplicaIndex
+ }
+ return Default_RequestLog_ReplicaIndex
+}
+
+func (m *RequestLog) GetFinished() bool {
+ if m != nil && m.Finished != nil {
+ return *m.Finished
+ }
+ return Default_RequestLog_Finished
+}
+
+func (m *RequestLog) GetCloneKey() []byte {
+ if m != nil {
+ return m.CloneKey
+ }
+ return nil
+}
+
+func (m *RequestLog) GetLine() []*LogLine {
+ if m != nil {
+ return m.Line
+ }
+ return nil
+}
+
+func (m *RequestLog) GetLinesIncomplete() bool {
+ if m != nil && m.LinesIncomplete != nil {
+ return *m.LinesIncomplete
+ }
+ return false
+}
+
+func (m *RequestLog) GetAppEngineRelease() []byte {
+ if m != nil {
+ return m.AppEngineRelease
+ }
+ return nil
+}
+
+func (m *RequestLog) GetExitReason() int32 {
+ if m != nil && m.ExitReason != nil {
+ return *m.ExitReason
+ }
+ return 0
+}
+
+func (m *RequestLog) GetWasThrottledForTime() bool {
+ if m != nil && m.WasThrottledForTime != nil {
+ return *m.WasThrottledForTime
+ }
+ return false
+}
+
+func (m *RequestLog) GetWasThrottledForRequests() bool {
+ if m != nil && m.WasThrottledForRequests != nil {
+ return *m.WasThrottledForRequests
+ }
+ return false
+}
+
+func (m *RequestLog) GetThrottledTime() int64 {
+ if m != nil && m.ThrottledTime != nil {
+ return *m.ThrottledTime
+ }
+ return 0
+}
+
+func (m *RequestLog) GetServerName() []byte {
+ if m != nil {
+ return m.ServerName
+ }
+ return nil
+}
+
+type LogModuleVersion struct {
+ ModuleId *string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,def=default" json:"module_id,omitempty"`
+ VersionId *string `protobuf:"bytes,2,opt,name=version_id,json=versionId" json:"version_id,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LogModuleVersion) Reset() { *m = LogModuleVersion{} }
+func (m *LogModuleVersion) String() string { return proto.CompactTextString(m) }
+func (*LogModuleVersion) ProtoMessage() {}
+func (*LogModuleVersion) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{8}
+}
+func (m *LogModuleVersion) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LogModuleVersion.Unmarshal(m, b)
+}
+func (m *LogModuleVersion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LogModuleVersion.Marshal(b, m, deterministic)
+}
+func (dst *LogModuleVersion) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LogModuleVersion.Merge(dst, src)
+}
+func (m *LogModuleVersion) XXX_Size() int {
+ return xxx_messageInfo_LogModuleVersion.Size(m)
+}
+func (m *LogModuleVersion) XXX_DiscardUnknown() {
+ xxx_messageInfo_LogModuleVersion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogModuleVersion proto.InternalMessageInfo
+
+const Default_LogModuleVersion_ModuleId string = "default"
+
+func (m *LogModuleVersion) GetModuleId() string {
+ if m != nil && m.ModuleId != nil {
+ return *m.ModuleId
+ }
+ return Default_LogModuleVersion_ModuleId
+}
+
+func (m *LogModuleVersion) GetVersionId() string {
+ if m != nil && m.VersionId != nil {
+ return *m.VersionId
+ }
+ return ""
+}
+
+type LogReadRequest struct {
+ AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"`
+ VersionId []string `protobuf:"bytes,2,rep,name=version_id,json=versionId" json:"version_id,omitempty"`
+ ModuleVersion []*LogModuleVersion `protobuf:"bytes,19,rep,name=module_version,json=moduleVersion" json:"module_version,omitempty"`
+ StartTime *int64 `protobuf:"varint,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"`
+ EndTime *int64 `protobuf:"varint,4,opt,name=end_time,json=endTime" json:"end_time,omitempty"`
+ Offset *LogOffset `protobuf:"bytes,5,opt,name=offset" json:"offset,omitempty"`
+ RequestId [][]byte `protobuf:"bytes,6,rep,name=request_id,json=requestId" json:"request_id,omitempty"`
+ MinimumLogLevel *int32 `protobuf:"varint,7,opt,name=minimum_log_level,json=minimumLogLevel" json:"minimum_log_level,omitempty"`
+ IncludeIncomplete *bool `protobuf:"varint,8,opt,name=include_incomplete,json=includeIncomplete" json:"include_incomplete,omitempty"`
+ Count *int64 `protobuf:"varint,9,opt,name=count" json:"count,omitempty"`
+ CombinedLogRegex *string `protobuf:"bytes,14,opt,name=combined_log_regex,json=combinedLogRegex" json:"combined_log_regex,omitempty"`
+ HostRegex *string `protobuf:"bytes,15,opt,name=host_regex,json=hostRegex" json:"host_regex,omitempty"`
+ ReplicaIndex *int32 `protobuf:"varint,16,opt,name=replica_index,json=replicaIndex" json:"replica_index,omitempty"`
+ IncludeAppLogs *bool `protobuf:"varint,10,opt,name=include_app_logs,json=includeAppLogs" json:"include_app_logs,omitempty"`
+ AppLogsPerRequest *int32 `protobuf:"varint,17,opt,name=app_logs_per_request,json=appLogsPerRequest" json:"app_logs_per_request,omitempty"`
+ IncludeHost *bool `protobuf:"varint,11,opt,name=include_host,json=includeHost" json:"include_host,omitempty"`
+ IncludeAll *bool `protobuf:"varint,12,opt,name=include_all,json=includeAll" json:"include_all,omitempty"`
+ CacheIterator *bool `protobuf:"varint,13,opt,name=cache_iterator,json=cacheIterator" json:"cache_iterator,omitempty"`
+ NumShards *int32 `protobuf:"varint,18,opt,name=num_shards,json=numShards" json:"num_shards,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LogReadRequest) Reset() { *m = LogReadRequest{} }
+func (m *LogReadRequest) String() string { return proto.CompactTextString(m) }
+func (*LogReadRequest) ProtoMessage() {}
+func (*LogReadRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{9}
+}
+func (m *LogReadRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LogReadRequest.Unmarshal(m, b)
+}
+func (m *LogReadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LogReadRequest.Marshal(b, m, deterministic)
+}
+func (dst *LogReadRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LogReadRequest.Merge(dst, src)
+}
+func (m *LogReadRequest) XXX_Size() int {
+ return xxx_messageInfo_LogReadRequest.Size(m)
+}
+func (m *LogReadRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_LogReadRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogReadRequest proto.InternalMessageInfo
+
+func (m *LogReadRequest) GetAppId() string {
+ if m != nil && m.AppId != nil {
+ return *m.AppId
+ }
+ return ""
+}
+
+func (m *LogReadRequest) GetVersionId() []string {
+ if m != nil {
+ return m.VersionId
+ }
+ return nil
+}
+
+func (m *LogReadRequest) GetModuleVersion() []*LogModuleVersion {
+ if m != nil {
+ return m.ModuleVersion
+ }
+ return nil
+}
+
+func (m *LogReadRequest) GetStartTime() int64 {
+ if m != nil && m.StartTime != nil {
+ return *m.StartTime
+ }
+ return 0
+}
+
+func (m *LogReadRequest) GetEndTime() int64 {
+ if m != nil && m.EndTime != nil {
+ return *m.EndTime
+ }
+ return 0
+}
+
+func (m *LogReadRequest) GetOffset() *LogOffset {
+ if m != nil {
+ return m.Offset
+ }
+ return nil
+}
+
+func (m *LogReadRequest) GetRequestId() [][]byte {
+ if m != nil {
+ return m.RequestId
+ }
+ return nil
+}
+
+func (m *LogReadRequest) GetMinimumLogLevel() int32 {
+ if m != nil && m.MinimumLogLevel != nil {
+ return *m.MinimumLogLevel
+ }
+ return 0
+}
+
+func (m *LogReadRequest) GetIncludeIncomplete() bool {
+ if m != nil && m.IncludeIncomplete != nil {
+ return *m.IncludeIncomplete
+ }
+ return false
+}
+
+func (m *LogReadRequest) GetCount() int64 {
+ if m != nil && m.Count != nil {
+ return *m.Count
+ }
+ return 0
+}
+
+func (m *LogReadRequest) GetCombinedLogRegex() string {
+ if m != nil && m.CombinedLogRegex != nil {
+ return *m.CombinedLogRegex
+ }
+ return ""
+}
+
+func (m *LogReadRequest) GetHostRegex() string {
+ if m != nil && m.HostRegex != nil {
+ return *m.HostRegex
+ }
+ return ""
+}
+
+func (m *LogReadRequest) GetReplicaIndex() int32 {
+ if m != nil && m.ReplicaIndex != nil {
+ return *m.ReplicaIndex
+ }
+ return 0
+}
+
+func (m *LogReadRequest) GetIncludeAppLogs() bool {
+ if m != nil && m.IncludeAppLogs != nil {
+ return *m.IncludeAppLogs
+ }
+ return false
+}
+
+func (m *LogReadRequest) GetAppLogsPerRequest() int32 {
+ if m != nil && m.AppLogsPerRequest != nil {
+ return *m.AppLogsPerRequest
+ }
+ return 0
+}
+
+func (m *LogReadRequest) GetIncludeHost() bool {
+ if m != nil && m.IncludeHost != nil {
+ return *m.IncludeHost
+ }
+ return false
+}
+
+func (m *LogReadRequest) GetIncludeAll() bool {
+ if m != nil && m.IncludeAll != nil {
+ return *m.IncludeAll
+ }
+ return false
+}
+
+func (m *LogReadRequest) GetCacheIterator() bool {
+ if m != nil && m.CacheIterator != nil {
+ return *m.CacheIterator
+ }
+ return false
+}
+
+func (m *LogReadRequest) GetNumShards() int32 {
+ if m != nil && m.NumShards != nil {
+ return *m.NumShards
+ }
+ return 0
+}
+
+type LogReadResponse struct {
+ Log []*RequestLog `protobuf:"bytes,1,rep,name=log" json:"log,omitempty"`
+ Offset *LogOffset `protobuf:"bytes,2,opt,name=offset" json:"offset,omitempty"`
+ LastEndTime *int64 `protobuf:"varint,3,opt,name=last_end_time,json=lastEndTime" json:"last_end_time,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LogReadResponse) Reset() { *m = LogReadResponse{} }
+func (m *LogReadResponse) String() string { return proto.CompactTextString(m) }
+func (*LogReadResponse) ProtoMessage() {}
+func (*LogReadResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{10}
+}
+func (m *LogReadResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LogReadResponse.Unmarshal(m, b)
+}
+func (m *LogReadResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LogReadResponse.Marshal(b, m, deterministic)
+}
+func (dst *LogReadResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LogReadResponse.Merge(dst, src)
+}
+func (m *LogReadResponse) XXX_Size() int {
+ return xxx_messageInfo_LogReadResponse.Size(m)
+}
+func (m *LogReadResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_LogReadResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogReadResponse proto.InternalMessageInfo
+
+func (m *LogReadResponse) GetLog() []*RequestLog {
+ if m != nil {
+ return m.Log
+ }
+ return nil
+}
+
+func (m *LogReadResponse) GetOffset() *LogOffset {
+ if m != nil {
+ return m.Offset
+ }
+ return nil
+}
+
+func (m *LogReadResponse) GetLastEndTime() int64 {
+ if m != nil && m.LastEndTime != nil {
+ return *m.LastEndTime
+ }
+ return 0
+}
+
+type LogUsageRecord struct {
+ VersionId *string `protobuf:"bytes,1,opt,name=version_id,json=versionId" json:"version_id,omitempty"`
+ StartTime *int32 `protobuf:"varint,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"`
+ EndTime *int32 `protobuf:"varint,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"`
+ Count *int64 `protobuf:"varint,4,opt,name=count" json:"count,omitempty"`
+ TotalSize *int64 `protobuf:"varint,5,opt,name=total_size,json=totalSize" json:"total_size,omitempty"`
+ Records *int32 `protobuf:"varint,6,opt,name=records" json:"records,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LogUsageRecord) Reset() { *m = LogUsageRecord{} }
+func (m *LogUsageRecord) String() string { return proto.CompactTextString(m) }
+func (*LogUsageRecord) ProtoMessage() {}
+func (*LogUsageRecord) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{11}
+}
+func (m *LogUsageRecord) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LogUsageRecord.Unmarshal(m, b)
+}
+func (m *LogUsageRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LogUsageRecord.Marshal(b, m, deterministic)
+}
+func (dst *LogUsageRecord) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LogUsageRecord.Merge(dst, src)
+}
+func (m *LogUsageRecord) XXX_Size() int {
+ return xxx_messageInfo_LogUsageRecord.Size(m)
+}
+func (m *LogUsageRecord) XXX_DiscardUnknown() {
+ xxx_messageInfo_LogUsageRecord.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogUsageRecord proto.InternalMessageInfo
+
+func (m *LogUsageRecord) GetVersionId() string {
+ if m != nil && m.VersionId != nil {
+ return *m.VersionId
+ }
+ return ""
+}
+
+func (m *LogUsageRecord) GetStartTime() int32 {
+ if m != nil && m.StartTime != nil {
+ return *m.StartTime
+ }
+ return 0
+}
+
+func (m *LogUsageRecord) GetEndTime() int32 {
+ if m != nil && m.EndTime != nil {
+ return *m.EndTime
+ }
+ return 0
+}
+
+func (m *LogUsageRecord) GetCount() int64 {
+ if m != nil && m.Count != nil {
+ return *m.Count
+ }
+ return 0
+}
+
+func (m *LogUsageRecord) GetTotalSize() int64 {
+ if m != nil && m.TotalSize != nil {
+ return *m.TotalSize
+ }
+ return 0
+}
+
+func (m *LogUsageRecord) GetRecords() int32 {
+ if m != nil && m.Records != nil {
+ return *m.Records
+ }
+ return 0
+}
+
+type LogUsageRequest struct {
+ AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"`
+ VersionId []string `protobuf:"bytes,2,rep,name=version_id,json=versionId" json:"version_id,omitempty"`
+ StartTime *int32 `protobuf:"varint,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"`
+ EndTime *int32 `protobuf:"varint,4,opt,name=end_time,json=endTime" json:"end_time,omitempty"`
+ ResolutionHours *uint32 `protobuf:"varint,5,opt,name=resolution_hours,json=resolutionHours,def=1" json:"resolution_hours,omitempty"`
+ CombineVersions *bool `protobuf:"varint,6,opt,name=combine_versions,json=combineVersions" json:"combine_versions,omitempty"`
+ UsageVersion *int32 `protobuf:"varint,7,opt,name=usage_version,json=usageVersion" json:"usage_version,omitempty"`
+ VersionsOnly *bool `protobuf:"varint,8,opt,name=versions_only,json=versionsOnly" json:"versions_only,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LogUsageRequest) Reset() { *m = LogUsageRequest{} }
+func (m *LogUsageRequest) String() string { return proto.CompactTextString(m) }
+func (*LogUsageRequest) ProtoMessage() {}
+func (*LogUsageRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{12}
+}
+func (m *LogUsageRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LogUsageRequest.Unmarshal(m, b)
+}
+func (m *LogUsageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LogUsageRequest.Marshal(b, m, deterministic)
+}
+func (dst *LogUsageRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LogUsageRequest.Merge(dst, src)
+}
+func (m *LogUsageRequest) XXX_Size() int {
+ return xxx_messageInfo_LogUsageRequest.Size(m)
+}
+func (m *LogUsageRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_LogUsageRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogUsageRequest proto.InternalMessageInfo
+
+const Default_LogUsageRequest_ResolutionHours uint32 = 1
+
+func (m *LogUsageRequest) GetAppId() string {
+ if m != nil && m.AppId != nil {
+ return *m.AppId
+ }
+ return ""
+}
+
+func (m *LogUsageRequest) GetVersionId() []string {
+ if m != nil {
+ return m.VersionId
+ }
+ return nil
+}
+
+func (m *LogUsageRequest) GetStartTime() int32 {
+ if m != nil && m.StartTime != nil {
+ return *m.StartTime
+ }
+ return 0
+}
+
+func (m *LogUsageRequest) GetEndTime() int32 {
+ if m != nil && m.EndTime != nil {
+ return *m.EndTime
+ }
+ return 0
+}
+
+func (m *LogUsageRequest) GetResolutionHours() uint32 {
+ if m != nil && m.ResolutionHours != nil {
+ return *m.ResolutionHours
+ }
+ return Default_LogUsageRequest_ResolutionHours
+}
+
+func (m *LogUsageRequest) GetCombineVersions() bool {
+ if m != nil && m.CombineVersions != nil {
+ return *m.CombineVersions
+ }
+ return false
+}
+
+func (m *LogUsageRequest) GetUsageVersion() int32 {
+ if m != nil && m.UsageVersion != nil {
+ return *m.UsageVersion
+ }
+ return 0
+}
+
+func (m *LogUsageRequest) GetVersionsOnly() bool {
+ if m != nil && m.VersionsOnly != nil {
+ return *m.VersionsOnly
+ }
+ return false
+}
+
+type LogUsageResponse struct {
+ Usage []*LogUsageRecord `protobuf:"bytes,1,rep,name=usage" json:"usage,omitempty"`
+ Summary *LogUsageRecord `protobuf:"bytes,2,opt,name=summary" json:"summary,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LogUsageResponse) Reset() { *m = LogUsageResponse{} }
+func (m *LogUsageResponse) String() string { return proto.CompactTextString(m) }
+func (*LogUsageResponse) ProtoMessage() {}
+func (*LogUsageResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_log_service_f054fd4b5012319d, []int{13}
+}
+func (m *LogUsageResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LogUsageResponse.Unmarshal(m, b)
+}
+func (m *LogUsageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LogUsageResponse.Marshal(b, m, deterministic)
+}
+func (dst *LogUsageResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LogUsageResponse.Merge(dst, src)
+}
+func (m *LogUsageResponse) XXX_Size() int {
+ return xxx_messageInfo_LogUsageResponse.Size(m)
+}
+func (m *LogUsageResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_LogUsageResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogUsageResponse proto.InternalMessageInfo
+
+func (m *LogUsageResponse) GetUsage() []*LogUsageRecord {
+ if m != nil {
+ return m.Usage
+ }
+ return nil
+}
+
+func (m *LogUsageResponse) GetSummary() *LogUsageRecord {
+ if m != nil {
+ return m.Summary
+ }
+ return nil
+}
+
+func init() {
+ proto.RegisterType((*LogServiceError)(nil), "appengine.LogServiceError")
+ proto.RegisterType((*UserAppLogLine)(nil), "appengine.UserAppLogLine")
+ proto.RegisterType((*UserAppLogGroup)(nil), "appengine.UserAppLogGroup")
+ proto.RegisterType((*FlushRequest)(nil), "appengine.FlushRequest")
+ proto.RegisterType((*SetStatusRequest)(nil), "appengine.SetStatusRequest")
+ proto.RegisterType((*LogOffset)(nil), "appengine.LogOffset")
+ proto.RegisterType((*LogLine)(nil), "appengine.LogLine")
+ proto.RegisterType((*RequestLog)(nil), "appengine.RequestLog")
+ proto.RegisterType((*LogModuleVersion)(nil), "appengine.LogModuleVersion")
+ proto.RegisterType((*LogReadRequest)(nil), "appengine.LogReadRequest")
+ proto.RegisterType((*LogReadResponse)(nil), "appengine.LogReadResponse")
+ proto.RegisterType((*LogUsageRecord)(nil), "appengine.LogUsageRecord")
+ proto.RegisterType((*LogUsageRequest)(nil), "appengine.LogUsageRequest")
+ proto.RegisterType((*LogUsageResponse)(nil), "appengine.LogUsageResponse")
+}
+
+func init() {
+ proto.RegisterFile("google.golang.org/appengine/internal/log/log_service.proto", fileDescriptor_log_service_f054fd4b5012319d)
+}
+
+var fileDescriptor_log_service_f054fd4b5012319d = []byte{
+ // 1553 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x72, 0xdb, 0xc6,
+ 0x15, 0x2e, 0x48, 0x51, 0x24, 0x0f, 0x49, 0x91, 0x5a, 0xcb, 0xce, 0xda, 0xae, 0x6b, 0x1a, 0x4e,
+ 0x1c, 0xd6, 0x93, 0x48, 0x93, 0xa4, 0x57, 0xca, 0x95, 0xd3, 0x2a, 0x8e, 0x26, 0xb4, 0xd5, 0x40,
+ 0x72, 0x3a, 0xd3, 0x1b, 0x0c, 0x0a, 0x1c, 0x81, 0x18, 0x2f, 0xb1, 0xc8, 0xee, 0xc2, 0x91, 0x72,
+ 0xdb, 0xdb, 0x3e, 0x46, 0x1f, 0xa2, 0xaf, 0xd2, 0xb7, 0xe9, 0xec, 0xd9, 0x05, 0x44, 0x2a, 0x4d,
+ 0xc6, 0x33, 0xb9, 0xe0, 0x10, 0xfb, 0x9d, 0x83, 0xdd, 0xf3, 0xf3, 0x9d, 0x6f, 0x01, 0xc7, 0xb9,
+ 0x94, 0xb9, 0xc0, 0xc3, 0x5c, 0x8a, 0xa4, 0xcc, 0x0f, 0xa5, 0xca, 0x8f, 0x92, 0xaa, 0xc2, 0x32,
+ 0x2f, 0x4a, 0x3c, 0x2a, 0x4a, 0x83, 0xaa, 0x4c, 0xc4, 0x91, 0x90, 0xb9, 0xfd, 0xc5, 0x1a, 0xd5,
+ 0xbb, 0x22, 0xc5, 0xc3, 0x4a, 0x49, 0x23, 0xd9, 0xb0, 0xf5, 0x0c, 0x5f, 0xc3, 0x74, 0x29, 0xf3,
+ 0x73, 0x67, 0x3e, 0x51, 0x4a, 0xaa, 0xf0, 0x4b, 0x18, 0xd2, 0xc3, 0x9f, 0x65, 0x86, 0x6c, 0x17,
+ 0x3a, 0x67, 0xdf, 0xce, 0x7e, 0xc7, 0xee, 0xc0, 0xf4, 0xf4, 0xf5, 0xf7, 0x2f, 0x96, 0xa7, 0x7f,
+ 0x89, 0xa3, 0x93, 0xef, 0xde, 0x9c, 0x9c, 0x5f, 0xcc, 0x02, 0xb6, 0x0f, 0x93, 0xf3, 0x8b, 0xb3,
+ 0xe8, 0xc5, 0xcb, 0x93, 0xf8, 0x24, 0x8a, 0xce, 0xa2, 0x59, 0x27, 0xcc, 0x61, 0xef, 0x8d, 0x46,
+ 0xf5, 0xa2, 0xaa, 0x96, 0x32, 0x5f, 0x16, 0x25, 0xb2, 0x8f, 0x60, 0xcf, 0x14, 0x6b, 0xd4, 0x26,
+ 0x59, 0x57, 0x71, 0xad, 0x31, 0xe5, 0xc1, 0xbc, 0xb3, 0xe8, 0x46, 0x93, 0x16, 0x7d, 0xa3, 0x31,
+ 0x65, 0x07, 0xd0, 0x13, 0xf8, 0x0e, 0x05, 0xef, 0x90, 0xd5, 0x2d, 0x18, 0x87, 0xfe, 0x1a, 0xb5,
+ 0x4e, 0x72, 0xe4, 0xdd, 0x79, 0x67, 0x31, 0x8c, 0x9a, 0x65, 0xf8, 0x12, 0xa6, 0x37, 0x07, 0xbd,
+ 0x54, 0xb2, 0xae, 0xd8, 0x9f, 0x60, 0x60, 0x73, 0x15, 0x45, 0x89, 0xbc, 0x33, 0xef, 0x2e, 0x46,
+ 0x9f, 0xdf, 0x3f, 0x6c, 0x33, 0x3d, 0xdc, 0x0e, 0x2b, 0xea, 0x0b, 0xf7, 0x10, 0x86, 0x30, 0xfe,
+ 0x5a, 0xd4, 0x7a, 0x15, 0xe1, 0x0f, 0x35, 0x6a, 0xc3, 0x18, 0xec, 0x08, 0x99, 0x6b, 0x1e, 0xcc,
+ 0x83, 0xc5, 0x38, 0xa2, 0xe7, 0xf0, 0x39, 0xcc, 0xce, 0xd1, 0x9c, 0x9b, 0xc4, 0xd4, 0xba, 0xf1,
+ 0xbb, 0x07, 0xbb, 0x9a, 0x00, 0xca, 0x67, 0x18, 0xf9, 0x55, 0xf8, 0x1c, 0x86, 0x4b, 0x99, 0x9f,
+ 0x5d, 0x5e, 0x6a, 0x34, 0xec, 0x11, 0x80, 0x72, 0xfe, 0x71, 0x91, 0xf9, 0x2d, 0x87, 0x1e, 0x39,
+ 0xcd, 0xc2, 0x0b, 0xe8, 0x37, 0x65, 0x62, 0xb0, 0x63, 0x0b, 0xe2, 0x8b, 0x43, 0xcf, 0xdb, 0x35,
+ 0xe9, 0x35, 0x35, 0x79, 0x0c, 0x23, 0x9b, 0xe6, 0x76, 0x5d, 0x40, 0xc8, 0xfc, 0x95, 0x2f, 0xcd,
+ 0x3f, 0x01, 0xc0, 0x47, 0xb9, 0x94, 0x39, 0xbb, 0x0b, 0xbb, 0x49, 0x55, 0xb9, 0xf3, 0xad, 0x6b,
+ 0x2f, 0xa9, 0xaa, 0xd3, 0x8c, 0x7d, 0x08, 0xc3, 0xb5, 0xcc, 0x6a, 0x81, 0xd6, 0xf2, 0xd1, 0x3c,
+ 0x58, 0x0c, 0x8f, 0xfb, 0x19, 0x5e, 0x26, 0xb5, 0x30, 0xd1, 0xc0, 0x59, 0x4e, 0x33, 0x9b, 0xc0,
+ 0x3b, 0x54, 0xba, 0x90, 0xa5, 0x75, 0xeb, 0xd0, 0x06, 0x43, 0x8f, 0x38, 0xf3, 0x46, 0x7e, 0x36,
+ 0x94, 0xcd, 0xfc, 0xd8, 0x27, 0xb0, 0x2b, 0xa9, 0x10, 0xfc, 0xe9, 0x3c, 0x58, 0x8c, 0x3e, 0x3f,
+ 0xd8, 0xe8, 0x47, 0x5b, 0xa4, 0xc8, 0xfb, 0xb0, 0x3d, 0xe8, 0x14, 0x15, 0xdf, 0xa1, 0x33, 0x3a,
+ 0x45, 0xc5, 0x1e, 0xc0, 0xa0, 0x2c, 0xd2, 0xb7, 0x65, 0xb2, 0x46, 0xde, 0xb3, 0x01, 0x46, 0xed,
+ 0xda, 0x1e, 0xac, 0x4d, 0xa2, 0x4c, 0x4c, 0x45, 0xdb, 0xa5, 0xa2, 0x0d, 0x09, 0xb9, 0xb0, 0x95,
+ 0xbb, 0x0f, 0x03, 0x2c, 0x33, 0x67, 0xec, 0x93, 0xb1, 0x8f, 0x65, 0x46, 0x26, 0x0e, 0x7d, 0x91,
+ 0x18, 0x2c, 0xd3, 0x6b, 0x3e, 0x70, 0x16, 0xbf, 0x24, 0xb2, 0xa5, 0xd7, 0xa9, 0x40, 0xcd, 0x87,
+ 0xce, 0xe2, 0x97, 0xb6, 0xd7, 0x6b, 0x34, 0x2b, 0x99, 0x71, 0x70, 0xbd, 0x76, 0x2b, 0x1b, 0xa1,
+ 0x42, 0x2d, 0x6b, 0x95, 0x22, 0x1f, 0x91, 0xa5, 0x5d, 0xb3, 0x27, 0x30, 0x5e, 0x19, 0x53, 0xc5,
+ 0xbe, 0x58, 0x7c, 0x4c, 0xf6, 0x91, 0xc5, 0xbe, 0x77, 0xd0, 0x06, 0x85, 0x26, 0xd4, 0x60, 0xbf,
+ 0x62, 0x4f, 0x61, 0xa2, 0x50, 0x57, 0xb2, 0xd4, 0x18, 0xeb, 0xe2, 0x27, 0xe4, 0x7b, 0x14, 0xce,
+ 0xb8, 0x01, 0xcf, 0x8b, 0x9f, 0xd0, 0x9d, 0x7d, 0x89, 0x4a, 0xa1, 0xe2, 0x53, 0x57, 0x9d, 0x66,
+ 0x6d, 0xab, 0x53, 0x6b, 0x54, 0x71, 0x92, 0x63, 0x69, 0xf8, 0x8c, 0xac, 0x43, 0x8b, 0xbc, 0xb0,
+ 0x00, 0x0b, 0x61, 0x52, 0x2b, 0x11, 0xaf, 0x93, 0x2a, 0xc6, 0xd2, 0xa8, 0x6b, 0xbe, 0xef, 0x62,
+ 0xab, 0x95, 0x78, 0x95, 0x54, 0x27, 0x16, 0xb2, 0xdb, 0xa7, 0x72, 0xfd, 0x8f, 0xa2, 0xc4, 0x8c,
+ 0x33, 0x97, 0x5a, 0xb3, 0xb6, 0x0c, 0x4c, 0xaa, 0x22, 0x6e, 0x8a, 0x75, 0x67, 0x1e, 0x2c, 0xba,
+ 0x11, 0x24, 0x55, 0xf1, 0xca, 0xd7, 0x8b, 0xc1, 0xce, 0x4a, 0x6a, 0xc3, 0x0f, 0xe8, 0x64, 0x7a,
+ 0xb6, 0x58, 0x6a, 0xb1, 0xbb, 0xf3, 0x60, 0x11, 0x44, 0xf4, 0xcc, 0x9e, 0xc1, 0xd4, 0x24, 0xfa,
+ 0x6d, 0xfc, 0x43, 0x8d, 0x35, 0xc6, 0xd4, 0xe8, 0x7b, 0xf4, 0xca, 0xc4, 0xc2, 0xdf, 0x59, 0xf4,
+ 0xb5, 0xed, 0xf6, 0x43, 0x18, 0x92, 0x1f, 0x79, 0x7c, 0xe0, 0x92, 0xb5, 0x00, 0x19, 0x0f, 0xe1,
+ 0xce, 0x8f, 0x89, 0x8e, 0x85, 0x4c, 0xb2, 0xa2, 0xcc, 0x63, 0xcf, 0x3e, 0xce, 0xe7, 0xc1, 0x62,
+ 0x10, 0xed, 0xff, 0x98, 0xe8, 0xa5, 0xb3, 0x34, 0x83, 0xfb, 0x04, 0xc6, 0x15, 0x96, 0xe4, 0x4b,
+ 0xfc, 0xb8, 0x4f, 0xe1, 0x8f, 0x3c, 0x46, 0x1c, 0xf9, 0xd8, 0x36, 0xa0, 0x12, 0x45, 0x9a, 0xc4,
+ 0x45, 0x99, 0xe1, 0x15, 0x7f, 0x30, 0x0f, 0x16, 0xbd, 0xe3, 0xce, 0xa7, 0x9f, 0xd9, 0x26, 0x90,
+ 0xe1, 0xd4, 0xe2, 0x6c, 0x0e, 0x83, 0xcb, 0xa2, 0x2c, 0xf4, 0x0a, 0x33, 0xfe, 0xd0, 0x1e, 0x78,
+ 0xbc, 0x63, 0x54, 0x8d, 0x51, 0x8b, 0xda, 0xd0, 0x53, 0x21, 0x4b, 0x8c, 0xdf, 0xe2, 0x35, 0xff,
+ 0x3d, 0x09, 0xc0, 0x80, 0x80, 0x6f, 0xf1, 0x9a, 0x3d, 0x83, 0x1d, 0x52, 0xab, 0x47, 0xa4, 0x56,
+ 0x6c, 0x7b, 0x3a, 0x48, 0xa6, 0xc8, 0xce, 0xfe, 0x08, 0x33, 0xfb, 0xaf, 0xe3, 0xa2, 0x4c, 0xe5,
+ 0xba, 0x12, 0x68, 0x90, 0x7f, 0x48, 0xf9, 0x4d, 0x09, 0x3f, 0x6d, 0x61, 0xf6, 0x09, 0x30, 0x3b,
+ 0xed, 0x6e, 0x9b, 0x58, 0xa1, 0xc0, 0x44, 0x23, 0x7f, 0x46, 0x07, 0xcf, 0x92, 0xaa, 0x3a, 0x21,
+ 0x43, 0xe4, 0x70, 0xdb, 0x49, 0xbc, 0x2a, 0x4c, 0xac, 0x30, 0xd1, 0xb2, 0xe4, 0x7f, 0xb0, 0x69,
+ 0x46, 0x60, 0xa1, 0x88, 0x10, 0xf6, 0x05, 0xdc, 0xb3, 0xc5, 0x35, 0x2b, 0x25, 0x8d, 0x11, 0x98,
+ 0xc5, 0x97, 0x52, 0xb9, 0xb2, 0x3d, 0xa6, 0xf3, 0x6d, 0xe9, 0x2f, 0x1a, 0xe3, 0xd7, 0x52, 0x51,
+ 0xf9, 0xbe, 0x84, 0x07, 0x3f, 0x7f, 0xc9, 0xf7, 0x45, 0xf3, 0x39, 0xbd, 0xf8, 0xc1, 0xad, 0x17,
+ 0x7d, 0x77, 0x34, 0xdd, 0x17, 0xed, 0x8b, 0x74, 0xd2, 0x13, 0x6a, 0xd0, 0xa4, 0x45, 0xe9, 0x8c,
+ 0xc7, 0x30, 0xb2, 0x97, 0x1a, 0x2a, 0x47, 0x8a, 0x90, 0x12, 0x04, 0x07, 0x59, 0x5a, 0x84, 0x7f,
+ 0x83, 0xd9, 0x52, 0xe6, 0xaf, 0x48, 0xc8, 0x9a, 0x81, 0xdb, 0xd2, 0xbc, 0xe0, 0x7d, 0x35, 0x2f,
+ 0xd8, 0xd2, 0xbc, 0xf0, 0xbf, 0x3d, 0xd8, 0x5b, 0xca, 0x3c, 0xc2, 0x24, 0x6b, 0x28, 0xf5, 0x0b,
+ 0x12, 0x7b, 0x7b, 0xa3, 0xee, 0xb6, 0x78, 0x7e, 0x05, 0x7b, 0x3e, 0x9a, 0x46, 0x23, 0xee, 0x10,
+ 0x0f, 0x1e, 0x6e, 0xf3, 0x60, 0x2b, 0x85, 0x68, 0xb2, 0xde, 0xca, 0x68, 0x5b, 0x07, 0xbb, 0x54,
+ 0xa9, 0x5f, 0xd0, 0xc1, 0x1d, 0x32, 0xb6, 0x3a, 0x78, 0xa3, 0xcd, 0xbd, 0xf7, 0xd0, 0xe6, 0x6d,
+ 0xa1, 0xdf, 0x9d, 0x77, 0xb7, 0x85, 0xfe, 0x39, 0xec, 0xaf, 0x8b, 0xb2, 0x58, 0xd7, 0xeb, 0x98,
+ 0xae, 0x60, 0xba, 0xb5, 0xfa, 0xc4, 0xa6, 0xa9, 0x37, 0x58, 0x46, 0xd3, 0xfd, 0xf5, 0x29, 0xb0,
+ 0xa2, 0x4c, 0x45, 0x9d, 0xe1, 0x26, 0x9d, 0x07, 0x6e, 0x5c, 0xbd, 0x65, 0x83, 0xd0, 0x07, 0xd0,
+ 0x4b, 0x65, 0x5d, 0x1a, 0x3e, 0xa4, 0xf8, 0xdd, 0xc2, 0xd2, 0xbc, 0x91, 0x23, 0x3a, 0x51, 0x61,
+ 0x8e, 0x57, 0x7c, 0x8f, 0x7a, 0x35, 0x6b, 0x2c, 0xd4, 0xa5, 0x1c, 0xaf, 0x6c, 0xf4, 0x56, 0x83,
+ 0xbc, 0x97, 0x53, 0xcb, 0xa1, 0x45, 0x9c, 0xf9, 0xe9, 0xed, 0x71, 0x9f, 0x51, 0xe4, 0xdb, 0xa3,
+ 0xbe, 0x80, 0x59, 0x13, 0xb6, 0xed, 0x35, 0x7d, 0x23, 0x00, 0x05, 0xbd, 0xe7, 0x71, 0xf7, 0x75,
+ 0xa1, 0xd9, 0x11, 0x1c, 0x34, 0x1e, 0x71, 0x85, 0x2d, 0xf3, 0xf9, 0x3e, 0xed, 0xba, 0x9f, 0x38,
+ 0xb7, 0xbf, 0xa2, 0xda, 0x50, 0xa4, 0x66, 0x6b, 0x92, 0xcd, 0x11, 0x6d, 0x3b, 0xf2, 0xd8, 0x37,
+ 0x56, 0x29, 0x1f, 0xc3, 0xa8, 0x3d, 0x5d, 0x08, 0x3e, 0x26, 0x0f, 0x68, 0x0e, 0x16, 0xc2, 0x8e,
+ 0x4d, 0x9a, 0xa4, 0x2b, 0x8c, 0x0b, 0x83, 0x2a, 0x31, 0x52, 0xf1, 0x09, 0xf9, 0x4c, 0x08, 0x3d,
+ 0xf5, 0xa0, 0xad, 0x44, 0x59, 0xaf, 0x63, 0xbd, 0x4a, 0x54, 0xa6, 0x39, 0xa3, 0x88, 0x86, 0x65,
+ 0xbd, 0x3e, 0x27, 0x20, 0xfc, 0x57, 0x40, 0xdf, 0x83, 0x8e, 0xdb, 0xee, 0xb2, 0x61, 0x1f, 0x43,
+ 0x57, 0xc8, 0x9c, 0x07, 0xc4, 0xcd, 0xbb, 0x1b, 0x2c, 0xb9, 0xf9, 0xc6, 0x88, 0xac, 0xc7, 0x06,
+ 0xa3, 0x3a, 0xef, 0xc1, 0xa8, 0x10, 0x26, 0x22, 0xd1, 0x26, 0x6e, 0xf9, 0xe9, 0xc8, 0x3b, 0xb2,
+ 0xe0, 0x89, 0xe3, 0x68, 0xf8, 0x9f, 0x80, 0x46, 0xed, 0x8d, 0xfd, 0xac, 0x89, 0x30, 0x95, 0xea,
+ 0xf6, 0x4c, 0x05, 0xb7, 0x86, 0xf3, 0xd6, 0x3c, 0x74, 0x5c, 0x7e, 0xff, 0x7f, 0x1e, 0xba, 0x64,
+ 0x6c, 0xe7, 0xa1, 0xe5, 0xd9, 0xce, 0x26, 0xcf, 0x1e, 0x01, 0x18, 0x69, 0x12, 0xe1, 0xee, 0xe1,
+ 0x9e, 0x9b, 0x2f, 0x42, 0xe8, 0x12, 0xe6, 0xd0, 0x57, 0x14, 0x97, 0xe6, 0xbb, 0x6e, 0x3b, 0xbf,
+ 0x0c, 0xff, 0xdd, 0xa1, 0x4a, 0xfa, 0xd0, 0x7f, 0x8b, 0x4c, 0xfc, 0x7c, 0xc4, 0x7b, 0xbf, 0x36,
+ 0xe2, 0xbd, 0xcd, 0x11, 0x9f, 0xd9, 0xcf, 0x11, 0x51, 0x1b, 0xbb, 0xf7, 0x4a, 0xd6, 0x4a, 0x53,
+ 0x0a, 0x93, 0xe3, 0xe0, 0xb3, 0x68, 0x7a, 0x63, 0xfa, 0xc6, 0x5a, 0xec, 0x25, 0xe3, 0x07, 0xa7,
+ 0xd1, 0x23, 0x97, 0xd4, 0x20, 0x9a, 0x7a, 0xdc, 0x8b, 0x0e, 0x7d, 0xa0, 0xd4, 0x36, 0xb1, 0x56,
+ 0xb8, 0xdc, 0xa8, 0x8f, 0x09, 0x6c, 0xa4, 0xe9, 0x29, 0x4c, 0x9a, 0x7d, 0x62, 0x59, 0x8a, 0x6b,
+ 0x3f, 0xe2, 0xe3, 0x06, 0x3c, 0x2b, 0xc5, 0x75, 0x78, 0x45, 0x2a, 0xed, 0xab, 0xe4, 0x09, 0x77,
+ 0x04, 0x3d, 0xda, 0xc8, 0x53, 0xee, 0xfe, 0x36, 0x8d, 0x36, 0xc8, 0x10, 0x39, 0x3f, 0xf6, 0x05,
+ 0xf4, 0x75, 0xbd, 0x5e, 0x27, 0xea, 0xda, 0x33, 0xef, 0x57, 0x5e, 0x69, 0x3c, 0xbf, 0xea, 0xfd,
+ 0xdd, 0x92, 0xf6, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x70, 0xd9, 0xa0, 0xf8, 0x48, 0x0d, 0x00,
+ 0x00,
+}
diff --git a/vendor/google.golang.org/appengine/internal/log/log_service.proto b/vendor/google.golang.org/appengine/internal/log/log_service.proto
new file mode 100644
index 0000000..8981dc4
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/log/log_service.proto
@@ -0,0 +1,150 @@
+syntax = "proto2";
+option go_package = "log";
+
+package appengine;
+
+message LogServiceError {
+ enum ErrorCode {
+ OK = 0;
+ INVALID_REQUEST = 1;
+ STORAGE_ERROR = 2;
+ }
+}
+
+message UserAppLogLine {
+ required int64 timestamp_usec = 1;
+ required int64 level = 2;
+ required string message = 3;
+}
+
+message UserAppLogGroup {
+ repeated UserAppLogLine log_line = 2;
+}
+
+message FlushRequest {
+ optional bytes logs = 1;
+}
+
+message SetStatusRequest {
+ required string status = 1;
+}
+
+
+message LogOffset {
+ optional bytes request_id = 1;
+}
+
+message LogLine {
+ required int64 time = 1;
+ required int32 level = 2;
+ required string log_message = 3;
+}
+
+message RequestLog {
+ required string app_id = 1;
+ optional string module_id = 37 [default="default"];
+ required string version_id = 2;
+ required bytes request_id = 3;
+ optional LogOffset offset = 35;
+ required string ip = 4;
+ optional string nickname = 5;
+ required int64 start_time = 6;
+ required int64 end_time = 7;
+ required int64 latency = 8;
+ required int64 mcycles = 9;
+ required string method = 10;
+ required string resource = 11;
+ required string http_version = 12;
+ required int32 status = 13;
+ required int64 response_size = 14;
+ optional string referrer = 15;
+ optional string user_agent = 16;
+ required string url_map_entry = 17;
+ required string combined = 18;
+ optional int64 api_mcycles = 19;
+ optional string host = 20;
+ optional double cost = 21;
+
+ optional string task_queue_name = 22;
+ optional string task_name = 23;
+
+ optional bool was_loading_request = 24;
+ optional int64 pending_time = 25;
+ optional int32 replica_index = 26 [default = -1];
+ optional bool finished = 27 [default = true];
+ optional bytes clone_key = 28;
+
+ repeated LogLine line = 29;
+
+ optional bool lines_incomplete = 36;
+ optional bytes app_engine_release = 38;
+
+ optional int32 exit_reason = 30;
+ optional bool was_throttled_for_time = 31;
+ optional bool was_throttled_for_requests = 32;
+ optional int64 throttled_time = 33;
+
+ optional bytes server_name = 34;
+}
+
+message LogModuleVersion {
+ optional string module_id = 1 [default="default"];
+ optional string version_id = 2;
+}
+
+message LogReadRequest {
+ required string app_id = 1;
+ repeated string version_id = 2;
+ repeated LogModuleVersion module_version = 19;
+
+ optional int64 start_time = 3;
+ optional int64 end_time = 4;
+ optional LogOffset offset = 5;
+ repeated bytes request_id = 6;
+
+ optional int32 minimum_log_level = 7;
+ optional bool include_incomplete = 8;
+ optional int64 count = 9;
+
+ optional string combined_log_regex = 14;
+ optional string host_regex = 15;
+ optional int32 replica_index = 16;
+
+ optional bool include_app_logs = 10;
+ optional int32 app_logs_per_request = 17;
+ optional bool include_host = 11;
+ optional bool include_all = 12;
+ optional bool cache_iterator = 13;
+ optional int32 num_shards = 18;
+}
+
+message LogReadResponse {
+ repeated RequestLog log = 1;
+ optional LogOffset offset = 2;
+ optional int64 last_end_time = 3;
+}
+
+message LogUsageRecord {
+ optional string version_id = 1;
+ optional int32 start_time = 2;
+ optional int32 end_time = 3;
+ optional int64 count = 4;
+ optional int64 total_size = 5;
+ optional int32 records = 6;
+}
+
+message LogUsageRequest {
+ required string app_id = 1;
+ repeated string version_id = 2;
+ optional int32 start_time = 3;
+ optional int32 end_time = 4;
+ optional uint32 resolution_hours = 5 [default = 1];
+ optional bool combine_versions = 6;
+ optional int32 usage_version = 7;
+ optional bool versions_only = 8;
+}
+
+message LogUsageResponse {
+ repeated LogUsageRecord usage = 1;
+ optional LogUsageRecord summary = 2;
+}
diff --git a/vendor/google.golang.org/appengine/internal/main_vm.go b/vendor/google.golang.org/appengine/internal/main_vm.go
new file mode 100644
index 0000000..822e784
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/main_vm.go
@@ -0,0 +1,48 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+// +build !appengine
+
+package internal
+
+import (
+ "io"
+ "log"
+ "net/http"
+ "net/url"
+ "os"
+)
+
+func Main() {
+ installHealthChecker(http.DefaultServeMux)
+
+ port := "8080"
+ if s := os.Getenv("PORT"); s != "" {
+ port = s
+ }
+
+ host := ""
+ if IsDevAppServer() {
+ host = "127.0.0.1"
+ }
+ if err := http.ListenAndServe(host+":"+port, http.HandlerFunc(handleHTTP)); err != nil {
+ log.Fatalf("http.ListenAndServe: %v", err)
+ }
+}
+
+func installHealthChecker(mux *http.ServeMux) {
+ // If no health check handler has been installed by this point, add a trivial one.
+ const healthPath = "/_ah/health"
+ hreq := &http.Request{
+ Method: "GET",
+ URL: &url.URL{
+ Path: healthPath,
+ },
+ }
+ if _, pat := mux.Handler(hreq); pat != healthPath {
+ mux.HandleFunc(healthPath, func(w http.ResponseWriter, r *http.Request) {
+ io.WriteString(w, "ok")
+ })
+ }
+}
diff --git a/vendor/google.golang.org/appengine/internal/metadata.go b/vendor/google.golang.org/appengine/internal/metadata.go
new file mode 100644
index 0000000..9cc1f71
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/metadata.go
@@ -0,0 +1,61 @@
+// Copyright 2014 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package internal
+
+// This file has code for accessing metadata.
+//
+// References:
+// https://cloud.google.com/compute/docs/metadata
+
+import (
+ "fmt"
+ "io/ioutil"
+ "log"
+ "net/http"
+ "net/url"
+)
+
+const (
+ metadataHost = "metadata"
+ metadataPath = "/computeMetadata/v1/"
+)
+
+var (
+ metadataRequestHeaders = http.Header{
+ "Metadata-Flavor": []string{"Google"},
+ }
+)
+
+// TODO(dsymonds): Do we need to support default values, like Python?
+func mustGetMetadata(key string) []byte {
+ b, err := getMetadata(key)
+ if err != nil {
+ log.Fatalf("Metadata fetch failed: %v", err)
+ }
+ return b
+}
+
+func getMetadata(key string) ([]byte, error) {
+ // TODO(dsymonds): May need to use url.Parse to support keys with query args.
+ req := &http.Request{
+ Method: "GET",
+ URL: &url.URL{
+ Scheme: "http",
+ Host: metadataHost,
+ Path: metadataPath + key,
+ },
+ Header: metadataRequestHeaders,
+ Host: metadataHost,
+ }
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+ if resp.StatusCode != 200 {
+ return nil, fmt.Errorf("metadata server returned HTTP %d", resp.StatusCode)
+ }
+ return ioutil.ReadAll(resp.Body)
+}
diff --git a/vendor/google.golang.org/appengine/internal/modules/modules_service.pb.go b/vendor/google.golang.org/appengine/internal/modules/modules_service.pb.go
new file mode 100644
index 0000000..ddfc0c0
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/modules/modules_service.pb.go
@@ -0,0 +1,786 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google.golang.org/appengine/internal/modules/modules_service.proto
+
+package modules
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type ModulesServiceError_ErrorCode int32
+
+const (
+ ModulesServiceError_OK ModulesServiceError_ErrorCode = 0
+ ModulesServiceError_INVALID_MODULE ModulesServiceError_ErrorCode = 1
+ ModulesServiceError_INVALID_VERSION ModulesServiceError_ErrorCode = 2
+ ModulesServiceError_INVALID_INSTANCES ModulesServiceError_ErrorCode = 3
+ ModulesServiceError_TRANSIENT_ERROR ModulesServiceError_ErrorCode = 4
+ ModulesServiceError_UNEXPECTED_STATE ModulesServiceError_ErrorCode = 5
+)
+
+var ModulesServiceError_ErrorCode_name = map[int32]string{
+ 0: "OK",
+ 1: "INVALID_MODULE",
+ 2: "INVALID_VERSION",
+ 3: "INVALID_INSTANCES",
+ 4: "TRANSIENT_ERROR",
+ 5: "UNEXPECTED_STATE",
+}
+var ModulesServiceError_ErrorCode_value = map[string]int32{
+ "OK": 0,
+ "INVALID_MODULE": 1,
+ "INVALID_VERSION": 2,
+ "INVALID_INSTANCES": 3,
+ "TRANSIENT_ERROR": 4,
+ "UNEXPECTED_STATE": 5,
+}
+
+func (x ModulesServiceError_ErrorCode) Enum() *ModulesServiceError_ErrorCode {
+ p := new(ModulesServiceError_ErrorCode)
+ *p = x
+ return p
+}
+func (x ModulesServiceError_ErrorCode) String() string {
+ return proto.EnumName(ModulesServiceError_ErrorCode_name, int32(x))
+}
+func (x *ModulesServiceError_ErrorCode) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(ModulesServiceError_ErrorCode_value, data, "ModulesServiceError_ErrorCode")
+ if err != nil {
+ return err
+ }
+ *x = ModulesServiceError_ErrorCode(value)
+ return nil
+}
+func (ModulesServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{0, 0}
+}
+
+type ModulesServiceError struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ModulesServiceError) Reset() { *m = ModulesServiceError{} }
+func (m *ModulesServiceError) String() string { return proto.CompactTextString(m) }
+func (*ModulesServiceError) ProtoMessage() {}
+func (*ModulesServiceError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{0}
+}
+func (m *ModulesServiceError) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ModulesServiceError.Unmarshal(m, b)
+}
+func (m *ModulesServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ModulesServiceError.Marshal(b, m, deterministic)
+}
+func (dst *ModulesServiceError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ModulesServiceError.Merge(dst, src)
+}
+func (m *ModulesServiceError) XXX_Size() int {
+ return xxx_messageInfo_ModulesServiceError.Size(m)
+}
+func (m *ModulesServiceError) XXX_DiscardUnknown() {
+ xxx_messageInfo_ModulesServiceError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ModulesServiceError proto.InternalMessageInfo
+
+type GetModulesRequest struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetModulesRequest) Reset() { *m = GetModulesRequest{} }
+func (m *GetModulesRequest) String() string { return proto.CompactTextString(m) }
+func (*GetModulesRequest) ProtoMessage() {}
+func (*GetModulesRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{1}
+}
+func (m *GetModulesRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetModulesRequest.Unmarshal(m, b)
+}
+func (m *GetModulesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetModulesRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetModulesRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetModulesRequest.Merge(dst, src)
+}
+func (m *GetModulesRequest) XXX_Size() int {
+ return xxx_messageInfo_GetModulesRequest.Size(m)
+}
+func (m *GetModulesRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetModulesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetModulesRequest proto.InternalMessageInfo
+
+type GetModulesResponse struct {
+ Module []string `protobuf:"bytes,1,rep,name=module" json:"module,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetModulesResponse) Reset() { *m = GetModulesResponse{} }
+func (m *GetModulesResponse) String() string { return proto.CompactTextString(m) }
+func (*GetModulesResponse) ProtoMessage() {}
+func (*GetModulesResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{2}
+}
+func (m *GetModulesResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetModulesResponse.Unmarshal(m, b)
+}
+func (m *GetModulesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetModulesResponse.Marshal(b, m, deterministic)
+}
+func (dst *GetModulesResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetModulesResponse.Merge(dst, src)
+}
+func (m *GetModulesResponse) XXX_Size() int {
+ return xxx_messageInfo_GetModulesResponse.Size(m)
+}
+func (m *GetModulesResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetModulesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetModulesResponse proto.InternalMessageInfo
+
+func (m *GetModulesResponse) GetModule() []string {
+ if m != nil {
+ return m.Module
+ }
+ return nil
+}
+
+type GetVersionsRequest struct {
+ Module *string `protobuf:"bytes,1,opt,name=module" json:"module,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetVersionsRequest) Reset() { *m = GetVersionsRequest{} }
+func (m *GetVersionsRequest) String() string { return proto.CompactTextString(m) }
+func (*GetVersionsRequest) ProtoMessage() {}
+func (*GetVersionsRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{3}
+}
+func (m *GetVersionsRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetVersionsRequest.Unmarshal(m, b)
+}
+func (m *GetVersionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetVersionsRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetVersionsRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetVersionsRequest.Merge(dst, src)
+}
+func (m *GetVersionsRequest) XXX_Size() int {
+ return xxx_messageInfo_GetVersionsRequest.Size(m)
+}
+func (m *GetVersionsRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetVersionsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetVersionsRequest proto.InternalMessageInfo
+
+func (m *GetVersionsRequest) GetModule() string {
+ if m != nil && m.Module != nil {
+ return *m.Module
+ }
+ return ""
+}
+
+type GetVersionsResponse struct {
+ Version []string `protobuf:"bytes,1,rep,name=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetVersionsResponse) Reset() { *m = GetVersionsResponse{} }
+func (m *GetVersionsResponse) String() string { return proto.CompactTextString(m) }
+func (*GetVersionsResponse) ProtoMessage() {}
+func (*GetVersionsResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{4}
+}
+func (m *GetVersionsResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetVersionsResponse.Unmarshal(m, b)
+}
+func (m *GetVersionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetVersionsResponse.Marshal(b, m, deterministic)
+}
+func (dst *GetVersionsResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetVersionsResponse.Merge(dst, src)
+}
+func (m *GetVersionsResponse) XXX_Size() int {
+ return xxx_messageInfo_GetVersionsResponse.Size(m)
+}
+func (m *GetVersionsResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetVersionsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetVersionsResponse proto.InternalMessageInfo
+
+func (m *GetVersionsResponse) GetVersion() []string {
+ if m != nil {
+ return m.Version
+ }
+ return nil
+}
+
+type GetDefaultVersionRequest struct {
+ Module *string `protobuf:"bytes,1,opt,name=module" json:"module,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetDefaultVersionRequest) Reset() { *m = GetDefaultVersionRequest{} }
+func (m *GetDefaultVersionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetDefaultVersionRequest) ProtoMessage() {}
+func (*GetDefaultVersionRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{5}
+}
+func (m *GetDefaultVersionRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetDefaultVersionRequest.Unmarshal(m, b)
+}
+func (m *GetDefaultVersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetDefaultVersionRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetDefaultVersionRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetDefaultVersionRequest.Merge(dst, src)
+}
+func (m *GetDefaultVersionRequest) XXX_Size() int {
+ return xxx_messageInfo_GetDefaultVersionRequest.Size(m)
+}
+func (m *GetDefaultVersionRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetDefaultVersionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDefaultVersionRequest proto.InternalMessageInfo
+
+func (m *GetDefaultVersionRequest) GetModule() string {
+ if m != nil && m.Module != nil {
+ return *m.Module
+ }
+ return ""
+}
+
+type GetDefaultVersionResponse struct {
+ Version *string `protobuf:"bytes,1,req,name=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetDefaultVersionResponse) Reset() { *m = GetDefaultVersionResponse{} }
+func (m *GetDefaultVersionResponse) String() string { return proto.CompactTextString(m) }
+func (*GetDefaultVersionResponse) ProtoMessage() {}
+func (*GetDefaultVersionResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{6}
+}
+func (m *GetDefaultVersionResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetDefaultVersionResponse.Unmarshal(m, b)
+}
+func (m *GetDefaultVersionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetDefaultVersionResponse.Marshal(b, m, deterministic)
+}
+func (dst *GetDefaultVersionResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetDefaultVersionResponse.Merge(dst, src)
+}
+func (m *GetDefaultVersionResponse) XXX_Size() int {
+ return xxx_messageInfo_GetDefaultVersionResponse.Size(m)
+}
+func (m *GetDefaultVersionResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetDefaultVersionResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDefaultVersionResponse proto.InternalMessageInfo
+
+func (m *GetDefaultVersionResponse) GetVersion() string {
+ if m != nil && m.Version != nil {
+ return *m.Version
+ }
+ return ""
+}
+
+type GetNumInstancesRequest struct {
+ Module *string `protobuf:"bytes,1,opt,name=module" json:"module,omitempty"`
+ Version *string `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetNumInstancesRequest) Reset() { *m = GetNumInstancesRequest{} }
+func (m *GetNumInstancesRequest) String() string { return proto.CompactTextString(m) }
+func (*GetNumInstancesRequest) ProtoMessage() {}
+func (*GetNumInstancesRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{7}
+}
+func (m *GetNumInstancesRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetNumInstancesRequest.Unmarshal(m, b)
+}
+func (m *GetNumInstancesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetNumInstancesRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetNumInstancesRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetNumInstancesRequest.Merge(dst, src)
+}
+func (m *GetNumInstancesRequest) XXX_Size() int {
+ return xxx_messageInfo_GetNumInstancesRequest.Size(m)
+}
+func (m *GetNumInstancesRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetNumInstancesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetNumInstancesRequest proto.InternalMessageInfo
+
+func (m *GetNumInstancesRequest) GetModule() string {
+ if m != nil && m.Module != nil {
+ return *m.Module
+ }
+ return ""
+}
+
+func (m *GetNumInstancesRequest) GetVersion() string {
+ if m != nil && m.Version != nil {
+ return *m.Version
+ }
+ return ""
+}
+
+type GetNumInstancesResponse struct {
+ Instances *int64 `protobuf:"varint,1,req,name=instances" json:"instances,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetNumInstancesResponse) Reset() { *m = GetNumInstancesResponse{} }
+func (m *GetNumInstancesResponse) String() string { return proto.CompactTextString(m) }
+func (*GetNumInstancesResponse) ProtoMessage() {}
+func (*GetNumInstancesResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{8}
+}
+func (m *GetNumInstancesResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetNumInstancesResponse.Unmarshal(m, b)
+}
+func (m *GetNumInstancesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetNumInstancesResponse.Marshal(b, m, deterministic)
+}
+func (dst *GetNumInstancesResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetNumInstancesResponse.Merge(dst, src)
+}
+func (m *GetNumInstancesResponse) XXX_Size() int {
+ return xxx_messageInfo_GetNumInstancesResponse.Size(m)
+}
+func (m *GetNumInstancesResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetNumInstancesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetNumInstancesResponse proto.InternalMessageInfo
+
+func (m *GetNumInstancesResponse) GetInstances() int64 {
+ if m != nil && m.Instances != nil {
+ return *m.Instances
+ }
+ return 0
+}
+
+type SetNumInstancesRequest struct {
+ Module *string `protobuf:"bytes,1,opt,name=module" json:"module,omitempty"`
+ Version *string `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"`
+ Instances *int64 `protobuf:"varint,3,req,name=instances" json:"instances,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SetNumInstancesRequest) Reset() { *m = SetNumInstancesRequest{} }
+func (m *SetNumInstancesRequest) String() string { return proto.CompactTextString(m) }
+func (*SetNumInstancesRequest) ProtoMessage() {}
+func (*SetNumInstancesRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{9}
+}
+func (m *SetNumInstancesRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SetNumInstancesRequest.Unmarshal(m, b)
+}
+func (m *SetNumInstancesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SetNumInstancesRequest.Marshal(b, m, deterministic)
+}
+func (dst *SetNumInstancesRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SetNumInstancesRequest.Merge(dst, src)
+}
+func (m *SetNumInstancesRequest) XXX_Size() int {
+ return xxx_messageInfo_SetNumInstancesRequest.Size(m)
+}
+func (m *SetNumInstancesRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_SetNumInstancesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SetNumInstancesRequest proto.InternalMessageInfo
+
+func (m *SetNumInstancesRequest) GetModule() string {
+ if m != nil && m.Module != nil {
+ return *m.Module
+ }
+ return ""
+}
+
+func (m *SetNumInstancesRequest) GetVersion() string {
+ if m != nil && m.Version != nil {
+ return *m.Version
+ }
+ return ""
+}
+
+func (m *SetNumInstancesRequest) GetInstances() int64 {
+ if m != nil && m.Instances != nil {
+ return *m.Instances
+ }
+ return 0
+}
+
+type SetNumInstancesResponse struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SetNumInstancesResponse) Reset() { *m = SetNumInstancesResponse{} }
+func (m *SetNumInstancesResponse) String() string { return proto.CompactTextString(m) }
+func (*SetNumInstancesResponse) ProtoMessage() {}
+func (*SetNumInstancesResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{10}
+}
+func (m *SetNumInstancesResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SetNumInstancesResponse.Unmarshal(m, b)
+}
+func (m *SetNumInstancesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SetNumInstancesResponse.Marshal(b, m, deterministic)
+}
+func (dst *SetNumInstancesResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SetNumInstancesResponse.Merge(dst, src)
+}
+func (m *SetNumInstancesResponse) XXX_Size() int {
+ return xxx_messageInfo_SetNumInstancesResponse.Size(m)
+}
+func (m *SetNumInstancesResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_SetNumInstancesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SetNumInstancesResponse proto.InternalMessageInfo
+
+type StartModuleRequest struct {
+ Module *string `protobuf:"bytes,1,req,name=module" json:"module,omitempty"`
+ Version *string `protobuf:"bytes,2,req,name=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *StartModuleRequest) Reset() { *m = StartModuleRequest{} }
+func (m *StartModuleRequest) String() string { return proto.CompactTextString(m) }
+func (*StartModuleRequest) ProtoMessage() {}
+func (*StartModuleRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{11}
+}
+func (m *StartModuleRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_StartModuleRequest.Unmarshal(m, b)
+}
+func (m *StartModuleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_StartModuleRequest.Marshal(b, m, deterministic)
+}
+func (dst *StartModuleRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_StartModuleRequest.Merge(dst, src)
+}
+func (m *StartModuleRequest) XXX_Size() int {
+ return xxx_messageInfo_StartModuleRequest.Size(m)
+}
+func (m *StartModuleRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_StartModuleRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StartModuleRequest proto.InternalMessageInfo
+
+func (m *StartModuleRequest) GetModule() string {
+ if m != nil && m.Module != nil {
+ return *m.Module
+ }
+ return ""
+}
+
+func (m *StartModuleRequest) GetVersion() string {
+ if m != nil && m.Version != nil {
+ return *m.Version
+ }
+ return ""
+}
+
+type StartModuleResponse struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *StartModuleResponse) Reset() { *m = StartModuleResponse{} }
+func (m *StartModuleResponse) String() string { return proto.CompactTextString(m) }
+func (*StartModuleResponse) ProtoMessage() {}
+func (*StartModuleResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{12}
+}
+func (m *StartModuleResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_StartModuleResponse.Unmarshal(m, b)
+}
+func (m *StartModuleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_StartModuleResponse.Marshal(b, m, deterministic)
+}
+func (dst *StartModuleResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_StartModuleResponse.Merge(dst, src)
+}
+func (m *StartModuleResponse) XXX_Size() int {
+ return xxx_messageInfo_StartModuleResponse.Size(m)
+}
+func (m *StartModuleResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_StartModuleResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StartModuleResponse proto.InternalMessageInfo
+
+type StopModuleRequest struct {
+ Module *string `protobuf:"bytes,1,opt,name=module" json:"module,omitempty"`
+ Version *string `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *StopModuleRequest) Reset() { *m = StopModuleRequest{} }
+func (m *StopModuleRequest) String() string { return proto.CompactTextString(m) }
+func (*StopModuleRequest) ProtoMessage() {}
+func (*StopModuleRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{13}
+}
+func (m *StopModuleRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_StopModuleRequest.Unmarshal(m, b)
+}
+func (m *StopModuleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_StopModuleRequest.Marshal(b, m, deterministic)
+}
+func (dst *StopModuleRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_StopModuleRequest.Merge(dst, src)
+}
+func (m *StopModuleRequest) XXX_Size() int {
+ return xxx_messageInfo_StopModuleRequest.Size(m)
+}
+func (m *StopModuleRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_StopModuleRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StopModuleRequest proto.InternalMessageInfo
+
+func (m *StopModuleRequest) GetModule() string {
+ if m != nil && m.Module != nil {
+ return *m.Module
+ }
+ return ""
+}
+
+func (m *StopModuleRequest) GetVersion() string {
+ if m != nil && m.Version != nil {
+ return *m.Version
+ }
+ return ""
+}
+
+type StopModuleResponse struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *StopModuleResponse) Reset() { *m = StopModuleResponse{} }
+func (m *StopModuleResponse) String() string { return proto.CompactTextString(m) }
+func (*StopModuleResponse) ProtoMessage() {}
+func (*StopModuleResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{14}
+}
+func (m *StopModuleResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_StopModuleResponse.Unmarshal(m, b)
+}
+func (m *StopModuleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_StopModuleResponse.Marshal(b, m, deterministic)
+}
+func (dst *StopModuleResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_StopModuleResponse.Merge(dst, src)
+}
+func (m *StopModuleResponse) XXX_Size() int {
+ return xxx_messageInfo_StopModuleResponse.Size(m)
+}
+func (m *StopModuleResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_StopModuleResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StopModuleResponse proto.InternalMessageInfo
+
+type GetHostnameRequest struct {
+ Module *string `protobuf:"bytes,1,opt,name=module" json:"module,omitempty"`
+ Version *string `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"`
+ Instance *string `protobuf:"bytes,3,opt,name=instance" json:"instance,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetHostnameRequest) Reset() { *m = GetHostnameRequest{} }
+func (m *GetHostnameRequest) String() string { return proto.CompactTextString(m) }
+func (*GetHostnameRequest) ProtoMessage() {}
+func (*GetHostnameRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{15}
+}
+func (m *GetHostnameRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetHostnameRequest.Unmarshal(m, b)
+}
+func (m *GetHostnameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetHostnameRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetHostnameRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetHostnameRequest.Merge(dst, src)
+}
+func (m *GetHostnameRequest) XXX_Size() int {
+ return xxx_messageInfo_GetHostnameRequest.Size(m)
+}
+func (m *GetHostnameRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetHostnameRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetHostnameRequest proto.InternalMessageInfo
+
+func (m *GetHostnameRequest) GetModule() string {
+ if m != nil && m.Module != nil {
+ return *m.Module
+ }
+ return ""
+}
+
+func (m *GetHostnameRequest) GetVersion() string {
+ if m != nil && m.Version != nil {
+ return *m.Version
+ }
+ return ""
+}
+
+func (m *GetHostnameRequest) GetInstance() string {
+ if m != nil && m.Instance != nil {
+ return *m.Instance
+ }
+ return ""
+}
+
+type GetHostnameResponse struct {
+ Hostname *string `protobuf:"bytes,1,req,name=hostname" json:"hostname,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetHostnameResponse) Reset() { *m = GetHostnameResponse{} }
+func (m *GetHostnameResponse) String() string { return proto.CompactTextString(m) }
+func (*GetHostnameResponse) ProtoMessage() {}
+func (*GetHostnameResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{16}
+}
+func (m *GetHostnameResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetHostnameResponse.Unmarshal(m, b)
+}
+func (m *GetHostnameResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetHostnameResponse.Marshal(b, m, deterministic)
+}
+func (dst *GetHostnameResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetHostnameResponse.Merge(dst, src)
+}
+func (m *GetHostnameResponse) XXX_Size() int {
+ return xxx_messageInfo_GetHostnameResponse.Size(m)
+}
+func (m *GetHostnameResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetHostnameResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetHostnameResponse proto.InternalMessageInfo
+
+func (m *GetHostnameResponse) GetHostname() string {
+ if m != nil && m.Hostname != nil {
+ return *m.Hostname
+ }
+ return ""
+}
+
+func init() {
+ proto.RegisterType((*ModulesServiceError)(nil), "appengine.ModulesServiceError")
+ proto.RegisterType((*GetModulesRequest)(nil), "appengine.GetModulesRequest")
+ proto.RegisterType((*GetModulesResponse)(nil), "appengine.GetModulesResponse")
+ proto.RegisterType((*GetVersionsRequest)(nil), "appengine.GetVersionsRequest")
+ proto.RegisterType((*GetVersionsResponse)(nil), "appengine.GetVersionsResponse")
+ proto.RegisterType((*GetDefaultVersionRequest)(nil), "appengine.GetDefaultVersionRequest")
+ proto.RegisterType((*GetDefaultVersionResponse)(nil), "appengine.GetDefaultVersionResponse")
+ proto.RegisterType((*GetNumInstancesRequest)(nil), "appengine.GetNumInstancesRequest")
+ proto.RegisterType((*GetNumInstancesResponse)(nil), "appengine.GetNumInstancesResponse")
+ proto.RegisterType((*SetNumInstancesRequest)(nil), "appengine.SetNumInstancesRequest")
+ proto.RegisterType((*SetNumInstancesResponse)(nil), "appengine.SetNumInstancesResponse")
+ proto.RegisterType((*StartModuleRequest)(nil), "appengine.StartModuleRequest")
+ proto.RegisterType((*StartModuleResponse)(nil), "appengine.StartModuleResponse")
+ proto.RegisterType((*StopModuleRequest)(nil), "appengine.StopModuleRequest")
+ proto.RegisterType((*StopModuleResponse)(nil), "appengine.StopModuleResponse")
+ proto.RegisterType((*GetHostnameRequest)(nil), "appengine.GetHostnameRequest")
+ proto.RegisterType((*GetHostnameResponse)(nil), "appengine.GetHostnameResponse")
+}
+
+func init() {
+ proto.RegisterFile("google.golang.org/appengine/internal/modules/modules_service.proto", fileDescriptor_modules_service_9cd3bffe4e91c59a)
+}
+
+var fileDescriptor_modules_service_9cd3bffe4e91c59a = []byte{
+ // 457 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0xc1, 0x6f, 0xd3, 0x30,
+ 0x14, 0xc6, 0x69, 0x02, 0xdb, 0xf2, 0x0e, 0x90, 0x3a, 0x5b, 0xd7, 0x4d, 0x1c, 0x50, 0x4e, 0x1c,
+ 0x50, 0x2b, 0x90, 0x10, 0xe7, 0xae, 0x35, 0x25, 0xb0, 0xa5, 0x28, 0xce, 0x2a, 0xc4, 0xa5, 0x0a,
+ 0xdb, 0x23, 0x8b, 0x94, 0xda, 0xc1, 0x76, 0x77, 0xe4, 0xbf, 0xe0, 0xff, 0x45, 0x4b, 0xed, 0xb6,
+ 0x81, 0x4e, 0x45, 0x68, 0xa7, 0xe4, 0x7d, 0xfe, 0xfc, 0x7b, 0x9f, 0x5f, 0xac, 0xc0, 0x59, 0x2e,
+ 0x44, 0x5e, 0x62, 0x2f, 0x17, 0x65, 0xc6, 0xf3, 0x9e, 0x90, 0x79, 0x3f, 0xab, 0x2a, 0xe4, 0x79,
+ 0xc1, 0xb1, 0x5f, 0x70, 0x8d, 0x92, 0x67, 0x65, 0x7f, 0x2e, 0xae, 0x17, 0x25, 0x2a, 0xfb, 0x9c,
+ 0x29, 0x94, 0xb7, 0xc5, 0x15, 0xf6, 0x2a, 0x29, 0xb4, 0x20, 0xde, 0x6a, 0x47, 0xf8, 0xab, 0x05,
+ 0xc1, 0xc5, 0xd2, 0xc4, 0x96, 0x1e, 0x2a, 0xa5, 0x90, 0xe1, 0x4f, 0xf0, 0xea, 0x97, 0xa1, 0xb8,
+ 0x46, 0xb2, 0x07, 0xce, 0xe4, 0x93, 0xff, 0x88, 0x10, 0x78, 0x1a, 0xc5, 0xd3, 0xc1, 0x79, 0x34,
+ 0x9a, 0x5d, 0x4c, 0x46, 0x97, 0xe7, 0xd4, 0x6f, 0x91, 0x00, 0x9e, 0x59, 0x6d, 0x4a, 0x13, 0x16,
+ 0x4d, 0x62, 0xdf, 0x21, 0x47, 0xd0, 0xb6, 0x62, 0x14, 0xb3, 0x74, 0x10, 0x0f, 0x29, 0xf3, 0xdd,
+ 0x3b, 0x6f, 0x9a, 0x0c, 0x62, 0x16, 0xd1, 0x38, 0x9d, 0xd1, 0x24, 0x99, 0x24, 0xfe, 0x63, 0x72,
+ 0x08, 0xfe, 0x65, 0x4c, 0xbf, 0x7c, 0xa6, 0xc3, 0x94, 0x8e, 0x66, 0x2c, 0x1d, 0xa4, 0xd4, 0x7f,
+ 0x12, 0x06, 0xd0, 0x1e, 0xa3, 0x36, 0xc9, 0x12, 0xfc, 0xb1, 0x40, 0xa5, 0xc3, 0x57, 0x40, 0x36,
+ 0x45, 0x55, 0x09, 0xae, 0x90, 0x74, 0x60, 0x6f, 0x79, 0xcc, 0x6e, 0xeb, 0x85, 0xfb, 0xd2, 0x4b,
+ 0x4c, 0x65, 0xdc, 0x53, 0x94, 0xaa, 0x10, 0xdc, 0x32, 0x1a, 0xee, 0xd6, 0x86, 0xbb, 0x0f, 0x41,
+ 0xc3, 0x6d, 0xe0, 0x5d, 0xd8, 0xbf, 0x5d, 0x6a, 0x86, 0x6e, 0xcb, 0xf0, 0x0d, 0x74, 0xc7, 0xa8,
+ 0x47, 0xf8, 0x3d, 0x5b, 0x94, 0x76, 0xdf, 0xae, 0x26, 0x6f, 0xe1, 0x64, 0xcb, 0x9e, 0x6d, 0xad,
+ 0x9c, 0xcd, 0x56, 0x1f, 0xa1, 0x33, 0x46, 0x1d, 0x2f, 0xe6, 0x11, 0x57, 0x3a, 0xe3, 0x57, 0xb8,
+ 0xeb, 0x34, 0x9b, 0x2c, 0xa7, 0x5e, 0x58, 0xb1, 0xde, 0xc1, 0xf1, 0x5f, 0x2c, 0x13, 0xe0, 0x39,
+ 0x78, 0x85, 0x15, 0xeb, 0x08, 0x6e, 0xb2, 0x16, 0xc2, 0x1b, 0xe8, 0xb0, 0x07, 0x0a, 0xd1, 0xec,
+ 0xe4, 0xfe, 0xd9, 0xe9, 0x04, 0x8e, 0xd9, 0xf6, 0x88, 0xe1, 0x7b, 0x20, 0x4c, 0x67, 0xd2, 0xdc,
+ 0x81, 0x6d, 0x01, 0x9c, 0xfb, 0x02, 0x34, 0x26, 0x7a, 0x04, 0x41, 0x83, 0x63, 0xf0, 0x14, 0xda,
+ 0x4c, 0x8b, 0xea, 0x7e, 0xfa, 0xbf, 0xcd, 0xf8, 0xf0, 0x2e, 0xe5, 0x1a, 0x63, 0xe0, 0xdf, 0xea,
+ 0xfb, 0xf8, 0x41, 0x28, 0xcd, 0xb3, 0xf9, 0xff, 0xd3, 0xc9, 0x29, 0x1c, 0xd8, 0x59, 0x75, 0xdd,
+ 0x7a, 0x69, 0x55, 0x87, 0xaf, 0xeb, 0x5b, 0xbc, 0xee, 0x61, 0xbe, 0xec, 0x29, 0x1c, 0xdc, 0x18,
+ 0xcd, 0x8c, 0x68, 0x55, 0x9f, 0x79, 0x5f, 0xf7, 0xcd, 0x5f, 0xe2, 0x77, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x6e, 0xbc, 0xe0, 0x61, 0x5c, 0x04, 0x00, 0x00,
+}
diff --git a/vendor/google.golang.org/appengine/internal/modules/modules_service.proto b/vendor/google.golang.org/appengine/internal/modules/modules_service.proto
new file mode 100644
index 0000000..d29f006
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/modules/modules_service.proto
@@ -0,0 +1,80 @@
+syntax = "proto2";
+option go_package = "modules";
+
+package appengine;
+
+message ModulesServiceError {
+ enum ErrorCode {
+ OK = 0;
+ INVALID_MODULE = 1;
+ INVALID_VERSION = 2;
+ INVALID_INSTANCES = 3;
+ TRANSIENT_ERROR = 4;
+ UNEXPECTED_STATE = 5;
+ }
+}
+
+message GetModulesRequest {
+}
+
+message GetModulesResponse {
+ repeated string module = 1;
+}
+
+message GetVersionsRequest {
+ optional string module = 1;
+}
+
+message GetVersionsResponse {
+ repeated string version = 1;
+}
+
+message GetDefaultVersionRequest {
+ optional string module = 1;
+}
+
+message GetDefaultVersionResponse {
+ required string version = 1;
+}
+
+message GetNumInstancesRequest {
+ optional string module = 1;
+ optional string version = 2;
+}
+
+message GetNumInstancesResponse {
+ required int64 instances = 1;
+}
+
+message SetNumInstancesRequest {
+ optional string module = 1;
+ optional string version = 2;
+ required int64 instances = 3;
+}
+
+message SetNumInstancesResponse {}
+
+message StartModuleRequest {
+ required string module = 1;
+ required string version = 2;
+}
+
+message StartModuleResponse {}
+
+message StopModuleRequest {
+ optional string module = 1;
+ optional string version = 2;
+}
+
+message StopModuleResponse {}
+
+message GetHostnameRequest {
+ optional string module = 1;
+ optional string version = 2;
+ optional string instance = 3;
+}
+
+message GetHostnameResponse {
+ required string hostname = 1;
+}
+
diff --git a/vendor/google.golang.org/appengine/internal/net.go b/vendor/google.golang.org/appengine/internal/net.go
new file mode 100644
index 0000000..3b94cf0
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/net.go
@@ -0,0 +1,56 @@
+// Copyright 2014 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package internal
+
+// This file implements a network dialer that limits the number of concurrent connections.
+// It is only used for API calls.
+
+import (
+ "log"
+ "net"
+ "runtime"
+ "sync"
+ "time"
+)
+
+var limitSem = make(chan int, 100) // TODO(dsymonds): Use environment variable.
+
+func limitRelease() {
+ // non-blocking
+ select {
+ case <-limitSem:
+ default:
+ // This should not normally happen.
+ log.Print("appengine: unbalanced limitSem release!")
+ }
+}
+
+func limitDial(network, addr string) (net.Conn, error) {
+ limitSem <- 1
+
+ // Dial with a timeout in case the API host is MIA.
+ // The connection should normally be very fast.
+ conn, err := net.DialTimeout(network, addr, 500*time.Millisecond)
+ if err != nil {
+ limitRelease()
+ return nil, err
+ }
+ lc := &limitConn{Conn: conn}
+ runtime.SetFinalizer(lc, (*limitConn).Close) // shouldn't usually be required
+ return lc, nil
+}
+
+type limitConn struct {
+ close sync.Once
+ net.Conn
+}
+
+func (lc *limitConn) Close() error {
+ defer lc.close.Do(func() {
+ limitRelease()
+ runtime.SetFinalizer(lc, nil)
+ })
+ return lc.Conn.Close()
+}
diff --git a/vendor/google.golang.org/appengine/internal/regen.sh b/vendor/google.golang.org/appengine/internal/regen.sh
new file mode 100755
index 0000000..2fdb546
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/regen.sh
@@ -0,0 +1,40 @@
+#!/bin/bash -e
+#
+# This script rebuilds the generated code for the protocol buffers.
+# To run this you will need protoc and goprotobuf installed;
+# see https://github.com/golang/protobuf for instructions.
+
+PKG=google.golang.org/appengine
+
+function die() {
+ echo 1>&2 $*
+ exit 1
+}
+
+# Sanity check that the right tools are accessible.
+for tool in go protoc protoc-gen-go; do
+ q=$(which $tool) || die "didn't find $tool"
+ echo 1>&2 "$tool: $q"
+done
+
+echo -n 1>&2 "finding package dir... "
+pkgdir=$(go list -f '{{.Dir}}' $PKG)
+echo 1>&2 $pkgdir
+base=$(echo $pkgdir | sed "s,/$PKG\$,,")
+echo 1>&2 "base: $base"
+cd $base
+
+# Run protoc once per package.
+for dir in $(find $PKG/internal -name '*.proto' | xargs dirname | sort | uniq); do
+ echo 1>&2 "* $dir"
+ protoc --go_out=. $dir/*.proto
+done
+
+for f in $(find $PKG/internal -name '*.pb.go'); do
+ # Remove proto.RegisterEnum calls.
+ # These cause duplicate registration panics when these packages
+ # are used on classic App Engine. proto.RegisterEnum only affects
+ # parsing the text format; we don't care about that.
+ # https://code.google.com/p/googleappengine/issues/detail?id=11670#c17
+ sed -i '/proto.RegisterEnum/d' $f
+done
diff --git a/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go b/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go
new file mode 100644
index 0000000..8d782a3
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go
@@ -0,0 +1,361 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google.golang.org/appengine/internal/remote_api/remote_api.proto
+
+package remote_api
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type RpcError_ErrorCode int32
+
+const (
+ RpcError_UNKNOWN RpcError_ErrorCode = 0
+ RpcError_CALL_NOT_FOUND RpcError_ErrorCode = 1
+ RpcError_PARSE_ERROR RpcError_ErrorCode = 2
+ RpcError_SECURITY_VIOLATION RpcError_ErrorCode = 3
+ RpcError_OVER_QUOTA RpcError_ErrorCode = 4
+ RpcError_REQUEST_TOO_LARGE RpcError_ErrorCode = 5
+ RpcError_CAPABILITY_DISABLED RpcError_ErrorCode = 6
+ RpcError_FEATURE_DISABLED RpcError_ErrorCode = 7
+ RpcError_BAD_REQUEST RpcError_ErrorCode = 8
+ RpcError_RESPONSE_TOO_LARGE RpcError_ErrorCode = 9
+ RpcError_CANCELLED RpcError_ErrorCode = 10
+ RpcError_REPLAY_ERROR RpcError_ErrorCode = 11
+ RpcError_DEADLINE_EXCEEDED RpcError_ErrorCode = 12
+)
+
+var RpcError_ErrorCode_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "CALL_NOT_FOUND",
+ 2: "PARSE_ERROR",
+ 3: "SECURITY_VIOLATION",
+ 4: "OVER_QUOTA",
+ 5: "REQUEST_TOO_LARGE",
+ 6: "CAPABILITY_DISABLED",
+ 7: "FEATURE_DISABLED",
+ 8: "BAD_REQUEST",
+ 9: "RESPONSE_TOO_LARGE",
+ 10: "CANCELLED",
+ 11: "REPLAY_ERROR",
+ 12: "DEADLINE_EXCEEDED",
+}
+var RpcError_ErrorCode_value = map[string]int32{
+ "UNKNOWN": 0,
+ "CALL_NOT_FOUND": 1,
+ "PARSE_ERROR": 2,
+ "SECURITY_VIOLATION": 3,
+ "OVER_QUOTA": 4,
+ "REQUEST_TOO_LARGE": 5,
+ "CAPABILITY_DISABLED": 6,
+ "FEATURE_DISABLED": 7,
+ "BAD_REQUEST": 8,
+ "RESPONSE_TOO_LARGE": 9,
+ "CANCELLED": 10,
+ "REPLAY_ERROR": 11,
+ "DEADLINE_EXCEEDED": 12,
+}
+
+func (x RpcError_ErrorCode) Enum() *RpcError_ErrorCode {
+ p := new(RpcError_ErrorCode)
+ *p = x
+ return p
+}
+func (x RpcError_ErrorCode) String() string {
+ return proto.EnumName(RpcError_ErrorCode_name, int32(x))
+}
+func (x *RpcError_ErrorCode) UnmarshalJSON(data []byte) error {
+ value, err := proto.UnmarshalJSONEnum(RpcError_ErrorCode_value, data, "RpcError_ErrorCode")
+ if err != nil {
+ return err
+ }
+ *x = RpcError_ErrorCode(value)
+ return nil
+}
+func (RpcError_ErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_remote_api_1978114ec33a273d, []int{2, 0}
+}
+
+type Request struct {
+ ServiceName *string `protobuf:"bytes,2,req,name=service_name,json=serviceName" json:"service_name,omitempty"`
+ Method *string `protobuf:"bytes,3,req,name=method" json:"method,omitempty"`
+ Request []byte `protobuf:"bytes,4,req,name=request" json:"request,omitempty"`
+ RequestId *string `protobuf:"bytes,5,opt,name=request_id,json=requestId" json:"request_id,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Request) Reset() { *m = Request{} }
+func (m *Request) String() string { return proto.CompactTextString(m) }
+func (*Request) ProtoMessage() {}
+func (*Request) Descriptor() ([]byte, []int) {
+ return fileDescriptor_remote_api_1978114ec33a273d, []int{0}
+}
+func (m *Request) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Request.Unmarshal(m, b)
+}
+func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Request.Marshal(b, m, deterministic)
+}
+func (dst *Request) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Request.Merge(dst, src)
+}
+func (m *Request) XXX_Size() int {
+ return xxx_messageInfo_Request.Size(m)
+}
+func (m *Request) XXX_DiscardUnknown() {
+ xxx_messageInfo_Request.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Request proto.InternalMessageInfo
+
+func (m *Request) GetServiceName() string {
+ if m != nil && m.ServiceName != nil {
+ return *m.ServiceName
+ }
+ return ""
+}
+
+func (m *Request) GetMethod() string {
+ if m != nil && m.Method != nil {
+ return *m.Method
+ }
+ return ""
+}
+
+func (m *Request) GetRequest() []byte {
+ if m != nil {
+ return m.Request
+ }
+ return nil
+}
+
+func (m *Request) GetRequestId() string {
+ if m != nil && m.RequestId != nil {
+ return *m.RequestId
+ }
+ return ""
+}
+
+type ApplicationError struct {
+ Code *int32 `protobuf:"varint,1,req,name=code" json:"code,omitempty"`
+ Detail *string `protobuf:"bytes,2,req,name=detail" json:"detail,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ApplicationError) Reset() { *m = ApplicationError{} }
+func (m *ApplicationError) String() string { return proto.CompactTextString(m) }
+func (*ApplicationError) ProtoMessage() {}
+func (*ApplicationError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_remote_api_1978114ec33a273d, []int{1}
+}
+func (m *ApplicationError) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ApplicationError.Unmarshal(m, b)
+}
+func (m *ApplicationError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ApplicationError.Marshal(b, m, deterministic)
+}
+func (dst *ApplicationError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ApplicationError.Merge(dst, src)
+}
+func (m *ApplicationError) XXX_Size() int {
+ return xxx_messageInfo_ApplicationError.Size(m)
+}
+func (m *ApplicationError) XXX_DiscardUnknown() {
+ xxx_messageInfo_ApplicationError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplicationError proto.InternalMessageInfo
+
+func (m *ApplicationError) GetCode() int32 {
+ if m != nil && m.Code != nil {
+ return *m.Code
+ }
+ return 0
+}
+
+func (m *ApplicationError) GetDetail() string {
+ if m != nil && m.Detail != nil {
+ return *m.Detail
+ }
+ return ""
+}
+
+type RpcError struct {
+ Code *int32 `protobuf:"varint,1,req,name=code" json:"code,omitempty"`
+ Detail *string `protobuf:"bytes,2,opt,name=detail" json:"detail,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *RpcError) Reset() { *m = RpcError{} }
+func (m *RpcError) String() string { return proto.CompactTextString(m) }
+func (*RpcError) ProtoMessage() {}
+func (*RpcError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_remote_api_1978114ec33a273d, []int{2}
+}
+func (m *RpcError) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_RpcError.Unmarshal(m, b)
+}
+func (m *RpcError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_RpcError.Marshal(b, m, deterministic)
+}
+func (dst *RpcError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcError.Merge(dst, src)
+}
+func (m *RpcError) XXX_Size() int {
+ return xxx_messageInfo_RpcError.Size(m)
+}
+func (m *RpcError) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcError proto.InternalMessageInfo
+
+func (m *RpcError) GetCode() int32 {
+ if m != nil && m.Code != nil {
+ return *m.Code
+ }
+ return 0
+}
+
+func (m *RpcError) GetDetail() string {
+ if m != nil && m.Detail != nil {
+ return *m.Detail
+ }
+ return ""
+}
+
+type Response struct {
+ Response []byte `protobuf:"bytes,1,opt,name=response" json:"response,omitempty"`
+ Exception []byte `protobuf:"bytes,2,opt,name=exception" json:"exception,omitempty"`
+ ApplicationError *ApplicationError `protobuf:"bytes,3,opt,name=application_error,json=applicationError" json:"application_error,omitempty"`
+ JavaException []byte `protobuf:"bytes,4,opt,name=java_exception,json=javaException" json:"java_exception,omitempty"`
+ RpcError *RpcError `protobuf:"bytes,5,opt,name=rpc_error,json=rpcError" json:"rpc_error,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Response) Reset() { *m = Response{} }
+func (m *Response) String() string { return proto.CompactTextString(m) }
+func (*Response) ProtoMessage() {}
+func (*Response) Descriptor() ([]byte, []int) {
+ return fileDescriptor_remote_api_1978114ec33a273d, []int{3}
+}
+func (m *Response) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Response.Unmarshal(m, b)
+}
+func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Response.Marshal(b, m, deterministic)
+}
+func (dst *Response) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Response.Merge(dst, src)
+}
+func (m *Response) XXX_Size() int {
+ return xxx_messageInfo_Response.Size(m)
+}
+func (m *Response) XXX_DiscardUnknown() {
+ xxx_messageInfo_Response.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Response proto.InternalMessageInfo
+
+func (m *Response) GetResponse() []byte {
+ if m != nil {
+ return m.Response
+ }
+ return nil
+}
+
+func (m *Response) GetException() []byte {
+ if m != nil {
+ return m.Exception
+ }
+ return nil
+}
+
+func (m *Response) GetApplicationError() *ApplicationError {
+ if m != nil {
+ return m.ApplicationError
+ }
+ return nil
+}
+
+func (m *Response) GetJavaException() []byte {
+ if m != nil {
+ return m.JavaException
+ }
+ return nil
+}
+
+func (m *Response) GetRpcError() *RpcError {
+ if m != nil {
+ return m.RpcError
+ }
+ return nil
+}
+
+func init() {
+ proto.RegisterType((*Request)(nil), "remote_api.Request")
+ proto.RegisterType((*ApplicationError)(nil), "remote_api.ApplicationError")
+ proto.RegisterType((*RpcError)(nil), "remote_api.RpcError")
+ proto.RegisterType((*Response)(nil), "remote_api.Response")
+}
+
+func init() {
+ proto.RegisterFile("google.golang.org/appengine/internal/remote_api/remote_api.proto", fileDescriptor_remote_api_1978114ec33a273d)
+}
+
+var fileDescriptor_remote_api_1978114ec33a273d = []byte{
+ // 531 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x51, 0x6e, 0xd3, 0x40,
+ 0x10, 0x86, 0xb1, 0x9b, 0x34, 0xf1, 0xc4, 0x2d, 0xdb, 0xa5, 0x14, 0x0b, 0x15, 0x29, 0x44, 0x42,
+ 0xca, 0x53, 0x2a, 0x38, 0x00, 0x62, 0x63, 0x6f, 0x91, 0x85, 0x65, 0xa7, 0x6b, 0xbb, 0x50, 0x5e,
+ 0x56, 0x2b, 0x67, 0x65, 0x8c, 0x12, 0xaf, 0xd9, 0x98, 0x8a, 0x17, 0x6e, 0xc0, 0xb5, 0x38, 0x0c,
+ 0xb7, 0x40, 0x36, 0x6e, 0x63, 0xf5, 0x89, 0xb7, 0x7f, 0x7e, 0x7b, 0xe6, 0x1b, 0xcd, 0xcc, 0xc2,
+ 0xbb, 0x5c, 0xa9, 0x7c, 0x23, 0x17, 0xb9, 0xda, 0x88, 0x32, 0x5f, 0x28, 0x9d, 0x5f, 0x88, 0xaa,
+ 0x92, 0x65, 0x5e, 0x94, 0xf2, 0xa2, 0x28, 0x6b, 0xa9, 0x4b, 0xb1, 0xb9, 0xd0, 0x72, 0xab, 0x6a,
+ 0xc9, 0x45, 0x55, 0xf4, 0xe4, 0xa2, 0xd2, 0xaa, 0x56, 0x18, 0xf6, 0xce, 0xec, 0x27, 0x8c, 0x98,
+ 0xfc, 0xf6, 0x5d, 0xee, 0x6a, 0xfc, 0x12, 0xec, 0x9d, 0xd4, 0xb7, 0x45, 0x26, 0x79, 0x29, 0xb6,
+ 0xd2, 0x31, 0xa7, 0xe6, 0xdc, 0x62, 0x93, 0xce, 0x0b, 0xc5, 0x56, 0xe2, 0x33, 0x38, 0xdc, 0xca,
+ 0xfa, 0x8b, 0x5a, 0x3b, 0x07, 0xed, 0xc7, 0x2e, 0xc2, 0x0e, 0x8c, 0xf4, 0xbf, 0x2a, 0xce, 0x60,
+ 0x6a, 0xce, 0x6d, 0x76, 0x17, 0xe2, 0x17, 0x00, 0x9d, 0xe4, 0xc5, 0xda, 0x19, 0x4e, 0x8d, 0xb9,
+ 0xc5, 0xac, 0xce, 0xf1, 0xd7, 0xb3, 0xb7, 0x80, 0x48, 0x55, 0x6d, 0x8a, 0x4c, 0xd4, 0x85, 0x2a,
+ 0xa9, 0xd6, 0x4a, 0x63, 0x0c, 0x83, 0x4c, 0xad, 0xa5, 0x63, 0x4c, 0xcd, 0xf9, 0x90, 0xb5, 0xba,
+ 0x01, 0xaf, 0x65, 0x2d, 0x8a, 0x4d, 0xd7, 0x55, 0x17, 0xcd, 0x7e, 0x9b, 0x30, 0x66, 0x55, 0xf6,
+ 0x7f, 0x89, 0x46, 0x2f, 0xf1, 0x97, 0x09, 0x56, 0x9b, 0xe5, 0x36, 0x7f, 0x4d, 0x60, 0x94, 0x86,
+ 0x1f, 0xc2, 0xe8, 0x63, 0x88, 0x1e, 0x61, 0x0c, 0xc7, 0x2e, 0x09, 0x02, 0x1e, 0x46, 0x09, 0xbf,
+ 0x8c, 0xd2, 0xd0, 0x43, 0x06, 0x7e, 0x0c, 0x93, 0x15, 0x61, 0x31, 0xe5, 0x94, 0xb1, 0x88, 0x21,
+ 0x13, 0x9f, 0x01, 0x8e, 0xa9, 0x9b, 0x32, 0x3f, 0xb9, 0xe1, 0xd7, 0x7e, 0x14, 0x90, 0xc4, 0x8f,
+ 0x42, 0x74, 0x80, 0x8f, 0x01, 0xa2, 0x6b, 0xca, 0xf8, 0x55, 0x1a, 0x25, 0x04, 0x0d, 0xf0, 0x53,
+ 0x38, 0x61, 0xf4, 0x2a, 0xa5, 0x71, 0xc2, 0x93, 0x28, 0xe2, 0x01, 0x61, 0xef, 0x29, 0x1a, 0xe2,
+ 0x67, 0xf0, 0xc4, 0x25, 0x2b, 0xb2, 0xf4, 0x83, 0xa6, 0x80, 0xe7, 0xc7, 0x64, 0x19, 0x50, 0x0f,
+ 0x1d, 0xe2, 0x53, 0x40, 0x97, 0x94, 0x24, 0x29, 0xa3, 0x7b, 0x77, 0xd4, 0xe0, 0x97, 0xc4, 0xe3,
+ 0x5d, 0x25, 0x34, 0x6e, 0xf0, 0x8c, 0xc6, 0xab, 0x28, 0x8c, 0x69, 0xaf, 0xae, 0x85, 0x8f, 0xc0,
+ 0x72, 0x49, 0xe8, 0xd2, 0xa0, 0xc9, 0x03, 0x8c, 0xc0, 0x66, 0x74, 0x15, 0x90, 0x9b, 0xae, 0xef,
+ 0x49, 0xd3, 0x8f, 0x47, 0x89, 0x17, 0xf8, 0x21, 0xe5, 0xf4, 0x93, 0x4b, 0xa9, 0x47, 0x3d, 0x64,
+ 0xcf, 0xfe, 0x18, 0x30, 0x66, 0x72, 0x57, 0xa9, 0x72, 0x27, 0xf1, 0x73, 0x18, 0xeb, 0x4e, 0x3b,
+ 0xc6, 0xd4, 0x98, 0xdb, 0xec, 0x3e, 0xc6, 0xe7, 0x60, 0xc9, 0x1f, 0x99, 0xac, 0x9a, 0x75, 0xb5,
+ 0x23, 0xb5, 0xd9, 0xde, 0xc0, 0x3e, 0x9c, 0x88, 0xfd, 0x3a, 0xb9, 0x6c, 0x06, 0xec, 0x1c, 0x4c,
+ 0x8d, 0xf9, 0xe4, 0xcd, 0xf9, 0xa2, 0x77, 0x87, 0x0f, 0x77, 0xce, 0x90, 0x78, 0x78, 0x05, 0xaf,
+ 0xe0, 0xf8, 0xab, 0xb8, 0x15, 0x7c, 0x4f, 0x1b, 0xb4, 0xb4, 0xa3, 0xc6, 0xa5, 0xf7, 0xc4, 0xd7,
+ 0x60, 0xe9, 0x2a, 0xeb, 0x48, 0xc3, 0x96, 0x74, 0xda, 0x27, 0xdd, 0x1d, 0x07, 0x1b, 0xeb, 0x4e,
+ 0x2d, 0xed, 0xcf, 0xbd, 0x07, 0xf0, 0x37, 0x00, 0x00, 0xff, 0xff, 0x38, 0xd1, 0x0f, 0x22, 0x4f,
+ 0x03, 0x00, 0x00,
+}
diff --git a/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto b/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto
new file mode 100644
index 0000000..f21763a
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto
@@ -0,0 +1,44 @@
+syntax = "proto2";
+option go_package = "remote_api";
+
+package remote_api;
+
+message Request {
+ required string service_name = 2;
+ required string method = 3;
+ required bytes request = 4;
+ optional string request_id = 5;
+}
+
+message ApplicationError {
+ required int32 code = 1;
+ required string detail = 2;
+}
+
+message RpcError {
+ enum ErrorCode {
+ UNKNOWN = 0;
+ CALL_NOT_FOUND = 1;
+ PARSE_ERROR = 2;
+ SECURITY_VIOLATION = 3;
+ OVER_QUOTA = 4;
+ REQUEST_TOO_LARGE = 5;
+ CAPABILITY_DISABLED = 6;
+ FEATURE_DISABLED = 7;
+ BAD_REQUEST = 8;
+ RESPONSE_TOO_LARGE = 9;
+ CANCELLED = 10;
+ REPLAY_ERROR = 11;
+ DEADLINE_EXCEEDED = 12;
+ }
+ required int32 code = 1;
+ optional string detail = 2;
+}
+
+message Response {
+ optional bytes response = 1;
+ optional bytes exception = 2;
+ optional ApplicationError application_error = 3;
+ optional bytes java_exception = 4;
+ optional RpcError rpc_error = 5;
+}
diff --git a/vendor/google.golang.org/appengine/internal/transaction.go b/vendor/google.golang.org/appengine/internal/transaction.go
new file mode 100644
index 0000000..9006ae6
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/transaction.go
@@ -0,0 +1,115 @@
+// Copyright 2014 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package internal
+
+// This file implements hooks for applying datastore transactions.
+
+import (
+ "errors"
+ "reflect"
+
+ "github.com/golang/protobuf/proto"
+ netcontext "golang.org/x/net/context"
+
+ basepb "google.golang.org/appengine/internal/base"
+ pb "google.golang.org/appengine/internal/datastore"
+)
+
+var transactionSetters = make(map[reflect.Type]reflect.Value)
+
+// RegisterTransactionSetter registers a function that sets transaction information
+// in a protocol buffer message. f should be a function with two arguments,
+// the first being a protocol buffer type, and the second being *datastore.Transaction.
+func RegisterTransactionSetter(f interface{}) {
+ v := reflect.ValueOf(f)
+ transactionSetters[v.Type().In(0)] = v
+}
+
+// applyTransaction applies the transaction t to message pb
+// by using the relevant setter passed to RegisterTransactionSetter.
+func applyTransaction(pb proto.Message, t *pb.Transaction) {
+ v := reflect.ValueOf(pb)
+ if f, ok := transactionSetters[v.Type()]; ok {
+ f.Call([]reflect.Value{v, reflect.ValueOf(t)})
+ }
+}
+
+var transactionKey = "used for *Transaction"
+
+func transactionFromContext(ctx netcontext.Context) *transaction {
+ t, _ := ctx.Value(&transactionKey).(*transaction)
+ return t
+}
+
+func withTransaction(ctx netcontext.Context, t *transaction) netcontext.Context {
+ return netcontext.WithValue(ctx, &transactionKey, t)
+}
+
+type transaction struct {
+ transaction pb.Transaction
+ finished bool
+}
+
+var ErrConcurrentTransaction = errors.New("internal: concurrent transaction")
+
+func RunTransactionOnce(c netcontext.Context, f func(netcontext.Context) error, xg bool, readOnly bool, previousTransaction *pb.Transaction) (*pb.Transaction, error) {
+ if transactionFromContext(c) != nil {
+ return nil, errors.New("nested transactions are not supported")
+ }
+
+ // Begin the transaction.
+ t := &transaction{}
+ req := &pb.BeginTransactionRequest{
+ App: proto.String(FullyQualifiedAppID(c)),
+ }
+ if xg {
+ req.AllowMultipleEg = proto.Bool(true)
+ }
+ if previousTransaction != nil {
+ req.PreviousTransaction = previousTransaction
+ }
+ if readOnly {
+ req.Mode = pb.BeginTransactionRequest_READ_ONLY.Enum()
+ } else {
+ req.Mode = pb.BeginTransactionRequest_READ_WRITE.Enum()
+ }
+ if err := Call(c, "datastore_v3", "BeginTransaction", req, &t.transaction); err != nil {
+ return nil, err
+ }
+
+ // Call f, rolling back the transaction if f returns a non-nil error, or panics.
+ // The panic is not recovered.
+ defer func() {
+ if t.finished {
+ return
+ }
+ t.finished = true
+ // Ignore the error return value, since we are already returning a non-nil
+ // error (or we're panicking).
+ Call(c, "datastore_v3", "Rollback", &t.transaction, &basepb.VoidProto{})
+ }()
+ if err := f(withTransaction(c, t)); err != nil {
+ return &t.transaction, err
+ }
+ t.finished = true
+
+ // Commit the transaction.
+ res := &pb.CommitResponse{}
+ err := Call(c, "datastore_v3", "Commit", &t.transaction, res)
+ if ae, ok := err.(*APIError); ok {
+ /* TODO: restore this conditional
+ if appengine.IsDevAppServer() {
+ */
+ // The Python Dev AppServer raises an ApplicationError with error code 2 (which is
+ // Error.CONCURRENT_TRANSACTION) and message "Concurrency exception.".
+ if ae.Code == int32(pb.Error_BAD_REQUEST) && ae.Detail == "ApplicationError: 2 Concurrency exception." {
+ return &t.transaction, ErrConcurrentTransaction
+ }
+ if ae.Code == int32(pb.Error_CONCURRENT_TRANSACTION) {
+ return &t.transaction, ErrConcurrentTransaction
+ }
+ }
+ return &t.transaction, err
+}
diff --git a/vendor/google.golang.org/appengine/namespace.go b/vendor/google.golang.org/appengine/namespace.go
new file mode 100644
index 0000000..21860ca
--- /dev/null
+++ b/vendor/google.golang.org/appengine/namespace.go
@@ -0,0 +1,25 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package appengine
+
+import (
+ "fmt"
+ "regexp"
+
+ "golang.org/x/net/context"
+
+ "google.golang.org/appengine/internal"
+)
+
+// Namespace returns a replacement context that operates within the given namespace.
+func Namespace(c context.Context, namespace string) (context.Context, error) {
+ if !validNamespace.MatchString(namespace) {
+ return nil, fmt.Errorf("appengine: namespace %q does not match /%s/", namespace, validNamespace)
+ }
+ return internal.NamespacedContext(c, namespace), nil
+}
+
+// validNamespace matches valid namespace names.
+var validNamespace = regexp.MustCompile(`^[0-9A-Za-z._-]{0,100}$`)
diff --git a/vendor/google.golang.org/appengine/timeout.go b/vendor/google.golang.org/appengine/timeout.go
new file mode 100644
index 0000000..05642a9
--- /dev/null
+++ b/vendor/google.golang.org/appengine/timeout.go
@@ -0,0 +1,20 @@
+// Copyright 2013 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package appengine
+
+import "golang.org/x/net/context"
+
+// IsTimeoutError reports whether err is a timeout error.
+func IsTimeoutError(err error) bool {
+ if err == context.DeadlineExceeded {
+ return true
+ }
+ if t, ok := err.(interface {
+ IsTimeout() bool
+ }); ok {
+ return t.IsTimeout()
+ }
+ return false
+}
diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go
index c5a54b3..9521b50 100644
--- a/vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go
+++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go
@@ -33,10 +33,10 @@ func init() {
}
func init() {
- proto.RegisterFile("google/api/annotations.proto", fileDescriptor_annotations_7782c41cc734273a)
+ proto.RegisterFile("google/api/annotations.proto", fileDescriptor_annotations_55609bb51d80951d)
}
-var fileDescriptor_annotations_7782c41cc734273a = []byte{
+var fileDescriptor_annotations_55609bb51d80951d = []byte{
// 208 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xcf, 0xcf, 0x4f,
0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc,
diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go
index 9d57e05..1a8a27b 100644
--- a/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go
+++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go
@@ -42,7 +42,7 @@ func (m *Http) Reset() { *m = Http{} }
func (m *Http) String() string { return proto.CompactTextString(m) }
func (*Http) ProtoMessage() {}
func (*Http) Descriptor() ([]byte, []int) {
- return fileDescriptor_http_9c97bbd8b94894d4, []int{0}
+ return fileDescriptor_http_e457621dddd7365b, []int{0}
}
func (m *Http) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Http.Unmarshal(m, b)
@@ -315,6 +315,10 @@ type HttpRule struct {
// body. NOTE: the referred field must not be a repeated field and must be
// present at the top-level of request message type.
Body string `protobuf:"bytes,7,opt,name=body,proto3" json:"body,omitempty"`
+ // Optional. The name of the response field whose value is mapped to the HTTP
+ // body of response. Other response fields are ignored. When
+ // not set, the response message will be used as HTTP body of response.
+ ResponseBody string `protobuf:"bytes,12,opt,name=response_body,json=responseBody,proto3" json:"response_body,omitempty"`
// Additional HTTP bindings for the selector. Nested bindings must
// not contain an `additional_bindings` field themselves (that is,
// the nesting may only be one level deep).
@@ -328,7 +332,7 @@ func (m *HttpRule) Reset() { *m = HttpRule{} }
func (m *HttpRule) String() string { return proto.CompactTextString(m) }
func (*HttpRule) ProtoMessage() {}
func (*HttpRule) Descriptor() ([]byte, []int) {
- return fileDescriptor_http_9c97bbd8b94894d4, []int{1}
+ return fileDescriptor_http_e457621dddd7365b, []int{1}
}
func (m *HttpRule) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_HttpRule.Unmarshal(m, b)
@@ -348,6 +352,13 @@ func (m *HttpRule) XXX_DiscardUnknown() {
var xxx_messageInfo_HttpRule proto.InternalMessageInfo
+func (m *HttpRule) GetSelector() string {
+ if m != nil {
+ return m.Selector
+ }
+ return ""
+}
+
type isHttpRule_Pattern interface {
isHttpRule_Pattern()
}
@@ -355,27 +366,37 @@ type isHttpRule_Pattern interface {
type HttpRule_Get struct {
Get string `protobuf:"bytes,2,opt,name=get,proto3,oneof"`
}
+
type HttpRule_Put struct {
Put string `protobuf:"bytes,3,opt,name=put,proto3,oneof"`
}
+
type HttpRule_Post struct {
Post string `protobuf:"bytes,4,opt,name=post,proto3,oneof"`
}
+
type HttpRule_Delete struct {
Delete string `protobuf:"bytes,5,opt,name=delete,proto3,oneof"`
}
+
type HttpRule_Patch struct {
Patch string `protobuf:"bytes,6,opt,name=patch,proto3,oneof"`
}
+
type HttpRule_Custom struct {
Custom *CustomHttpPattern `protobuf:"bytes,8,opt,name=custom,proto3,oneof"`
}
-func (*HttpRule_Get) isHttpRule_Pattern() {}
-func (*HttpRule_Put) isHttpRule_Pattern() {}
-func (*HttpRule_Post) isHttpRule_Pattern() {}
+func (*HttpRule_Get) isHttpRule_Pattern() {}
+
+func (*HttpRule_Put) isHttpRule_Pattern() {}
+
+func (*HttpRule_Post) isHttpRule_Pattern() {}
+
func (*HttpRule_Delete) isHttpRule_Pattern() {}
-func (*HttpRule_Patch) isHttpRule_Pattern() {}
+
+func (*HttpRule_Patch) isHttpRule_Pattern() {}
+
func (*HttpRule_Custom) isHttpRule_Pattern() {}
func (m *HttpRule) GetPattern() isHttpRule_Pattern {
@@ -385,13 +406,6 @@ func (m *HttpRule) GetPattern() isHttpRule_Pattern {
return nil
}
-func (m *HttpRule) GetSelector() string {
- if m != nil {
- return m.Selector
- }
- return ""
-}
-
func (m *HttpRule) GetGet() string {
if x, ok := m.GetPattern().(*HttpRule_Get); ok {
return x.Get
@@ -441,6 +455,13 @@ func (m *HttpRule) GetBody() string {
return ""
}
+func (m *HttpRule) GetResponseBody() string {
+ if m != nil {
+ return m.ResponseBody
+ }
+ return ""
+}
+
func (m *HttpRule) GetAdditionalBindings() []*HttpRule {
if m != nil {
return m.AdditionalBindings
@@ -593,7 +614,7 @@ func (m *CustomHttpPattern) Reset() { *m = CustomHttpPattern{} }
func (m *CustomHttpPattern) String() string { return proto.CompactTextString(m) }
func (*CustomHttpPattern) ProtoMessage() {}
func (*CustomHttpPattern) Descriptor() ([]byte, []int) {
- return fileDescriptor_http_9c97bbd8b94894d4, []int{2}
+ return fileDescriptor_http_e457621dddd7365b, []int{2}
}
func (m *CustomHttpPattern) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CustomHttpPattern.Unmarshal(m, b)
@@ -633,34 +654,35 @@ func init() {
proto.RegisterType((*CustomHttpPattern)(nil), "google.api.CustomHttpPattern")
}
-func init() { proto.RegisterFile("google/api/http.proto", fileDescriptor_http_9c97bbd8b94894d4) }
-
-var fileDescriptor_http_9c97bbd8b94894d4 = []byte{
- // 401 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0xab, 0x13, 0x31,
- 0x10, 0xc7, 0xdd, 0x76, 0xdb, 0xd7, 0x4e, 0x41, 0x30, 0x3e, 0x25, 0x88, 0x62, 0xe9, 0xa9, 0x78,
- 0xd8, 0xc2, 0xf3, 0xe0, 0xe1, 0x9d, 0x5e, 0xb5, 0xf8, 0xbc, 0x95, 0x3d, 0x7a, 0x29, 0xe9, 0x66,
- 0x4c, 0xa3, 0x79, 0x49, 0xd8, 0xcc, 0x8a, 0xfd, 0x3a, 0x7e, 0x07, 0xbf, 0x9b, 0x47, 0x49, 0x36,
- 0xb5, 0x05, 0xc1, 0xdb, 0xfc, 0xff, 0xf3, 0xcb, 0xcc, 0x64, 0x18, 0x78, 0xa6, 0x9c, 0x53, 0x06,
- 0x57, 0xc2, 0xeb, 0xd5, 0x81, 0xc8, 0x57, 0xbe, 0x75, 0xe4, 0x18, 0xf4, 0x76, 0x25, 0xbc, 0x5e,
- 0x1c, 0xa1, 0xbc, 0x27, 0xf2, 0xec, 0x0d, 0x8c, 0xda, 0xce, 0x60, 0xe0, 0xc5, 0x7c, 0xb8, 0x9c,
- 0xdd, 0x5c, 0x57, 0x67, 0xa6, 0x8a, 0x40, 0xdd, 0x19, 0xac, 0x7b, 0x84, 0x6d, 0xe0, 0xf5, 0x97,
- 0xce, 0x98, 0xe3, 0x4e, 0x62, 0xe3, 0x24, 0xee, 0x5a, 0x0c, 0xd8, 0x7e, 0x47, 0xb9, 0xc3, 0x1f,
- 0x5e, 0xd8, 0xa0, 0x9d, 0xe5, 0x83, 0x79, 0xb1, 0x9c, 0xd4, 0x2f, 0x13, 0xf6, 0x21, 0x51, 0x75,
- 0x86, 0x36, 0x27, 0x66, 0xf1, 0x6b, 0x00, 0x93, 0x53, 0x69, 0xf6, 0x02, 0x26, 0x01, 0x0d, 0x36,
- 0xe4, 0x5a, 0x5e, 0xcc, 0x8b, 0xe5, 0xb4, 0xfe, 0xab, 0x19, 0x83, 0xa1, 0x42, 0x4a, 0x35, 0xa7,
- 0xf7, 0x8f, 0xea, 0x28, 0xa2, 0xe7, 0x3b, 0xe2, 0xc3, 0x93, 0xe7, 0x3b, 0x62, 0xd7, 0x50, 0x7a,
- 0x17, 0x88, 0x97, 0xd9, 0x4c, 0x8a, 0x71, 0x18, 0x4b, 0x34, 0x48, 0xc8, 0x47, 0xd9, 0xcf, 0x9a,
- 0x3d, 0x87, 0x91, 0x17, 0xd4, 0x1c, 0xf8, 0x38, 0x27, 0x7a, 0xc9, 0xde, 0xc1, 0xb8, 0xe9, 0x02,
- 0xb9, 0x07, 0x3e, 0x99, 0x17, 0xcb, 0xd9, 0xcd, 0xab, 0xcb, 0x65, 0xbc, 0x4f, 0x99, 0x38, 0xf7,
- 0x56, 0x10, 0x61, 0x6b, 0x63, 0xc1, 0x1e, 0x67, 0x0c, 0xca, 0xbd, 0x93, 0x47, 0x7e, 0x95, 0x3e,
- 0x90, 0x62, 0xb6, 0x81, 0xa7, 0x42, 0x4a, 0x4d, 0xda, 0x59, 0x61, 0x76, 0x7b, 0x6d, 0xa5, 0xb6,
- 0x2a, 0xf0, 0xd9, 0x7f, 0xd6, 0xcc, 0xce, 0x0f, 0xd6, 0x99, 0x5f, 0x4f, 0xe1, 0xca, 0xf7, 0xfd,
- 0x16, 0xb7, 0xf0, 0xe4, 0x9f, 0x21, 0x62, 0xeb, 0x6f, 0xda, 0xca, 0xbc, 0xbb, 0x14, 0x47, 0xcf,
- 0x0b, 0x3a, 0xf4, 0x8b, 0xab, 0x53, 0xbc, 0xfe, 0x0a, 0x8f, 0x1b, 0xf7, 0x70, 0xd1, 0x76, 0x3d,
- 0x4d, 0x65, 0xe2, 0x61, 0x6c, 0x8b, 0xcf, 0x77, 0x39, 0xa1, 0x9c, 0x11, 0x56, 0x55, 0xae, 0x55,
- 0x2b, 0x85, 0x36, 0x9d, 0xcd, 0xaa, 0x4f, 0x09, 0xaf, 0x43, 0x3a, 0x28, 0x61, 0xad, 0x23, 0x11,
- 0xc7, 0x0c, 0xb7, 0x17, 0xf1, 0xef, 0xa2, 0xf8, 0x39, 0x28, 0x3f, 0xde, 0x6d, 0x3f, 0xed, 0xc7,
- 0xe9, 0xdd, 0xdb, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x73, 0x2c, 0xed, 0xfb, 0x87, 0x02, 0x00,
- 0x00,
+func init() { proto.RegisterFile("google/api/http.proto", fileDescriptor_http_e457621dddd7365b) }
+
+var fileDescriptor_http_e457621dddd7365b = []byte{
+ // 419 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x8e, 0xd3, 0x30,
+ 0x10, 0x86, 0x49, 0x9b, 0x76, 0xdb, 0xe9, 0x82, 0x84, 0x59, 0x90, 0x85, 0x40, 0x54, 0xe5, 0x52,
+ 0x71, 0x48, 0xa5, 0xe5, 0xc0, 0x61, 0x4f, 0x1b, 0xa8, 0x58, 0x6e, 0x55, 0x8e, 0x5c, 0x22, 0x37,
+ 0x1e, 0x52, 0x83, 0xd7, 0xb6, 0xe2, 0x09, 0xa2, 0xaf, 0xc3, 0x63, 0xf1, 0x24, 0x1c, 0x91, 0x9d,
+ 0x84, 0x56, 0x42, 0xe2, 0x36, 0xf3, 0xff, 0x9f, 0xa7, 0x7f, 0x27, 0x03, 0x4f, 0x6b, 0x6b, 0x6b,
+ 0x8d, 0x1b, 0xe1, 0xd4, 0xe6, 0x40, 0xe4, 0x32, 0xd7, 0x58, 0xb2, 0x0c, 0x3a, 0x39, 0x13, 0x4e,
+ 0xad, 0x8e, 0x90, 0xde, 0x11, 0x39, 0xf6, 0x06, 0x26, 0x4d, 0xab, 0xd1, 0xf3, 0x64, 0x39, 0x5e,
+ 0x2f, 0xae, 0xaf, 0xb2, 0x13, 0x93, 0x05, 0xa0, 0x68, 0x35, 0x16, 0x1d, 0xc2, 0xb6, 0xf0, 0xea,
+ 0x4b, 0xab, 0xf5, 0xb1, 0x94, 0x58, 0x59, 0x89, 0x65, 0x83, 0x1e, 0x9b, 0xef, 0x28, 0x4b, 0xfc,
+ 0xe1, 0x84, 0xf1, 0xca, 0x1a, 0x3e, 0x5a, 0x26, 0xeb, 0x59, 0xf1, 0x22, 0x62, 0x1f, 0x22, 0x55,
+ 0xf4, 0xd0, 0x76, 0x60, 0x56, 0xbf, 0x46, 0x30, 0x1b, 0x46, 0xb3, 0xe7, 0x30, 0xf3, 0xa8, 0xb1,
+ 0x22, 0xdb, 0xf0, 0x64, 0x99, 0xac, 0xe7, 0xc5, 0xdf, 0x9e, 0x31, 0x18, 0xd7, 0x48, 0x71, 0xe6,
+ 0xfc, 0xee, 0x41, 0x11, 0x9a, 0xa0, 0xb9, 0x96, 0xf8, 0x78, 0xd0, 0x5c, 0x4b, 0xec, 0x0a, 0x52,
+ 0x67, 0x3d, 0xf1, 0xb4, 0x17, 0x63, 0xc7, 0x38, 0x4c, 0x25, 0x6a, 0x24, 0xe4, 0x93, 0x5e, 0xef,
+ 0x7b, 0xf6, 0x0c, 0x26, 0x4e, 0x50, 0x75, 0xe0, 0xd3, 0xde, 0xe8, 0x5a, 0xf6, 0x0e, 0xa6, 0x55,
+ 0xeb, 0xc9, 0xde, 0xf3, 0xd9, 0x32, 0x59, 0x2f, 0xae, 0x5f, 0x9e, 0x2f, 0xe3, 0x7d, 0x74, 0x42,
+ 0xee, 0x9d, 0x20, 0xc2, 0xc6, 0x84, 0x81, 0x1d, 0xce, 0x18, 0xa4, 0x7b, 0x2b, 0x8f, 0xfc, 0x22,
+ 0xfe, 0x81, 0x58, 0xb3, 0xd7, 0xf0, 0xb0, 0x41, 0xef, 0xac, 0xf1, 0x58, 0x46, 0xf3, 0x32, 0x9a,
+ 0x97, 0x83, 0x98, 0x07, 0x68, 0x0b, 0x4f, 0x84, 0x94, 0x8a, 0x94, 0x35, 0x42, 0x97, 0x7b, 0x65,
+ 0xa4, 0x32, 0xb5, 0xe7, 0x8b, 0xff, 0x7c, 0x0b, 0x76, 0x7a, 0x90, 0xf7, 0x7c, 0x3e, 0x87, 0x0b,
+ 0xd7, 0x85, 0x5a, 0xdd, 0xc0, 0xe3, 0x7f, 0x92, 0x86, 0x7c, 0xdf, 0x94, 0x91, 0xfd, 0x82, 0x63,
+ 0x1d, 0x34, 0x27, 0xe8, 0xd0, 0x6d, 0xb7, 0x88, 0x75, 0xfe, 0x15, 0x1e, 0x55, 0xf6, 0xfe, 0xec,
+ 0x67, 0xf3, 0x79, 0x1c, 0x13, 0xae, 0x67, 0x97, 0x7c, 0xbe, 0xed, 0x8d, 0xda, 0x6a, 0x61, 0xea,
+ 0xcc, 0x36, 0xf5, 0xa6, 0x46, 0x13, 0x6f, 0x6b, 0xd3, 0x59, 0xc2, 0x29, 0x1f, 0xaf, 0x4e, 0x18,
+ 0x63, 0x49, 0x84, 0x98, 0xfe, 0xe6, 0xac, 0xfe, 0x9d, 0x24, 0x3f, 0x47, 0xe9, 0xc7, 0xdb, 0xdd,
+ 0xa7, 0xfd, 0x34, 0xbe, 0x7b, 0xfb, 0x27, 0x00, 0x00, 0xff, 0xff, 0xae, 0xde, 0xa1, 0xd0, 0xac,
+ 0x02, 0x00, 0x00,
}
diff --git a/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go b/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go
index 7334ac2..dfc8796 100644
--- a/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go
+++ b/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go
@@ -44,7 +44,7 @@ func (m *SetIamPolicyRequest) Reset() { *m = SetIamPolicyRequest{} }
func (m *SetIamPolicyRequest) String() string { return proto.CompactTextString(m) }
func (*SetIamPolicyRequest) ProtoMessage() {}
func (*SetIamPolicyRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_iam_policy_511a6b0802f7199d, []int{0}
+ return fileDescriptor_iam_policy_58547b5cf2e9d67a, []int{0}
}
func (m *SetIamPolicyRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetIamPolicyRequest.Unmarshal(m, b)
@@ -93,7 +93,7 @@ func (m *GetIamPolicyRequest) Reset() { *m = GetIamPolicyRequest{} }
func (m *GetIamPolicyRequest) String() string { return proto.CompactTextString(m) }
func (*GetIamPolicyRequest) ProtoMessage() {}
func (*GetIamPolicyRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_iam_policy_511a6b0802f7199d, []int{1}
+ return fileDescriptor_iam_policy_58547b5cf2e9d67a, []int{1}
}
func (m *GetIamPolicyRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetIamPolicyRequest.Unmarshal(m, b)
@@ -140,7 +140,7 @@ func (m *TestIamPermissionsRequest) Reset() { *m = TestIamPermissionsReq
func (m *TestIamPermissionsRequest) String() string { return proto.CompactTextString(m) }
func (*TestIamPermissionsRequest) ProtoMessage() {}
func (*TestIamPermissionsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_iam_policy_511a6b0802f7199d, []int{2}
+ return fileDescriptor_iam_policy_58547b5cf2e9d67a, []int{2}
}
func (m *TestIamPermissionsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TestIamPermissionsRequest.Unmarshal(m, b)
@@ -188,7 +188,7 @@ func (m *TestIamPermissionsResponse) Reset() { *m = TestIamPermissionsRe
func (m *TestIamPermissionsResponse) String() string { return proto.CompactTextString(m) }
func (*TestIamPermissionsResponse) ProtoMessage() {}
func (*TestIamPermissionsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_iam_policy_511a6b0802f7199d, []int{3}
+ return fileDescriptor_iam_policy_58547b5cf2e9d67a, []int{3}
}
func (m *TestIamPermissionsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TestIamPermissionsResponse.Unmarshal(m, b)
@@ -377,10 +377,10 @@ var _IAMPolicy_serviceDesc = grpc.ServiceDesc{
}
func init() {
- proto.RegisterFile("google/iam/v1/iam_policy.proto", fileDescriptor_iam_policy_511a6b0802f7199d)
+ proto.RegisterFile("google/iam/v1/iam_policy.proto", fileDescriptor_iam_policy_58547b5cf2e9d67a)
}
-var fileDescriptor_iam_policy_511a6b0802f7199d = []byte{
+var fileDescriptor_iam_policy_58547b5cf2e9d67a = []byte{
// 411 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f,
0xcf, 0x49, 0xd5, 0xcf, 0x4c, 0xcc, 0xd5, 0x2f, 0x33, 0x04, 0x51, 0xf1, 0x05, 0xf9, 0x39, 0x99,
diff --git a/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go b/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go
index a4805ec..99dd75f 100644
--- a/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go
+++ b/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go
@@ -46,7 +46,7 @@ func (x BindingDelta_Action) String() string {
return proto.EnumName(BindingDelta_Action_name, int32(x))
}
func (BindingDelta_Action) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_policy_d61b385c3386eaea, []int{3, 0}
+ return fileDescriptor_policy_6ba2a3dcbcdd909c, []int{3, 0}
}
// Defines an Identity and Access Management (IAM) policy. It is used to
@@ -107,7 +107,7 @@ func (m *Policy) Reset() { *m = Policy{} }
func (m *Policy) String() string { return proto.CompactTextString(m) }
func (*Policy) ProtoMessage() {}
func (*Policy) Descriptor() ([]byte, []int) {
- return fileDescriptor_policy_d61b385c3386eaea, []int{0}
+ return fileDescriptor_policy_6ba2a3dcbcdd909c, []int{0}
}
func (m *Policy) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Policy.Unmarshal(m, b)
@@ -187,7 +187,7 @@ func (m *Binding) Reset() { *m = Binding{} }
func (m *Binding) String() string { return proto.CompactTextString(m) }
func (*Binding) ProtoMessage() {}
func (*Binding) Descriptor() ([]byte, []int) {
- return fileDescriptor_policy_d61b385c3386eaea, []int{1}
+ return fileDescriptor_policy_6ba2a3dcbcdd909c, []int{1}
}
func (m *Binding) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Binding.Unmarshal(m, b)
@@ -234,7 +234,7 @@ func (m *PolicyDelta) Reset() { *m = PolicyDelta{} }
func (m *PolicyDelta) String() string { return proto.CompactTextString(m) }
func (*PolicyDelta) ProtoMessage() {}
func (*PolicyDelta) Descriptor() ([]byte, []int) {
- return fileDescriptor_policy_d61b385c3386eaea, []int{2}
+ return fileDescriptor_policy_6ba2a3dcbcdd909c, []int{2}
}
func (m *PolicyDelta) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PolicyDelta.Unmarshal(m, b)
@@ -284,7 +284,7 @@ func (m *BindingDelta) Reset() { *m = BindingDelta{} }
func (m *BindingDelta) String() string { return proto.CompactTextString(m) }
func (*BindingDelta) ProtoMessage() {}
func (*BindingDelta) Descriptor() ([]byte, []int) {
- return fileDescriptor_policy_d61b385c3386eaea, []int{3}
+ return fileDescriptor_policy_6ba2a3dcbcdd909c, []int{3}
}
func (m *BindingDelta) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BindingDelta.Unmarshal(m, b)
@@ -333,9 +333,9 @@ func init() {
proto.RegisterEnum("google.iam.v1.BindingDelta_Action", BindingDelta_Action_name, BindingDelta_Action_value)
}
-func init() { proto.RegisterFile("google/iam/v1/policy.proto", fileDescriptor_policy_d61b385c3386eaea) }
+func init() { proto.RegisterFile("google/iam/v1/policy.proto", fileDescriptor_policy_6ba2a3dcbcdd909c) }
-var fileDescriptor_policy_d61b385c3386eaea = []byte{
+var fileDescriptor_policy_6ba2a3dcbcdd909c = []byte{
// 403 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4d, 0xab, 0x13, 0x31,
0x14, 0x35, 0xed, 0x73, 0x6a, 0xef, 0xfb, 0xa0, 0x46, 0x28, 0xc3, 0xd3, 0x45, 0x99, 0x55, 0x57,
diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go
index 45fc390..410e374 100644
--- a/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go
+++ b/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go
@@ -209,16 +209,16 @@ func (x Code) String() string {
return proto.EnumName(Code_name, int32(x))
}
func (Code) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_code_ca8055d4ba0f2bcc, []int{0}
+ return fileDescriptor_code_932ba152e0df0902, []int{0}
}
func init() {
proto.RegisterEnum("google.rpc.Code", Code_name, Code_value)
}
-func init() { proto.RegisterFile("google/rpc/code.proto", fileDescriptor_code_ca8055d4ba0f2bcc) }
+func init() { proto.RegisterFile("google/rpc/code.proto", fileDescriptor_code_932ba152e0df0902) }
-var fileDescriptor_code_ca8055d4ba0f2bcc = []byte{
+var fileDescriptor_code_932ba152e0df0902 = []byte{
// 362 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x44, 0x51, 0xcd, 0x6e, 0x93, 0x31,
0x10, 0xa4, 0x69, 0x49, 0x9b, 0xcd, 0xdf, 0xd6, 0xa5, 0xf0, 0x0e, 0x1c, 0x92, 0x43, 0x8f, 0x9c,
diff --git a/vendor/vendor.json b/vendor/vendor.json
index 1b1f6cf..7bc00f4 100644
--- a/vendor/vendor.json
+++ b/vendor/vendor.json
@@ -5,228 +5,240 @@
{
"checksumSHA1": "j/0+O4eJ99Jrb9un/bwi5npLyOM=",
"path": "cloud.google.com/go/compute/metadata",
- "revision": "88ee2dfcf9cdc4fc7e67fc1cca50ebd970c1888c",
- "revisionTime": "2018-06-19T19:46:39Z"
+ "revision": "13a5d37070fcb4cc601a650c1bcb95885e3cc776",
+ "revisionTime": "2018-08-22T18:43:20Z"
},
{
"checksumSHA1": "8ngwydk354oUgPBkDhoQbXdOAb4=",
"path": "cloud.google.com/go/iam",
- "revision": "88ee2dfcf9cdc4fc7e67fc1cca50ebd970c1888c",
- "revisionTime": "2018-06-19T19:46:39Z"
+ "revision": "13a5d37070fcb4cc601a650c1bcb95885e3cc776",
+ "revisionTime": "2018-08-22T18:43:20Z"
},
{
"checksumSHA1": "vKDFB3PiL/TxkdcQFQeSaDuWx2k=",
"path": "cloud.google.com/go/internal",
- "revision": "88ee2dfcf9cdc4fc7e67fc1cca50ebd970c1888c",
- "revisionTime": "2018-06-19T19:46:39Z"
+ "revision": "13a5d37070fcb4cc601a650c1bcb95885e3cc776",
+ "revisionTime": "2018-08-22T18:43:20Z"
},
{
"checksumSHA1": "wQ4uGuRwMb24vG16pPQDOOCPkFo=",
"path": "cloud.google.com/go/internal/optional",
- "revision": "88ee2dfcf9cdc4fc7e67fc1cca50ebd970c1888c",
- "revisionTime": "2018-06-19T19:46:39Z"
+ "revision": "13a5d37070fcb4cc601a650c1bcb95885e3cc776",
+ "revisionTime": "2018-08-22T18:43:20Z"
},
{
"checksumSHA1": "Ekiae3zc5Z77a75tHBxHq8n/AGU=",
"path": "cloud.google.com/go/internal/trace",
- "revision": "88ee2dfcf9cdc4fc7e67fc1cca50ebd970c1888c",
- "revisionTime": "2018-06-19T19:46:39Z"
+ "revision": "13a5d37070fcb4cc601a650c1bcb95885e3cc776",
+ "revisionTime": "2018-08-22T18:43:20Z"
},
{
"checksumSHA1": "oIsDazjda0HX8LUfgnW/USVYx/k=",
"path": "cloud.google.com/go/internal/version",
- "revision": "88ee2dfcf9cdc4fc7e67fc1cca50ebd970c1888c",
- "revisionTime": "2018-06-19T19:46:39Z"
+ "revision": "13a5d37070fcb4cc601a650c1bcb95885e3cc776",
+ "revisionTime": "2018-08-22T18:43:20Z"
},
{
- "checksumSHA1": "/BmgoUQXT9RrN0e//OWbk6EJk4k=",
+ "checksumSHA1": "eTos3BqdZxJv0tWY3CIpqy04ufk=",
"path": "cloud.google.com/go/storage",
- "revision": "88ee2dfcf9cdc4fc7e67fc1cca50ebd970c1888c",
- "revisionTime": "2018-06-19T19:46:39Z"
+ "revision": "13a5d37070fcb4cc601a650c1bcb95885e3cc776",
+ "revisionTime": "2018-08-22T18:43:20Z"
},
{
- "checksumSHA1": "VxEfHLrmbkBURysrM1yQL7kqrmQ=",
+ "checksumSHA1": "K4XqCNNgCtFsGbmX6CxF2ay87Dw=",
+ "path": "contrib.go.opencensus.io/exporter/stackdriver/propagation",
+ "revision": "f7f5758592258ab71384efef9cdb0daf785a9ab1",
+ "revisionTime": "2018-08-15T17:15:00Z"
+ },
+ {
+ "checksumSHA1": "zrcA/G5aQCSKo9RL+PYbhzlXwyE=",
"path": "github.com/aws/aws-sdk-go/aws",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "Y9W+4GimK4Fuxq+vyIskVYFRnX4=",
"path": "github.com/aws/aws-sdk-go/aws/awserr",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "yyYr41HZ1Aq0hWc3J5ijXwYEcac=",
"path": "github.com/aws/aws-sdk-go/aws/awsutil",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "EwL79Cq6euk+EV/t/n2E+jzPNmU=",
"path": "github.com/aws/aws-sdk-go/aws/client",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "uEJU4I6dTKaraQKvrljlYKUZwoc=",
"path": "github.com/aws/aws-sdk-go/aws/client/metadata",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "vVSUnICaD9IaBQisCfw0n8zLwig=",
"path": "github.com/aws/aws-sdk-go/aws/corehandlers",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "925zPp8gtaXi2gkWrgZ1gAA003A=",
+ "checksumSHA1": "I87y3G8r14yKZQ5NlkupFUJ5jW0=",
"path": "github.com/aws/aws-sdk-go/aws/credentials",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "u3GOAJLmdvbuNUeUEcZSEAOeL/0=",
+ "checksumSHA1": "JTilCBYWVAfhbKSnrxCNhE8IFns=",
"path": "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "NUJUTWlc1sV8b7WjfiYc4JZbXl0=",
"path": "github.com/aws/aws-sdk-go/aws/credentials/endpointcreds",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "JEYqmF83O5n5bHkupAzA6STm0no=",
"path": "github.com/aws/aws-sdk-go/aws/credentials/stscreds",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "W4R+WW4t2Ty5mbKypFoATk3tqTA=",
+ "checksumSHA1": "eI5TmiOTCFjEUNvWeceFycs9dRU=",
"path": "github.com/aws/aws-sdk-go/aws/csm",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "HogDW/Wu6ZKTDrQ2HSzG8/vj9Ag=",
+ "checksumSHA1": "6DRhqSAN7O45gYfRIpwDeuJE8j8=",
"path": "github.com/aws/aws-sdk-go/aws/defaults",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "pDnK93CqjQ4ROSW8Y/RuHXjv52M=",
+ "checksumSHA1": "uPkjJo+J10vbEukYYXmf0w7Cn4Q=",
"path": "github.com/aws/aws-sdk-go/aws/ec2metadata",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "IUxOkYujixURbZpx7mB5rf15cYg=",
+ "checksumSHA1": "r62WcUmf2YEqmAu1QwytNo8gn+g=",
"path": "github.com/aws/aws-sdk-go/aws/endpoints",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "CYLheDSqXftEAmmdj+tTiT+83Ko=",
+ "checksumSHA1": "Ia/AZ2fZp7J4lMO6fpkvfLU/HGY=",
"path": "github.com/aws/aws-sdk-go/aws/request",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "+d8hhT6Ih+DsRpkF44pvw+IkI7w=",
+ "checksumSHA1": "zx1mZCdOwgbjBV3jMfb0kyDd//Q=",
"path": "github.com/aws/aws-sdk-go/aws/session",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "u3cA2IiD36A+VnFIH7XtGjYk2NU=",
+ "checksumSHA1": "Dj9WOMBPbboyUJV4GB99PwPcO4g=",
"path": "github.com/aws/aws-sdk-go/aws/signer/v4",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "wjxQlU1PYxrDRFoL1Vek8Wch7jk=",
"path": "github.com/aws/aws-sdk-go/internal/sdkio",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "MYLldFRnsZh21TfCkgkXCT3maPU=",
"path": "github.com/aws/aws-sdk-go/internal/sdkrand",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
+ },
+ {
+ "checksumSHA1": "tQVg7Sz2zv+KkhbiXxPH0mh9spg=",
+ "path": "github.com/aws/aws-sdk-go/internal/sdkuri",
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "04ypv4x12l4q0TksA1zEVsmgpvw=",
"path": "github.com/aws/aws-sdk-go/internal/shareddefaults",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "Ij9RP5HrBWBYYb3/LEMHNNZXH9g=",
+ "checksumSHA1": "ZX5QHZb0PrK4UF45um2kaAEiX+8=",
"path": "github.com/aws/aws-sdk-go/private/protocol",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "2ywNMWQ3qxbz/dzuuOC/42xXzWM=",
+ "checksumSHA1": "stsUCJVnZ5yMrmzSExbjbYp5tZ8=",
"path": "github.com/aws/aws-sdk-go/private/protocol/eventstream",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "/JJPEdYxSgTTDqUDTAaSJQSKNn0=",
+ "checksumSHA1": "bOQjEfKXaTqe7dZhDDER/wZUzQc=",
"path": "github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "SBBVYdLcocjdPzMWgDuR8vcOfDQ=",
"path": "github.com/aws/aws-sdk-go/private/protocol/query",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "9V1PvtFQ9MObZTc3sa86WcuOtOU=",
+ "checksumSHA1": "+O6A945eTP9plLpkEMZB0lwBAcg=",
"path": "github.com/aws/aws-sdk-go/private/protocol/query/queryutil",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "/2Ppb4vP/H+B3cM7bOOEeA7Z0iY=",
+ "checksumSHA1": "uRvmEPKcEdv7qc0Ep2zn0E3Xumc=",
"path": "github.com/aws/aws-sdk-go/private/protocol/rest",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "ODo+ko8D6unAxZuN1jGzMcN4QCc=",
"path": "github.com/aws/aws-sdk-go/private/protocol/restxml",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "6zosteWJqUGM9+t9dkANQymMA9s=",
+ "checksumSHA1": "soXVJWQ/xvEB72Mo6FresaQIxLg=",
"path": "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"path": "github.com/aws/aws-sdk-go/private/waiter",
"revision": ""
},
{
- "checksumSHA1": "nWA8sdsU3+nBLaN1Jk0zWRtuD6Q=",
+ "checksumSHA1": "DmKatmbYsvm+MoCP01PCdQ6Y6Tk=",
"path": "github.com/aws/aws-sdk-go/service/s3",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
- "checksumSHA1": "uguCtF1eoCG71dvEVqrYbFs7py0=",
+ "checksumSHA1": "UhIVLDgQc19wjrPj8pP7Fu2UwWc=",
"path": "github.com/aws/aws-sdk-go/service/sts",
- "revision": "b3d7a07df3dcc155e868cc22364aaa3631a75134",
- "revisionTime": "2018-06-20T17:20:27Z"
+ "revision": "cf65abf76f2fcf683caaae2893bac6f237639eaa",
+ "revisionTime": "2018-08-23T20:48:51Z"
},
{
"checksumSHA1": "0rido7hYHQtfq3UJzVT5LClLAWc=",
@@ -247,64 +259,70 @@
"revisionTime": "2018-01-10T05:33:47Z"
},
{
- "checksumSHA1": "BmQR+9Isy52dU5WhnEHCuB86cUE=",
+ "checksumSHA1": "TmAGzklYHunmTchDYQWhFFFYEao=",
"path": "github.com/go-ini/ini",
- "revision": "cec2bdc49009247305a260b082a18e802d0fe292",
- "revisionTime": "2018-06-15T00:35:39Z"
+ "revision": "5cf292cae48347c2490ac1a58fe36735fb78df7e",
+ "revisionTime": "2018-08-18T11:46:59Z"
},
{
- "checksumSHA1": "W+IoIME5mgWjwU+dOlh3DZEZEN4=",
+ "checksumSHA1": "RhwgUmK8jkhSn7E0UE2hgMCgb40=",
"path": "github.com/go-sql-driver/mysql",
- "revision": "749ddf1598b47e3cd909414bda735fe790ef3d30",
- "revisionTime": "2018-06-18T11:59:01Z"
+ "revision": "99ff426eb706cffe92ff3d058e168b278cabf7c7",
+ "revisionTime": "2018-07-19T07:19:42Z"
},
{
- "checksumSHA1": "miq6rtrLoaiB6tqIWAp+gmaPVGk=",
+ "checksumSHA1": "BkH53kMSvrHEUDhWQhVucv3UF+w=",
"path": "github.com/gobuffalo/packr",
- "revision": "9e76dbe10b00dd1fa8f29cfa4fac72297beb32a4",
- "revisionTime": "2018-07-29T13:15:38Z"
+ "revision": "ee1318b82b25993be2f7161d48315e1f14697528",
+ "revisionTime": "2018-08-23T13:00:44Z"
},
{
- "checksumSHA1": "uYAeGwdYQeBhbpT3O8Re3iLpuvk=",
+ "checksumSHA1": "xD3M8jQWc4howW4wj5C3jW6lh9A=",
"path": "github.com/gobuffalo/packr/builder",
- "revision": "9e76dbe10b00dd1fa8f29cfa4fac72297beb32a4",
- "revisionTime": "2018-07-29T13:15:38Z"
+ "revision": "ee1318b82b25993be2f7161d48315e1f14697528",
+ "revisionTime": "2018-08-23T13:00:44Z"
},
{
- "checksumSHA1": "uuLcVQXUw0CNt8Y5tsmzLWGlixI=",
+ "checksumSHA1": "2nEUYzHhmnw2o4tFPGDb3/Giz44=",
+ "path": "github.com/gogo/protobuf/proto",
+ "revision": "98f6aa8b3bcf03e45b1a8b48257c754766d5c3c8",
+ "revisionTime": "2018-08-21T10:22:07Z"
+ },
+ {
+ "checksumSHA1": "CbzNfOvaT1G3G9WILmsyjYfYTO0=",
"path": "github.com/golang/protobuf/proto",
- "revision": "89a0c16f4dc2a70c0ed864d8ef64878f24fdaa51",
- "revisionTime": "2018-08-04T22:03:15Z"
+ "revision": "b27b920f9e71b439b873b17bf99f56467623814a",
+ "revisionTime": "2018-08-21T05:17:52Z"
},
{
"checksumSHA1": "DA2cyOt1W92RTyXAqKQ4JWKGR8U=",
"path": "github.com/golang/protobuf/protoc-gen-go/descriptor",
- "revision": "89a0c16f4dc2a70c0ed864d8ef64878f24fdaa51",
- "revisionTime": "2018-08-04T22:03:15Z"
+ "revision": "b27b920f9e71b439b873b17bf99f56467623814a",
+ "revisionTime": "2018-08-21T05:17:52Z"
},
{
"checksumSHA1": "tkJPssYejSjuAwE2tdEnoEIj93Q=",
"path": "github.com/golang/protobuf/ptypes",
- "revision": "89a0c16f4dc2a70c0ed864d8ef64878f24fdaa51",
- "revisionTime": "2018-08-04T22:03:15Z"
+ "revision": "b27b920f9e71b439b873b17bf99f56467623814a",
+ "revisionTime": "2018-08-21T05:17:52Z"
},
{
"checksumSHA1": "G0aiY+KmzFsQLTNzRAGRhJNSj7A=",
"path": "github.com/golang/protobuf/ptypes/any",
- "revision": "89a0c16f4dc2a70c0ed864d8ef64878f24fdaa51",
- "revisionTime": "2018-08-04T22:03:15Z"
+ "revision": "b27b920f9e71b439b873b17bf99f56467623814a",
+ "revisionTime": "2018-08-21T05:17:52Z"
},
{
"checksumSHA1": "kjVDCbK5/WiHqP1g4GMUxm75jos=",
"path": "github.com/golang/protobuf/ptypes/duration",
- "revision": "89a0c16f4dc2a70c0ed864d8ef64878f24fdaa51",
- "revisionTime": "2018-08-04T22:03:15Z"
+ "revision": "b27b920f9e71b439b873b17bf99f56467623814a",
+ "revisionTime": "2018-08-21T05:17:52Z"
},
{
"checksumSHA1": "FdeygjOuyR2p5v9b0kNOtzfpjS4=",
"path": "github.com/golang/protobuf/ptypes/timestamp",
- "revision": "89a0c16f4dc2a70c0ed864d8ef64878f24fdaa51",
- "revisionTime": "2018-08-04T22:03:15Z"
+ "revision": "b27b920f9e71b439b873b17bf99f56467623814a",
+ "revisionTime": "2018-08-21T05:17:52Z"
},
{
"checksumSHA1": "h1d2lPZf6j2dW/mIqVnd1RdykDo=",
@@ -313,10 +331,10 @@
"revisionTime": "2018-05-18T05:39:59Z"
},
{
- "checksumSHA1": "BKAiZ5zK7jZiE6ARnjTvr9lPWeI=",
+ "checksumSHA1": "AqqdSCXDJNrrUW0jyD2VKWrHKY0=",
"path": "github.com/google/go-github/github",
- "revision": "a83ae98ad5d09188c49d6056edb60ec9bdf202bd",
- "revisionTime": "2018-06-13T00:47:29Z"
+ "revision": "d7732128a00e8e95e8fe896017da18ee20b2180d",
+ "revisionTime": "2018-08-19T20:50:25Z"
},
{
"checksumSHA1": "p3IB18uJRs4dL2K5yx24MrLYE9A=",
@@ -325,10 +343,10 @@
"revisionTime": "2017-01-11T10:11:55Z"
},
{
- "checksumSHA1": "Mtmoc8ZjNGYwx5RiNZwmeh6Sf4U=",
+ "checksumSHA1": "ekHPyQm895CEXodPwiwO1RFcvLA=",
"path": "github.com/googleapis/gax-go",
- "revision": "254b60fe060127b9fd3c420fadd0906bf0382227",
- "revisionTime": "2018-05-23T23:28:20Z"
+ "revision": "1ef592c90f479e3ab30c6c2312e20e13881b7ea6",
+ "revisionTime": "2018-07-02T19:49:19Z"
},
{
"checksumSHA1": "g/V4qrXjUGG9B+e3hB+4NAYJ5Gs=",
@@ -337,22 +355,22 @@
"revisionTime": "2016-08-17T18:46:32Z"
},
{
- "checksumSHA1": "LJ2n8ZErZPI/4L6hrdBdLiLadFA=",
+ "checksumSHA1": "PX7ENfHQxaKTG3A198SSDq+qgb8=",
"path": "github.com/gorilla/csrf",
- "revision": "d69028034505973d02c6f66343bd9da766062d8e",
- "revisionTime": "2018-06-08T13:52:59Z"
+ "revision": "10bfafc91ef1c8d20ea9d015720365906b7f3fbd",
+ "revisionTime": "2018-06-20T20:30:27Z"
},
{
- "checksumSHA1": "bxGugQqbVWgF57aqYOQkPwEC2m8=",
+ "checksumSHA1": "22kXObb09lweSbdIjPZGeLBjnkg=",
"path": "github.com/gorilla/handlers",
- "revision": "13a38d26174b16d5b4bf6f1094c1389ec9879572",
- "revisionTime": "2018-05-08T19:34:52Z"
+ "revision": "7e0847f9db758cdebd26c149d0ae9d5d0b9c98ce",
+ "revisionTime": "2018-07-27T23:06:46Z"
},
{
- "checksumSHA1": "Aw8z8w/d+EFt8XCUYPjzSe0bPrU=",
+ "checksumSHA1": "STQSdSj2FcpCf0NLfdsKhNutQT0=",
"path": "github.com/gorilla/mux",
- "revision": "cb4698366aa625048f3b815af6a0dea8aef9280a",
- "revisionTime": "2018-06-05T21:15:56Z"
+ "revision": "e48e440e4c92e3251d812f8ce7858944dfa3331c",
+ "revisionTime": "2018-08-07T07:52:56Z"
},
{
"checksumSHA1": "mitzC+fL94AXk/KeUfEZG6Ynb3U=",
@@ -367,10 +385,10 @@
"revisionTime": "2018-06-06T15:52:11Z"
},
{
- "checksumSHA1": "cdOCt0Yb+hdErz8NAQqayxPmRsY=",
+ "checksumSHA1": "dVqCmA2mEDIDr8tEXu4gTaK9uPs=",
"path": "github.com/hashicorp/errwrap",
- "revision": "7554cd9344cec97297fa6649b055a8c98c2a1e55",
- "revisionTime": "2014-10-28T05:47:10Z"
+ "revision": "d6c0cd88035724dd42e0f335ae30161c20575ecc",
+ "revisionTime": "2018-07-15T04:49:06Z"
},
{
"checksumSHA1": "YAq1rqZIp+M74Q+jMBQkkMKm3VM=",
@@ -379,16 +397,16 @@
"revisionTime": "2017-12-18T14:54:08Z"
},
{
- "checksumSHA1": "g7uHECbzuaWwdxvwoyxBwgeERPk=",
+ "checksumSHA1": "K395EgrkkWtEFyuAv3WvPF95WN8=",
"path": "github.com/hashicorp/go-multierror",
- "revision": "b7773ae218740a7be65057fc60b366a49b538a44",
- "revisionTime": "2017-12-04T18:29:08Z"
+ "revision": "3d5d8f294aa03d8e98859feac328afbdf1ae0703",
+ "revisionTime": "2018-07-17T15:01:48Z"
},
{
- "checksumSHA1": "s6mKR1dSKP04+A3kwSsFr/PvsOU=",
+ "checksumSHA1": "/yKfFSspjuDzyOe/bBslrPzyfYM=",
"path": "github.com/hashicorp/go-retryablehttp",
- "revision": "3b087ef2d313afe6c55b2f511d20db04ca767075",
- "revisionTime": "2018-05-31T21:13:21Z"
+ "revision": "e651d75abec6fbd4f2c09508f72ae7af8a8b7171",
+ "revisionTime": "2018-07-18T19:50:05Z"
},
{
"checksumSHA1": "A1PcINvF3UiwHRKn8UcgARgvGRs=",
@@ -463,40 +481,46 @@
"revisionTime": "2018-04-04T17:41:02Z"
},
{
- "checksumSHA1": "LYQZ+o7zJCda/6LibdN0spFco34=",
+ "checksumSHA1": "bN9EsmTbQ/6vheO9Q6t/WyW6WpM=",
"path": "github.com/hashicorp/vault/api",
- "revision": "c737968235c8673b872350f0a047877bee396342",
- "revisionTime": "2018-06-20T16:45:32Z"
+ "revision": "b39627ca8e93977785416b85328ee9660a673631",
+ "revisionTime": "2018-08-23T21:27:47Z"
},
{
"checksumSHA1": "bSdPFOHaTwEvM4PIvn0PZfn75jM=",
"path": "github.com/hashicorp/vault/helper/compressutil",
- "revision": "c737968235c8673b872350f0a047877bee396342",
- "revisionTime": "2018-06-20T16:45:32Z"
+ "revision": "b39627ca8e93977785416b85328ee9660a673631",
+ "revisionTime": "2018-08-23T21:27:47Z"
+ },
+ {
+ "checksumSHA1": "cXBQLxFSC+35JfPOjkTX5ctyQrg=",
+ "path": "github.com/hashicorp/vault/helper/consts",
+ "revision": "b39627ca8e93977785416b85328ee9660a673631",
+ "revisionTime": "2018-08-23T21:27:47Z"
},
{
"checksumSHA1": "RlqPBLOexQ0jj6jomhiompWKaUg=",
"path": "github.com/hashicorp/vault/helper/hclutil",
- "revision": "c737968235c8673b872350f0a047877bee396342",
- "revisionTime": "2018-06-20T16:45:32Z"
+ "revision": "b39627ca8e93977785416b85328ee9660a673631",
+ "revisionTime": "2018-08-23T21:27:47Z"
},
{
"checksumSHA1": "POgkM3GrjRFw6H3sw95YNEs552A=",
"path": "github.com/hashicorp/vault/helper/jsonutil",
- "revision": "c737968235c8673b872350f0a047877bee396342",
- "revisionTime": "2018-06-20T16:45:32Z"
+ "revision": "b39627ca8e93977785416b85328ee9660a673631",
+ "revisionTime": "2018-08-23T21:27:47Z"
},
{
- "checksumSHA1": "zPHu2orsbQqIuiuQ/8elJIUR2Po=",
+ "checksumSHA1": "HA2MV/2XI0HcoThSRxQCaBZR2ps=",
"path": "github.com/hashicorp/vault/helper/parseutil",
- "revision": "c737968235c8673b872350f0a047877bee396342",
- "revisionTime": "2018-06-20T16:45:32Z"
+ "revision": "b39627ca8e93977785416b85328ee9660a673631",
+ "revisionTime": "2018-08-23T21:27:47Z"
},
{
- "checksumSHA1": "iwXQDzHqTFsjJW2ehYae0oLo2Ts=",
+ "checksumSHA1": "HdVuYhZ5TuxeIFqi0jy2GHW7a4o=",
"path": "github.com/hashicorp/vault/helper/strutil",
- "revision": "c737968235c8673b872350f0a047877bee396342",
- "revisionTime": "2018-06-20T16:45:32Z"
+ "revision": "b39627ca8e93977785416b85328ee9660a673631",
+ "revisionTime": "2018-08-23T21:27:47Z"
},
{
"checksumSHA1": "Vn+LXolEnFYPN+0ejA37pbVbVD8=",
@@ -529,10 +553,10 @@
"revisionTime": "2018-05-15T20:40:05Z"
},
{
- "checksumSHA1": "vOU8oTlSs07Z6qIN0wU/Tvs9gpw=",
+ "checksumSHA1": "tTx90HHLD8waQ+mlpd7kRzp9kyY=",
"path": "github.com/mattn/go-sqlite3",
- "revision": "25ecb14adfc7543176f7d85291ec7dba82c6f7e4",
- "revisionTime": "2018-05-30T13:44:54Z"
+ "revision": "b3511bfdd742af558b54eb6160aca9446d762a19",
+ "revisionTime": "2018-07-18T00:29:43Z"
},
{
"checksumSHA1": "bKMZjd2wPw13VwoE7mBeSv5djFA=",
@@ -547,16 +571,16 @@
"revisionTime": "2017-02-22T07:25:05Z"
},
{
- "checksumSHA1": "SvPS4zqZYImMcBu+dLgp6+9eeUo=",
+ "checksumSHA1": "Li0PaRmaVBdibS/zs8myzc07L6o=",
"path": "github.com/mitchellh/go-homedir",
- "revision": "3864e76763d94a6df2f9960b16a20a33da9f9a66",
- "revisionTime": "2018-05-23T09:45:22Z"
+ "revision": "58046073cbffe2f25d425fe1331102f55cf719de",
+ "revisionTime": "2018-08-01T23:32:06Z"
},
{
- "checksumSHA1": "ewGq4nGalpCQOHcmBTdAEQx1wW0=",
+ "checksumSHA1": "lcHi67jxfyugNtEyr6Y+IYSlZkc=",
"path": "github.com/mitchellh/mapstructure",
- "revision": "bb74f1db0675b241733089d5a1faa5dd8b0ef57b",
- "revisionTime": "2018-05-11T14:21:26Z"
+ "revision": "f15292f7a699fcc1a38a80977f80a046874ba8ac",
+ "revisionTime": "2018-07-15T05:01:51Z"
},
{
"checksumSHA1": "s9h3i5Kdj37g2eE3SlZBIX8sYyc=",
@@ -571,10 +595,10 @@
"revisionTime": "2017-01-13T00:57:47Z"
},
{
- "checksumSHA1": "hlXUEyUn6u1ZhZbunDqTTEz1gyw=",
+ "checksumSHA1": "amsJse38+uT7Z7UkvtMzVefgZOM=",
"path": "github.com/pelletier/go-toml",
- "revision": "c01d1270ff3e442a8a57cddc1c92dc1138598194",
- "revisionTime": "2018-03-06T02:43:58Z"
+ "revision": "c2dbbc24a97911339e01bda0b8cabdbd8f13b602",
+ "revisionTime": "2018-07-24T18:49:33Z"
},
{
"checksumSHA1": "VQ8m0ncYJSbzslI7nVjiAdGEOeQ=",
@@ -595,64 +619,64 @@
"revisionTime": "2016-01-10T10:55:54Z"
},
{
- "checksumSHA1": "WVgL9pNO2RZCCcaXfSYSNEPgtCo=",
+ "checksumSHA1": "moPcCavaEW/C5UnFE+jcHEn7coo=",
"path": "github.com/prometheus/client_golang/prometheus",
- "revision": "faf4ec335fe01ae5a6a0eaa34a5a9333bfbd1a30",
- "revisionTime": "2018-06-07T12:36:07Z"
+ "revision": "ebce7d0078c0109cbb4de5d50a2b799920b0f0d0",
+ "revisionTime": "2018-08-22T17:59:59Z"
},
{
- "checksumSHA1": "MYqKV5uVTfCxP9zBug7naBQ1vr8=",
+ "checksumSHA1": "d5BiEvD8MrgpWQ6PQJUvawJsMak=",
"path": "github.com/prometheus/client_golang/prometheus/promhttp",
- "revision": "faf4ec335fe01ae5a6a0eaa34a5a9333bfbd1a30",
- "revisionTime": "2018-06-07T12:36:07Z"
+ "revision": "ebce7d0078c0109cbb4de5d50a2b799920b0f0d0",
+ "revisionTime": "2018-08-22T17:59:59Z"
},
{
- "checksumSHA1": "DvwvOlPNAgRntBzt3b3OSRMS2N4=",
+ "checksumSHA1": "V8xkqgmP66sq2ZW4QO5wi9a4oZE=",
"path": "github.com/prometheus/client_model/go",
- "revision": "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c",
- "revisionTime": "2017-11-17T10:05:41Z"
+ "revision": "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f",
+ "revisionTime": "2018-07-12T10:51:10Z"
},
{
- "checksumSHA1": "vPdC/DzEm7YbzRir2wwnpLPfay8=",
+ "checksumSHA1": "Q0mjhUEjAklUQvPkrOChWGLpvRY=",
"path": "github.com/prometheus/common/expfmt",
- "revision": "7600349dcfe1abd18d72d3a1770870d9800a7801",
- "revisionTime": "2018-05-18T15:47:59Z"
+ "revision": "c7de2306084e37d54b8be01f3541a8464345e9a5",
+ "revisionTime": "2018-08-01T06:44:54Z"
},
{
"checksumSHA1": "GWlM3d2vPYyNATtTFgftS10/A9w=",
"path": "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg",
- "revision": "7600349dcfe1abd18d72d3a1770870d9800a7801",
- "revisionTime": "2018-05-18T15:47:59Z"
+ "revision": "c7de2306084e37d54b8be01f3541a8464345e9a5",
+ "revisionTime": "2018-08-01T06:44:54Z"
},
{
"checksumSHA1": "EXTRY7DL9gFW8c341Dk6LDXCBn8=",
"path": "github.com/prometheus/common/model",
- "revision": "7600349dcfe1abd18d72d3a1770870d9800a7801",
- "revisionTime": "2018-05-18T15:47:59Z"
+ "revision": "c7de2306084e37d54b8be01f3541a8464345e9a5",
+ "revisionTime": "2018-08-01T06:44:54Z"
},
{
- "checksumSHA1": "s8OGVwKHbYx/oNKNyZ8f7wWK0dA=",
+ "checksumSHA1": "jo/zxF+Pfj5yZjReTKGOACq9IBs=",
"path": "github.com/prometheus/procfs",
- "revision": "7d6f385de8bea29190f15ba9931442a0eaef9af7",
- "revisionTime": "2018-06-12T22:21:13Z"
+ "revision": "05ee40e3a273f7245e8777337fc7b46e533a9a92",
+ "revisionTime": "2018-07-25T12:39:19Z"
},
{
"checksumSHA1": "lv9rIcjbVEGo8AT1UCUZXhXrfQc=",
"path": "github.com/prometheus/procfs/internal/util",
- "revision": "7d6f385de8bea29190f15ba9931442a0eaef9af7",
- "revisionTime": "2018-06-12T22:21:13Z"
+ "revision": "05ee40e3a273f7245e8777337fc7b46e533a9a92",
+ "revisionTime": "2018-07-25T12:39:19Z"
},
{
"checksumSHA1": "HSP5hVT0CNMRa8+Xtz4z2Ic5U0E=",
"path": "github.com/prometheus/procfs/nfs",
- "revision": "7d6f385de8bea29190f15ba9931442a0eaef9af7",
- "revisionTime": "2018-06-12T22:21:13Z"
+ "revision": "05ee40e3a273f7245e8777337fc7b46e533a9a92",
+ "revisionTime": "2018-07-25T12:39:19Z"
},
{
"checksumSHA1": "yItvTQLUVqm/ArLEbvEhqG0T5a0=",
"path": "github.com/prometheus/procfs/xfs",
- "revision": "7d6f385de8bea29190f15ba9931442a0eaef9af7",
- "revisionTime": "2018-06-12T22:21:13Z"
+ "revision": "05ee40e3a273f7245e8777337fc7b46e533a9a92",
+ "revisionTime": "2018-07-25T12:39:19Z"
},
{
"checksumSHA1": "N11d95+f/kzeTCb408INaeNcPCE=",
@@ -703,22 +727,22 @@
"revisionTime": "2018-02-14T17:35:30Z"
},
{
- "checksumSHA1": "+JFKK0z5Eutk29rUz1lEhLxHMfk=",
+ "checksumSHA1": "oeVyqAuGqNd2/wBBbeyb6q2WYwU=",
"path": "github.com/spf13/jwalterweatherman",
- "revision": "7c0cea34c8ece3fbeb2b27ab9b59511d360fb394",
- "revisionTime": "2018-01-09T13:55:06Z"
+ "revision": "14d3d4c518341bea657dd8a226f5121c0ff8c9f2",
+ "revisionTime": "2018-08-14T06:05:01Z"
},
{
- "checksumSHA1": "OJI0OgC5V8gZtfS1e0CDYMhkDNc=",
+ "checksumSHA1": "egfheShGROUlwCTjbXjQJTYsGMg=",
"path": "github.com/spf13/pflag",
- "revision": "3ebe029320b2676d667ae88da602a5f854788a8a",
- "revisionTime": "2018-06-01T13:25:42Z"
+ "revision": "d929dcbb10863323c436af3cf76cb16a6dfc9b29",
+ "revisionTime": "2018-08-21T11:45:17Z"
},
{
- "checksumSHA1": "Kd8R7CLqI5pceYpTircWmxZzbvE=",
+ "checksumSHA1": "gJUNFQH+BXEoUiQr+Jks1RG9EdE=",
"path": "github.com/spf13/viper",
- "revision": "15738813a09db5c8e5b60a19d67d3f9bd38da3a4",
- "revisionTime": "2018-05-06T01:38:06Z"
+ "revision": "907c19d40d9a6c9bb55f040ff4ae45271a4754b9",
+ "revisionTime": "2018-06-28T09:55:33Z"
},
{
"checksumSHA1": "c6pbpF7eowwO59phRTpF8cQ80Z0=",
@@ -739,250 +763,250 @@
"revisionTime": "2016-07-21T22:16:07Z"
},
{
- "checksumSHA1": "d46KQrSl7QpwDuyz9iIdPod7bfQ=",
+ "checksumSHA1": "JBCDUSQYhK4Bl95Yr2c5Uaiyka4=",
"path": "github.com/xanzy/go-gitlab",
- "revision": "1c1cfedc5a8ffe122b1981e8b0822fe22f461643",
- "revisionTime": "2018-06-11T10:48:51Z"
+ "revision": "93c0833f360ae4901c1d8e64da7dc9cf79258b1b",
+ "revisionTime": "2018-08-23T19:26:17Z"
},
{
- "checksumSHA1": "uo39gFgL6DFQf9o3W9D8hKUI4QI=",
+ "checksumSHA1": "clOSf6IVJZq9qMftP/c3skDkJcQ=",
"path": "go.opencensus.io",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
"checksumSHA1": "iASBoEMOkTso9Gu2cDR6AdZfhHE=",
"path": "go.opencensus.io/exporter/stackdriver/propagation",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
"checksumSHA1": "BhwWPIG9k2gelU3zEOkhKdedctk=",
"path": "go.opencensus.io/internal",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
"checksumSHA1": "Vcwr4P/uIN4haoJPglU7liURepM=",
"path": "go.opencensus.io/internal/tagencoding",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
- "checksumSHA1": "g44sRfmsLXCm+ZXgPIswiW1XblE=",
+ "checksumSHA1": "Imfb1BXQ842pCDiNE6n1+EuTwgI=",
"path": "go.opencensus.io/plugin/ochttp",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
"checksumSHA1": "0OVZlXVUMGzf8ddlnjg2yMZI4ao=",
"path": "go.opencensus.io/plugin/ochttp/propagation/b3",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
- "checksumSHA1": "uMIlbT86FQsxwB8w2u1qMDm2MeA=",
+ "checksumSHA1": "7cZ/4UEM4Hp18XgqFA7MPXc75Aw=",
"path": "go.opencensus.io/stats",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
"checksumSHA1": "R0Glq4iKrvXHiHzbvt+5+Aqo6sY=",
"path": "go.opencensus.io/stats/internal",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
- "checksumSHA1": "VdqQxUxtJFyGYPcl6Ryc3gMYnEI=",
+ "checksumSHA1": "J6bRPs+XZIM6U1tGYZthYpjxiKI=",
"path": "go.opencensus.io/stats/view",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
- "checksumSHA1": "ZWdN4cT8j9RFeFkTolXi4hvacwM=",
+ "checksumSHA1": "VncCVu1IOAwNHrCGhgYzbZGmI3w=",
"path": "go.opencensus.io/tag",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
- "checksumSHA1": "R9E+Gh0GgSgCYWrxDttcmDKsArE=",
+ "checksumSHA1": "rhVsb4sBvIl09fSddht21MRqL0c=",
"path": "go.opencensus.io/trace",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
"checksumSHA1": "0P3BycP6CFnFNRCnF4dTlMEJgEI=",
"path": "go.opencensus.io/trace/internal",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
"checksumSHA1": "FHJParRi8f1GHO7Cx+lk3bMWBq0=",
"path": "go.opencensus.io/trace/propagation",
- "revision": "f886faf58fcce7e69458b5c7bc1f228d0063033b",
- "revisionTime": "2018-06-19T05:32:38Z"
+ "revision": "71e2e3e3082a525f158c187a70a4dbb59aa522b9",
+ "revisionTime": "2018-08-23T19:16:57Z"
},
{
"checksumSHA1": "8MgfX/QKyUQhzsefrwcAVCHPHJM=",
"path": "go4.org/wkfs",
- "revision": "9599cf28b011184741f249bd9f9330756b506cbc",
- "revisionTime": "2018-04-17T22:48:46Z"
+ "revision": "417644f6feb5ed3a356ca5d6d8e3a3fac7dfd33f",
+ "revisionTime": "2018-08-09T16:10:55Z"
},
{
"checksumSHA1": "xctlZc5TXWWKeqxAIwtwZ2w9zfQ=",
"path": "go4.org/wkfs/gcs",
- "revision": "9599cf28b011184741f249bd9f9330756b506cbc",
- "revisionTime": "2018-04-17T22:48:46Z"
+ "revision": "417644f6feb5ed3a356ca5d6d8e3a3fac7dfd33f",
+ "revisionTime": "2018-08-09T16:10:55Z"
},
{
"checksumSHA1": "/pfkYB22L5MtzxrfIHQ0tWylnZw=",
"path": "golang.org/x/crypto/acme",
- "revision": "de0752318171da717af4ce24d0a2e8626afaeb11",
- "revisionTime": "2018-08-08T16:52:45Z"
+ "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
+ "revisionTime": "2018-07-28T08:01:47Z"
},
{
"checksumSHA1": "Ayt033DfS42Y57XUoOAZvfGUyaA=",
"path": "golang.org/x/crypto/acme/autocert",
- "revision": "de0752318171da717af4ce24d0a2e8626afaeb11",
- "revisionTime": "2018-08-08T16:52:45Z"
+ "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
+ "revisionTime": "2018-07-28T08:01:47Z"
},
{
"checksumSHA1": "IQkUIOnvlf0tYloFx9mLaXSvXWQ=",
"path": "golang.org/x/crypto/curve25519",
- "revision": "7f39a6fea4fe9364fb61e1def6a268a51b4f3a06",
- "revisionTime": "2018-06-15T16:03:23Z"
+ "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
+ "revisionTime": "2018-07-28T08:01:47Z"
},
{
"checksumSHA1": "2LpxYGSf068307b7bhAuVjvzLLc=",
"path": "golang.org/x/crypto/ed25519",
- "revision": "7f39a6fea4fe9364fb61e1def6a268a51b4f3a06",
- "revisionTime": "2018-06-15T16:03:23Z"
+ "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
+ "revisionTime": "2018-07-28T08:01:47Z"
},
{
"checksumSHA1": "0JTAFXPkankmWcZGQJGScLDiaN8=",
"path": "golang.org/x/crypto/ed25519/internal/edwards25519",
- "revision": "7f39a6fea4fe9364fb61e1def6a268a51b4f3a06",
- "revisionTime": "2018-06-15T16:03:23Z"
+ "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
+ "revisionTime": "2018-07-28T08:01:47Z"
},
{
- "checksumSHA1": "cZxP1MWcUqAi4Q3AUMDE1uAWZNc=",
+ "checksumSHA1": "fhxj9uzosD3dQefNF5JuGJzGZwg=",
"path": "golang.org/x/crypto/internal/chacha20",
- "revision": "7f39a6fea4fe9364fb61e1def6a268a51b4f3a06",
- "revisionTime": "2018-06-15T16:03:23Z"
+ "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
+ "revisionTime": "2018-07-28T08:01:47Z"
},
{
- "checksumSHA1": "/U7f2gaH6DnEmLguVLDbipU6kXU=",
+ "checksumSHA1": "voGom9bAyXrZZkdtqCV41+U4iPo=",
"path": "golang.org/x/crypto/internal/subtle",
- "revision": "7f39a6fea4fe9364fb61e1def6a268a51b4f3a06",
- "revisionTime": "2018-06-15T16:03:23Z"
+ "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
+ "revisionTime": "2018-07-28T08:01:47Z"
},
{
"checksumSHA1": "vKbPb9fpjCdzuoOvajOJnYfHG2g=",
"path": "golang.org/x/crypto/poly1305",
- "revision": "7f39a6fea4fe9364fb61e1def6a268a51b4f3a06",
- "revisionTime": "2018-06-15T16:03:23Z"
+ "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
+ "revisionTime": "2018-07-28T08:01:47Z"
},
{
- "checksumSHA1": "5UDaK1KsPOI7P/Q1b17FnNno36o=",
+ "checksumSHA1": "zVyAf4OPyjBraXqRN2fwIBL4WvI=",
"path": "golang.org/x/crypto/ssh",
- "revision": "7f39a6fea4fe9364fb61e1def6a268a51b4f3a06",
- "revisionTime": "2018-06-15T16:03:23Z"
+ "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
+ "revisionTime": "2018-07-28T08:01:47Z"
},
{
"checksumSHA1": "R9VBzgWGaphXv2/b4DLeMAbq9Xg=",
"path": "golang.org/x/crypto/ssh/agent",
- "revision": "7f39a6fea4fe9364fb61e1def6a268a51b4f3a06",
- "revisionTime": "2018-06-15T16:03:23Z"
+ "revision": "614d502a4dac94afa3a6ce146bd1736da82514c6",
+ "revisionTime": "2018-07-28T08:01:47Z"
},
{
"checksumSHA1": "GtamqiJoL7PGHsN454AoffBFMa8=",
"path": "golang.org/x/net/context",
- "revision": "49c15d80dfbc983ea25246ee959d970efe09ec09",
- "revisionTime": "2018-07-31T17:08:08Z"
+ "revision": "922f4815f713f213882e8ef45e0d315b164d705c",
+ "revisionTime": "2018-08-02T22:19:15Z"
},
{
"checksumSHA1": "WHc3uByvGaMcnSoI21fhzYgbOgg=",
"path": "golang.org/x/net/context/ctxhttp",
- "revision": "db08ff08e8622530d9ed3a0e8ac279f6d4c02196",
- "revisionTime": "2018-06-11T16:35:41Z"
+ "revision": "922f4815f713f213882e8ef45e0d315b164d705c",
+ "revisionTime": "2018-08-02T22:19:15Z"
},
{
"checksumSHA1": "pCY4YtdNKVBYRbNvODjx8hj0hIs=",
"path": "golang.org/x/net/http/httpguts",
- "revision": "db08ff08e8622530d9ed3a0e8ac279f6d4c02196",
- "revisionTime": "2018-06-11T16:35:41Z"
+ "revision": "922f4815f713f213882e8ef45e0d315b164d705c",
+ "revisionTime": "2018-08-02T22:19:15Z"
},
{
- "checksumSHA1": "NNo0AcF8P5+b/140t0Wox/HFkkw=",
+ "checksumSHA1": "3p4xISa2iLZULxYfVsIUlHJ+PUk=",
"path": "golang.org/x/net/http2",
- "revision": "db08ff08e8622530d9ed3a0e8ac279f6d4c02196",
- "revisionTime": "2018-06-11T16:35:41Z"
+ "revision": "922f4815f713f213882e8ef45e0d315b164d705c",
+ "revisionTime": "2018-08-02T22:19:15Z"
},
{
- "checksumSHA1": "leSW9aM30mATlWs/eeqhQQh/3eo=",
+ "checksumSHA1": "KZniwnfpWkaTPhUQDUTvgex/7y0=",
"path": "golang.org/x/net/http2/hpack",
- "revision": "db08ff08e8622530d9ed3a0e8ac279f6d4c02196",
- "revisionTime": "2018-06-11T16:35:41Z"
+ "revision": "922f4815f713f213882e8ef45e0d315b164d705c",
+ "revisionTime": "2018-08-02T22:19:15Z"
},
{
"checksumSHA1": "RcrB7tgYS/GMW4QrwVdMOTNqIU8=",
"path": "golang.org/x/net/idna",
- "revision": "db08ff08e8622530d9ed3a0e8ac279f6d4c02196",
- "revisionTime": "2018-06-11T16:35:41Z"
+ "revision": "922f4815f713f213882e8ef45e0d315b164d705c",
+ "revisionTime": "2018-08-02T22:19:15Z"
},
{
"checksumSHA1": "UxahDzW2v4mf/+aFxruuupaoIwo=",
"path": "golang.org/x/net/internal/timeseries",
- "revision": "f9ce57c11b242f0f1599cf25c89d8cb02c45295a",
- "revisionTime": "2018-08-07T09:33:54Z"
+ "revision": "922f4815f713f213882e8ef45e0d315b164d705c",
+ "revisionTime": "2018-08-02T22:19:15Z"
},
{
"checksumSHA1": "6ckrK99wkirarIfFNX4+AHWBEHM=",
"path": "golang.org/x/net/trace",
- "revision": "f9ce57c11b242f0f1599cf25c89d8cb02c45295a",
- "revisionTime": "2018-08-07T09:33:54Z"
+ "revision": "922f4815f713f213882e8ef45e0d315b164d705c",
+ "revisionTime": "2018-08-02T22:19:15Z"
},
{
"checksumSHA1": "j0z/2h06wsvTkGiLaZ5XFLbMKfo=",
"path": "golang.org/x/oauth2",
- "revision": "ef147856a6ddbb60760db74283d2424e98c87bff",
- "revisionTime": "2018-06-20T17:47:24Z"
+ "revision": "d2e6202438beef2727060aa7cabdd924d92ebfd9",
+ "revisionTime": "2018-08-21T21:02:52Z"
},
{
"checksumSHA1": "Yokz/Wl4zeuOZG2ev8LuaLtMotE=",
"path": "golang.org/x/oauth2/github",
- "revision": "ef147856a6ddbb60760db74283d2424e98c87bff",
- "revisionTime": "2018-06-20T17:47:24Z"
+ "revision": "d2e6202438beef2727060aa7cabdd924d92ebfd9",
+ "revisionTime": "2018-08-21T21:02:52Z"
},
{
"checksumSHA1": "z7mSaGccufg15ki2YPd+M5PlsUc=",
"path": "golang.org/x/oauth2/google",
- "revision": "ef147856a6ddbb60760db74283d2424e98c87bff",
- "revisionTime": "2018-06-20T17:47:24Z"
+ "revision": "d2e6202438beef2727060aa7cabdd924d92ebfd9",
+ "revisionTime": "2018-08-21T21:02:52Z"
},
{
- "checksumSHA1": "dUy8bGC7/IAgHMxm/Hdfs/TGfks=",
+ "checksumSHA1": "poHRaoNignP0fENM80CGtZAaxlc=",
"path": "golang.org/x/oauth2/internal",
- "revision": "ef147856a6ddbb60760db74283d2424e98c87bff",
- "revisionTime": "2018-06-20T17:47:24Z"
+ "revision": "d2e6202438beef2727060aa7cabdd924d92ebfd9",
+ "revisionTime": "2018-08-21T21:02:52Z"
},
{
"checksumSHA1": "huVltYnXdRFDJLgp/ZP9IALzG7g=",
"path": "golang.org/x/oauth2/jws",
- "revision": "ef147856a6ddbb60760db74283d2424e98c87bff",
- "revisionTime": "2018-06-20T17:47:24Z"
+ "revision": "d2e6202438beef2727060aa7cabdd924d92ebfd9",
+ "revisionTime": "2018-08-21T21:02:52Z"
},
{
"checksumSHA1": "QPndO4ODVdEBILRhJ6869UDAoHc=",
"path": "golang.org/x/oauth2/jwt",
- "revision": "ef147856a6ddbb60760db74283d2424e98c87bff",
- "revisionTime": "2018-06-20T17:47:24Z"
+ "revision": "d2e6202438beef2727060aa7cabdd924d92ebfd9",
+ "revisionTime": "2018-08-21T21:02:52Z"
},
{
"checksumSHA1": "91mzAbqHQ6AAK65DzB4IkLOcvtk=",
"path": "golang.org/x/oauth2/microsoft",
- "revision": "ef147856a6ddbb60760db74283d2424e98c87bff",
- "revisionTime": "2018-06-20T17:47:24Z"
+ "revision": "d2e6202438beef2727060aa7cabdd924d92ebfd9",
+ "revisionTime": "2018-08-21T21:02:52Z"
},
{
"checksumSHA1": "S0DP7Pn7sZUmXc55IzZnNvERu6s=",
@@ -991,34 +1015,34 @@
"revisionTime": "2018-03-14T17:21:19Z"
},
{
- "checksumSHA1": "USMsFbKZrNd1b9oRFbjevPr6PmI=",
+ "checksumSHA1": "pvt1wNJX938Vl+eWoraV/CfPxXg=",
"path": "golang.org/x/sys/unix",
- "revision": "ad87a3a340fa7f3bed189293fbfa7a9b7e021ae1",
- "revisionTime": "2018-06-18T16:37:21Z"
+ "revision": "11551d06cbcc94edc80a0facaccbda56473c19c1",
+ "revisionTime": "2018-08-23T14:12:18Z"
},
{
"checksumSHA1": "CbpjEkkOeh0fdM/V8xKDdI0AA88=",
"path": "golang.org/x/text/secure/bidirule",
- "revision": "5cec4b58c438bd98288aeb248bab2c1840713d21",
- "revisionTime": "2018-05-20T16:02:21Z"
+ "revision": "6e3c4e7365ddcc329f090f96e4348398f6310088",
+ "revisionTime": "2018-08-07T15:59:08Z"
},
{
"checksumSHA1": "ziMb9+ANGRJSSIuxYdRbA+cDRBQ=",
"path": "golang.org/x/text/transform",
- "revision": "5cec4b58c438bd98288aeb248bab2c1840713d21",
- "revisionTime": "2018-05-20T16:02:21Z"
+ "revision": "6e3c4e7365ddcc329f090f96e4348398f6310088",
+ "revisionTime": "2018-08-07T15:59:08Z"
},
{
- "checksumSHA1": "w8kDfZ1Ug+qAcVU0v8obbu3aDOY=",
+ "checksumSHA1": "Qw4qdlZHCnBurAPPrSt+EKPIngM=",
"path": "golang.org/x/text/unicode/bidi",
- "revision": "5cec4b58c438bd98288aeb248bab2c1840713d21",
- "revisionTime": "2018-05-20T16:02:21Z"
+ "revision": "6e3c4e7365ddcc329f090f96e4348398f6310088",
+ "revisionTime": "2018-08-07T15:59:08Z"
},
{
- "checksumSHA1": "BCNYmf4Ek93G4lk5x3ucNi/lTwA=",
+ "checksumSHA1": "XJr6+rzzxASewSbC/SCStyGlmuw=",
"path": "golang.org/x/text/unicode/norm",
- "revision": "5cec4b58c438bd98288aeb248bab2c1840713d21",
- "revisionTime": "2018-05-20T16:02:21Z"
+ "revision": "6e3c4e7365ddcc329f090f96e4348398f6310088",
+ "revisionTime": "2018-08-07T15:59:08Z"
},
{
"checksumSHA1": "HoCvrd3hEhsFeBOdEw7cbcfyk50=",
@@ -1029,290 +1053,290 @@
{
"checksumSHA1": "RIKH6cQNe0mczH5HxseRIpEYidE=",
"path": "google.golang.org/api/gensupport",
- "revision": "2eea9ba0a3d94f6ab46508083e299a00bbbc65f6",
- "revisionTime": "2018-06-14T00:04:35Z"
+ "revision": "0873c9a91f718ab0bcccfabaf9ce3ada04f9dc7b",
+ "revisionTime": "2018-08-22T00:04:51Z"
},
{
"checksumSHA1": "vN2q4J0jDKFQRGfFQ15cOSILz5s=",
"path": "google.golang.org/api/googleapi",
- "revision": "2eea9ba0a3d94f6ab46508083e299a00bbbc65f6",
- "revisionTime": "2018-06-14T00:04:35Z"
+ "revision": "0873c9a91f718ab0bcccfabaf9ce3ada04f9dc7b",
+ "revisionTime": "2018-08-22T00:04:51Z"
},
{
"checksumSHA1": "1K0JxrUfDqAB3MyRiU1LKjfHyf4=",
"path": "google.golang.org/api/googleapi/internal/uritemplates",
- "revision": "2eea9ba0a3d94f6ab46508083e299a00bbbc65f6",
- "revisionTime": "2018-06-14T00:04:35Z"
+ "revision": "0873c9a91f718ab0bcccfabaf9ce3ada04f9dc7b",
+ "revisionTime": "2018-08-22T00:04:51Z"
},
{
"checksumSHA1": "Mr2fXhMRzlQCgANFm91s536pG7E=",
"path": "google.golang.org/api/googleapi/transport",
- "revision": "2eea9ba0a3d94f6ab46508083e299a00bbbc65f6",
- "revisionTime": "2018-06-14T00:04:35Z"
+ "revision": "0873c9a91f718ab0bcccfabaf9ce3ada04f9dc7b",
+ "revisionTime": "2018-08-22T00:04:51Z"
},
{
"checksumSHA1": "U6423i/mbz+0z9yFzxZhFb2z7uQ=",
"path": "google.golang.org/api/internal",
- "revision": "2eea9ba0a3d94f6ab46508083e299a00bbbc65f6",
- "revisionTime": "2018-06-14T00:04:35Z"
+ "revision": "0873c9a91f718ab0bcccfabaf9ce3ada04f9dc7b",
+ "revisionTime": "2018-08-22T00:04:51Z"
},
{
"checksumSHA1": "HXuMQALvqd+ZLG0pC1l7gX8nNyE=",
"path": "google.golang.org/api/iterator",
- "revision": "2eea9ba0a3d94f6ab46508083e299a00bbbc65f6",
- "revisionTime": "2018-06-14T00:04:35Z"
+ "revision": "0873c9a91f718ab0bcccfabaf9ce3ada04f9dc7b",
+ "revisionTime": "2018-08-22T00:04:51Z"
},
{
"checksumSHA1": "ewY979ofazYYUteAiXjIPFIJ8lw=",
"path": "google.golang.org/api/oauth2/v2",
- "revision": "2eea9ba0a3d94f6ab46508083e299a00bbbc65f6",
- "revisionTime": "2018-06-14T00:04:35Z"
+ "revision": "0873c9a91f718ab0bcccfabaf9ce3ada04f9dc7b",
+ "revisionTime": "2018-08-22T00:04:51Z"
},
{
- "checksumSHA1": "nRdRxuTHHABuTkEtzVkYfR4CiwU=",
+ "checksumSHA1": "hgSfTpbLxSzphh16LAhTQ0pq81U=",
"path": "google.golang.org/api/option",
- "revision": "2eea9ba0a3d94f6ab46508083e299a00bbbc65f6",
- "revisionTime": "2018-06-14T00:04:35Z"
+ "revision": "0873c9a91f718ab0bcccfabaf9ce3ada04f9dc7b",
+ "revisionTime": "2018-08-22T00:04:51Z"
},
{
- "checksumSHA1": "pYkkY/LVRQ636AlU+DFsnTjDD1s=",
+ "checksumSHA1": "/PVEwdKMFdBNejQaMGpZhv74dB4=",
"path": "google.golang.org/api/storage/v1",
- "revision": "2eea9ba0a3d94f6ab46508083e299a00bbbc65f6",
- "revisionTime": "2018-06-14T00:04:35Z"
+ "revision": "0873c9a91f718ab0bcccfabaf9ce3ada04f9dc7b",
+ "revisionTime": "2018-08-22T00:04:51Z"
},
{
- "checksumSHA1": "3RlacQJ8uvV86hx3grrPA2WCjX0=",
+ "checksumSHA1": "nW4TGwSr2fOmgCGyYdVObzGenGQ=",
"path": "google.golang.org/api/transport/http",
- "revision": "2eea9ba0a3d94f6ab46508083e299a00bbbc65f6",
- "revisionTime": "2018-06-14T00:04:35Z"
+ "revision": "0873c9a91f718ab0bcccfabaf9ce3ada04f9dc7b",
+ "revisionTime": "2018-08-22T00:04:51Z"
},
{
- "checksumSHA1": "QoM8iwt2FVbTHR+Lav3dXmEu/7o=",
+ "checksumSHA1": "Rw0Fk/K5OCGiyOJYAvrd/RZtwBw=",
"path": "google.golang.org/appengine",
- "revision": "b1f26356af11148e710935ed1ac8a7f5702c7612",
- "revisionTime": "2018-05-21T22:34:13Z"
+ "revision": "4216e58b9158e5f1c906f1aca75162a46a2ec88a",
+ "revisionTime": "2018-07-31T16:49:58Z"
},
{
- "checksumSHA1": "x2UMjnBCqXdCFcKF4U925pCxmxQ=",
+ "checksumSHA1": "TDGl2uocAKVcdkJzjXltcu+e6Eo=",
"path": "google.golang.org/appengine/internal",
- "revision": "b1f26356af11148e710935ed1ac8a7f5702c7612",
- "revisionTime": "2018-05-21T22:34:13Z"
+ "revision": "4216e58b9158e5f1c906f1aca75162a46a2ec88a",
+ "revisionTime": "2018-07-31T16:49:58Z"
},
{
- "checksumSHA1": "YI9+yxvbfgIihM3UXZfFwioAc88=",
+ "checksumSHA1": "GyzSDzUj78G9nyNhmlFGg5IufHc=",
"path": "google.golang.org/appengine/internal/app_identity",
- "revision": "b1f26356af11148e710935ed1ac8a7f5702c7612",
- "revisionTime": "2018-05-21T22:34:13Z"
+ "revision": "4216e58b9158e5f1c906f1aca75162a46a2ec88a",
+ "revisionTime": "2018-07-31T16:49:58Z"
},
{
- "checksumSHA1": "PJ+aP3+eOZn+ckAb4NZPHNAxESk=",
+ "checksumSHA1": "5PakGXEgSbyFptkhGO8MnGf7uH0=",
"path": "google.golang.org/appengine/internal/base",
- "revision": "b1f26356af11148e710935ed1ac8a7f5702c7612",
- "revisionTime": "2018-05-21T22:34:13Z"
+ "revision": "4216e58b9158e5f1c906f1aca75162a46a2ec88a",
+ "revisionTime": "2018-07-31T16:49:58Z"
},
{
- "checksumSHA1": "2JYgCZVGTTsBIhh29M5ItZGXQ7E=",
+ "checksumSHA1": "3DZ+Ah5hFQb1/nh1+li2VE+kkfk=",
"path": "google.golang.org/appengine/internal/datastore",
- "revision": "b1f26356af11148e710935ed1ac8a7f5702c7612",
- "revisionTime": "2018-05-21T22:34:13Z"
+ "revision": "4216e58b9158e5f1c906f1aca75162a46a2ec88a",
+ "revisionTime": "2018-07-31T16:49:58Z"
},
{
- "checksumSHA1": "Tmunm9UyiE/Bs+JDU2ej2jTsFoY=",
+ "checksumSHA1": "HJQ4JM9YWfwIe4vmAgXC7J/1T3E=",
"path": "google.golang.org/appengine/internal/log",
- "revision": "b1f26356af11148e710935ed1ac8a7f5702c7612",
- "revisionTime": "2018-05-21T22:34:13Z"
+ "revision": "4216e58b9158e5f1c906f1aca75162a46a2ec88a",
+ "revisionTime": "2018-07-31T16:49:58Z"
},
{
- "checksumSHA1": "0WONGA6dPWAV2Kex8qSXiID4Zxs=",
+ "checksumSHA1": "rPcVt7Td1StpB6Z9DiShhu753PM=",
"path": "google.golang.org/appengine/internal/modules",
- "revision": "b1f26356af11148e710935ed1ac8a7f5702c7612",
- "revisionTime": "2018-05-21T22:34:13Z"
+ "revision": "4216e58b9158e5f1c906f1aca75162a46a2ec88a",
+ "revisionTime": "2018-07-31T16:49:58Z"
},
{
- "checksumSHA1": "ZZYm/rh5ssupiYTO/dazGw/IWZM=",
+ "checksumSHA1": "hApgRLSl7w9XG2waJxdH/o0A398=",
"path": "google.golang.org/appengine/internal/remote_api",
- "revision": "b1f26356af11148e710935ed1ac8a7f5702c7612",
- "revisionTime": "2018-05-21T22:34:13Z"
+ "revision": "4216e58b9158e5f1c906f1aca75162a46a2ec88a",
+ "revisionTime": "2018-07-31T16:49:58Z"
},
{
- "checksumSHA1": "bTNVkZT0QcwhkxRmrcurTFgIdkk=",
+ "checksumSHA1": "YNqziavfZHurG6wrwR5Uf9SnI4s=",
"path": "google.golang.org/genproto/googleapis/api/annotations",
- "revision": "32ee49c4dd805befd833990acba36cb75042378c",
- "revisionTime": "2018-06-08T18:12:17Z"
+ "revision": "c66870c02cf823ceb633bcd05be3c7cda29976f4",
+ "revisionTime": "2018-08-17T15:16:27Z"
},
{
- "checksumSHA1": "t8wvaBPVN5cJxFiS6RyfKRTB/IQ=",
+ "checksumSHA1": "PhCTccjTEHHwnwxd8MvQyUdba4Q=",
"path": "google.golang.org/genproto/googleapis/iam/v1",
- "revision": "32ee49c4dd805befd833990acba36cb75042378c",
- "revisionTime": "2018-06-08T18:12:17Z"
+ "revision": "c66870c02cf823ceb633bcd05be3c7cda29976f4",
+ "revisionTime": "2018-08-17T15:16:27Z"
},
{
- "checksumSHA1": "MfiQCKjMMgSdeQWB5FJo1Rxqtl0=",
+ "checksumSHA1": "jBEvkhfuMbiqPceCQ5HaWmHmYAM=",
"path": "google.golang.org/genproto/googleapis/rpc/code",
- "revision": "32ee49c4dd805befd833990acba36cb75042378c",
- "revisionTime": "2018-06-08T18:12:17Z"
+ "revision": "c66870c02cf823ceb633bcd05be3c7cda29976f4",
+ "revisionTime": "2018-08-17T15:16:27Z"
},
{
"checksumSHA1": "oUD15OBRSXt0t4P0s6HMjH/+iQo=",
"path": "google.golang.org/genproto/googleapis/rpc/status",
- "revision": "383e8b2c3b9e36c4076b235b32537292176bae20",
- "revisionTime": "2018-08-08T18:39:34Z"
+ "revision": "c66870c02cf823ceb633bcd05be3c7cda29976f4",
+ "revisionTime": "2018-08-17T15:16:27Z"
},
{
"checksumSHA1": "Gx9L1wTtSs5+WF+5VgJc059REOQ=",
"path": "google.golang.org/grpc",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "B+kZFVP8zRiQMpoEb39Mp2oSmqg=",
"path": "google.golang.org/grpc/balancer",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "lw+L836hLeH8+//le+C+ycddCCU=",
"path": "google.golang.org/grpc/balancer/base",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "DJ1AtOk4Pu7bqtUMob95Hw8HPNw=",
"path": "google.golang.org/grpc/balancer/roundrobin",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "R3tuACGAPyK4lr+oSNt1saUzC0M=",
"path": "google.golang.org/grpc/codes",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "XH2WYcDNwVO47zYShREJjcYXm0Y=",
"path": "google.golang.org/grpc/connectivity",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "wA6y5rkH1v4bWBe5M1r/Hdtgma4=",
"path": "google.golang.org/grpc/credentials",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "cfLb+pzWB+Glwp82rgfcEST1mv8=",
"path": "google.golang.org/grpc/encoding",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "LKKkn7EYA+Do9Qwb2/SUKLFNxoo=",
"path": "google.golang.org/grpc/encoding/proto",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "ZPPSFisPDz2ANO4FBZIft+fRxyk=",
"path": "google.golang.org/grpc/grpclog",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "8uLpHZuwD6Ug/QlvN94QyHaOack=",
"path": "google.golang.org/grpc/internal",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "uDJA7QK2iGnEwbd9TPqkLaM+xuU=",
"path": "google.golang.org/grpc/internal/backoff",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "fvj+rPmX5++NHHTTwG9gHlTEGow=",
"path": "google.golang.org/grpc/internal/channelz",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "5dFUCEaPjKwza9kwKqgljp8ckU4=",
"path": "google.golang.org/grpc/internal/envconfig",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "70gndc/uHwyAl3D45zqp7vyHWlo=",
"path": "google.golang.org/grpc/internal/grpcrand",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "nLDJB8uGb0saz65SbDIOhGY70gg=",
"path": "google.golang.org/grpc/internal/transport",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "hcuHgKp8W0wIzoCnNfKI8NUss5o=",
"path": "google.golang.org/grpc/keepalive",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "OjIAi5AzqlQ7kLtdAyjvdgMf6hc=",
"path": "google.golang.org/grpc/metadata",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "VvGBoawND0urmYDy11FT+U1IHtU=",
"path": "google.golang.org/grpc/naming",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "n5EgDdBqFMa2KQFhtl+FF/4gIFo=",
"path": "google.golang.org/grpc/peer",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "GEq6wwE1qWLmkaM02SjxBmmnHDo=",
"path": "google.golang.org/grpc/resolver",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "3aaLCpBkkCNQvVPHyvPi+G0vnQI=",
"path": "google.golang.org/grpc/resolver/dns",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "zs9M4xE8Lyg4wvuYvR00XoBxmuw=",
"path": "google.golang.org/grpc/resolver/passthrough",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "YclPgme2gT3S0hTkHVdE1zAxJdo=",
"path": "google.golang.org/grpc/stats",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "t/NhHuykWsxY0gEBd2WIv5RVBK8=",
"path": "google.golang.org/grpc/status",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "qvArRhlrww5WvRmbyMF2mUfbJew=",
"path": "google.golang.org/grpc/tap",
- "revision": "07ef407d991f1004e6c3367c8f452ed9a02f17ff",
- "revisionTime": "2018-08-06T23:02:47Z"
+ "revision": "e00d24941bcee35dd163f4377d5371349f14baaf",
+ "revisionTime": "2018-08-22T16:00:39Z"
},
{
"checksumSHA1": "xunNOgG8P6Xh4SM+LPQ1zMDXa8Q=",